我有一个简单的程序,它绘制了一个圆圈:/ 这很好用......
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;
}
但是这不应该是相同的 - 只是区别在于第一个循环顺时针计算顶点而第二个逆时针计算顶点? 它只是没有使用第二个例子来绘制顶点...
或者我是傻瓜?
答案 0 :(得分:6)
由于back-face culling,可能无法绘制。
“如果用户指定前置多边形具有顺时针缠绕,如果投影在屏幕上的多边形具有逆时针缠绕,则它已旋转为背离相机并且不会被绘制。”< / p>
答案 1 :(得分:2)
不确定你是如何绘制圆的(我看到你创建了一个顶点列表,但对这些顶点的渲染一无所知),但是:
通常,当您从顺时针方向转换为逆时针方向时,最终会使正常方向反转,这意味着您正在查看圆圈的背面。并且,与大多数API的情况一样,当查看某些内容(没有卷)时,它不会被渲染。
这称为背面剔除。
答案 2 :(得分:0)
我不知道你正在使用的库,但是你确定你没有在你的代码中混合弧度和度数吗? sin和cos函数是否需要弧度或度数?
答案 3 :(得分:0)
据推测dstep
是360 / n?
作为一个美学点,GL_TRIANGLE_FAN
你可能希望你的第一个点成为圆圈的中心。