4

我有一个简单的程序,它画了一个圆圈:/这很好用......

for (k = 1; k < n+1+1; k++){
 vertices[k].color = GU_COLOR( 0.0f, 0.0f, 1.0f, 0.0f );
 vertices[k].x = cos_d( 360 - ((k-1) * dstep) );
 vertices[k].y = sin_d( 360 - ((k-1) * dstep) );
 vertices[k].z = 0.0f;
}
...
//Now draw it
sceGumDrawArray(GU_TRIANGLE_FAN, GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D, n+1+1, 0, vertices);

但这不会:

for (k = 1; k < n+1+1; k++){
 vertices[k].color = GU_COLOR( 0.0f, 0.0f, 1.0f, 0.0f );
 vertices[k].x = cos_d( ((k-1) * dstep) );
 vertices[k].y = sin_d( ((k-1) * dstep) );
 vertices[k].z = 0.0f;
}

但这不应该是一样的吗——只是第一个循环顺时针计算顶点,第二个逆时针计算顶点不同?它只是不使用第二个示例绘制顶点,这很尴尬......

还是我傻?

4

4 回答 4

6

由于背面剔除,它可能无法绘制。

“如果用户指定正面的多边形是顺时针缠绕的,如果投影在屏幕上的多边形是逆时针缠绕的,它会被旋转为背对相机并且不会被绘制。”

于 2010-08-02T20:40:47.650 回答
2

不太确定你是如何画圆的(我看到你创建了一个顶点列表,但对这些顶点的渲染一无所知),但是:

通常,当您从顺时针反转到逆时针时,您最终会得到正常的倒转,这意味着您正在查看圆圈的背面。而且,与大多数 API 的情况一样,当查看某物(没有音量)的背面时,它不会被渲染。

这称为背面剔除。

于 2010-08-02T20:40:27.743 回答
0

我不知道您正在使用的库,但您确定您没有在代码中混合弧度和度数吗?sin 和 cos 函数是弧度还是度数?

于 2010-08-02T20:38:46.930 回答
0

大概dstep是360 / n?

作为一个美学点,GL_TRIANGLE_FAN你可能希望你的第一个点是圆的中心。

于 2010-08-02T20:43:53.463 回答