Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenGL:奇怪旋转的对象_Python_Opengl_Rotation_Pyopengl_Opengl Compat - Fatal编程技术网

Python OpenGL:奇怪旋转的对象

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

我有一个立方体物体,我一直在旋转,但我遇到了一个问题。如果我将对象从(0,0,0)移开,对象开始以奇怪的方式旋转。我不知道为什么以及如何解决这个问题

这就是我的对象的外观:

这就是我旋转立方体的方式:

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