65 |
m[12], m[13], m[14])); |
m[12], m[13], m[14])); |
66 |
|
|
67 |
} |
} |
68 |
|
|
69 |
|
/*! \brief compute the inverse of \arg m, storing the result in \arg i. |
70 |
|
* \param m the matrix to invert |
71 |
|
* \param i the inverted matrix |
72 |
|
*/ |
73 |
void InvertM4x4 (Matrix4x4_t i, Matrix4x4_t m) |
void InvertM4x4 (Matrix4x4_t i, Matrix4x4_t m) |
74 |
{ |
{ |
75 |
Diderot_real_t scale = 1.0 / DetM4x4(m); |
Diderot_real_t scale = 1.0 / DetM4x4(m); |
134 |
m[ 4],m[ 5],m[ 6], |
m[ 4],m[ 5],m[ 6], |
135 |
m[12],m[13],m[14]) * scale; |
m[12],m[13],m[14]) * scale; |
136 |
|
|
137 |
|
i[15] = DetM3x3(m[ 0],m[ 1],m[ 2], |
138 |
|
m[ 4],m[ 5],m[ 6], |
139 |
|
m[ 8],m[ 9],m[10]) * scale; |
140 |
|
|
141 |
|
} |
142 |
|
|
143 |
|
/*! \brief compute the inverse transpose of \arg m, storing the result in \arg i. |
144 |
|
* \param m the matrix to invert |
145 |
|
* \param i the inverted matrix |
146 |
|
*/ |
147 |
|
void InvertTransposeM4x4 (Matrix4x4_t i, Matrix4x4_t m) |
148 |
|
{ |
149 |
|
Diderot_real_t scale = 1.0 / DetM4x4(m); |
150 |
|
|
151 |
|
i[0] = DetM3x3(m[5],m[ 6],m[ 7], |
152 |
|
m[ 9],m[10],m[11], |
153 |
|
m[13],m[14],m[15]) * scale; |
154 |
|
|
155 |
|
i[ 4] = -DetM3x3(m[ 1],m[ 2],m[ 3], |
156 |
|
m[ 9],m[10],m[11], |
157 |
|
m[13],m[14],m[15]) * scale; |
158 |
|
|
159 |
|
i[ 8] = DetM3x3(m[ 1],m[ 2],m[ 3], |
160 |
|
m[ 5],m[ 6],m[ 7], |
161 |
|
m[13],m[14],m[15]) * scale; |
162 |
|
|
163 |
|
i[12] = -DetM3x3(m[ 1],m[ 2],m[ 3], |
164 |
|
m[ 5],m[ 6],m[ 7], |
165 |
|
m[ 9],m[10],m[11]) * scale; |
166 |
|
|
167 |
|
i[ 1] = -DetM3x3(m[ 4],m[ 6],m[ 7], |
168 |
|
m[ 8],m[10],m[11], |
169 |
|
m[12],m[14],m[15]) * scale; |
170 |
|
|
171 |
|
i[ 5] = DetM3x3(m[ 0],m[ 2],m[ 3], |
172 |
|
m[ 8],m[10],m[11], |
173 |
|
m[12],m[14],m[15]) * scale; |
174 |
|
|
175 |
|
i[ 9] = -DetM3x3(m[ 0],m[ 2],m[ 3], |
176 |
|
m[ 4],m[ 6],m[ 7], |
177 |
|
m[12],m[14],m[15]) * scale; |
178 |
|
|
179 |
|
i[ 7] = DetM3x3(m[ 0],m[ 2],m[ 3], |
180 |
|
m[ 4],m[ 6],m[ 7], |
181 |
|
m[ 8],m[10],m[11]) * scale; |
182 |
|
|
183 |
|
i[ 2] = DetM3x3(m[ 4],m[ 5],m[ 7], |
184 |
|
m[ 8],m[ 9],m[11], |
185 |
|
m[12],m[13],m[15]) * scale; |
186 |
|
|
187 |
|
i[ 6] = -DetM3x3(m[ 0],m[ 1],m[ 3], |
188 |
|
m[ 8],m[ 9],m[11], |
189 |
|
m[12],m[13],m[15]) * scale; |
190 |
|
|
191 |
|
i[10] = DetM3x3(m[ 0],m[ 1],m[ 3], |
192 |
|
m[ 4],m[ 5],m[ 7], |
193 |
|
m[12],m[13],m[15]) * scale; |
194 |
|
|
195 |
|
i[14] = -DetM3x3(m[ 0],m[ 1],m[ 3], |
196 |
|
m[ 4],m[ 5],m[ 7], |
197 |
|
m[ 8],m[ 9],m[11]) * scale; |
198 |
|
|
199 |
|
i[ 3] = -DetM3x3(m[ 4],m[ 5],m[ 6], |
200 |
|
m[ 8],m[ 9],m[10], |
201 |
|
m[12],m[13],m[14]) * scale; |
202 |
|
|
203 |
|
i[ 7] = DetM3x3(m[ 0],m[ 1],m[ 2], |
204 |
|
m[ 8],m[ 9],m[10], |
205 |
|
m[12],m[13],m[14]) * scale; |
206 |
|
|
207 |
|
i[11] = -DetM3x3(m[ 0],m[ 1],m[ 2], |
208 |
|
m[ 4],m[ 5],m[ 6], |
209 |
|
m[12],m[13],m[14]) * scale; |
210 |
|
|
211 |
i[15] = DetM3x3(m[ 0],m[ 1],m[ 2], |
i[15] = DetM3x3(m[ 0],m[ 1],m[ 2], |
212 |
m[ 4],m[ 5],m[ 6], |
m[ 4],m[ 5],m[ 6], |
213 |
m[ 8],m[ 9],m[10]) * scale; |
m[ 8],m[ 9],m[10]) * scale; |