OpenGL中模型变换的顺序(验证)

在OpenGL中,模型变换的顺序经常吧初学者搞得一头雾水。以下模型变换顺序是本人验证出来的。

这里光讨论两种模型变换的顺序问题,平移和旋转。

有两种模型变换方式:

第一种:使用glTranslatef和glRotatef

第二种:使用glMultMatrixf

二者都是产生一个变换矩阵,和原来矩阵堆栈顶端的矩阵相乘,二者的区别是:

glTranslatef和glRotatef是进行局部坐标变换

glMultMatrixf是进行全局坐标变换

这里牵扯到两个容易迷惑人的问题:

(1)添加的矩阵与原来堆栈顶端的矩阵是左乘还是右乘?

(2)局部坐标的变换规则是什么?

第一个问题就是变换顺序的问题,如果添加的矩阵与原来堆栈顶端的矩阵是左乘,那么程序顺序和实际变换顺序就是一致的,如果如果添加的矩阵与原来堆栈顶端的矩阵是右乘,那么程序顺序和实际变换顺序就是相反的。经过测试验证,glMultMatrixf添加的矩阵与原来堆栈顶端的矩阵是右乘,程序顺序和实际变换顺序是相反的。glTranslatef和glRotatef添加的矩阵与原来堆栈顶端的矩阵是左乘,程序顺序和实际变换顺序是一致的。

第二个问题的答案:局部坐标并不是一个点一个局部坐标,而是所有点共享一个局部坐标,glTranslatef和glRotatef实际上是在对局部坐标进行转换,而不是每个点。

你可能感兴趣的:(python)