| 445 | } |
| 446 | |
| 447 | void xMat3x3Mul(xMat3x3* o, const xMat3x3* a, const xMat3x3* b) |
| 448 | |
| 449 | { |
| 450 | xMat3x3 temp; |
| 451 | xMat3x3* tp; |
| 452 | U32 usetemp; |
| 453 | |
| 454 | if (o == a || o == b) |
| 455 | { |
| 456 | usetemp = 1; |
| 457 | } |
| 458 | |
| 459 | if (usetemp != 0) |
| 460 | { |
| 461 | tp = &temp; |
| 462 | } |
| 463 | else |
| 464 | { |
| 465 | tp = o; |
| 466 | } |
| 467 | |
| 468 | F32 arx = a->right.x; |
| 469 | F32 ary = a->right.y; |
| 470 | F32 arz = a->right.z; |
| 471 | F32 aux = a->up.x; |
| 472 | F32 auy = a->up.y; |
| 473 | F32 auz = a->up.z; |
| 474 | F32 aax = a->at.x; |
| 475 | F32 aay = a->at.y; |
| 476 | F32 aaz = a->at.z; |
| 477 | |
| 478 | F32 brx = b->right.x; |
| 479 | F32 bry = b->right.y; |
| 480 | F32 brz = b->right.z; |
| 481 | F32 bux = b->up.x; |
| 482 | F32 buy = b->up.y; |
| 483 | F32 buz = b->up.z; |
| 484 | F32 bax = b->at.x; |
| 485 | //F32 bay = b->at.y; |
| 486 | F32 baz = b->at.z; |
| 487 | |
| 488 | // Right |
| 489 | tp->right.x = arx * brx + ary * bux + arz * bax; |
| 490 | tp->right.y = arx * bry + ary * buy + arz * b->at.y; |
| 491 | tp->right.z = arx * brz + ary * buz + arz * baz; |
| 492 | |
| 493 | // Up |
| 494 | tp->up.x = aux * brx + auy * bux + auz * bax; |
| 495 | tp->up.y = aux * bry + auy * buy + auz * b->at.y; |
| 496 | tp->up.z = aux * brz + auy * buz + auz * baz; |
| 497 | |
| 498 | // At |
| 499 | tp->at.x = aax * brx + aay * bux + aaz * bax; |
| 500 | tp->at.y = aax * bry + aay * buy + aaz * b->at.y; |
| 501 | tp->at.z = aax * brz + aay * buz + aaz * baz; |
| 502 | |
| 503 | tp->flags = 0; |
| 504 | if (usetemp != 0) |
no test coverage detected