我正在尝试了解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);
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
好吧,对我而言最突出的是glOrtho功能.你有近距离和远距离剪裁平面只有100个单位.这似乎很小.你真的想要那样吗?它由该函数中的最后两个参数表示.
此外,你的物体与这个小平截头体相比非常大.物体可以直接坐在相机前面,它会阻挡其他物体被看见.
我会放大glOrtho调用中的所有参数.HTH
在右手系统(OpenGL)中,负Z(-Z)应指向屏幕.正Y应该是"向上",而正X应该在右边.
这似乎是你所描述的,那是一个右手坐标系.
也许这可以提供帮助. http://www.geometrictools.com/Documentation/LeftHandedToRightHanded.pdf