C++ 计算圆的顶点
我有一个简单的程序,它画了一个圆:/ 这个很好用C++ 计算圆的顶点,c++,geometry,pspsdk,playstation-portable,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 dra
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);
(k=1;kfor (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;
}
(k=1;k还是我愚蠢 我不知道您正在使用的库,但您确定代码中没有混合弧度和度数吗?sin和cos函数采用弧度还是度数?不确定如何绘制圆(我看到您创建了一个顶点列表,但对这些顶点的渲染一无所知),但是: 通常,当你从顺时针方向反转到逆时针方向时,你最终得到的是正常的反转,这意味着你看到的是圆的背面。而且,与大多数API一样,当查看某些内容(没有卷)的背面时,它不会被渲染
这称为反面剔除。可能不会因为这样而绘制
“如果用户指定前向多边形具有顺时针缠绕,如果投影到屏幕上的多边形具有逆时针缠绕,则该多边形已旋转为背向摄影机,且不会绘制。”推测
dstep
为360/n
作为一个美学点,使用
GL\u TRIANGLE\u FAN
你可能希望你的第一个点是圆的中心。这不太可能是问题,因为它是单向的。我想,cos\u d
的
意思是“度”。这正是我为什么这么想的原因。我想不出还有什么别的方法可以检查这一点,就是禁用背面剔除(如果在PSP SDK中可能的话)。另一种方法是将相机移动到对象的另一侧,然后查看它是否开始绘图:)如果可以在调试器中运行此操作,或将值打印到屏幕上,则需要查看正在计算的值。看看输入cos_d/sin_d的是什么,看看这些值是否符合您的期望。一旦你这样做了,将这些值输入cos_d/sin_d,并将它们与你期望的值类型进行比较,或者将它们与科学计算器输出的值进行比较。你想习惯这样做的原因是图形编程需要大量的数学知识,而且很容易出错。调试器或调试打印语句是防止出错的唯一方法:)