OpenGL关于平移旋转顺序的问题

OpenGL在编程平移旋转和旋转平移时,查阅了相关资料发现两种变换都会讲物体的局部坐标系进行变换。
也就是说先平移,能够得到正确的结果,但是再变换以后,图形就在原地旋转了,而不是绕着世界坐标系的原点进行旋转。
先旋转,能够得到正确的结果,绕着世界坐标系旋转,但是再平移以后,发现平移的方向发生了改变。
想用glpushmatrix和glpopmatrix的方式,但是平移后回到原点,进行旋转,那不是相当于还就是在原点旋转了一下,而不是想要的平移过后仍然绕着世界坐标系的原点旋转,所以究竟怎么样才能得到正确的结果嘞?

在OpenGL中,矩阵变换是基于后乘原理进行的,也就是说,新的变换矩阵会乘到当前矩阵的末尾,对于平移和旋转这样的变换,先平移后旋转和先旋转后平移就会有不同的效果。

你可以使用 glPushMatrix() 和 glPopMatrix() 进行矩阵栈操作,在更改完平移后将矩阵压入栈中,再进行旋转操作,最后再将矩阵弹出栈中,这样就可以得到正确的结果了。

另外,你还可以使用 glMatrixMode() 函数来设置矩阵模式(GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE),如果你想要对全局坐标系进行变换,可以使用 GL_MODELVIEW 模式。

如果你想要更复杂的变换,可以使用更高级的变换函数,例如 glMultMatrix() , glLoadMatrix() , glLoadIdentity() 。

总之,在OpenGL中,矩阵变换是非常强大的工具,你可以根据需要选择合适的方法来获得正确的结果。