OpenGL Rotation
我正在尝试在OpenGL中进行简单的旋转,但必须遗漏要点。 目前,我有这样的代码:
但是结果不是三角形旋转了90度。
编辑 通过在glRotatef调用之前添加以下内容,确保正在修改Modelview矩阵:
否则,您可能正在修改投影或纹理矩阵。 您得到1个单位的直线吗?似乎90度腐烂。 Y周围将让您看着没有深度的三角形的边。 您应该尝试绕Z轴旋转,看看是否有更有意义的东西。 OpenGL有两个与几何图形显示相关的矩阵,即ModelView和Projection。在数据在屏幕上可见之前,两者都将应用于坐标。首先,应用ModelView矩阵,将数据从模型空间转换为视图空间。然后,将Projection矩阵应用于,将来自视图空间的数据转换为2D监视器上的"投影"。 ModelView用于将多个对象放置在"世界"中的位置,Projection用于将对象放置在屏幕上。 您的代码看起来不错,因此我认为通过阅读文档可以知道glPushMatrix()之类的函数的本质。如果围绕Z旋转仍然没有意义,请通过调用glMatrixMode来验证是否正在编辑ModelView矩阵。 "接受的答案"并不完全正确-绕Z旋转将无法帮助您看到此三角形,除非您在执行此代码之前做过一些奇怪的事情。在这种情况下,删除glOrtho(...)调用可能已解决了该问题,但是您仍然还有其他一些问题。 编写的代码存在两个主要问题:
我能推荐的最好的方法是使用NeHe教程-http://nehe.gamedev.net/。他们首先向您展示了如何在多个系统中设置OpenGL,如何移动到绘制三角形,并确定地继续进行更高级的主题。它们非常容易遵循。 关于投影矩阵,您可以从这里找到一个很好的起点: http://msdn.microsoft.com/zh-CN/library/bb147302(VS.85).aspx 它说明了如何构造一种类型的投影矩阵。正交投影是这种矩阵的非常基本/原始的形式,基本上是将3个轴坐标中的2个坐标投影到屏幕上(您仍然可以翻转轴并缩放它们,但没有扭曲或透视效果) 。 在3D渲染中,矩阵的转换很可能是最重要的事情之一,并且基本上涉及3个矩阵阶段:
通常,将3矩阵相乘的结果称为WorldViewProjection矩阵(如果您曾经碰过这个术语的话),因为它会将坐标从模型空间转换为世界,然后转换为摄影机,最后转换为屏幕表示。 玩得开心 我想推荐一本书: 3D计算机图形学:Samuel R. Buss的OpenGL数学入门 它提供了非常清晰的解释,并且数学广泛适用于非图形领域。您还将找到对正交投影与透视变换的完整描述。 当我初次了解OpenGL时,NeHe教程(请参见左侧菜单)非常宝贵。 |