Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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 3.x Qt Opengl如何改变质点旋转?_Python 3.x_Qt_Opengl_Pyside2_Pyopengl - Fatal编程技术网

Python 3.x Qt Opengl如何改变质点旋转?

Python 3.x Qt Opengl如何改变质点旋转?,python-3.x,qt,opengl,pyside2,pyopengl,Python 3.x,Qt,Opengl,Pyside2,Pyopengl,我正试着围绕一个点进行旋转。问题是:平移相机时旋转点不会改变。我已经找到了一些关于通过将四元数转换为旋转矩阵并与变换矩阵相乘来更改旋转点的有用信息,如T(x,y,z)*R(q)*T(-x,-y,-z),但我没有使用它们中的任何一个。使用rotate和lookAt方法在单个QMatrix4x4上执行的所有转换。还有其他解决方案吗 这是我的相机课: class PlyViewportCamera: 定义初始化(自): self.\uuu projectionMatrix=QMatrix4x4() s

我正试着围绕一个点进行旋转。问题是:平移相机时旋转点不会改变。我已经找到了一些关于通过将四元数转换为旋转矩阵并与变换矩阵相乘来更改旋转点的有用信息,如
T(x,y,z)*R(q)*T(-x,-y,-z)
,但我没有使用它们中的任何一个。使用
rotate
lookAt
方法在单个
QMatrix4x4
上执行的所有转换。还有其他解决方案吗

这是我的相机课:

class PlyViewportCamera:
定义初始化(自):
self.\uuu projectionMatrix=QMatrix4x4()
self.\uuu viewMatrix=QMatrix4x4()
self._clipRange=(0.11000.0)
自视场=45
self.\uuu camEye=QVector3D(0.0,5.0,-10.0)
self._camTarget=QVector3D(0.0,0.0,0.0)
self._camUp=QVector3D(0.0,1.0,0.0)
self.\uuu视图旋转=四元数()
self.\uuuxrotation=QQuaternion()
自旋转=四元数()
def_u_rotateX(自,旋转:四元数):
自旋转=旋转*自旋转
自旋转视图旋转=自旋转*自旋转
self.\u viewRotation.normalize()
定义旋转(自,旋转:四元数):
自旋转=旋转*自旋转
自旋转视图旋转=自旋转*自旋转
self.\u viewRotation.normalize()
def旋转(自,p_开始:QVector2D,p_结束:QVector2D):
上一次旋转=自旋转
div_系数=10
差异=p_结束-p_开始
角度x=差异y()/div\u系数
角度y=diff.x()/div\u系数
self.uu rotateX(来自轴和角(1.0,0.0,0.0,角度x))的四元数)
self.uu rotateY(来自轴和角(0.0,1.0,0.0,角度y))的四元数)
self.\uuu viewRotation=QQuaternion.slerp(上一次旋转,self.\uu viewRotation,0.6)
self.\u viewRotation.normalize()
def盘(自身,开始:QVector2D,结束:QVector2D):
增量=结束-开始
transform=QVector3D(delta.x()/50,delta.y()/50,0.0)
self.\uu camEye+=变换
自。u_uCamTarget+=变换
def updateCamera(自我):
self.u viewMatrix.setToIdentity()
self.\uuuu viewMatrix.lookAt(self.\uuuuu camEye,self.\uuuu camTarget,self.\uuu camUp)
self.\u viewMatrix.rotate(self.\u viewRotation)
def设置投影(自身,w:int,h:int):
纵横比=w/h
self.\uu projectionMatrix.setToIdentity()
自投影矩阵透视图(自视场、纵横比、*self.\uuuu-clipRange)
@财产
def projectionMatrix(自):
返回self.\u投影矩阵
@财产
def viewMatrix(自):
返回self.\u视图矩阵

“但我不使用它们中的任何一个”-为什么?“还有其他解决方案吗?”-没有。四元数不能表示转换。您必须使用4x4矩阵。绕枢轴旋转:
T(枢轴)*R*T(-枢轴)
@rabbi76,好的,谢谢!问题是,我使用了
lookAt
功能来正确定位相机,所有变换都是通过传递已更改的
camEye
camTarget
向量完成的。我们可以说,由
注视产生的矩阵是变换矩阵吗?如果我对它执行旋转并使用负向量调用
lookAt
,那么它最终会得到奇怪的旋转结果。