我试图使用以下代码在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();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我使用齐次坐标在"无限远"处绘制具有两个顶点的三角形.
这段代码在我的计算机上就像一个魅力,但是用户报告说它在他们的计算机上没有正确呈现:而不是无限的半平面,他们看到两个(有限的)三角形.
我使用w坐标0未定义的行为?它只适用于某些版本的OpenGL吗?我尝试查看Khronos OpenGL规范,但找不到一个部分,其中解析了具有w坐标0的基元的渲染.
我在我的机器(nVidia Quadro)上测试了它,它渲染正确。我发现将 W 坐标缩放到无穷大的代码示例(针对阴影体积)也可以正常工作。
我猜这是驱动程序问题还是此代码外部的问题?