Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL:点在无穷远处的三角形_C++_Opengl - Fatal编程技术网

C++ OpenGL:点在无穷远处的三角形

C++ OpenGL:点在无穷远处的三角形,c++,opengl,C++,Opengl,我试图用以下代码在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

我试图用以下代码在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渲染原语的部分。

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


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

你的用户的设备是什么?据用户说,他正在使用一台运行Ubuntu和Mesa OpenGL驱动程序的笔记本电脑。我有一个带有Ubuntu的桌面,但是当我在那里测试代码时,它呈现的很好。。。你应该在不同的显卡驱动程序上测试它。有什么问题吗?你解决了吗?好奇的是。。。我使用这种技术,想知道它是否不可靠。不,我从来没有让它工作过,所以我改变了渲染的方式。从我所阅读的片段来看,应该是正确的,我的猜测是,所讨论的Mesa驱动程序是旧的/不合规的/有问题的。