| 342 | } |
| 343 | |
| 344 | void vm_MatrixMul(matrix *dest, matrix *src0, matrix *src1) { |
| 345 | // For multiplying two 3x3 matrices together |
| 346 | |
| 347 | assert((dest != src0) && (dest != src1)); |
| 348 | |
| 349 | dest->rvec.x = vm_Dot3Vector(src0->rvec.x, src0->uvec.x, src0->fvec.x, &src1->rvec); |
| 350 | dest->uvec.x = vm_Dot3Vector(src0->rvec.x, src0->uvec.x, src0->fvec.x, &src1->uvec); |
| 351 | dest->fvec.x = vm_Dot3Vector(src0->rvec.x, src0->uvec.x, src0->fvec.x, &src1->fvec); |
| 352 | |
| 353 | dest->rvec.y = vm_Dot3Vector(src0->rvec.y, src0->uvec.y, src0->fvec.y, &src1->rvec); |
| 354 | dest->uvec.y = vm_Dot3Vector(src0->rvec.y, src0->uvec.y, src0->fvec.y, &src1->uvec); |
| 355 | dest->fvec.y = vm_Dot3Vector(src0->rvec.y, src0->uvec.y, src0->fvec.y, &src1->fvec); |
| 356 | |
| 357 | dest->rvec.z = vm_Dot3Vector(src0->rvec.z, src0->uvec.z, src0->fvec.z, &src1->rvec); |
| 358 | dest->uvec.z = vm_Dot3Vector(src0->rvec.z, src0->uvec.z, src0->fvec.z, &src1->uvec); |
| 359 | dest->fvec.z = vm_Dot3Vector(src0->rvec.z, src0->uvec.z, src0->fvec.z, &src1->fvec); |
| 360 | } |
| 361 | |
| 362 | // Multiply a matrix times the transpose of a matrix |
| 363 | void vm_MatrixMulTMatrix(matrix *dest, matrix *src0, matrix *src1) { |
no test coverage detected