我正在尝试使用以下代码在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 渲染基元的部分。