OpenGL:具有无限远点的三角形

5

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


你的用户使用的设备是什么? - Bahbar
据用户所述,他使用的是装有 Mesa OpenGL 驱动程序的 Ubuntu 笔记本电脑。我有一台台式机也在运行 Ubuntu,但当我在那里测试代码时它渲染得很好。 - user168715
使用 w = 0 很奇怪...你应该在不同的显卡驱动程序上进行测试。 - Luca
1个回答

1

我在我的机器上(nVidia Quadro)测试过,它可以正确渲染。我也找到了一些代码示例(用于阴影体积),它们将W坐标缩放到无穷大,也能正常工作。

我猜这可能是驱动程序问题或与此代码无关的其他问题?


有关问题的任何消息吗?你成功解决了吗? - Ron Warholic
好奇心也是...我使用这种技术,想知道它是否不可靠。 - Forrest Voight
不,我从未使它正常工作,所以我改变了渲染的方式。根据我所读的片段,应该是正确的,我的猜测是相关的 Mesa 驱动程序过于陈旧/不合规/有缺陷。 - user168715

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接