我尝试用以下代码在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呈现原语的部分。