我试图在OpenGL中进行简单的旋转,但必须忽略这一点.我不是在寻找一个特定的修复程序,而是一个快速的解释或链接,更一般地解释OpenGL旋转.
目前我有这样的代码:
glPushMatrix(); glRotatef(90.0, 0.0, 1.0, 0.0); glBegin(GL_TRIANGLES); glVertex3f( 1.0, 1.0, 0.0 ); glVertex3f( 3.0, 2.0, 0.0 ); glVertex3f( 3.0, 1.0, 0.0 ); glEnd(); glPopMatrix();
但结果不是三角形旋转了90度.
编辑 嗯感谢Mike Haboustak - 看来我的代码调用了一个使用glOrtho的SetCamera函数.我对OpenGL太新了,不知道这意味着什么,但禁用它并在Z轴上旋转产生了预期的结果.
通过在glRotatef调用之前添加以下内容来确保您正在修改模型视图矩阵:
glMatrixMode(GL_MODELVIEW);
否则,您可能正在修改投影或纹理矩阵.
你有一个单位直线?似乎90度腐烂.在Y周围,你会看到没有深度的三角形边.
您应该尝试绕Z轴旋转,看看是否有更有意义的东西.
OpenGL有两个与几何体显示相关的矩阵,ModelView和Projection.在数据在屏幕上可见之前,两者都应用于坐标.首先应用ModelView矩阵,将数据从模型空间转换为视图空间.然后应用Projection矩阵,将来自视图空间的数据转换为2D投影仪上的"投影".
ModelView用于将多个对象定位到"世界"中的位置,Projection用于将对象定位到屏幕上.
你的代码似乎很好,所以我假设从阅读文档中你知道像glPushMatrix()这样的函数的本质是什么.如果围绕Z旋转仍然没有意义,请通过调用glMatrixMode验证您是否正在编辑ModelView矩阵.
"接受的答案"并不完全正确 - 围绕Z旋转不会帮助您看到这个三角形,除非您在此代码之前做了一些奇怪的事情.在这种情况下,删除glOrtho(...)调用可能已经纠正了问题,但是您还有其他一些问题.
编写代码的两个主要问题:
你以前放置过相机吗?在OpenGL中,摄像机位于原点,向下看Z轴,正Y为向上.在这种情况下,三角形与您的眼睛在同一平面上绘制,但向上和向右.除非你有一个非常奇怪的投影矩阵,否则你不会看到它.gluLookat()是执行此操作的最简单命令,但任何移动当前矩阵(应该是MODELVIEW)的命令都可以使用.
您使用左手或顺时针方法绘制三角形,而OpenGL的默认值是右手或逆时针坐标系.这意味着,如果您正在剔除背面(您可能没有,但可能会在您获得更高级时移动),您将看不到预期的三角形.要查看问题,请将右手放在脸前,并想象它在XY平面内,按照绘制顶点(1,1)到(3,2)到(3,1)的顺序移动手指).当你这样做时,你的拇指背对着你的脸,这意味着你正在看三角形的背面.你需要养成用右手方法绘制面部的习惯,因为这是在OpenGL中完成的常用方法.
我可以推荐的最好的事情是使用NeHe教程 - http://nehe.gamedev.net/.他们首先向您展示如何在多个系统中设置OpenGL,转移到绘图三角形,并继续缓慢而且肯定地继续更高级的主题.他们很容易遵循.