我试图在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 票数:6

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

glMatrixMode(GL_MODELVIEW);

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

===============>>#2 票数:6 已采纳

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

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

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

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

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

===============>>#3 票数:5

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

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

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

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

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

===============>>#4 票数:1

当我第一次看OpenGL时, NeHe教程 (见左侧菜单)非常宝贵。

===============>>#5 票数:1

我想推荐一本书:

3D计算机图形学: Samuel R. Buss的OpenGL数学入门

它提供了非常清晰的解释,并且数学广泛适用于非图形域。 您还可以找到正交投影与透视变换的详尽描述。

===============>>#6 票数:1

关于Projection矩阵,你可以在这里找到一个很好的资源来源:

http://msdn.microsoft.com/en-us/library/bb147302(VS.85).aspx

它解释了如何构造一种类型的投影矩阵。 正交投影是这种矩阵的基本/原始形式,基本上是做3个轴坐标中的2个并将它们投影到屏幕上(你仍然可以翻转轴并缩放它们,但没有扭曲或透视效果) 。

矩阵变换很可能是3D渲染时最重要的事情之一,基本上涉及3个矩阵阶段:

  • Transform1 =对象坐标系统到世界(例如 - 对象旋转和缩放)
  • Transform2 =世界坐标系到Camera(将对象放在正确的位置)
  • Transform3 =相机坐标系统到屏幕空间(投影到屏幕)

通常,3矩阵乘法结果被称为WorldViewProjection矩阵(如果你碰到这个术语),因为它将坐标从模型空间转换为世界,然后转换为相机,最后转换为屏幕表示。

玩得开心

  ask by Matt Mitchell translate from so

未解决问题?本站智能推荐:

2回复

旋转纹理openGL c ++

当我从openCV图像制作纹理时,总是将其旋转180度,为什么? 我的代码绑定了纹理并将其显示在屏幕上。 如果采用代码规范,建议我如何正确旋转纹理,我无法理解。 更新:
1回复

将圆旋转特定角度(openGL)

我喜欢转动这个班级成员绘制的圆圈: 以特定角度。 如果我用 它以某种方式不起作用。 我希望Circle总是在凸轮上显示他的表面,我想将它用作某种Comic-Sphere。 谁能帮我?
1回复

Opengl使用鼠标旋转对象(C ++)

我有一个要在Opengl中使用鼠标旋转的对象(我使用glut)。 我一直在跟踪鼠标的移动,并根据鼠标的x和y的变化进行旋转。 但是问题是该对象并没有按照我想要的那样移动。 例如,当我在x中移动,然后在y中移动,然后再次在x中移动时,对象似乎沿对角线移动,而我希望它从左向右移动。 我知道这
2回复

OpenGL,如何相互独立地旋转对象?

我的代码到目前为止 然而,目前我的所有物体同时旋转,我怎样才能旋转我注意到要旋转的物体,同时留下我不想旋转的物体呢?
3回复

OpenGL-绕Y轴旋转“曲线”

按我的问题在数学Stackexchange: 我正在为我的3D图形课程设计一个项目。 该项目使用C ++和OpenGL / Glut构建。 基本上,我创建了一个水平矩形窗口,分为两个正方形。 在左侧,我有一个二维坐标平面,允许用户指向和单击并定义一个轮廓“曲线”。 然后,我需要将此
1回复

如何在OpenGL中旋转gluCynlinder?

对于上下文,我正在尝试在OpenGL中建模一个简单的1x1乐高积木。 我将相机设置为查看原点,并且“向上”方向为Y方向。 我正在尝试为立方体上的小块画一个圆柱,但不知道如何旋转它。 C ++代码: 我正在尝试将其绕x轴旋转90度,但是glRotatef似乎没有任何作用,或者只是使整
1回复

OpenGL-这是在舞台上绘制旋转环的正确方法吗?

我已经创建了旋转绞线并将其放置在可以旋转的舞台上,但只想知道这是正确的操作方式还是更简单的方式
1回复

鼠标单击OpenGL无法围绕其自身中心旋转对象

我成功地旋转了对象,但是我需要右键单击该对象以停止其旋转。 我不知道如何使对象绕其中心旋转然后停止,我将附加代码以查看该形状的实际情况。 我认为问题在于spinDisplay()函数...问题是我需要在鼠标左键单击和鼠标右键单击的同时绕其中心旋转,我应该更改对象的颜色....
1回复

在OpenGL上单击鼠标时无法旋转和更改对象的颜色

当我单击鼠标左键时,我试图绕着他自己的中心旋转一个对象,但是它似乎不起作用...此外,当我右键单击鼠标时,我应该更改对象的颜色,但是我不了解为什么它似乎不起作用,它只是停止了对象的旋转.....这是我的代码将为您提供帮助,我添加了所有功能以查看确切的工作内容:
2回复

OpenGl-gluShpere坐在它的侧面,我怎样才能将其向上旋转?

这是我的领域,但这还不是全部代码 上面的球体具有地球的纹理,但是它的侧面倾斜了,我该如何改变呢? 更多代码 我现在做到了,这就是答案(下面更新)