【问题标题】:OpenGL: Triangles with points at infinityOpenGL:点在无穷远的三角形
【发布时间】:2010-10-21 02:23:02
【问题描述】:

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

【问题讨论】:

  • 你的用户是什么设备?
  • 根据用户的说法,他使用的是运行 Ubuntu 和 Mesa OpenGL 驱动程序的笔记本电脑。我有一个带有 Ubuntu 的桌面,但是当我在那里测试代码时它呈现得很好。
  • 使用 w = 0 很奇怪...你应该在不同的显卡驱动上测试它。

标签: c++ opengl


【解决方案1】:

我在我的机器 (nVidia Quadro) 上对此进行了测试,它可以正确呈现。我发现将 W 坐标缩放到无穷大的代码示例(用于阴影体积)也可以正常工作。

我猜这是驱动程序问题还是此代码外部的问题?

【讨论】:

  • 有什么问题吗?你解决了吗?
  • 也很好奇......我使用这种技术,想知道它是否不可靠。
  • 不,我从来没有让它工作,所以我改变了我做渲染的方式。从我读到的 sn-p 应该 是正确的,我的猜测是有问题的 Mesa 驱动程序是旧的/不兼容的/有问题的。
猜你喜欢
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多