gpt4 book ai didi

opengl 矩阵旋转四元数

转载 作者:行者123 更新时间:2023-12-04 12:43:34 25 4
gpt4 key购买 nike

我试图做一个关于 x 和 y 轴的立方体的简单旋转:

我想总是将立方体在 x 轴上旋转 x 量
并将立方体在 y 轴上旋转一个独立于 x 轴旋转的量 y

首先我天真地做了:

glRotatef(x,1,0,0);
glRotatef(y,0,1,0);

然后

但首先在 x 上旋转,然后在 y 上旋转
我想独立于 x 访问在 y 上旋转。

我开始研究四元数,所以我尝试:
Quaternion Rotation1;
Rotation1.createFromAxisAngle(0,1, 0, globalRotateY);
Rotation1.normalize();

Quaternion Rotation2;
Rotation2.createFromAxisAngle(1,0, 0, globalRotateX);
Rotation2.normalize();

GLfloat Matrix[16];

Quaternion q=Rotation2 * Rotation1;

q.createMatrix(Matrix);
glMultMatrixf(Matrix);

这几乎完全完成了连续 2 次 glRotates 完成的工作……所以我想我错过了一个或 2 步。

四元数是要走的路还是我应该使用不同的东西?并且如果四元数是我可以添加哪些步骤以使立方体独立于每个轴旋转的方法。
我认为其他人也有同样的问题:
Rotating OpenGL scene in 2 axes

最佳答案

我使用四元数使其正常工作:我确定还有其他方法,但是经过一些重新搜索,这对我来说非常有效。我在另一个论坛上发布了一个类似的版本。 http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=280859&#Post280859

首先创建 x/y 变化角度的四元数表示
然后每一帧将变化的角度四元数乘以累积四元数,然后最后将该四元数转换为矩阵形式以乘以当前矩阵。这是循环的主要代码:

Quaternion3D Rotation1=Quaternion3DMakeWithAxisAndAngle(Vector3DMake(-1.0f,0,0), DEGREES_TO_RADIANS(globalRotateX));
Quaternion3DNormalize(&Rotation1);

Quaternion3D Rotation2=Quaternion3DMakeWithAxisAndAngle(Vector3DMake(0.0f,-1.0f,0), DEGREES_TO_RADIANS(globalRotateY));
Quaternion3DNormalize(&Rotation2);


Matrix3D Mat;
Matrix3DSetIdentity(Mat);
Quaternion3DMultiply(&QAccum, &Rotation1);

Quaternion3DMultiply(&QAccum, &Rotation2);

Matrix3DSetUsingQuaternion3D(Mat, QAccum);
globalRotateX=0;
globalRotateY=0;

glMultMatrixf(Mat);

然后绘制立方体

关于opengl 矩阵旋转四元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349575/

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