MCPcopy Create free account
hub / github.com/doldecomp/mkdd / stMakeDirectionMtx

Function stMakeDirectionMtx

src/Sato/stMath.cpp:75–128  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73}
74
75void stMakeDirectionMtx(TPos3f *dirMtx, const TVec3f &vec, char axis)
76{
77 TVec3f dir;
78 TVec3f normal;
79
80 if (axis == 'Z')
81 {
82 normal.set(0.0f, 1.0f, 0.0f);
83 }
84 else
85 {
86 normal.set(0.0f, 0.0f, 1.0f);
87 }
88
89 dir.cross(normal, vec);
90 stVecNormalize(&dir);
91
92 normal.cross(vec, dir);
93 stVecNormalize(&normal);
94
95 if (axis == 'Z')
96 {
97 dirMtx->mMtx[0][0] = dir.x;
98 dirMtx->mMtx[1][0] = dir.y;
99 dirMtx->mMtx[2][0] = dir.z;
100
101 dirMtx->mMtx[0][1] = normal.x;
102 dirMtx->mMtx[1][1] = normal.y;
103 dirMtx->mMtx[2][1] = normal.z;
104
105 dirMtx->mMtx[0][2] = vec.x;
106 dirMtx->mMtx[1][2] = vec.y;
107 dirMtx->mMtx[2][2] = vec.z;
108 }
109 else
110 {
111 dir.negate();
112 dirMtx->mMtx[0][0] = dir.x;
113 dirMtx->mMtx[1][0] = dir.y;
114 dirMtx->mMtx[2][0] = dir.z;
115
116 dirMtx->mMtx[0][1] = vec.x;
117 dirMtx->mMtx[1][1] = vec.y;
118 dirMtx->mMtx[2][1] = vec.z;
119
120 dirMtx->mMtx[0][2] = normal.x;
121 dirMtx->mMtx[1][2] = normal.y;
122 dirMtx->mMtx[2][2] = normal.z;
123 }
124
125 dirMtx->mMtx[0][3] = 0.0f;
126 dirMtx->mMtx[1][3] = 0.0f;
127 dirMtx->mMtx[2][3] = 0.0f;
128}
129
130void stMakeRMtx(Mtx m, const TVec3f &vec1, const TVec3f &vec2, const TVec3f &vec3)
131{

Callers 1

moveCommonMethod · 0.85

Calls 4

stVecNormalizeFunction · 0.85
crossMethod · 0.80
negateMethod · 0.80
setMethod · 0.45

Tested by

no test coverage detected