659 B、24行 生 Blame 履歴
1namespace glm
2{
3 template<typename T, qualifier Q>
4 GLM_FUNC_QUALIFIER qua<T, Q> rotate(qua<T, Q> const& q, T const& angle, vec<3, T, Q> const& v)
5 {
6 vec<3, T, Q> Tmp = v;
7
8 // Axis of rotation must be normalised
9 T len = glm::length(Tmp);
10 if(abs(len - static_cast<T>(1)) > static_cast<T>(0.001))
11 {
12 T oneOverLen = static_cast<T>(1) / len;
13 Tmp.x *= oneOverLen;
14 Tmp.y *= oneOverLen;
15 Tmp.z *= oneOverLen;
16 }
17
18 T const AngleRad(angle);
19 T const Sin = sin(AngleRad * static_cast<T>(0.5));
20
21 return q * qua<T, Q>::wxyz(cos(AngleRad * static_cast<T>(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin);
22 }
23}//namespace glm
24