我试图使用以下代码在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-coordinate 0未定义的行为?它只适用于某些版本的OpenGL吗?我尝试查看Khronos OpenGL规范,但找不到一个部分,其中解析了具有w坐标0的基元的渲染。
答案 0 :(得分:1)
我在我的机器上测试了这个(nVidia Quadro),它正确渲染。我找到了将W坐标缩放到无穷大的代码示例(用于阴影卷),也可以正常工作。
我猜这是驱动程序问题或此代码外部的东西?