gpt4 book ai didi

c++ - 旋转一圈后,Opengl 模型矩阵不会绕原点旋转

转载 作者:行者123 更新时间:2023-11-30 04:03:09 29 4
gpt4 key购买 nike

我想在 x、y 和 z 方向上旋转我的模型 Matix,但它以一种意想不到的方式旋转。我使用 Qt。

QMatrix4x4 mMatrix;
mMatrix.setToIdentity();
mMatrix.rotate(yAngle, QVector3D(0, 1, 0));
mMatrix.rotate(zAngle, QVector3D(0, 0, 1));
mMatrix.translate(cube->getPosition());

在第一次旋转之后,后续旋转围绕新模型矩阵的底部旋转,而我希望后续旋转围绕原点旋转。

我画了一个小草图,这样我的问题可能会更清楚(黑色显示它现在的样子,绿色是我想要的样子): sketch of the vector problemn绿色箭头显示我想要的样子。

最佳答案

我认为,如果您简单地颠倒对 QMatrix4x4 类的调用顺序,您将获得所需的结果。结合两个旋转:

QMatrix4x4 mMatrix;
mMatrix.setToIdentity();
mMatrix.rotate(zAngle, QVector3D(0, 0, 1));
mMatrix.rotate(yAngle, QVector3D(0, 1, 0));

文档有点缺乏,但是通过查看 QMatrix4x4 源代码,我得到的印象是它应用矩阵运算的方式或多或少与所使用的矩阵库的标准方式相同对于 OpenGL,以及 OpenGL 固定管道过去的工作方式。

这意味着当你组合矩阵时,新矩阵从右边开始相乘。因此,当组合矩阵应用于 vector 时,最后指定的子变换首先应用于 vector 。或者换句话说,您可以按照与应用顺序相反的顺序指定转换。

在您的示例中,如果您想先绕 y 轴旋转,然后再绕 z 轴旋转,则需要先指定 z 轴旋转,然后再指定 y 轴旋转。

关于c++ - 旋转一圈后,Opengl 模型矩阵不会绕原点旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665075/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com