OpenGL:对象奇怪地旋转
OpenGL: Objects rotating strangely
我有一个不断旋转的立方体对象,但我 运行 遇到了问题。如果我将对象从 (0,0,0) 移开,对象将开始以 st运行ge 的方式旋转。我不知道为什么以及如何解决这个问题。
这是我的对象的样子:
这就是我旋转立方体的方式:
def draw_edges(self, color):
"""Draws the cube's edges"""
glPushMatrix()
glRotate(self.rotation[3],self.rotation[0],self.rotation[1],self.rotation[2])
glBegin(GL_LINES)
for edge in self.edges:
for vertex in edge:
glColor3fv(color)
glVertex3fv(self.vertices[vertex])
glEnd()
glPopMatrix()
然后我在立方体上调用旋转方法,将传入的值添加到位置:
def rotate(self, rotval, mult):
self.rotation[0] = rotval[0]
self.rotation[1] = rotval[1]
self.rotation[2] = rotval[2]
self.rotation[3] += mult
if self.rotation[3] >= 360:
self.rotation[3] = self.rotation[3] - 360
谁能帮忙解决这个问题。
Fixed Function Pipeline matrix operations like glTranslate
and glRotate
指定一个新矩阵并将当前矩阵乘以新矩阵。
矩阵乘法不是commutative。因此,无论您是先调用 glTranslate
然后调用 glRotate
还是调用 glRotate
然后调用 glTranslate
.
,都是有区别的
当glRotate
后面跟着glTranslate
时,翻译后的对象绕原点旋转:
当glTranslate
后跟[=12=]时,则对象旋转,旋转后的对象平移:
如果平移网格,通过给顶点添加偏移量,这对应后面的。但是如果你想围绕网格的原点旋转网格,那么你必须平移旋转的模型(translate * rotate
)。
使用glTranslate
“移动”网格:
def draw_edges(self, color):
"""Draws the cube's edges"""
glPushMatrix()
glTranslate(self.x, self.y, self.z)
glRotate(self.rotation[3],self.rotation[0],self.rotation[1],self.rotation[2])
glBegin(GL_LINES)
for edge in self.edges:
for vertex in edge:
glColor3fv(color)
glVertex3fv(self.vertices[vertex])
glEnd()
glPopMatrix()
我有一个不断旋转的立方体对象,但我 运行 遇到了问题。如果我将对象从 (0,0,0) 移开,对象将开始以 st运行ge 的方式旋转。我不知道为什么以及如何解决这个问题。
这是我的对象的样子:
这就是我旋转立方体的方式:
def draw_edges(self, color):
"""Draws the cube's edges"""
glPushMatrix()
glRotate(self.rotation[3],self.rotation[0],self.rotation[1],self.rotation[2])
glBegin(GL_LINES)
for edge in self.edges:
for vertex in edge:
glColor3fv(color)
glVertex3fv(self.vertices[vertex])
glEnd()
glPopMatrix()
然后我在立方体上调用旋转方法,将传入的值添加到位置:
def rotate(self, rotval, mult):
self.rotation[0] = rotval[0]
self.rotation[1] = rotval[1]
self.rotation[2] = rotval[2]
self.rotation[3] += mult
if self.rotation[3] >= 360:
self.rotation[3] = self.rotation[3] - 360
谁能帮忙解决这个问题。
Fixed Function Pipeline matrix operations like glTranslate
and glRotate
指定一个新矩阵并将当前矩阵乘以新矩阵。
矩阵乘法不是commutative。因此,无论您是先调用 glTranslate
然后调用 glRotate
还是调用 glRotate
然后调用 glTranslate
.
当glRotate
后面跟着glTranslate
时,翻译后的对象绕原点旋转:
当glTranslate
后跟[=12=]时,则对象旋转,旋转后的对象平移:
如果平移网格,通过给顶点添加偏移量,这对应后面的。但是如果你想围绕网格的原点旋转网格,那么你必须平移旋转的模型(translate * rotate
)。
使用glTranslate
“移动”网格:
def draw_edges(self, color):
"""Draws the cube's edges"""
glPushMatrix()
glTranslate(self.x, self.y, self.z)
glRotate(self.rotation[3],self.rotation[0],self.rotation[1],self.rotation[2])
glBegin(GL_LINES)
for edge in self.edges:
for vertex in edge:
glColor3fv(color)
glVertex3fv(self.vertices[vertex])
glEnd()
glPopMatrix()