Python OpenGL:奇怪旋转的对象
我有一个立方体物体,我一直在旋转,但我遇到了一个问题。如果我将对象从(0,0,0)移开,对象开始以奇怪的方式旋转。我不知道为什么以及如何解决这个问题 这就是我的对象的外观: 这就是我旋转立方体的方式:Python OpenGL:奇怪旋转的对象,python,opengl,rotation,pyopengl,opengl-compat,Python,Opengl,Rotation,Pyopengl,Opengl Compat,我有一个立方体物体,我一直在旋转,但我遇到了一个问题。如果我将对象从(0,0,0)移开,对象开始以奇怪的方式旋转。我不知道为什么以及如何解决这个问题 这就是我的对象的外观: 这就是我旋转立方体的方式: def绘制边(自身,颜色): “”“绘制立方体的边”“” glPushMatrix() glRotate(自旋转[3]、自旋转[0]、自旋转[1]、自旋转[2]) glBegin(GLU线) 对于self.edges中的边: 对于边中的顶点: glColor3fv(彩色) glVertex3fv
def绘制边(自身,颜色):
“”“绘制立方体的边”“”
glPushMatrix()
glRotate(自旋转[3]、自旋转[0]、自旋转[1]、自旋转[2])
glBegin(GLU线)
对于self.edges中的边:
对于边中的顶点:
glColor3fv(彩色)
glVertex3fv(自顶点[顶点])
格伦德()
GLPOP矩阵()
我在立方体上调用rotate方法,将传入的值添加到位置:
def旋转(自旋转、旋转、多旋转):
自旋转[0]=旋转值[0]
自旋转[1]=旋转[1]
自旋转[2]=旋转[2]
自旋转[3]+=mult
如果自转[3]>=360:
自旋转[3]=自旋转[3]-360
有人能帮忙吗。矩阵运算类似于并指定一个新矩阵,然后将当前矩阵乘以新矩阵。矩阵乘法不是。因此,无论您是调用
glTranslate
然后调用glRotate
还是调用glRotate
然后调用glTranslate
,都存在差异
当glRotate
后跟glTranslate
时,转换对象围绕原点旋转:
当glTranslate
后跟glRotate
时,对象旋转,旋转的对象被平移:
如果通过向顶点添加偏移来平移网格,这将对应于后面的顶点。但如果要围绕网格原点旋转网格,则必须平移旋转的模型(translate*rotate
)
使用glTranslate
来“移动”网格:
def绘制边(自身,颜色):
“”“绘制立方体的边”“”
glPushMatrix()
glTranslate(self.x、self.y、self.z)
glRotate(自旋转[3]、自旋转[0]、自旋转[1]、自旋转[2])
glBegin(GLU线)
对于self.edges中的边:
对于边中的顶点:
glColor3fv(彩色)
glVertex3fv(自顶点[顶点])
格伦德()
GLPOP矩阵()
如何“移动对象”?您必须按glTranslate
平移对象,并按glRotate
旋转对象。此外,由glTranslate
和glRotate
执行的矩阵运算不可交换,这意味着它们的应用顺序至关重要。正如前面的注释所示,您能做的最有帮助的事情就是向我们展示负责移动多维数据集的代码。@PaulM。我不认为参与者通过glTranslate
来“移动”对象。网格可能是通过操纵顶点坐标“移动”的,这对应于rotate*translate
而不是translate*rotate