【问题标题】:Calculate vertices of a circle计算圆的顶点
【发布时间】:2010-08-02 20:35:38
【问题描述】:

我有一个简单的程序,它画了一个圆圈:/ 这工作正常...

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;
}

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

还是我傻?

【问题讨论】:

  • 如果您可以在调试器中运行它,或者将值打印到屏幕上,那么您将需要查看正在计算的值。查看输入 cos_d/sin_d 的内容,看看这些值是否符合您的预期。完成此操作后,将这些值输入 cos_d/sin_d,并将它们与您期望的值类型进行比较,或将它们与科学计算器输出的值进行比较。
  • 您想习惯这样做的原因是图形编程需要大量数学,并且真的很容易出错。调试器或调试打印语句是避免发疯的唯一方法:)

标签: c++ geometry pspsdk playstation-portable


【解决方案1】:

可能因为back-face culling而无法绘制。

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

【讨论】:

  • 这正是恕我直言的原因。我想不出别的了
  • 一种检查方法是禁用背面剔除(如果在 PSP SDK 中可行)。另一种方法是将相机移动到对象的另一侧,看看它是否开始绘制:)
【解决方案2】:

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

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

这称为背面剔除。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这不太可能是问题,因为它以一种方式工作。我想cos_d_d 的意思是“度数”。
    【解决方案4】:

    大概dstep是360/n?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2014-12-11
      相关资源
      最近更新 更多