当前位置:  开发笔记 > 编程语言 > 正文

OpenGL旋转

如何解决《OpenGL旋转》经验,为你挑选了3个好方法。

我试图在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轴上旋转产生了预期的结果.



1> 小智..:

通过在glRotatef调用之前添加以下内容来确保您正在修改模型视图矩阵:

glMatrixMode(GL_MODELVIEW);

否则,您可能正在修改投影或纹理矩阵.



2> Mike Haboust..:

你有一个单位直线?似乎90度腐烂.在Y周围,你会看到没有深度的三角形边.

您应该尝试绕Z轴旋转,看看是否有更有意义的东西.

OpenGL有两个与几何体显示相关的矩阵,ModelView和Projection.在数据在屏幕上可见之前,两者都应用于坐标.首先应用ModelView矩阵,将数据从模型空间转换为视图空间.然后应用Projection矩阵,将来自视图空间的数据转换为2D投影仪上的"投影".

ModelView用于将多个对象定位到"世界"中的位置,Projection用于将对象定位到屏幕上.

你的代码似乎很好,所以我假设从阅读文档中你知道像glPushMatrix()这样的函数的本质是什么.如果围绕Z旋转仍然没有意义,请通过调用glMatrixMode验证您是否正在编辑ModelView矩阵.



3> 小智..:

"接受的答案"并不完全正确 - 围绕Z旋转不会帮助您看到这个三角形,除非您在此代码之前做了一些奇怪的事情.在这种情况下,删除glOrtho(...)调用可能已经纠正了问题,但是您还有其他一些问题.

编写代码的两个主要问题:

你以前放置过相机吗?在OpenGL中,摄像机位于原点,向下看Z轴,正Y为向上.在这种情况下,三角形与您的眼睛在同一平面上绘制,但向上和向右.除非你有一个非常奇怪的投影矩阵,否则你不会看到它.gluLookat()是执行此操作的最简单命令,但任何移动当前矩阵(应该是MODELVIEW)的命令都可以使用.

您使用左手或顺时针方法绘制三角形,而OpenGL的默认值是右手或逆时针坐标系.这意味着,如果您正在剔除背面(您可能没有,但可能会在您获得更高级时移动),您将看不到预期的三角形.要查看问题,请将右手放在脸前,并想象它在XY平面内,按照绘制顶点(1,1)到(3,2)到(3,1)的顺序移动手指).当你这样做时,你的拇指背对着你的脸,这意味着你正在看三角形的背面.你需要养成用右手方法绘制面部的习惯,因为这是在OpenGL中完成的常用方法.

我可以推荐的最好的事情是使用NeHe教程 - http://nehe.gamedev.net/.他们首先向您展示如何在多个系统中设置OpenGL,转移到绘图三角形,并继续缓慢而且肯定地继续更高级的主题.他们很容易遵循.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有