クォータニオンで回転をしたいです。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では、四元数「q」だけを乗算したベクトル「v」が回転を行うことができます。私を混乱させました。
実際、回転ベクトルを得るためにq * v * qを実行しようとしています。しかしそれは間違っている。 のようなもの 'quat q(cos(ラジアン(deg))、0、sin(ラジアン(deg))、0); quat q_conj = conjugate(q); vec4 newv = vec4(0、v); newv = q * newv * q_conj; ' そして(0.000000、0.000000、0.000000,1.000000) –
それは何もしないようです。 –
私はよく働くコードの平和を持っています。quat tmp = mix(m_init、m_end、t); vec3 res = tmp * m_initTargetVector * conjugate(tmp)); 'vec4" newv "は不要です。 –