glTranslatef 在 glRotatef 之后变得混乱
glTranslatef gets messed up after glRotatef
我是 PyOpenGL 的新手。我用它制作了一个简单的代码来显示一个立方体,您可以使用键盘在它周围导航。但是,我注意到调用 glRotatef 命令后,它会改变您的视角,而不是对象的位置。但是,glTranslatef 不适用于透视图,而是文字坐标系。换句话说,在 90* 调用 glRotatef 命令后,本应使您向前移动的 glTranslatef 命令现在将您向左移动。是否有像 glTranslatef 这样的函数,只是它随着旋转而变化,所以你不会得到奇怪的动作,或者你可以做一些变通方法,根据旋转改变你传递给 glTranslatef 的值?
像glTranslate
and glRotate
这样的操作定义了一个(平移分别旋转)矩阵并将当前矩阵乘以新矩阵。
matrix multiplication is not commutative。如果你想旋转模型和平移模型独立于旋转,那么你必须在平移之前进行旋转分别将平移矩阵乘以旋转矩阵:
(OpenGL 矩阵乘法必须从右向左读取):
modelmatrix = translation * rotation
分别glTranslate
前glRotate
:
glTranslate(x, y, z)
glRotate(angle, ax, ay, az)
我是 PyOpenGL 的新手。我用它制作了一个简单的代码来显示一个立方体,您可以使用键盘在它周围导航。但是,我注意到调用 glRotatef 命令后,它会改变您的视角,而不是对象的位置。但是,glTranslatef 不适用于透视图,而是文字坐标系。换句话说,在 90* 调用 glRotatef 命令后,本应使您向前移动的 glTranslatef 命令现在将您向左移动。是否有像 glTranslatef 这样的函数,只是它随着旋转而变化,所以你不会得到奇怪的动作,或者你可以做一些变通方法,根据旋转改变你传递给 glTranslatef 的值?
像glTranslate
and glRotate
这样的操作定义了一个(平移分别旋转)矩阵并将当前矩阵乘以新矩阵。
matrix multiplication is not commutative。如果你想旋转模型和平移模型独立于旋转,那么你必须在平移之前进行旋转分别将平移矩阵乘以旋转矩阵:
(OpenGL 矩阵乘法必须从右向左读取):
modelmatrix = translation * rotation
分别glTranslate
前glRotate
:
glTranslate(x, y, z)
glRotate(angle, ax, ay, az)