哪些点是OpenGL z轴?

时间:2010-08-07 14:28:16

标签: opengl 3d

我正在尝试了解OpenGL坐标系。在任何地方我都看到它被描述为右撇子,但它与我的经验不符。我试图绘制一些形状和三维物体,我看到显然z轴指向“进入屏幕”(而x指向右边,而y向上 - 这是左手坐标系的描述)。我错过了什么?

编辑: 例如:
http://img576.imageshack.us/img576/9234/triangles.jpg
如果+ Z指向观察者,为什么绿色三角形(z坐标较大)位于红色背后?

initializeGL:

qglClearColor(Qt::darkGray);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc( GL_LEQUAL );    
glEnable(GL_COLOR);  

resizeGL:

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0f, 50.0f, -50.0f, 50.0f, 50.0, -50.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

paintGL:

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef (-30.0, 1.0, 0.0, 0.0);
glRotatef (20.0, 0.0, 1.0, 0.0);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINES);
glVertex3f(45.0, 0.0, 0.0);
glVertex3f(-45.0, 0.0, 0.0);
glVertex3f(0.0, 45.0,  0.0);
glVertex3f(0.0, -45.0,  0.0);
glVertex3f( 0.0, 0.0, 45.0);
glVertex3f( 0.0, 0.0, -45.0);
glEnd();
glBegin(GL_TRIANGLES);
//Red triangle:
glColor3f(1.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 20.0, 1.0);
glVertex3f(20.0, 0.0, 1.0);
//Green triangle:    
glColor3f(0.0, 1.0, 0.0);
glVertex3f(-15.0, 0.0, 20.0);
glVertex3f(0.0, 25.0, 20.0);
glVertex3f(15.0, 0.0, 20.0);
glEnd();

4 个答案:

答案 0 :(得分:8)

好吧,对我而言最突出的是glOrtho功能。你有近距离和远距离剪裁平面只有100个单位。这似乎很小。你真的想要那样吗?它由该函数中的最后两个参数表示。

此外,你的物体与这个小截锥体相比非常大。物体可能直接坐在相机前面,它会阻挡其他物体被遮挡。

我会放大glOrtho调用中的所有参数。 HTH


在右手系统(OpenGL)中,负Z(-Z)应指向屏幕。正Y应该是“向上”,而正X应该在右边。

这似乎是你所描述的,那是一个右手坐标系。

也许这会有所帮助。 http://www.geometrictools.com/Documentation/LeftHandedToRightHanded.pdf

答案 1 :(得分:5)

  

我错过了什么?

左手系统x的(视口)指向右侧,y指向上方,z指向前方(远离观察者)。

右手x点,y指向上方,z指向后方(朝向观众)。

Picture

图片来自wikipedia

x是拇指,y是食指,z是中指。

答案 2 :(得分:5)

最后2个参数glOrtho参考:

  

nearVal,farVal
  指定距离更近和更深的剪裁平面的距离。 如果平面要在观察者后面,则这些值为负。

您更近的剪裁平面位于观察者的前方并且更远,在后面。它会翻转Z轴。

答案 3 :(得分:1)

这取决于你如何画画。

用于模型视图的标识和用于投影的常规gluPerspective将期望右手的输入坐标系统(正如JustBoo所提到的,-z在屏幕中)。

如果你加载一组不同的矩阵,但是没有什么可以阻止你翻转矩阵中的一个坐标,导致左手系统。 (或翻转.grinkPerspective / glFrustum实际翻转z坐标)。这样做时要记住一些实际的事情,比如剔除的缠绕顺序。