2024-06-21 15:18:04 -04:00
|
|
|
#include <JSystem/JGeometry/TMatrix.hpp>
|
|
|
|
|
#include <cmath>
|
|
|
|
|
|
|
|
|
|
inline f32 yy(f32 y) {
|
|
|
|
|
return y * y;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<>
|
2024-07-07 10:54:59 -04:00
|
|
|
void TRot3f::setRotate(const TVec3f &axis, f32 angle) {
|
2024-06-27 07:49:16 -04:00
|
|
|
TVec3f v;
|
2024-07-07 10:54:59 -04:00
|
|
|
v.set(axis);
|
2024-06-27 07:49:16 -04:00
|
|
|
PSVECMag(v.toCVec());
|
|
|
|
|
PSVECNormalize(v.toCVec(), v.toVec());
|
2024-07-07 10:54:59 -04:00
|
|
|
f32 angley = sin(angle), anglex = cos(angle);
|
2024-06-27 07:49:16 -04:00
|
|
|
f32 x, y, z;
|
|
|
|
|
y = v.y;
|
|
|
|
|
x = v.x;
|
|
|
|
|
z = v.z;
|
2024-07-07 10:54:59 -04:00
|
|
|
mMtx[0][0] = anglex + (1.0f - anglex) * yy(x);
|
|
|
|
|
mMtx[0][1] = (1.0f - anglex) * x * y - angley * z;
|
|
|
|
|
mMtx[0][2] = (1.0f - anglex) * x * z + angley * y;
|
|
|
|
|
mMtx[1][0] = (1.0f - anglex) * x * y + angley * z;
|
|
|
|
|
mMtx[1][1] = anglex + (1.0f - anglex) * yy(y);
|
|
|
|
|
mMtx[1][2] = (1.0f - anglex) * y * z - angley * x;
|
|
|
|
|
mMtx[2][0] = (1.0f - anglex) * x * z - angley * y;
|
|
|
|
|
mMtx[2][1] = (1.0f - anglex) * y * z + angley * x;
|
|
|
|
|
mMtx[2][2] = anglex + (1.0f - anglex) * yy(z);
|
2024-06-27 07:49:16 -04:00
|
|
|
}
|