我想知道
glRotate
是否旋转相机、世界轴或物体。请通过示例说明它们之间的区别。相机
OpenGL 中没有相机。
世界坐标轴
OpenGL 中没有世界的概念。
或者对象
OpenGL 中没有对象。
感到困惑了吗?
OpenGL 是一个绘图系统,它使用点、线和三角形进行操作。在 OpenGL 中没有场景或世界的概念。所有的顶点都有一组属性,并且 OpenGL 的状态决定了如何将顶点转换为像素。
这个过程的第一阶段是在视口中获取顶点位置。在固定功能管线中(即不使用着色器),为了获得这些位置,每个顶点位置首先与所谓的“模型视图”矩阵相乘,中间结果用于光照计算,然后再与“投影”矩阵相乘。之后应用剪裁和规范化到视口坐标。
我提到的这两个矩阵有两个目的。第一个“模型视图”用于对传入的顶点应用一些变换,使其最终处于所需位置相对于原点。首先将几何体移动到世界上某个地方,然后将视点移动到世界上某个地方没有区别。或者保持视点在原点,将整个世界向相反方向移动。所有这些都可以通过模型视图矩阵来描述。
第二个“投影”与规范化过程一起像是一种“镜头”,所谓的。通过它,您可以设置视场(以及一些其他参数,如移位,您需要用于某些应用程序-不要担心它)。
矩阵的有趣之处在于它们是非交换的,即对于给定的两个矩阵 N、M
M * N =/= N * M ; for most M, N
M *= R(angle,axis)
例如,活动矩阵会乘以从给定参数构造的旋转矩阵。缩放和平移同理。
如果这看起来像相机或物体的放置,则完全取决于如何以及以哪种顺序组合这些操作。
但对于OpenGL而言,只有数字/向量(顶点属性),它们以某种方式转化为二维视口坐标,并作为填充点、线或三角形进行绘制。
glRotate
作用于当前矩阵。因此,它取决于矩阵是相机矩阵还是世界变换矩阵。要了解有关当前矩阵的更多信息,请查看 glMatrixMode()。
找到示例只需谷歌一下:我找到了这个,应该能帮助您弄清楚发生了什么。