24 const matrix4x4_t identitymatrix = { { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 } } };
33 out->
m[0][0] = in->
m[0][0];
34 out->
m[0][1] = in->
m[0][1];
35 out->
m[0][2] = in->
m[0][2];
37 out->
m[1][0] = in->
m[1][0];
38 out->
m[1][1] = in->
m[1][1];
39 out->
m[1][2] = in->
m[1][2];
41 out->
m[2][0] = in->
m[2][0];
42 out->
m[2][1] = in->
m[2][1];
43 out->
m[2][2] = in->
m[2][2];
53 #ifdef MATRIX4x4_OPENGLORIENTATION
57 out->
m[3][0] = in->
m[0][3];
61 out->
m[3][1] = in->
m[1][3];
65 out->
m[3][2] = in->
m[2][3];
74 out->
m[0][3] = in->
m[0][3];
78 out->
m[1][3] = in->
m[1][3];
82 out->
m[2][3] = in->
m[2][3];
92 #ifdef MATRIX4x4_OPENGLORIENTATION
93 out->
m[0][0] = in1->
m[0][0] * in2->
m[0][0] + in1->
m[1][0] * in2->
m[0][1] + in1->
m[2][0] * in2->
m[0][2] + in1->
m[3][0] * in2->
m[0][3];
94 out->
m[1][0] = in1->
m[0][0] * in2->
m[1][0] + in1->
m[1][0] * in2->
m[1][1] + in1->
m[2][0] * in2->
m[1][2] + in1->
m[3][0] * in2->
m[1][3];
95 out->
m[2][0] = in1->
m[0][0] * in2->
m[2][0] + in1->
m[1][0] * in2->
m[2][1] + in1->
m[2][0] * in2->
m[2][2] + in1->
m[3][0] * in2->
m[2][3];
96 out->
m[3][0] = in1->
m[0][0] * in2->
m[3][0] + in1->
m[1][0] * in2->
m[3][1] + in1->
m[2][0] * in2->
m[3][2] + in1->
m[3][0] * in2->
m[3][3];
97 out->
m[0][1] = in1->
m[0][1] * in2->
m[0][0] + in1->
m[1][1] * in2->
m[0][1] + in1->
m[2][1] * in2->
m[0][2] + in1->
m[3][1] * in2->
m[0][3];
98 out->
m[1][1] = in1->
m[0][1] * in2->
m[1][0] + in1->
m[1][1] * in2->
m[1][1] + in1->
m[2][1] * in2->
m[1][2] + in1->
m[3][1] * in2->
m[1][3];
99 out->
m[2][1] = in1->
m[0][1] * in2->
m[2][0] + in1->
m[1][1] * in2->
m[2][1] + in1->
m[2][1] * in2->
m[2][2] + in1->
m[3][1] * in2->
m[2][3];
100 out->
m[3][1] = in1->
m[0][1] * in2->
m[3][0] + in1->
m[1][1] * in2->
m[3][1] + in1->
m[2][1] * in2->
m[3][2] + in1->
m[3][1] * in2->
m[3][3];
101 out->
m[0][2] = in1->
m[0][2] * in2->
m[0][0] + in1->
m[1][2] * in2->
m[0][1] + in1->
m[2][2] * in2->
m[0][2] + in1->
m[3][2] * in2->
m[0][3];
102 out->
m[1][2] = in1->
m[0][2] * in2->
m[1][0] + in1->
m[1][2] * in2->
m[1][1] + in1->
m[2][2] * in2->
m[1][2] + in1->
m[3][2] * in2->
m[1][3];
103 out->
m[2][2] = in1->
m[0][2] * in2->
m[2][0] + in1->
m[1][2] * in2->
m[2][1] + in1->
m[2][2] * in2->
m[2][2] + in1->
m[3][2] * in2->
m[2][3];
104 out->
m[3][2] = in1->
m[0][2] * in2->
m[3][0] + in1->
m[1][2] * in2->
m[3][1] + in1->
m[2][2] * in2->
m[3][2] + in1->
m[3][2] * in2->
m[3][3];
105 out->
m[0][3] = in1->
m[0][3] * in2->
m[0][0] + in1->
m[1][3] * in2->
m[0][1] + in1->
m[2][3] * in2->
m[0][2] + in1->
m[3][3] * in2->
m[0][3];
106 out->
m[1][3] = in1->
m[0][3] * in2->
m[1][0] + in1->
m[1][3] * in2->
m[1][1] + in1->
m[2][3] * in2->
m[1][2] + in1->
m[3][3] * in2->
m[1][3];
107 out->
m[2][3] = in1->
m[0][3] * in2->
m[2][0] + in1->
m[1][3] * in2->
m[2][1] + in1->
m[2][3] * in2->
m[2][2] + in1->
m[3][3] * in2->
m[2][3];
108 out->
m[3][3] = in1->
m[0][3] * in2->
m[3][0] + in1->
m[1][3] * in2->
m[3][1] + in1->
m[2][3] * in2->
m[3][2] + in1->
m[3][3] * in2->
m[3][3];
110 out->
m[0][0] = in1->
m[0][0] * in2->
m[0][0] + in1->
m[0][1] * in2->
m[1][0] + in1->
m[0][2] * in2->
m[2][0]
111 + in1->
m[0][3] * in2->
m[3][0];
112 out->
m[0][1] = in1->
m[0][0] * in2->
m[0][1] + in1->
m[0][1] * in2->
m[1][1] + in1->
m[0][2] * in2->
m[2][1]
113 + in1->
m[0][3] * in2->
m[3][1];
114 out->
m[0][2] = in1->
m[0][0] * in2->
m[0][2] + in1->
m[0][1] * in2->
m[1][2] + in1->
m[0][2] * in2->
m[2][2]
115 + in1->
m[0][3] * in2->
m[3][2];
116 out->
m[0][3] = in1->
m[0][0] * in2->
m[0][3] + in1->
m[0][1] * in2->
m[1][3] + in1->
m[0][2] * in2->
m[2][3]
117 + in1->
m[0][3] * in2->
m[3][3];
118 out->
m[1][0] = in1->
m[1][0] * in2->
m[0][0] + in1->
m[1][1] * in2->
m[1][0] + in1->
m[1][2] * in2->
m[2][0]
119 + in1->
m[1][3] * in2->
m[3][0];
120 out->
m[1][1] = in1->
m[1][0] * in2->
m[0][1] + in1->
m[1][1] * in2->
m[1][1] + in1->
m[1][2] * in2->
m[2][1]
121 + in1->
m[1][3] * in2->
m[3][1];
122 out->
m[1][2] = in1->
m[1][0] * in2->
m[0][2] + in1->
m[1][1] * in2->
m[1][2] + in1->
m[1][2] * in2->
m[2][2]
123 + in1->
m[1][3] * in2->
m[3][2];
124 out->
m[1][3] = in1->
m[1][0] * in2->
m[0][3] + in1->
m[1][1] * in2->
m[1][3] + in1->
m[1][2] * in2->
m[2][3]
125 + in1->
m[1][3] * in2->
m[3][3];
126 out->
m[2][0] = in1->
m[2][0] * in2->
m[0][0] + in1->
m[2][1] * in2->
m[1][0] + in1->
m[2][2] * in2->
m[2][0]
127 + in1->
m[2][3] * in2->
m[3][0];
128 out->
m[2][1] = in1->
m[2][0] * in2->
m[0][1] + in1->
m[2][1] * in2->
m[1][1] + in1->
m[2][2] * in2->
m[2][1]
129 + in1->
m[2][3] * in2->
m[3][1];
130 out->
m[2][2] = in1->
m[2][0] * in2->
m[0][2] + in1->
m[2][1] * in2->
m[1][2] + in1->
m[2][2] * in2->
m[2][2]
131 + in1->
m[2][3] * in2->
m[3][2];
132 out->
m[2][3] = in1->
m[2][0] * in2->
m[0][3] + in1->
m[2][1] * in2->
m[1][3] + in1->
m[2][2] * in2->
m[2][3]
133 + in1->
m[2][3] * in2->
m[3][3];
134 out->
m[3][0] = in1->
m[3][0] * in2->
m[0][0] + in1->
m[3][1] * in2->
m[1][0] + in1->
m[3][2] * in2->
m[2][0]
135 + in1->
m[3][3] * in2->
m[3][0];
136 out->
m[3][1] = in1->
m[3][0] * in2->
m[0][1] + in1->
m[3][1] * in2->
m[1][1] + in1->
m[3][2] * in2->
m[2][1]
137 + in1->
m[3][3] * in2->
m[3][1];
138 out->
m[3][2] = in1->
m[3][0] * in2->
m[0][2] + in1->
m[3][1] * in2->
m[1][2] + in1->
m[3][2] * in2->
m[2][2]
139 + in1->
m[3][3] * in2->
m[3][2];
140 out->
m[3][3] = in1->
m[3][0] * in2->
m[0][3] + in1->
m[3][1] * in2->
m[1][3] + in1->
m[3][2] * in2->
m[2][3]
141 + in1->
m[3][3] * in2->
m[3][3];
147 out->
m[0][0] = in1->
m[0][0];
148 out->
m[0][1] = in1->
m[1][0];
149 out->
m[0][2] = in1->
m[2][0];
150 out->
m[0][3] = in1->
m[3][0];
151 out->
m[1][0] = in1->
m[0][1];
152 out->
m[1][1] = in1->
m[1][1];
153 out->
m[1][2] = in1->
m[2][1];
154 out->
m[1][3] = in1->
m[3][1];
155 out->
m[2][0] = in1->
m[0][2];
156 out->
m[2][1] = in1->
m[1][2];
157 out->
m[2][2] = in1->
m[2][2];
158 out->
m[2][3] = in1->
m[3][2];
159 out->
m[3][0] = in1->
m[0][3];
160 out->
m[3][1] = in1->
m[1][3];
161 out->
m[3][2] = in1->
m[2][3];
162 out->
m[3][3] = in1->
m[3][3];
183 float m00 = in1->
m[0][0], m01 = in1->
m[0][1], m02 = in1->
m[0][2], m03 = in1->
m[0][3], m10 = in1->
m[1][0], m11 =
184 in1->
m[1][1], m12 = in1->
m[1][2], m13 = in1->
m[1][3], m20 = in1->
m[2][0], m21 = in1->
m[2][1], m22 =
185 in1->
m[2][2], m23 = in1->
m[2][3], m30 = in1->
m[3][0], m31 = in1->
m[3][1], m32 = in1->
m[3][2], m33 =
189 out->
m[0][0] = (m11 * (m22 * m33 - m23 * m32) - m21 * (m12 * m33 - m13 * m32) + m31 * (m12 * m23 - m13 * m22));
190 out->
m[0][1] = -(m01 * (m22 * m33 - m23 * m32) - m21 * (m02 * m33 - m03 * m32) + m31 * (m02 * m23 - m03 * m22));
191 out->
m[0][2] = (m01 * (m12 * m33 - m13 * m32) - m11 * (m02 * m33 - m03 * m32) + m31 * (m02 * m13 - m03 * m12));
192 out->
m[0][3] = -(m01 * (m12 * m23 - m13 * m22) - m11 * (m02 * m23 - m03 * m22) + m21 * (m02 * m13 - m03 * m12));
193 out->
m[1][0] = -(m10 * (m22 * m33 - m23 * m32) - m20 * (m12 * m33 - m13 * m32) + m30 * (m12 * m23 - m13 * m22));
194 out->
m[1][1] = (m00 * (m22 * m33 - m23 * m32) - m20 * (m02 * m33 - m03 * m32) + m30 * (m02 * m23 - m03 * m22));
195 out->
m[1][2] = -(m00 * (m12 * m33 - m13 * m32) - m10 * (m02 * m33 - m03 * m32) + m30 * (m02 * m13 - m03 * m12));
196 out->
m[1][3] = (m00 * (m12 * m23 - m13 * m22) - m10 * (m02 * m23 - m03 * m22) + m20 * (m02 * m13 - m03 * m12));
197 out->
m[2][0] = (m10 * (m21 * m33 - m23 * m31) - m20 * (m11 * m33 - m13 * m31) + m30 * (m11 * m23 - m13 * m21));
198 out->
m[2][1] = -(m00 * (m21 * m33 - m23 * m31) - m20 * (m01 * m33 - m03 * m31) + m30 * (m01 * m23 - m03 * m21));
199 out->
m[2][2] = (m00 * (m11 * m33 - m13 * m31) - m10 * (m01 * m33 - m03 * m31) + m30 * (m01 * m13 - m03 * m11));
200 out->
m[2][3] = -(m00 * (m11 * m23 - m13 * m21) - m10 * (m01 * m23 - m03 * m21) + m20 * (m01 * m13 - m03 * m11));
201 out->
m[3][0] = -(m10 * (m21 * m32 - m22 * m31) - m20 * (m11 * m32 - m12 * m31) + m30 * (m11 * m22 - m12 * m21));
202 out->
m[3][1] = (m00 * (m21 * m32 - m22 * m31) - m20 * (m01 * m32 - m02 * m31) + m30 * (m01 * m22 - m02 * m21));
203 out->
m[3][2] = -(m00 * (m11 * m32 - m12 * m31) - m10 * (m01 * m32 - m02 * m31) + m30 * (m01 * m12 - m02 * m11));
204 out->
m[3][3] = (m00 * (m11 * m22 - m12 * m21) - m10 * (m01 * m22 - m02 * m21) + m20 * (m01 * m12 - m02 * m11));
207 det = m00 * out->
m[0][0] + m10 * out->
m[0][1] + m20 * out->
m[0][2] + m30 * out->
m[0][3];
244 #ifdef MATRIX4x4_OPENGLORIENTATION
245 temp.
m[0][0] = in1->
m[1][1]*in1->
m[2][2]*in1->
m[3][3] - in1->
m[1][1]*in1->
m[2][3]*in1->
m[3][2] - in1->
m[2][1]*in1->
m[1][2]*in1->
m[3][3] + in1->
m[2][1]*in1->
m[1][3]*in1->
m[3][2] + in1->
m[3][1]*in1->
m[1][2]*in1->
m[2][3] - in1->
m[3][1]*in1->
m[1][3]*in1->
m[2][2];
246 temp.
m[1][0] = -in1->
m[1][0]*in1->
m[2][2]*in1->
m[3][3] + in1->
m[1][0]*in1->
m[2][3]*in1->
m[3][2] + in1->
m[2][0]*in1->
m[1][2]*in1->
m[3][3] - in1->
m[2][0]*in1->
m[1][3]*in1->
m[3][2] - in1->
m[3][0]*in1->
m[1][2]*in1->
m[2][3] + in1->
m[3][0]*in1->
m[1][3]*in1->
m[2][2];
247 temp.
m[2][0] = in1->
m[1][0]*in1->
m[2][1]*in1->
m[3][3] - in1->
m[1][0]*in1->
m[2][3]*in1->
m[3][1] - in1->
m[2][0]*in1->
m[1][1]*in1->
m[3][3] + in1->
m[2][0]*in1->
m[1][3]*in1->
m[3][1] + in1->
m[3][0]*in1->
m[1][1]*in1->
m[2][3] - in1->
m[3][0]*in1->
m[1][3]*in1->
m[2][1];
248 temp.
m[3][0] = -in1->
m[1][0]*in1->
m[2][1]*in1->
m[3][2] + in1->
m[1][0]*in1->
m[2][2]*in1->
m[3][1] + in1->
m[2][0]*in1->
m[1][1]*in1->
m[3][2] - in1->
m[2][0]*in1->
m[1][2]*in1->
m[3][1] - in1->
m[3][0]*in1->
m[1][1]*in1->
m[2][2] + in1->
m[3][0]*in1->
m[1][2]*in1->
m[2][1];
249 temp.
m[0][1] = -in1->
m[0][1]*in1->
m[2][2]*in1->
m[3][3] + in1->
m[0][1]*in1->
m[2][3]*in1->
m[3][2] + in1->
m[2][1]*in1->
m[0][2]*in1->
m[3][3] - in1->
m[2][1]*in1->
m[0][3]*in1->
m[3][2] - in1->
m[3][1]*in1->
m[0][2]*in1->
m[2][3] + in1->
m[3][1]*in1->
m[0][3]*in1->
m[2][2];
250 temp.
m[1][1] = in1->
m[0][0]*in1->
m[2][2]*in1->
m[3][3] - in1->
m[0][0]*in1->
m[2][3]*in1->
m[3][2] - in1->
m[2][0]*in1->
m[0][2]*in1->
m[3][3] + in1->
m[2][0]*in1->
m[0][3]*in1->
m[3][2] + in1->
m[3][0]*in1->
m[0][2]*in1->
m[2][3] - in1->
m[3][0]*in1->
m[0][3]*in1->
m[2][2];
251 temp.
m[2][1] = -in1->
m[0][0]*in1->
m[2][1]*in1->
m[3][3] + in1->
m[0][0]*in1->
m[2][3]*in1->
m[3][1] + in1->
m[2][0]*in1->
m[0][1]*in1->
m[3][3] - in1->
m[2][0]*in1->
m[0][3]*in1->
m[3][1] - in1->
m[3][0]*in1->
m[0][1]*in1->
m[2][3] + in1->
m[3][0]*in1->
m[0][3]*in1->
m[2][1];
252 temp.
m[3][1] = in1->
m[0][0]*in1->
m[2][1]*in1->
m[3][2] - in1->
m[0][0]*in1->
m[2][2]*in1->
m[3][1] - in1->
m[2][0]*in1->
m[0][1]*in1->
m[3][2] + in1->
m[2][0]*in1->
m[0][2]*in1->
m[3][1] + in1->
m[3][0]*in1->
m[0][1]*in1->
m[2][2] - in1->
m[3][0]*in1->
m[0][2]*in1->
m[2][1];
253 temp.
m[0][2] = in1->
m[0][1]*in1->
m[1][2]*in1->
m[3][3] - in1->
m[0][1]*in1->
m[1][3]*in1->
m[3][2] - in1->
m[1][1]*in1->
m[0][2]*in1->
m[3][3] + in1->
m[1][1]*in1->
m[0][3]*in1->
m[3][2] + in1->
m[3][1]*in1->
m[0][2]*in1->
m[1][3] - in1->
m[3][1]*in1->
m[0][3]*in1->
m[1][2];
254 temp.
m[1][2] = -in1->
m[0][0]*in1->
m[1][2]*in1->
m[3][3] + in1->
m[0][0]*in1->
m[1][3]*in1->
m[3][2] + in1->
m[1][0]*in1->
m[0][2]*in1->
m[3][3] - in1->
m[1][0]*in1->
m[0][3]*in1->
m[3][2] - in1->
m[3][0]*in1->
m[0][2]*in1->
m[1][3] + in1->
m[3][0]*in1->
m[0][3]*in1->
m[1][2];
255 temp.
m[2][2] = in1->
m[0][0]*in1->
m[1][1]*in1->
m[3][3] - in1->
m[0][0]*in1->
m[1][3]*in1->
m[3][1] - in1->
m[1][0]*in1->
m[0][1]*in1->
m[3][3] + in1->
m[1][0]*in1->
m[0][3]*in1->
m[3][1] + in1->
m[3][0]*in1->
m[0][1]*in1->
m[1][3] - in1->
m[3][0]*in1->
m[0][3]*in1->
m[1][1];
256 temp.
m[3][2] = -in1->
m[0][0]*in1->
m[1][1]*in1->
m[3][2] + in1->
m[0][0]*in1->
m[1][2]*in1->
m[3][1] + in1->
m[1][0]*in1->
m[0][1]*in1->
m[3][2] - in1->
m[1][0]*in1->
m[0][2]*in1->
m[3][1] - in1->
m[3][0]*in1->
m[0][1]*in1->
m[1][2] + in1->
m[3][0]*in1->
m[0][2]*in1->
m[1][1];
257 temp.
m[0][3] = -in1->
m[0][1]*in1->
m[1][2]*in1->
m[2][3] + in1->
m[0][1]*in1->
m[1][3]*in1->
m[2][2] + in1->
m[1][1]*in1->
m[0][2]*in1->
m[2][3] - in1->
m[1][1]*in1->
m[0][3]*in1->
m[2][2] - in1->
m[2][1]*in1->
m[0][2]*in1->
m[1][3] + in1->
m[2][1]*in1->
m[0][3]*in1->
m[1][2];
258 temp.
m[1][3] = in1->
m[0][0]*in1->
m[1][2]*in1->
m[2][3] - in1->
m[0][0]*in1->
m[1][3]*in1->
m[2][2] - in1->
m[1][0]*in1->
m[0][2]*in1->
m[2][3] + in1->
m[1][0]*in1->
m[0][3]*in1->
m[2][2] + in1->
m[2][0]*in1->
m[0][2]*in1->
m[1][3] - in1->
m[2][0]*in1->
m[0][3]*in1->
m[1][2];
259 temp.
m[2][3] = -in1->
m[0][0]*in1->
m[1][1]*in1->
m[2][3] + in1->
m[0][0]*in1->
m[1][3]*in1->
m[2][1] + in1->
m[1][0]*in1->
m[0][1]*in1->
m[2][3] - in1->
m[1][0]*in1->
m[0][3]*in1->
m[2][1] - in1->
m[2][0]*in1->
m[0][1]*in1->
m[1][3] + in1->
m[2][0]*in1->
m[0][3]*in1->
m[1][1];
260 temp.
m[3][3] = in1->
m[0][0]*in1->
m[1][1]*in1->
m[2][2] - in1->
m[0][0]*in1->
m[1][2]*in1->
m[2][1] - in1->
m[1][0]*in1->
m[0][1]*in1->
m[2][2] + in1->
m[1][0]*in1->
m[0][2]*in1->
m[2][1] + in1->
m[2][0]*in1->
m[0][1]*in1->
m[1][2] - in1->
m[2][0]*in1->
m[0][2]*in1->
m[1][1];
262 temp.
m[0][0] = in1->
m[1][1]*in1->
m[2][2]*in1->
m[3][3] - in1->
m[1][1]*in1->
m[3][2]*in1->
m[2][3] - in1->
m[1][2]*in1->
m[2][1]*in1->
m[3][3] + in1->
m[1][2]*in1->
m[3][1]*in1->
m[2][3] + in1->
m[1][3]*in1->
m[2][1]*in1->
m[3][2] - in1->
m[1][3]*in1->
m[3][1]*in1->
m[2][2];
263 temp.
m[0][1] = -in1->
m[0][1]*in1->
m[2][2]*in1->
m[3][3] + in1->
m[0][1]*in1->
m[3][2]*in1->
m[2][3] + in1->
m[0][2]*in1->
m[2][1]*in1->
m[3][3] - in1->
m[0][2]*in1->
m[3][1]*in1->
m[2][3] - in1->
m[0][3]*in1->
m[2][1]*in1->
m[3][2] + in1->
m[0][3]*in1->
m[3][1]*in1->
m[2][2];
264 temp.
m[0][2] = in1->
m[0][1]*in1->
m[1][2]*in1->
m[3][3] - in1->
m[0][1]*in1->
m[3][2]*in1->
m[1][3] - in1->
m[0][2]*in1->
m[1][1]*in1->
m[3][3] + in1->
m[0][2]*in1->
m[3][1]*in1->
m[1][3] + in1->
m[0][3]*in1->
m[1][1]*in1->
m[3][2] - in1->
m[0][3]*in1->
m[3][1]*in1->
m[1][2];
265 temp.
m[0][3] = -in1->
m[0][1]*in1->
m[1][2]*in1->
m[2][3] + in1->
m[0][1]*in1->
m[2][2]*in1->
m[1][3] + in1->
m[0][2]*in1->
m[1][1]*in1->
m[2][3] - in1->
m[0][2]*in1->
m[2][1]*in1->
m[1][3] - in1->
m[0][3]*in1->
m[1][1]*in1->
m[2][2] + in1->
m[0][3]*in1->
m[2][1]*in1->
m[1][2];
266 temp.
m[1][0] = -in1->
m[1][0]*in1->
m[2][2]*in1->
m[3][3] + in1->
m[1][0]*in1->
m[3][2]*in1->
m[2][3] + in1->
m[1][2]*in1->
m[2][0]*in1->
m[3][3] - in1->
m[1][2]*in1->
m[3][0]*in1->
m[2][3] - in1->
m[1][3]*in1->
m[2][0]*in1->
m[3][2] + in1->
m[1][3]*in1->
m[3][0]*in1->
m[2][2];
267 temp.
m[1][1] = in1->
m[0][0]*in1->
m[2][2]*in1->
m[3][3] - in1->
m[0][0]*in1->
m[3][2]*in1->
m[2][3] - in1->
m[0][2]*in1->
m[2][0]*in1->
m[3][3] + in1->
m[0][2]*in1->
m[3][0]*in1->
m[2][3] + in1->
m[0][3]*in1->
m[2][0]*in1->
m[3][2] - in1->
m[0][3]*in1->
m[3][0]*in1->
m[2][2];
268 temp.
m[1][2] = -in1->
m[0][0]*in1->
m[1][2]*in1->
m[3][3] + in1->
m[0][0]*in1->
m[3][2]*in1->
m[1][3] + in1->
m[0][2]*in1->
m[1][0]*in1->
m[3][3] - in1->
m[0][2]*in1->
m[3][0]*in1->
m[1][3] - in1->
m[0][3]*in1->
m[1][0]*in1->
m[3][2] + in1->
m[0][3]*in1->
m[3][0]*in1->
m[1][2];
269 temp.
m[1][3] = in1->
m[0][0]*in1->
m[1][2]*in1->
m[2][3] - in1->
m[0][0]*in1->
m[2][2]*in1->
m[1][3] - in1->
m[0][2]*in1->
m[1][0]*in1->
m[2][3] + in1->
m[0][2]*in1->
m[2][0]*in1->
m[1][3] + in1->
m[0][3]*in1->
m[1][0]*in1->
m[2][2] - in1->
m[0][3]*in1->
m[2][0]*in1->
m[1][2];
270 temp.
m[2][0] = in1->
m[1][0]*in1->
m[2][1]*in1->
m[3][3] - in1->
m[1][0]*in1->
m[3][1]*in1->
m[2][3] - in1->
m[1][1]*in1->
m[2][0]*in1->
m[3][3] + in1->
m[1][1]*in1->
m[3][0]*in1->
m[2][3] + in1->
m[1][3]*in1->
m[2][0]*in1->
m[3][1] - in1->
m[1][3]*in1->
m[3][0]*in1->
m[2][1];
271 temp.
m[2][1] = -in1->
m[0][0]*in1->
m[2][1]*in1->
m[3][3] + in1->
m[0][0]*in1->
m[3][1]*in1->
m[2][3] + in1->
m[0][1]*in1->
m[2][0]*in1->
m[3][3] - in1->
m[0][1]*in1->
m[3][0]*in1->
m[2][3] - in1->
m[0][3]*in1->
m[2][0]*in1->
m[3][1] + in1->
m[0][3]*in1->
m[3][0]*in1->
m[2][1];
272 temp.
m[2][2] = in1->
m[0][0]*in1->
m[1][1]*in1->
m[3][3] - in1->
m[0][0]*in1->
m[3][1]*in1->
m[1][3] - in1->
m[0][1]*in1->
m[1][0]*in1->
m[3][3] + in1->
m[0][1]*in1->
m[3][0]*in1->
m[1][3] + in1->
m[0][3]*in1->
m[1][0]*in1->
m[3][1] - in1->
m[0][3]*in1->
m[3][0]*in1->
m[1][1];
273 temp.
m[2][3] = -in1->
m[0][0]*in1->
m[1][1]*in1->
m[2][3] + in1->
m[0][0]*in1->
m[2][1]*in1->
m[1][3] + in1->
m[0][1]*in1->
m[1][0]*in1->
m[2][3] - in1->
m[0][1]*in1->
m[2][0]*in1->
m[1][3] - in1->
m[0][3]*in1->
m[1][0]*in1->
m[2][1] + in1->
m[0][3]*in1->
m[2][0]*in1->
m[1][1];
274 temp.
m[3][0] = -in1->
m[1][0]*in1->
m[2][1]*in1->
m[3][2] + in1->
m[1][0]*in1->
m[3][1]*in1->
m[2][2] + in1->
m[1][1]*in1->
m[2][0]*in1->
m[3][2] - in1->
m[1][1]*in1->
m[3][0]*in1->
m[2][2] - in1->
m[1][2]*in1->
m[2][0]*in1->
m[3][1] + in1->
m[1][2]*in1->
m[3][0]*in1->
m[2][1];
275 temp.
m[3][1] = in1->
m[0][0]*in1->
m[2][1]*in1->
m[3][2] - in1->
m[0][0]*in1->
m[3][1]*in1->
m[2][2] - in1->
m[0][1]*in1->
m[2][0]*in1->
m[3][2] + in1->
m[0][1]*in1->
m[3][0]*in1->
m[2][2] + in1->
m[0][2]*in1->
m[2][0]*in1->
m[3][1] - in1->
m[0][2]*in1->
m[3][0]*in1->
m[2][1];
276 temp.
m[3][2] = -in1->
m[0][0]*in1->
m[1][1]*in1->
m[3][2] + in1->
m[0][0]*in1->
m[3][1]*in1->
m[1][2] + in1->
m[0][1]*in1->
m[1][0]*in1->
m[3][2] - in1->
m[0][1]*in1->
m[3][0]*in1->
m[1][2] - in1->
m[0][2]*in1->
m[1][0]*in1->
m[3][1] + in1->
m[0][2]*in1->
m[3][0]*in1->
m[1][1];
277 temp.
m[3][3] = in1->
m[0][0]*in1->
m[1][1]*in1->
m[2][2] - in1->
m[0][0]*in1->
m[2][1]*in1->
m[1][2] - in1->
m[0][1]*in1->
m[1][0]*in1->
m[2][2] + in1->
m[0][1]*in1->
m[2][0]*in1->
m[1][2] + in1->
m[0][2]*in1->
m[1][0]*in1->
m[2][1] - in1->
m[0][2]*in1->
m[2][0]*in1->
m[1][1];
280 det = in1->
m[0][0]*temp.
m[0][0] + in1->
m[1][0]*temp.
m[0][1] + in1->
m[2][0]*temp.
m[0][2] + in1->
m[3][0]*temp.
m[0][3];
286 for (i = 0;i < 4;i++)
287 for (j = 0;j < 4;j++)
288 out->
m[i][j] = temp.
m[i][j] * det;
306 #ifdef MATRIX4x4_OPENGLORIENTATION
307 r[0][0] = in1->
m[0][0]; r[0][1] = in1->
m[1][0]; r[0][2] = in1->
m[2][0]; r[0][3] = in1->
m[3][0];
308 r[0][4] = 1.0; r[0][5] = r[0][6] = r[0][7] = 0.0;
310 r[1][0] = in1->
m[0][1]; r[1][1] = in1->
m[1][1]; r[1][2] = in1->
m[2][1]; r[1][3] = in1->
m[3][1];
311 r[1][5] = 1.0; r[1][4] = r[1][6] = r[1][7] = 0.0;
313 r[2][0] = in1->
m[0][2]; r[2][1] = in1->
m[1][2]; r[2][2] = in1->
m[2][2]; r[2][3] = in1->
m[3][2];
314 r[2][6] = 1.0; r[2][4] = r[2][5] = r[2][7] = 0.0;
316 r[3][0] = in1->
m[0][3]; r[3][1] = in1->
m[1][3]; r[3][2] = in1->
m[2][3]; r[3][3] = in1->
m[3][3];
317 r[3][7] = 1.0; r[3][4] = r[3][5] = r[3][6] = 0.0;
319 r[0][0] = in1->
m[0][0]; r[0][1] = in1->
m[0][1]; r[0][2] = in1->
m[0][2]; r[0][3] = in1->
m[0][3];
320 r[0][4] = 1.0; r[0][5] = r[0][6] = r[0][7] = 0.0;
322 r[1][0] = in1->
m[1][0]; r[1][1] = in1->
m[1][1]; r[1][2] = in1->
m[1][2]; r[1][3] = in1->
m[1][3];
323 r[1][5] = 1.0; r[1][4] = r[1][6] = r[1][7] = 0.0;
325 r[2][0] = in1->
m[2][0]; r[2][1] = in1->
m[2][1]; r[2][2] = in1->
m[2][2]; r[2][3] = in1->
m[2][3];
326 r[2][6] = 1.0; r[2][4] = r[2][5] = r[2][7] = 0.0;
328 r[3][0] = in1->
m[3][0]; r[3][1] = in1->
m[3][1]; r[3][2] = in1->
m[3][2]; r[3][3] = in1->
m[3][3];
329 r[3][7] = 1.0; r[3][4] = r[3][5] = r[3][6] = 0.0;
332 if (fabs (r[3][0]) > fabs (r[2][0])) {temp = r[3]; r[3] = r[2]; r[2] = temp;}
333 if (fabs (r[2][0]) > fabs (r[1][0])) {temp = r[2]; r[2] = r[1]; r[1] = temp;}
334 if (fabs (r[1][0]) > fabs (r[0][0])) {temp = r[1]; r[1] = r[0]; r[0] = temp;}
338 m[1] = r[1][0] / r[0][0];
339 m[2] = r[2][0] / r[0][0];
340 m[3] = r[3][0] / r[0][0];
342 s = r[0][1]; r[1][1] -= m[1] * s; r[2][1] -= m[2] * s; r[3][1] -= m[3] * s;
343 s = r[0][2]; r[1][2] -= m[1] * s; r[2][2] -= m[2] * s; r[3][2] -= m[3] * s;
344 s = r[0][3]; r[1][3] -= m[1] * s; r[2][3] -= m[2] * s; r[3][3] -= m[3] * s;
346 s = r[0][4];
if (s) {r[1][4] -= m[1] * s; r[2][4] -= m[2] * s; r[3][4] -= m[3] * s;}
347 s = r[0][5];
if (s) {r[1][5] -= m[1] * s; r[2][5] -= m[2] * s; r[3][5] -= m[3] * s;}
348 s = r[0][6];
if (s) {r[1][6] -= m[1] * s; r[2][6] -= m[2] * s; r[3][6] -= m[3] * s;}
349 s = r[0][7];
if (s) {r[1][7] -= m[1] * s; r[2][7] -= m[2] * s; r[3][7] -= m[3] * s;}
351 if (fabs (r[3][1]) > fabs (r[2][1])) {temp = r[3]; r[3] = r[2]; r[2] = temp;}
352 if (fabs (r[2][1]) > fabs (r[1][1])) {temp = r[2]; r[2] = r[1]; r[1] = temp;}
356 m[2] = r[2][1] / r[1][1];
357 m[3] = r[3][1] / r[1][1];
358 r[2][2] -= m[2] * r[1][2];
359 r[3][2] -= m[3] * r[1][2];
360 r[2][3] -= m[2] * r[1][3];
361 r[3][3] -= m[3] * r[1][3];
363 s = r[1][4];
if (s) {r[2][4] -= m[2] * s; r[3][4] -= m[3] * s;}
364 s = r[1][5];
if (s) {r[2][5] -= m[2] * s; r[3][5] -= m[3] * s;}
365 s = r[1][6];
if (s) {r[2][6] -= m[2] * s; r[3][6] -= m[3] * s;}
366 s = r[1][7];
if (s) {r[2][7] -= m[2] * s; r[3][7] -= m[3] * s;}
368 if (fabs (r[3][2]) > fabs (r[2][2])) {temp = r[3]; r[3] = r[2]; r[2] = temp;}
372 m[3] = r[3][2] / r[2][2];
373 r[3][3] -= m[3] * r[2][3];
374 r[3][4] -= m[3] * r[2][4];
375 r[3][5] -= m[3] * r[2][5];
376 r[3][6] -= m[3] * r[2][6];
377 r[3][7] -= m[3] * r[2][7];
389 r[2][4] = s * (r[2][4] - r[3][4] * m[2]);
390 r[2][5] = s * (r[2][5] - r[3][5] * m[2]);
391 r[2][6] = s * (r[2][6] - r[3][6] * m[2]);
392 r[2][7] = s * (r[2][7] - r[3][7] * m[2]);
395 r[1][4] -= r[3][4] * m[1], r[1][5] -= r[3][5] * m[1];
396 r[1][6] -= r[3][6] * m[1], r[1][7] -= r[3][7] * m[1];
399 r[0][4] -= r[3][4] * m[0], r[0][5] -= r[3][5] * m[0];
400 r[0][6] -= r[3][6] * m[0], r[0][7] -= r[3][7] * m[0];
404 r[1][4] = s * (r[1][4] - r[2][4] * m[1]), r[1][5] = s * (r[1][5] - r[2][5] * m[1]);
405 r[1][6] = s * (r[1][6] - r[2][6] * m[1]), r[1][7] = s * (r[1][7] - r[2][7] * m[1]);
408 r[0][4] -= r[2][4] * m[0], r[0][5] -= r[2][5] * m[0];
409 r[0][6] -= r[2][6] * m[0], r[0][7] -= r[2][7] * m[0];
413 r[0][4] = s * (r[0][4] - r[1][4] * m[0]), r[0][5] = s * (r[0][5] - r[1][5] * m[0]);
414 r[0][6] = s * (r[0][6] - r[1][6] * m[0]), r[0][7] = s * (r[0][7] - r[1][7] * m[0]);
416 #ifdef MATRIX4x4_OPENGLORIENTATION
417 out->
m[0][0] = r[0][4];
418 out->
m[0][1] = r[1][4];
419 out->
m[0][2] = r[2][4];
420 out->
m[0][3] = r[3][4];
421 out->
m[1][0] = r[0][5];
422 out->
m[1][1] = r[1][5];
423 out->
m[1][2] = r[2][5];
424 out->
m[1][3] = r[3][5];
425 out->
m[2][0] = r[0][6];
426 out->
m[2][1] = r[1][6];
427 out->
m[2][2] = r[2][6];
428 out->
m[2][3] = r[3][6];
429 out->
m[3][0] = r[0][7];
430 out->
m[3][1] = r[1][7];
431 out->
m[3][2] = r[2][7];
432 out->
m[3][3] = r[3][7];
434 out->
m[0][0] = r[0][4];
435 out->
m[0][1] = r[0][5];
436 out->
m[0][2] = r[0][6];
437 out->
m[0][3] = r[0][7];
438 out->
m[1][0] = r[1][4];
439 out->
m[1][1] = r[1][5];
440 out->
m[1][2] = r[1][6];
441 out->
m[1][3] = r[1][7];
442 out->
m[2][0] = r[2][4];
443 out->
m[2][1] = r[2][5];
444 out->
m[2][2] = r[2][6];
445 out->
m[2][3] = r[2][7];
446 out->
m[3][0] = r[3][4];
447 out->
m[3][1] = r[3][5];
448 out->
m[3][2] = r[3][6];
449 out->
m[3][3] = r[3][7];
469 double scale = 1.0 / (in1->
m[0][0] * in1->
m[0][0] + in1->
m[0][1] * in1->
m[0][1] + in1->
m[0][2] * in1->
m[0][2]);
471 double scale = 3.0 / sqrt
472 (in1->
m[0][0] * in1->
m[0][0] + in1->
m[0][1] * in1->
m[0][1] + in1->
m[0][2] * in1->
m[0][2]
473 + in1->
m[1][0] * in1->
m[1][0] + in1->
m[1][1] * in1->
m[1][1] + in1->
m[1][2] * in1->
m[1][2]
474 + in1->
m[2][0] * in1->
m[2][0] + in1->
m[2][1] * in1->
m[2][1] + in1->
m[2][2] * in1->
m[2][2]);
480 out->
m[0][0] = in1->
m[0][0] *
scale;
481 out->
m[0][1] = in1->
m[1][0] *
scale;
482 out->
m[0][2] = in1->
m[2][0] *
scale;
483 out->
m[1][0] = in1->
m[0][1] *
scale;
484 out->
m[1][1] = in1->
m[1][1] *
scale;
485 out->
m[1][2] = in1->
m[2][1] *
scale;
486 out->
m[2][0] = in1->
m[0][2] *
scale;
487 out->
m[2][1] = in1->
m[1][2] *
scale;
488 out->
m[2][2] = in1->
m[2][2] *
scale;
490 #ifdef MATRIX4x4_OPENGLORIENTATION
492 out->
m[3][0] = -(in1->
m[3][0] * out->
m[0][0] + in1->
m[3][1] * out->
m[1][0] + in1->
m[3][2] * out->
m[2][0]);
493 out->
m[3][1] = -(in1->
m[3][0] * out->
m[0][1] + in1->
m[3][1] * out->
m[1][1] + in1->
m[3][2] * out->
m[2][1]);
494 out->
m[3][2] = -(in1->
m[3][0] * out->
m[0][2] + in1->
m[3][1] * out->
m[1][2] + in1->
m[3][2] * out->
m[2][2]);
503 out->
m[0][3] = -(in1->
m[0][3] * out->
m[0][0] + in1->
m[1][3] * out->
m[0][1] + in1->
m[2][3] * out->
m[0][2]);
504 out->
m[1][3] = -(in1->
m[0][3] * out->
m[1][0] + in1->
m[1][3] * out->
m[1][1] + in1->
m[2][3] * out->
m[1][2]);
505 out->
m[2][3] = -(in1->
m[0][3] * out->
m[2][0] + in1->
m[1][3] * out->
m[2][1] + in1->
m[2][3] * out->
m[2][2]);
517 for (
int i = 0; i < 4; i++)
518 for (
int j = 0; j < 4; j++)
519 out->
m[i][j] = in1->
m[i][j] + frac * (in2->
m[i][j] - in1->
m[i][j]);
524 for (
int i = 0; i < 4; i++)
525 for (
int j = 0; j < 4; j++)
531 for (
int i = 0; i < 4; i++)
532 for (
int j = 0; j < 4; j++)
533 out->
m[i][j] += in->
m[i][j] * weight;
540 double scale = 1.0 / sqrt(in1->
m[0][0] * in1->
m[0][0] + in1->
m[0][1] * in1->
m[0][1] + in1->
m[0][2] * in1->
m[0][2]);
550 for (
int i = 0; i < 3; i++) {
552 #ifdef MATRIX4x4_OPENGLORIENTATION
553 scale = sqrt(in1->
m[i][0] * in1->
m[i][0] + in1->
m[i][1] * in1->
m[i][1] + in1->
m[i][2] * in1->
m[i][2]);
560 scale = sqrt(in1->
m[0][i] * in1->
m[0][i] + in1->
m[1][i] * in1->
m[1][i] + in1->
m[2][i] * in1->
m[2][i]);
577 p2[0] = p[0] * axisscale;
578 p2[1] = p[1] * axisscale;
579 p2[2] = p[2] * axisscale;
581 for (
int i = 0; i < 4; i++) {
583 #ifdef MATRIX4x4_OPENGLORIENTATION
584 d = out->
m[
i][0] * p[0] + out->
m[
i][1] * p[1] + out->
m[
i][2] * p[2] + out->
m[
i][3] * p[3];
585 out->
m[
i][0] += p2[0] * d;
586 out->
m[
i][1] += p2[1] * d;
587 out->
m[
i][2] += p2[2] * d;
589 d = out->
m[0][
i] * p[0] + out->
m[1][
i] * p[1] + out->
m[2][
i] * p[2] + out->
m[3][
i] * p[3];
590 out->
m[0][
i] += p2[0] * d;
591 out->
m[1][
i] += p2[1] * d;
592 out->
m[2][
i] += p2[2] * d;
619 #ifdef MATRIX4x4_OPENGLORIENTATION
660 len = x * x + y * y + z * z;
662 len = 1.0f / sqrt(len);
671 #ifdef MATRIX4x4_OPENGLORIENTATION
672 out->
m[0][0]=x * x + c * (1 - x * x);
673 out->
m[1][0]=x * y * (1 - c) + z * s;
674 out->
m[2][0]=z * x * (1 - c) - y * s;
676 out->
m[0][1]=x * y * (1 - c) - z * s;
677 out->
m[1][1]=y * y + c * (1 - y * y);
678 out->
m[2][1]=y * z * (1 - c) + x * s;
680 out->
m[0][2]=z * x * (1 - c) + y * s;
681 out->
m[1][2]=y * z * (1 - c) - x * s;
682 out->
m[2][2]=z * z + c * (1 - z * z);
689 out->
m[0][0] = x * x + c * (1 - x * x);
690 out->
m[0][1] = x * y * (1 - c) + z * s;
691 out->
m[0][2] = z * x * (1 - c) - y * s;
693 out->
m[1][0] = x * y * (1 - c) - z * s;
694 out->
m[1][1] = y * y + c * (1 - y * y);
695 out->
m[1][2] = y * z * (1 - c) + x * s;
697 out->
m[2][0] = z * x * (1 - c) + y * s;
698 out->
m[2][1] = y * z * (1 - c) - x * s;
699 out->
m[2][2] = z * z + c * (1 - z * z);
749 double roll,
double scale)
753 double sr, cr, sp, cp;
754 double angle = yaw *
torad;
755 double sy = sin(angle);
756 double cy = cos(angle);
757 angle = pitch *
torad;
760 angle = roll *
torad;
763 #ifdef MATRIX4x4_OPENGLORIENTATION
764 out->
m[0][0] = (cp*cy) * scale;
765 out->
m[1][0] = (sr*sp*cy+cr*-sy) * scale;
766 out->
m[2][0] = (cr*sp*cy+-sr*-sy) * scale;
768 out->
m[0][1] = (cp*sy) * scale;
769 out->
m[1][1] = (sr*sp*sy+cr*cy) * scale;
770 out->
m[2][1] = (cr*sp*sy+-sr*cy) * scale;
772 out->
m[0][2] = (-sp) * scale;
773 out->
m[1][2] = (sr*cp) * scale;
774 out->
m[2][2] = (cr*cp) * scale;
781 out->
m[0][0] = (cp * cy) * scale;
782 out->
m[0][1] = (sr * sp * cy + cr * -sy) * scale;
783 out->
m[0][2] = (cr * sp * cy + -sr * -sy) * scale;
785 out->
m[1][0] = (cp * sy) * scale;
786 out->
m[1][1] = (sr * sp * sy + cr * cy) * scale;
787 out->
m[1][2] = (cr * sp * sy + -sr * cy) * scale;
789 out->
m[2][0] = (-sp) * scale;
790 out->
m[2][1] = (sr * cp) * scale;
791 out->
m[2][2] = (cr * cp) * scale;
800 double angle = yaw *
torad;
801 double sy = sin(angle);
802 double cy = cos(angle);
803 angle = pitch *
torad;
806 #ifdef MATRIX4x4_OPENGLORIENTATION
807 out->
m[0][0] = (cp*cy) * scale;
808 out->
m[1][0] = (-sy) * scale;
809 out->
m[2][0] = (sp*cy) * scale;
811 out->
m[0][1] = (cp*sy) * scale;
812 out->
m[1][1] = (cy) * scale;
813 out->
m[2][1] = (sp*sy) * scale;
815 out->
m[0][2] = (-sp) * scale;
817 out->
m[2][2] = (cp) * scale;
824 out->
m[0][0] = (cp * cy) * scale;
825 out->
m[0][1] = (-sy) * scale;
826 out->
m[0][2] = (sp * cy) * scale;
828 out->
m[1][0] = (cp * sy) * scale;
829 out->
m[1][1] = (cy) * scale;
830 out->
m[1][2] = (sp * sy) * scale;
832 out->
m[2][0] = (-sp) * scale;
834 out->
m[2][2] = (cp) * scale;
842 const double angle = yaw *
torad;
843 const double sy = sin(angle);
844 const double cy = cos(angle);
845 #ifdef MATRIX4x4_OPENGLORIENTATION
846 out->
m[0][0] = (cy) * scale;
847 out->
m[1][0] = (-sy) * scale;
850 out->
m[0][1] = (sy) * scale;
851 out->
m[1][1] = (cy) * scale;
863 out->
m[0][0] = (cy) * scale;
864 out->
m[0][1] = (-sy) * scale;
867 out->
m[1][0] = (sy) * scale;
868 out->
m[1][1] = (cy) * scale;
881 #ifdef MATRIX4x4_OPENGLORIENTATION
921 #ifdef MATRIX4x4_OPENGLORIENTATION
952 #ifdef MATRIX4x4_OPENGLORIENTATION
953 out->
m[0][0] = vx[0];
954 out->
m[1][0] = vy[0];
955 out->
m[2][0] = vz[0];
957 out->
m[0][1] = vx[1];
958 out->
m[1][1] = vy[1];
959 out->
m[2][1] = vz[1];
961 out->
m[0][2] = vx[2];
962 out->
m[1][2] = vy[2];
963 out->
m[2][2] = vz[2];
970 out->
m[0][0] = vx[0];
971 out->
m[0][1] = vy[0];
972 out->
m[0][2] = vz[0];
974 out->
m[1][0] = vx[1];
975 out->
m[1][1] = vy[1];
976 out->
m[1][2] = vz[1];
978 out->
m[2][0] = vx[2];
979 out->
m[2][1] = vy[2];
980 out->
m[2][2] = vz[2];
991 #ifdef MATRIX4x4_OPENGLORIENTATION
992 out[ 0] = in->
m[0][0];
993 out[ 1] = in->
m[0][1];
994 out[ 2] = in->
m[0][2];
995 out[ 3] = in->
m[0][3];
996 out[ 4] = in->
m[1][0];
997 out[ 5] = in->
m[1][1];
998 out[ 6] = in->
m[1][2];
999 out[ 7] = in->
m[1][3];
1000 out[ 8] = in->
m[2][0];
1001 out[ 9] = in->
m[2][1];
1002 out[10] = in->
m[2][2];
1003 out[11] = in->
m[2][3];
1004 out[12] = in->
m[3][0];
1005 out[13] = in->
m[3][1];
1006 out[14] = in->
m[3][2];
1007 out[15] = in->
m[3][3];
1009 out[0] = in->
m[0][0];
1010 out[1] = in->
m[1][0];
1011 out[2] = in->
m[2][0];
1012 out[3] = in->
m[3][0];
1013 out[4] = in->
m[0][1];
1014 out[5] = in->
m[1][1];
1015 out[6] = in->
m[2][1];
1016 out[7] = in->
m[3][1];
1017 out[8] = in->
m[0][2];
1018 out[9] = in->
m[1][2];
1019 out[10] = in->
m[2][2];
1020 out[11] = in->
m[3][2];
1021 out[12] = in->
m[0][3];
1022 out[13] = in->
m[1][3];
1023 out[14] = in->
m[2][3];
1024 out[15] = in->
m[3][3];
1030 #ifdef MATRIX4x4_OPENGLORIENTATION
1031 out->
m[0][0] = in[0];
1032 out->
m[0][1] = in[1];
1033 out->
m[0][2] = in[2];
1034 out->
m[0][3] = in[3];
1035 out->
m[1][0] = in[4];
1036 out->
m[1][1] = in[5];
1037 out->
m[1][2] = in[6];
1038 out->
m[1][3] = in[7];
1039 out->
m[2][0] = in[8];
1040 out->
m[2][1] = in[9];
1041 out->
m[2][2] = in[10];
1042 out->
m[2][3] = in[11];
1043 out->
m[3][0] = in[12];
1044 out->
m[3][1] = in[13];
1045 out->
m[3][2] = in[14];
1046 out->
m[3][3] = in[15];
1048 out->
m[0][0] = in[0];
1049 out->
m[1][0] = in[1];
1050 out->
m[2][0] = in[2];
1051 out->
m[3][0] = in[3];
1052 out->
m[0][1] = in[4];
1053 out->
m[1][1] = in[5];
1054 out->
m[2][1] = in[6];
1055 out->
m[3][1] = in[7];
1056 out->
m[0][2] = in[8];
1057 out->
m[1][2] = in[9];
1058 out->
m[2][2] = in[10];
1059 out->
m[3][2] = in[11];
1060 out->
m[0][3] = in[12];
1061 out->
m[1][3] = in[13];
1062 out->
m[2][3] = in[14];
1063 out->
m[3][3] = in[15];
1069 #ifdef MATRIX4x4_OPENGLORIENTATION
1070 out[ 0] = in->
m[0][0];
1071 out[ 1] = in->
m[1][0];
1072 out[ 2] = in->
m[2][0];
1073 out[ 3] = in->
m[3][0];
1074 out[ 4] = in->
m[0][1];
1075 out[ 5] = in->
m[1][1];
1076 out[ 6] = in->
m[2][1];
1077 out[ 7] = in->
m[3][1];
1078 out[ 8] = in->
m[0][2];
1079 out[ 9] = in->
m[1][2];
1080 out[10] = in->
m[2][2];
1081 out[11] = in->
m[3][2];
1082 out[12] = in->
m[0][3];
1083 out[13] = in->
m[1][3];
1084 out[14] = in->
m[2][3];
1085 out[15] = in->
m[3][3];
1087 out[0] = in->
m[0][0];
1088 out[1] = in->
m[0][1];
1089 out[2] = in->
m[0][2];
1090 out[3] = in->
m[0][3];
1091 out[4] = in->
m[1][0];
1092 out[5] = in->
m[1][1];
1093 out[6] = in->
m[1][2];
1094 out[7] = in->
m[1][3];
1095 out[8] = in->
m[2][0];
1096 out[9] = in->
m[2][1];
1097 out[10] = in->
m[2][2];
1098 out[11] = in->
m[2][3];
1099 out[12] = in->
m[3][0];
1100 out[13] = in->
m[3][1];
1101 out[14] = in->
m[3][2];
1102 out[15] = in->
m[3][3];
1108 #ifdef MATRIX4x4_OPENGLORIENTATION
1109 out->
m[0][0] = in[0];
1110 out->
m[1][0] = in[1];
1111 out->
m[2][0] = in[2];
1112 out->
m[3][0] = in[3];
1113 out->
m[0][1] = in[4];
1114 out->
m[1][1] = in[5];
1115 out->
m[2][1] = in[6];
1116 out->
m[3][1] = in[7];
1117 out->
m[0][2] = in[8];
1118 out->
m[1][2] = in[9];
1119 out->
m[2][2] = in[10];
1120 out->
m[3][2] = in[11];
1121 out->
m[0][3] = in[12];
1122 out->
m[1][3] = in[13];
1123 out->
m[2][3] = in[14];
1124 out->
m[3][3] = in[15];
1126 out->
m[0][0] = in[0];
1127 out->
m[0][1] = in[1];
1128 out->
m[0][2] = in[2];
1129 out->
m[0][3] = in[3];
1130 out->
m[1][0] = in[4];
1131 out->
m[1][1] = in[5];
1132 out->
m[1][2] = in[6];
1133 out->
m[1][3] = in[7];
1134 out->
m[2][0] = in[8];
1135 out->
m[2][1] = in[9];
1136 out->
m[2][2] = in[10];
1137 out->
m[2][3] = in[11];
1138 out->
m[3][0] = in[12];
1139 out->
m[3][1] = in[13];
1140 out->
m[3][2] = in[14];
1141 out->
m[3][3] = in[15];
1147 #ifdef MATRIX4x4_OPENGLORIENTATION
1148 out[ 0] = in->
m[0][0];
1149 out[ 1] = in->
m[0][1];
1150 out[ 2] = in->
m[0][2];
1151 out[ 3] = in->
m[0][3];
1152 out[ 4] = in->
m[1][0];
1153 out[ 5] = in->
m[1][1];
1154 out[ 6] = in->
m[1][2];
1155 out[ 7] = in->
m[1][3];
1156 out[ 8] = in->
m[2][0];
1157 out[ 9] = in->
m[2][1];
1158 out[10] = in->
m[2][2];
1159 out[11] = in->
m[2][3];
1160 out[12] = in->
m[3][0];
1161 out[13] = in->
m[3][1];
1162 out[14] = in->
m[3][2];
1163 out[15] = in->
m[3][3];
1165 out[0] = in->
m[0][0];
1166 out[1] = in->
m[1][0];
1167 out[2] = in->
m[2][0];
1168 out[3] = in->
m[3][0];
1169 out[4] = in->
m[0][1];
1170 out[5] = in->
m[1][1];
1171 out[6] = in->
m[2][1];
1172 out[7] = in->
m[3][1];
1173 out[8] = in->
m[0][2];
1174 out[9] = in->
m[1][2];
1175 out[10] = in->
m[2][2];
1176 out[11] = in->
m[3][2];
1177 out[12] = in->
m[0][3];
1178 out[13] = in->
m[1][3];
1179 out[14] = in->
m[2][3];
1180 out[15] = in->
m[3][3];
1186 #ifdef MATRIX4x4_OPENGLORIENTATION
1187 out->
m[0][0] = in[0];
1188 out->
m[0][1] = in[1];
1189 out->
m[0][2] = in[2];
1190 out->
m[0][3] = in[3];
1191 out->
m[1][0] = in[4];
1192 out->
m[1][1] = in[5];
1193 out->
m[1][2] = in[6];
1194 out->
m[1][3] = in[7];
1195 out->
m[2][0] = in[8];
1196 out->
m[2][1] = in[9];
1197 out->
m[2][2] = in[10];
1198 out->
m[2][3] = in[11];
1199 out->
m[3][0] = in[12];
1200 out->
m[3][1] = in[13];
1201 out->
m[3][2] = in[14];
1202 out->
m[3][3] = in[15];
1204 out->
m[0][0] = in[0];
1205 out->
m[1][0] = in[1];
1206 out->
m[2][0] = in[2];
1207 out->
m[3][0] = in[3];
1208 out->
m[0][1] = in[4];
1209 out->
m[1][1] = in[5];
1210 out->
m[2][1] = in[6];
1211 out->
m[3][1] = in[7];
1212 out->
m[0][2] = in[8];
1213 out->
m[1][2] = in[9];
1214 out->
m[2][2] = in[10];
1215 out->
m[3][2] = in[11];
1216 out->
m[0][3] = in[12];
1217 out->
m[1][3] = in[13];
1218 out->
m[2][3] = in[14];
1219 out->
m[3][3] = in[15];
1225 #ifdef MATRIX4x4_OPENGLORIENTATION
1226 out[ 0] = in->
m[0][0];
1227 out[ 1] = in->
m[1][0];
1228 out[ 2] = in->
m[2][0];
1229 out[ 3] = in->
m[3][0];
1230 out[ 4] = in->
m[0][1];
1231 out[ 5] = in->
m[1][1];
1232 out[ 6] = in->
m[2][1];
1233 out[ 7] = in->
m[3][1];
1234 out[ 8] = in->
m[0][2];
1235 out[ 9] = in->
m[1][2];
1236 out[10] = in->
m[2][2];
1237 out[11] = in->
m[3][2];
1238 out[12] = in->
m[0][3];
1239 out[13] = in->
m[1][3];
1240 out[14] = in->
m[2][3];
1241 out[15] = in->
m[3][3];
1243 out[0] = in->
m[0][0];
1244 out[1] = in->
m[0][1];
1245 out[2] = in->
m[0][2];
1246 out[3] = in->
m[0][3];
1247 out[4] = in->
m[1][0];
1248 out[5] = in->
m[1][1];
1249 out[6] = in->
m[1][2];
1250 out[7] = in->
m[1][3];
1251 out[8] = in->
m[2][0];
1252 out[9] = in->
m[2][1];
1253 out[10] = in->
m[2][2];
1254 out[11] = in->
m[2][3];
1255 out[12] = in->
m[3][0];
1256 out[13] = in->
m[3][1];
1257 out[14] = in->
m[3][2];
1258 out[15] = in->
m[3][3];
1264 #ifdef MATRIX4x4_OPENGLORIENTATION
1265 out->
m[0][0] = in[0];
1266 out->
m[1][0] = in[1];
1267 out->
m[2][0] = in[2];
1268 out->
m[3][0] = in[3];
1269 out->
m[0][1] = in[4];
1270 out->
m[1][1] = in[5];
1271 out->
m[2][1] = in[6];
1272 out->
m[3][1] = in[7];
1273 out->
m[0][2] = in[8];
1274 out->
m[1][2] = in[9];
1275 out->
m[2][2] = in[10];
1276 out->
m[3][2] = in[11];
1277 out->
m[0][3] = in[12];
1278 out->
m[1][3] = in[13];
1279 out->
m[2][3] = in[14];
1280 out->
m[3][3] = in[15];
1282 out->
m[0][0] = in[0];
1283 out->
m[0][1] = in[1];
1284 out->
m[0][2] = in[2];
1285 out->
m[0][3] = in[3];
1286 out->
m[1][0] = in[4];
1287 out->
m[1][1] = in[5];
1288 out->
m[1][2] = in[6];
1289 out->
m[1][3] = in[7];
1290 out->
m[2][0] = in[8];
1291 out->
m[2][1] = in[9];
1292 out->
m[2][2] = in[10];
1293 out->
m[2][3] = in[11];
1294 out->
m[3][0] = in[12];
1295 out->
m[3][1] = in[13];
1296 out->
m[3][2] = in[14];
1297 out->
m[3][3] = in[15];
1303 #ifdef MATRIX4x4_OPENGLORIENTATION
1304 out[ 0] = in->
m[0][0];
1305 out[ 1] = in->
m[0][1];
1306 out[ 2] = in->
m[0][2];
1307 out[ 3] = in->
m[1][0];
1308 out[ 4] = in->
m[1][1];
1309 out[ 5] = in->
m[1][2];
1310 out[ 6] = in->
m[2][0];
1311 out[ 7] = in->
m[2][1];
1312 out[ 8] = in->
m[2][2];
1313 out[ 9] = in->
m[3][0];
1314 out[10] = in->
m[3][1];
1315 out[11] = in->
m[3][2];
1317 out[0] = in->
m[0][0];
1318 out[1] = in->
m[1][0];
1319 out[2] = in->
m[2][0];
1320 out[3] = in->
m[0][1];
1321 out[4] = in->
m[1][1];
1322 out[5] = in->
m[2][1];
1323 out[6] = in->
m[0][2];
1324 out[7] = in->
m[1][2];
1325 out[8] = in->
m[2][2];
1326 out[9] = in->
m[0][3];
1327 out[10] = in->
m[1][3];
1328 out[11] = in->
m[2][3];
1334 #ifdef MATRIX4x4_OPENGLORIENTATION
1335 out->
m[0][0] = in[0];
1336 out->
m[0][1] = in[1];
1337 out->
m[0][2] = in[2];
1339 out->
m[1][0] = in[3];
1340 out->
m[1][1] = in[4];
1341 out->
m[1][2] = in[5];
1343 out->
m[2][0] = in[6];
1344 out->
m[2][1] = in[7];
1345 out->
m[2][2] = in[8];
1347 out->
m[3][0] = in[9];
1348 out->
m[3][1] = in[10];
1349 out->
m[3][2] = in[11];
1352 out->
m[0][0] = in[0];
1353 out->
m[1][0] = in[1];
1354 out->
m[2][0] = in[2];
1356 out->
m[0][1] = in[3];
1357 out->
m[1][1] = in[4];
1358 out->
m[2][1] = in[5];
1360 out->
m[0][2] = in[6];
1361 out->
m[1][2] = in[7];
1362 out->
m[2][2] = in[8];
1364 out->
m[0][3] = in[9];
1365 out->
m[1][3] = in[10];
1366 out->
m[2][3] = in[11];
1373 #ifdef MATRIX4x4_OPENGLORIENTATION
1374 out[ 0] = in->
m[0][0];
1375 out[ 1] = in->
m[1][0];
1376 out[ 2] = in->
m[2][0];
1377 out[ 3] = in->
m[3][0];
1378 out[ 4] = in->
m[0][1];
1379 out[ 5] = in->
m[1][1];
1380 out[ 6] = in->
m[2][1];
1381 out[ 7] = in->
m[3][1];
1382 out[ 8] = in->
m[0][2];
1383 out[ 9] = in->
m[1][2];
1384 out[10] = in->
m[2][2];
1385 out[11] = in->
m[3][2];
1387 out[0] = in->
m[0][0];
1388 out[1] = in->
m[0][1];
1389 out[2] = in->
m[0][2];
1390 out[3] = in->
m[0][3];
1391 out[4] = in->
m[1][0];
1392 out[5] = in->
m[1][1];
1393 out[6] = in->
m[1][2];
1394 out[7] = in->
m[1][3];
1395 out[8] = in->
m[2][0];
1396 out[9] = in->
m[2][1];
1397 out[10] = in->
m[2][2];
1398 out[11] = in->
m[2][3];
1404 #ifdef MATRIX4x4_OPENGLORIENTATION
1405 out->
m[0][0] = in[0];
1406 out->
m[1][0] = in[1];
1407 out->
m[2][0] = in[2];
1408 out->
m[3][0] = in[3];
1409 out->
m[0][1] = in[4];
1410 out->
m[1][1] = in[5];
1411 out->
m[2][1] = in[6];
1412 out->
m[3][1] = in[7];
1413 out->
m[0][2] = in[8];
1414 out->
m[1][2] = in[9];
1415 out->
m[2][2] = in[10];
1416 out->
m[3][2] = in[11];
1422 out->
m[0][0] = in[0];
1423 out->
m[0][1] = in[1];
1424 out->
m[0][2] = in[2];
1425 out->
m[0][3] = in[3];
1426 out->
m[1][0] = in[4];
1427 out->
m[1][1] = in[5];
1428 out->
m[1][2] = in[6];
1429 out->
m[1][3] = in[7];
1430 out->
m[2][0] = in[8];
1431 out->
m[2][1] = in[9];
1432 out->
m[2][2] = in[10];
1433 out->
m[2][3] = in[11];
1443 #ifdef MATRIX4x4_OPENGLORIENTATION
1444 m->
m[0][0]=1-2*(y*y+z*z);m->
m[1][0]= 2*(x*y-z*w);m->
m[2][0]= 2*(x*z+y*w);m->
m[3][0]=ox;
1445 m->
m[0][1]= 2*(x*y+z*w);m->
m[1][1]=1-2*(x*x+z*z);m->
m[2][1]= 2*(y*z-x*w);m->
m[3][1]=oy;
1446 m->
m[0][2]= 2*(x*z-y*w);m->
m[1][2]= 2*(y*z+x*w);m->
m[2][2]=1-2*(x*x+y*y);m->
m[3][2]=oz;
1447 m->
m[0][3]= 0;m->
m[1][3]= 0;m->
m[2][3]= 0;m->
m[3][3]=1;
1449 m->
m[0][0] = 1 - 2 * (y * y + z * z);
1450 m->
m[0][1] = 2 * (x * y - z * w);
1451 m->
m[0][2] = 2 * (x * z + y * w);
1453 m->
m[1][0] = 2 * (x * y + z * w);
1454 m->
m[1][1] = 1 - 2 * (x * x + z * z);
1455 m->
m[1][2] = 2 * (y * z - x * w);
1457 m->
m[2][0] = 2 * (x * z - y * w);
1458 m->
m[2][1] = 2 * (y * z + x * w);
1459 m->
m[2][2] = 1 - 2 * (x * x + y * y);
1474 quat[3] = sqrt(1.0
f + m->
m[0][0] + m->
m[1][1] + m->
m[2][2]) * 0.5f;
1475 s = 0.25f / quat[3];
1476 #ifdef MATRIX4x4_OPENGLORIENTATION
1477 origin[0] = m->
m[3][0];
1478 origin[1] = m->
m[3][1];
1479 origin[2] = m->
m[3][2];
1480 quat[0] = (m->
m[1][2] - m->
m[2][1]) * s;
1481 quat[1] = (m->
m[2][0] - m->
m[0][2]) * s;
1482 quat[2] = (m->
m[0][1] - m->
m[1][0]) * s;
1484 origin[0] = m->
m[0][3];
1485 origin[1] = m->
m[1][3];
1486 origin[2] = m->
m[2][3];
1487 quat[0] = (m->
m[2][1] - m->
m[1][2]) * s;
1488 quat[1] = (m->
m[0][2] - m->
m[2][0]) * s;
1489 quat[2] = (m->
m[1][0] - m->
m[0][1]) * s;
1499 double w = 1.0f - (x * x + y * y + z * z);
1500 w = w > 0.0f ? -sqrt(w) : 0.0f;
1501 #ifdef MATRIX4x4_OPENGLORIENTATION
1502 m->
m[0][0]=1-2*(y*y+z*z);m->
m[1][0]= 2*(x*y-z*w);m->
m[2][0]= 2*(x*z+y*w);m->
m[3][0]=ox;
1503 m->
m[0][1]= 2*(x*y+z*w);m->
m[1][1]=1-2*(x*x+z*z);m->
m[2][1]= 2*(y*z-x*w);m->
m[3][1]=oy;
1504 m->
m[0][2]= 2*(x*z-y*w);m->
m[1][2]= 2*(y*z+x*w);m->
m[2][2]=1-2*(x*x+y*y);m->
m[3][2]=oz;
1505 m->
m[0][3]= 0;m->
m[1][3]= 0;m->
m[2][3]= 0;m->
m[3][3]=1;
1507 m->
m[0][0] = 1 - 2 * (y * y + z * z);
1508 m->
m[0][1] = 2 * (x * y - z * w);
1509 m->
m[0][2] = 2 * (x * z + y * w);
1511 m->
m[1][0] = 2 * (x * y + z * w);
1512 m->
m[1][1] = 1 - 2 * (x * x + z * z);
1513 m->
m[1][2] = 2 * (y * z - x * w);
1515 m->
m[2][0] = 2 * (x * z - y * w);
1516 m->
m[2][1] = 2 * (y * z + x * w);
1517 m->
m[2][2] = 1 - 2 * (x * x + y * y);
1530 origin[0] = pose6s[0] * originscale;
1531 origin[1] = pose6s[1] * originscale;
1532 origin[2] = pose6s[2] * originscale;
1533 quat[0] = pose6s[3] * (1.0f / 32767.0f);
1534 quat[1] = pose6s[4] * (1.0f / 32767.0f);
1535 quat[2] = pose6s[5] * (1.0f / 32767.0f);
1536 quat[3] = 1.0f - (quat[0] * quat[0] + quat[1] * quat[1] + quat[2] * quat[2]);
1537 quat[3] = quat[3] > 0.0f ? -sqrt(quat[3]) : 0.0f;
1548 s = quat[0] * quat[0] + quat[1] * quat[1] + quat[2] * quat[2] + quat[3] * quat[3];
1558 pose6s[0] = origin[0] * origininvscale;
1559 pose6s[1] = origin[1] * origininvscale;
1560 pose6s[2] = origin[2] * origininvscale;
1561 pose6s[3] = quat[0] * -32767.0f;
1562 pose6s[4] = quat[1] * -32767.0f;
1563 pose6s[5] = quat[2] * -32767.0f;
1568 double iblend = 1 - blend;
1569 out->
m[0][0] = in1->
m[0][0] * iblend + in2->
m[0][0] * blend;
1570 out->
m[0][1] = in1->
m[0][1] * iblend + in2->
m[0][1] * blend;
1571 out->
m[0][2] = in1->
m[0][2] * iblend + in2->
m[0][2] * blend;
1572 out->
m[0][3] = in1->
m[0][3] * iblend + in2->
m[0][3] * blend;
1573 out->
m[1][0] = in1->
m[1][0] * iblend + in2->
m[1][0] * blend;
1574 out->
m[1][1] = in1->
m[1][1] * iblend + in2->
m[1][1] * blend;
1575 out->
m[1][2] = in1->
m[1][2] * iblend + in2->
m[1][2] * blend;
1576 out->
m[1][3] = in1->
m[1][3] * iblend + in2->
m[1][3] * blend;
1577 out->
m[2][0] = in1->
m[2][0] * iblend + in2->
m[2][0] * blend;
1578 out->
m[2][1] = in1->
m[2][1] * iblend + in2->
m[2][1] * blend;
1579 out->
m[2][2] = in1->
m[2][2] * iblend + in2->
m[2][2] * blend;
1580 out->
m[2][3] = in1->
m[2][3] * iblend + in2->
m[2][3] * blend;
1581 out->
m[3][0] = in1->
m[3][0] * iblend + in2->
m[3][0] * blend;
1582 out->
m[3][1] = in1->
m[3][1] * iblend + in2->
m[3][1] * blend;
1583 out->
m[3][2] = in1->
m[3][2] * iblend + in2->
m[3][2] * blend;
1584 out->
m[3][3] = in1->
m[3][3] * iblend + in2->
m[3][3] * blend;
1589 #ifdef MATRIX4x4_OPENGLORIENTATION
1590 out[0] = v[0] * in->
m[0][0] + v[1] * in->
m[1][0] + v[2] * in->
m[2][0] + in->
m[3][0];
1591 out[1] = v[0] * in->
m[0][1] + v[1] * in->
m[1][1] + v[2] * in->
m[2][1] + in->
m[3][1];
1592 out[2] = v[0] * in->
m[0][2] + v[1] * in->
m[1][2] + v[2] * in->
m[2][2] + in->
m[3][2];
1594 out[0] = v[0] * in->
m[0][0] + v[1] * in->
m[0][1] + v[2] * in->
m[0][2] + in->
m[0][3];
1595 out[1] = v[0] * in->
m[1][0] + v[1] * in->
m[1][1] + v[2] * in->
m[1][2] + in->
m[1][3];
1596 out[2] = v[0] * in->
m[2][0] + v[1] * in->
m[2][1] + v[2] * in->
m[2][2] + in->
m[2][3];
1602 #ifdef MATRIX4x4_OPENGLORIENTATION
1603 out[0] = v[0] * in->
m[0][0] + v[1] * in->
m[1][0] + v[2] * in->
m[2][0] + v[3] * in->
m[3][0];
1604 out[1] = v[0] * in->
m[0][1] + v[1] * in->
m[1][1] + v[2] * in->
m[2][1] + v[3] * in->
m[3][1];
1605 out[2] = v[0] * in->
m[0][2] + v[1] * in->
m[1][2] + v[2] * in->
m[2][2] + v[3] * in->
m[3][2];
1606 out[3] = v[0] * in->
m[0][3] + v[1] * in->
m[1][3] + v[2] * in->
m[2][3] + v[3] * in->
m[3][3];
1608 out[0] = v[0] * in->
m[0][0] + v[1] * in->
m[0][1] + v[2] * in->
m[0][2] + v[3] * in->
m[0][3];
1609 out[1] = v[0] * in->
m[1][0] + v[1] * in->
m[1][1] + v[2] * in->
m[1][2] + v[3] * in->
m[1][3];
1610 out[2] = v[0] * in->
m[2][0] + v[1] * in->
m[2][1] + v[2] * in->
m[2][2] + v[3] * in->
m[2][3];
1611 out[3] = v[0] * in->
m[3][0] + v[1] * in->
m[3][1] + v[2] * in->
m[3][2] + v[3] * in->
m[3][3];
1617 #ifdef MATRIX4x4_OPENGLORIENTATION
1618 out[0] = v[0] * in->
m[0][0] + v[1] * in->
m[1][0] + v[2] * in->
m[2][0];
1619 out[1] = v[0] * in->
m[0][1] + v[1] * in->
m[1][1] + v[2] * in->
m[2][1];
1620 out[2] = v[0] * in->
m[0][2] + v[1] * in->
m[1][2] + v[2] * in->
m[2][2];
1622 out[0] = v[0] * in->
m[0][0] + v[1] * in->
m[0][1] + v[2] * in->
m[0][2];
1623 out[1] = v[0] * in->
m[1][0] + v[1] * in->
m[1][1] + v[2] * in->
m[1][2];
1624 out[2] = v[0] * in->
m[2][0] + v[1] * in->
m[2][1] + v[2] * in->
m[2][2];
1630 float scale = sqrt(in->
m[0][0] * in->
m[0][0] + in->
m[0][1] * in->
m[0][1] + in->
m[0][2] * in->
m[0][2]);
1631 float iscale = 1.0f /
scale;
1632 #ifdef MATRIX4x4_OPENGLORIENTATION
1633 o[0] = (x * in->
m[0][0] + y * in->
m[1][0] + z * in->
m[2][0]) * iscale;
1634 o[1] = (x * in->
m[0][1] + y * in->
m[1][1] + z * in->
m[2][1]) * iscale;
1635 o[2] = (x * in->
m[0][2] + y * in->
m[1][2] + z * in->
m[2][2]) * iscale;
1636 o[3] = d * scale + (o[0] * in->
m[3][0] + o[1] * in->
m[3][1] + o[2] * in->
m[3][2]);
1638 o[0] = (x * in->
m[0][0] + y * in->
m[0][1] + z * in->
m[0][2]) * iscale;
1639 o[1] = (x * in->
m[1][0] + y * in->
m[1][1] + z * in->
m[1][2]) * iscale;
1640 o[2] = (x * in->
m[2][0] + y * in->
m[2][1] + z * in->
m[2][2]) * iscale;
1641 o[3] = d * scale + (o[0] * in->
m[0][3] + o[1] * in->
m[1][3] + o[2] * in->
m[2][3]);
1647 float scale = sqrt(in->
m[0][0] * in->
m[0][0] + in->
m[0][1] * in->
m[0][1] + in->
m[0][2] * in->
m[0][2]);
1648 float iscale = 1.0f /
scale;
1649 #ifdef MATRIX4x4_OPENGLORIENTATION
1650 o[0] = (x * in->
m[0][0] + y * in->
m[1][0] + z * in->
m[2][0]) * iscale;
1651 o[1] = (x * in->
m[0][1] + y * in->
m[1][1] + z * in->
m[2][1]) * iscale;
1652 o[2] = (x * in->
m[0][2] + y * in->
m[1][2] + z * in->
m[2][2]) * iscale;
1653 o[3] = d * scale - (o[0] * in->
m[3][0] + o[1] * in->
m[3][1] + o[2] * in->
m[3][2]);
1655 o[0] = (x * in->
m[0][0] + y * in->
m[0][1] + z * in->
m[0][2]) * iscale;
1656 o[1] = (x * in->
m[1][0] + y * in->
m[1][1] + z * in->
m[1][2]) * iscale;
1657 o[2] = (x * in->
m[2][0] + y * in->
m[2][1] + z * in->
m[2][2]) * iscale;
1658 o[3] = d * scale - (o[0] * in->
m[0][3] + o[1] * in->
m[1][3] + o[2] * in->
m[2][3]);
1722 #ifdef MATRIX4x4_OPENGLORIENTATION
1723 out[0] = in->
m[3][0];
1724 out[1] = in->
m[3][1];
1725 out[2] = in->
m[3][2];
1727 out[0] = in->
m[0][3];
1728 out[1] = in->
m[1][3];
1729 out[2] = in->
m[2][3];
1736 return sqrt(in->
m[0][0] * in->
m[0][0] + in->
m[0][1] * in->
m[0][1] + in->
m[0][2] * in->
m[0][2]);
1741 #ifdef MATRIX4x4_OPENGLORIENTATION
1754 #ifdef MATRIX4x4_OPENGLORIENTATION
1767 out->
m[0][0] *= rotatescale;
1768 out->
m[0][1] *= rotatescale;
1769 out->
m[0][2] *= rotatescale;
1770 out->
m[1][0] *= rotatescale;
1771 out->
m[1][1] *= rotatescale;
1772 out->
m[1][2] *= rotatescale;
1773 out->
m[2][0] *= rotatescale;
1774 out->
m[2][1] *= rotatescale;
1775 out->
m[2][2] *= rotatescale;
1776 #ifdef MATRIX4x4_OPENGLORIENTATION
1777 out->
m[3][0] *= originscale;
1778 out->
m[3][1] *= originscale;
1779 out->
m[3][2] *= originscale;
1781 out->
m[0][3] *= originscale;
1782 out->
m[1][3] *= originscale;
1783 out->
m[2][3] *= originscale;
1789 out->
m[0][0] = fabs(out->
m[0][0]);
1790 out->
m[0][1] = fabs(out->
m[0][1]);
1791 out->
m[0][2] = fabs(out->
m[0][2]);
1792 out->
m[1][0] = fabs(out->
m[1][0]);
1793 out->
m[1][1] = fabs(out->
m[1][1]);
1794 out->
m[1][2] = fabs(out->
m[1][2]);
1795 out->
m[2][0] = fabs(out->
m[2][0]);
1796 out->
m[2][1] = fabs(out->
m[2][1]);
1797 out->
m[2][2] = fabs(out->
m[2][2]);
void Matrix4x4_FromArrayDoubleGL(matrix4x4_t *out, const double in[16])
void Matrix4x4_ConcatTranslate(matrix4x4_t *out, double x, double y, double z)
void Matrix4x4_ToArrayDoubleGL(const matrix4x4_t *in, double out[16])
void Matrix4x4_Invert_Simple(matrix4x4_t *out, const matrix4x4_t *in1)
void Matrix4x4_Blend(matrix4x4_t *out, const matrix4x4_t *in1, const matrix4x4_t *in2, double blend)
void Matrix4x4_FromVectors(matrix4x4_t *out, const float vx[3], const float vy[3], const float vz[3], const float t[3])
void Matrix4x4_CreateIdentity(matrix4x4_t *out)
double Matrix4x4_ScaleFromMatrix(const matrix4x4_t *in)
void Matrix4x4_ConcatRotate(matrix4x4_t *out, double angle, double x, double y, double z)
static const vec3_t scale
void Matrix4x4_ConcatScale(matrix4x4_t *out, double x)
void Matrix4x4_FromArrayFloatGL(matrix4x4_t *out, const float in[16])
void Matrix4x4_Scale(matrix4x4_t *out, double rotatescale, double originscale)
void Matrix4x4_Transform4(const matrix4x4_t *in, const float v[4], float out[4])
void Matrix4x4_FromArray12FloatGL(matrix4x4_t *out, const float in[12])
void Matrix4x4_FromArray12FloatD3D(matrix4x4_t *out, const float in[12])
void Matrix4x4_Clear(matrix4x4_t *out)
void Matrix4x4_Normalize(matrix4x4_t *out, matrix4x4_t *in1)
void Matrix4x4_FromOriginQuat(matrix4x4_t *m, double ox, double oy, double oz, double x, double y, double z, double w)
local graphics definitions
void Matrix4x4_FromBonePose6s(matrix4x4_t *m, float originscale, const short *pose6s)
const matrix4x4_t identitymatrix
void Matrix4x4_Transform(const matrix4x4_t *in, const float v[3], float out[3])
void Matrix4x4_CreateFromQuakeEntity(matrix4x4_t *out, double x, double y, double z, double pitch, double yaw, double roll, double scale)
void Matrix4x4_ToVectors(const matrix4x4_t *in, float vx[3], float vy[3], float vz[3], float t[3])
void Matrix4x4_CreateScale3(matrix4x4_t *out, double x, double y, double z)
void Matrix4x4_ToBonePose6s(const matrix4x4_t *m, float origininvscale, short *pose6s)
void Matrix4x4_TransformStandardPlane(const matrix4x4_t *in, float x, float y, float z, float d, float *o)
void Matrix4x4_CopyRotateOnly(matrix4x4_t *out, const matrix4x4_t *in)
void Matrix4x4_FromDoom3Joint(matrix4x4_t *m, double ox, double oy, double oz, double x, double y, double z)
void Matrix4x4_ConcatScale3(matrix4x4_t *out, double x, double y, double z)
void Matrix4x4_TransformPositivePlane(const matrix4x4_t *in, float x, float y, float z, float d, float *o)
void Matrix4x4_Interpolate(matrix4x4_t *out, matrix4x4_t *in1, matrix4x4_t *in2, double frac)
void Matrix4x4_Reflect(matrix4x4_t *out, double normalx, double normaly, double normalz, double dist, double axisscale)
void Matrix4x4_ToArray12FloatD3D(const matrix4x4_t *in, float out[12])
void Matrix4x4_Accumulate(matrix4x4_t *out, matrix4x4_t *in, double weight)
void Matrix4x4_CreateTranslate(matrix4x4_t *out, double x, double y, double z)
QGL_EXTERN GLuint GLchar GLuint * len
int Matrix4x4_Invert_Full(matrix4x4_t *out, const matrix4x4_t *in1)
void Matrix4x4_Concat(matrix4x4_t *out, const matrix4x4_t *in1, const matrix4x4_t *in2)
void Matrix4x4_ToArrayFloatD3D(const matrix4x4_t *in, float out[16])
void Matrix4x4_Abs(matrix4x4_t *out)
void Matrix4x4_AdjustOrigin(matrix4x4_t *out, double x, double y, double z)
void Matrix4x4_CreateRotate(matrix4x4_t *out, double angle, double x, double y, double z)
void Matrix4x4_ToOrigin3Quat4Float(const matrix4x4_t *m, float *origin, float *quat)
void Matrix4x4_ToArrayFloatGL(const matrix4x4_t *in, float out[16])
void Matrix4x4_Transform3x3(const matrix4x4_t *in, const float v[3], float out[3])
void Matrix4x4_Transpose(matrix4x4_t *out, const matrix4x4_t *in1)
void Matrix4x4_ToArray12FloatGL(const matrix4x4_t *in, float out[12])
void Matrix4x4_CopyTranslateOnly(matrix4x4_t *out, const matrix4x4_t *in)
void Matrix4x4_FromArrayFloatD3D(matrix4x4_t *out, const float in[16])
void Matrix4x4_ToArrayDoubleD3D(const matrix4x4_t *in, double out[16])
void Matrix4x4_Copy(matrix4x4_t *out, const matrix4x4_t *in)
QGL_EXTERN int GLboolean GLfloat * v
void Matrix4x4_CreateScale(matrix4x4_t *out, double x)
void Matrix4x4_Normalize3(matrix4x4_t *out, matrix4x4_t *in1)
void Matrix4x4_OriginFromMatrix(const matrix4x4_t *in, float *out)
void Matrix4x4_FromArrayDoubleD3D(matrix4x4_t *out, const double in[16])
void Matrix4x4_SetOrigin(matrix4x4_t *out, double x, double y, double z)