如何在PyOpenGL中旋转object3D?
我试着在X轴上旋转一个物体,但我不明白 我有一个3D类对象它是:如何在PyOpenGL中旋转object3D?,opengl,python-3.x,pyopengl,Opengl,Python 3.x,Pyopengl,我试着在X轴上旋转一个物体,但我不明白 我有一个3D类对象它是: class Object3D(): 实现(IRenderizable) def uu init uu(self,参数={}): self.parameters=参数 self.ID=Engine().addObject3D() self.parent=None self.childrens=[] self.position=(parameters.get('position')为None)为True,Vector4()或param
class Object3D():
实现(IRenderizable)
def uu init uu(self,参数={}):
self.parameters=参数
self.ID=Engine().addObject3D()
self.parent=None
self.childrens=[]
self.position=(parameters.get('position')为None)为True,Vector4()或parameters.get('position')为True
self.rotation=(parameters.get('rotation')为None)为True,四元数()或parameters.get('rotation')为True
self.direction=Vector4()
self.scale=Vector3(1,1,1)
self.matrix=Matrix4()
self.matrixLocal=Matrix4()
self.matrixWorld=Matrix4()
self.matrixRotationWorld=Matrix4()
self.up=Vector3(0,1,0)
self.parameters=参数
自旋转角度=10。
self.currentMatrix=无
self.initCurrentMatrix()
def initCurrentMatrix(自):
glPushMatrix()
glLoadIdentity()
self.currentMatrix=glGetDoublev(GL\U模型视图\U矩阵)
GLPOP矩阵()
返回
def setID(自身,Id):
self.ID=ID
def移动到(自身、x、y、z):
v=矢量4(x,y,z)
#self.position.addSelf(self.rotation.rotativector(v))
self.position.addSelf(v)
glPushMatrix()
glLoadIdentity()
glTranslatef(float(self.position.x)、float(self.position.y)、float(self.position.z))
self.currentMatrix=glGetDoublev(GL\U模型视图\U矩阵)
GLPOP矩阵()
回归自我
def渲染(自):
通过
在这段代码中,您将看到如何实现旋转:
def rotateX(自身,角度=2):
glPushMatrix()
旋转(角度,0,1,0)
GLPOP矩阵()
回归自我
当Vector4、Vector3、四元数、Matrix4是我自己的类时
这是我的错吗?如何进行旋转
这是我的错吗
你把OpenGL误认为是一个数学库,事实并非如此。不要使用OpenGL对您保留在某个变量中的矩阵进行数学运算。实际上,根本不使用OpenGL矩阵函数。它们是固定功能管道的一部分,已从OpenGL的更高版本中删除
这是我的错吗
你把OpenGL误认为是一个数学库,事实并非如此。不要使用OpenGL对您保留在某个变量中的矩阵进行数学运算。实际上,根本不使用OpenGL矩阵函数。它们是固定函数管道的一部分,已从更高版本的OpenGL中删除。在旋转函数中,它应该是度而不是角度: glRotatef(度,0,0,-1)
这行吗?在“旋转”功能中,它应该是度而不是角度: glRotatef(度,0,0,-1)
这行吗?我不知道它是否有用,但移动或旋转对象的一般工作流如下所示:
glPushMatrix
)glLoadIdentity
)glPopMatrix
)glRotate
类似于将旋转矩阵乘以实际变换矩阵的makro。如果您总是加载标识矩阵,然后执行glRotate
操作,那么它将仅按给定的度数变换标识矩阵-->您的对象将按此度数旋转,然后再不执行其他操作-我想,这是您的错
如果使用上述9个步骤,对象的矩阵将与旋转矩阵相乘,结果将用于下一迭代步骤中的下一次相乘
我希望,这将有助于一般理解=)我不知道这是否有帮助,但移动或旋转对象的一般工作流程如下所示:
glPushMatrix
)glLoadIdentity
)glPopMatrix
)glRotate
类似于将旋转矩阵乘以实际变换矩阵的makro。如果您总是加载标识矩阵,然后执行glRotate
操作,那么它将仅按给定的度数变换标识矩阵-->您的对象将按此度数旋转,然后再不执行其他操作-我想,这是您的错
如果使用上述9个步骤,对象的矩阵将与旋转矩阵相乘,结果将用于下一迭代步骤中的下一次相乘
我希望,这将有助于一般理解=)因此,如何在没有PyOpenGL的情况下进行旋转?在3D图形中,转换表示为4×4矩阵。旋转可以表示为这样的矩阵。每个对象都会携带一个变换矩阵,用于描述其在世界上的位置。对该矩阵的更改通过将描述该更改的矩阵相乘来表示。绘制对象时,首先计算视图变换的合成矩阵(相机的排序)和对象的变换矩阵,并将其作为统一的传递给顶点着色器。与投影矩阵(相机镜头的一种)一起,这定义了完整的变换。那么,如何在不使用投影矩阵的情况下进行旋转呢