zeus/src/CTransform.cpp

66 lines
1.8 KiB
C++
Raw Normal View History

2016-03-04 15:03:26 -08:00
#include "zeus/CTransform.hpp"
2015-04-19 13:39:16 -07:00
2018-12-07 17:16:50 -08:00
namespace zeus {
CTransform CTransformFromEditorEuler(const CVector3f& eulerVec) {
CTransform result;
double ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss;
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
ti = eulerVec[0];
tj = eulerVec[1];
th = eulerVec[2];
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
ci = std::cos(ti);
cj = std::cos(tj);
ch = std::cos(th);
si = std::sin(ti);
sj = std::sin(tj);
sh = std::sin(th);
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
cc = ci * ch;
cs = ci * sh;
sc = si * ch;
ss = si * sh;
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
result.basis.m[0][0] = float(cj * ch);
result.basis.m[1][0] = float(sj * sc - cs);
result.basis.m[2][0] = float(sj * cc + ss);
result.basis.m[0][1] = float(cj * sh);
result.basis.m[1][1] = float(sj * ss + cc);
result.basis.m[2][1] = float(sj * cs - sc);
result.basis.m[0][2] = float(-sj);
result.basis.m[1][2] = float(cj * si);
result.basis.m[2][2] = float(cj * ci);
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
return result;
2015-04-19 13:39:16 -07:00
}
2018-12-07 17:16:50 -08:00
CTransform CTransformFromAxisAngle(const CVector3f& axis, float angle) {
CTransform result;
CVector3f axisN = axis.normalized();
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
float c = std::cos(angle);
float s = std::sin(angle);
float t = 1.f - c;
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
result.basis.m[0][0] = t * axisN[0] * axisN[0] + c;
result.basis.m[1][0] = t * axisN[0] * axisN[1] - axisN[2] * s;
result.basis.m[2][0] = t * axisN[0] * axisN[2] + axisN[1] * s;
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
result.basis.m[0][1] = t * axisN[0] * axisN[1] + axisN[2] * s;
result.basis.m[1][1] = t * axisN[1] * axisN[1] + c;
result.basis.m[2][1] = t * axisN[1] * axisN[2] - axisN[0] * s;
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
result.basis.m[0][2] = t * axisN[0] * axisN[2] - axisN[1] * s;
result.basis.m[1][2] = t * axisN[1] * axisN[2] + axisN[0] * s;
result.basis.m[2][2] = t * axisN[2] * axisN[2] + c;
2016-07-08 11:42:42 -07:00
2018-12-07 17:16:50 -08:00
return result;
2015-04-19 13:39:16 -07:00
}
2015-08-25 15:04:15 -07:00
2018-12-07 17:16:50 -08:00
CTransform CTransformFromEditorEulers(const CVector3f& eulerVec, const CVector3f& origin) {
CTransform ret = CTransformFromEditorEuler(eulerVec);
ret.origin = origin;
return ret;
2015-08-28 21:49:19 -07:00
}
2018-12-07 21:23:50 -08:00
} // namespace zeus