计算圆的顶点

时间:2010-08-02 20:35:38

标签: c++ geometry pspsdk playstation-portable

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

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 个答案:

答案 0 :(得分:6)

由于back-face culling,可能无法绘制。

“如果用户指定前置多边形具有顺时针缠绕,如果投影在屏幕上的多边形具有逆时针缠绕,则它已旋转为背离相机并且不会被绘制。”< / p>

答案 1 :(得分:2)

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

通常,当您从顺时针方向转换为逆时针方向时,最终会使正常方向反转,这意味着您正在查看圆圈的背面。并且,与大多数API的情况一样,当查看某些内容(没有卷)时,它不会被渲染。

这称为背面剔除。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

据推测dstep是360 / n?

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