gpt4 book ai didi

opengl - 关于glm四元数旋转

转载 作者:行者123 更新时间:2023-12-02 22:24:43 24 4
gpt4 key购买 nike

我想通过四元数进行一些旋转。

glm 库在这方面做得非常好。

以下是我的代码:

vec3 v(0.0f, 0.0f, 1.0f);
float deg = 45.0f * 0.5f;
quat q(glm::cos(glm::radians(deg)), 0, glm::sin(glm::radians(deg)), 0);
vec3 newv = q*v;
printf("v %f %f %f \n", newv[0], newv[1], newv[2]);

我的问题是,在许多文章中,四元数旋转的公式是

rotated_v = q*v*q_conj

这很奇怪。在glm中,向量“v”只需乘以四元数“q”即可进行旋转。

这让我很困惑。

最佳答案

经过一些研究。我找到了glm四元数中操作“*”的定义以及其中发生的事情。

此实现基于这些网站。

Quaternion vector rotation optimisation ,

A faster quaternion-vector multiplication ,

这是四元数旋转的两个版本。

//rotate vector 
vec3 qrot(vec4 q, vec3 v)
{
return v + 2.0*cross(q.xyz, cross(q.xyz,v) + q.w*v);
}
<小时/>
//rotate vector (alternative) 
vec3 qrot_2(vec4 q, vec3 v)
{
return v*(q.w*q.w - dot(q.xyz,q.xyz)) + 2.0*q.xyz*dot(q.xyz,v) +
2.0*q.w*cross(q.xyz,v);
}

如果有人能证明这一点。我真的很感激。

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

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