【发布时间】:2010-10-21 02:23:02
【问题描述】:
我正在尝试使用以下代码在 OpenGL 中渲染一个二维半平面:
void renderHalfplane(double *x, double *n)
{
glPushMatrix();
double theta = -360.0 * atan2(n[0], n[1])/(2.0*PI);
glTranslated(x[0], x[1], 0);
glRotated(theta, 0, 0, 1.0);
glBegin(GL_TRIANGLES);
glVertex4d(0.0, 0.0, 0.0, 1.0);
glVertex4d(1.0, 0.0, 0.0, 0.0);
glVertex4d(0.0,-1.0, 0.0, 0.0);
glVertex4d(0.0, 0.0, 0.0, 1,0);
glVertex4d(-1.0,0.0, 0.0, 0.0);
glVertex4d(0.0,-1.0, 0.0, 0.0);
glEnd();
glPopMatrix();
}
在这里,我使用齐次坐标来绘制两个顶点位于“无穷远”的三角形。
这段代码在我的电脑上就像一个魅力,但用户报告说它在他们的电脑上没有正确渲染:他们看到的是两个(有限的)三角形,而不是无限的半平面。
我使用 w 坐标 0 未定义的行为吗?它是否仅适用于某些版本的 OpenGL?我尝试查看 Khronos OpenGL 规范,但找不到处理 w 坐标为 0 的图元渲染的部分。
【问题讨论】:
-
你的用户是什么设备?
-
根据用户的说法,他使用的是运行 Ubuntu 和 Mesa OpenGL 驱动程序的笔记本电脑。我有一个带有 Ubuntu 的桌面,但是当我在那里测试代码时它呈现得很好。
-
使用 w = 0 很奇怪...你应该在不同的显卡驱动上测试它。