我想知道glRotate
是否旋转相机,世界轴或物体。解释它们与例子的不同之处。OpenGL中的glRotate旋转摄像头还是旋转世界坐标轴或旋转模型对象?
回答
glRotate
适用于当前矩阵。所以它取决于矩阵是相机还是世界转换。要了解更多关于当前矩阵的内容,请看glMatrixMode()。 查找范例仅仅是谷歌搜索:I found this one,为了我应该帮助你弄清楚发生了什么。
相机
有在OpenGL没有摄像头。
世界轴
有在OpenGL没有世界。
或对象。
OpenGL中没有任何对象。
困惑?
OpenGL是一个绘图系统,使用点,线和三角形进行操作。 OpenGL中没有场景或世界的概念。所有存在的顶点都有一组属性,并且存在OpenGL的状态,它决定顶点如何转换为像素。
该过程的第一阶段是获取视口内的顶点位置。在固定功能流水线(即没有着色器)中,为了得到这些,每个顶点位置如果首先与所谓的“模型视图”矩阵相乘,则将中间结果用于照明计算,然后乘以“投影”矩阵。之后,剪切,然后归一化到视口坐标应用。
我提到的那两个矩阵有两个目的。第一个“模型视图”被用来对进入的顶点应用一些变换,以便这些变换最终位于相对于原点的期望位置。第一个移动的几何体与世界上的某个地方没有区别,然后移动世界中的观点。或者将观点保留在原点并将整个世界推向相反的方向。所有这些都可以通过模型视图矩阵来描述。
第二个“投影”与规范化过程一起工作,就像一种“镜头”,可以这么说。有了这个,您可以设置视野(以及一些其他参数,如移位,您需要某些应用程序 - 不用担心)。
约矩阵有趣的是,他们是不可交换的,即对于两个给定矩阵N,M
M * N =/= N * M ; for most M, N
这最终意味着,您可以撰写一系列的变换A,B的, C,D ...通过将原始变换以正确的顺序彼此相乘而变换成单个复合变换矩阵T.
OpenGL矩阵操作函数(它们已经过时了),就这么做。你具有例如选择用于操作的矩阵(矩阵模式)的模型视图M.然后glRotate有效执行此:
M *= R(angle,axis)
即有源矩阵乘上从给定的参数构成的旋转矩阵。类似的规模和翻译。
如果这看起来像是照相机或放置对象的行为完全取决于这些操作如何以及以何种顺序组合。
但是对于OpenGL,只有数字/矢量(顶点属性),它们以某种方式转换为二维视口坐标,然后绘制为填充为线或三角形的点。
+1(当然其余的也很好)。 – 2012-03-20 20:26:09
- 1. 沿着世界坐标轴旋转
- 2. 围绕世界轴旋转对象
- 3. OpenGL ES旋转世界
- 4. Xna绕世界轴旋转?
- 5. 轴在glrotate上旋转吗?
- 6. 围绕世界轴的旋转对象OpenGL
- 7. Java3D:旋转世界坐标中的对象?
- 8. OpenGL应用程序旋转摄像头
- 9. 围绕一个轴旋转摄像头?
- 10. 3D摄像头X轴旋转
- 11. 围绕X轴旋转摄像头(three.js)
- 12. OpenGL对象旋转
- 13. 在它的轴上旋转3D对象,与世界坐标轴相反 - XNA
- 14. 为OpenGL ES2模型旋转切换设备轴旋转矩阵
- 15. OpenGL相对于对象轴的旋转
- 16. Android摄像头在旋转
- 17. 旋转摄像头Unity3D
- 18. Unity fps旋转摄像头
- 19. 对象通过世界轴旋转,而不是本地轴的OpenGL
- 20. 旋转坐标轴时无法旋转y轴刻度文本
- 21. 使用吐温围绕世界坐标轴的精确旋转
- 22. 围绕世界起源旋转对象
- 23. 在OpenGL中旋转对象
- 24. 3轴OpenGL ES旋转模型
- 25. three.js对象基于对象自身坐标系或世界坐标系转换和旋转
- 26. 旋转对象OpenGL GLFW
- 27. 旋转OpenGL-ES对象
- 28. 旋转对象OpenGL ES 2.0
- 29. 如何旋转轴世界three.js上的对象?
- 30. 旋转UIView对象x轴
glMatrixMode用于在OpenGL使用的不同矩阵之间切换。然而,没有独特的相机矩阵。有投影矩阵,但其行为更像是一个相机镜头,而不是整个相机。视图随模型视图矩阵一起移动,模型几何图形也一样。 – datenwolf 2012-03-20 18:43:33
如何获取相机矩阵和世界矩阵并对其应用变换?是我们在opengl中输入的关于世界坐标框架的顶点坐标 – topcoder 2012-03-25 08:47:16
@topcoder'相机'是由视角矩阵驱动的。看看第一部分的datenwolf回复 – 2012-03-25 08:51:40