gpt4 book ai didi

opengl - 将四元数旋转转换为旋转矩阵?

转载 作者:行者123 更新时间:2023-12-03 13:44:00 26 4
gpt4 key购买 nike

基本上,给定一个四元数(qx,qy,qz,qw)...如何将其转换为OpenGL旋转矩阵?我也对哪个矩阵行是“上”,“右”,“前进”等感兴趣。我在四元数中有一个摄像机旋转,在矢量中我需要...

最佳答案

以下代码基于四元数(qw,qx,qy,qz),其顺序基于Boost四元数:

boost::math::quaternion<float> quaternion;
float qw = quaternion.R_component_1();
float qx = quaternion.R_component_2();
float qy = quaternion.R_component_3();
float qz = quaternion.R_component_4();


首先,您必须规范四元数:

const float n = 1.0f/sqrt(qx*qx+qy*qy+qz*qz+qw*qw);
qx *= n;
qy *= n;
qz *= n;
qw *= n;


然后,您可以创建矩阵:

Matrix<float, 4>(
1.0f - 2.0f*qy*qy - 2.0f*qz*qz, 2.0f*qx*qy - 2.0f*qz*qw, 2.0f*qx*qz + 2.0f*qy*qw, 0.0f,
2.0f*qx*qy + 2.0f*qz*qw, 1.0f - 2.0f*qx*qx - 2.0f*qz*qz, 2.0f*qy*qz - 2.0f*qx*qw, 0.0f,
2.0f*qx*qz - 2.0f*qy*qw, 2.0f*qy*qz + 2.0f*qx*qw, 1.0f - 2.0f*qx*qx - 2.0f*qy*qy, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);


根据您的矩阵类,您可能必须先将其转置,然后再将其传递给OpenGL。

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

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