| 1062 | } |
| 1063 | |
| 1064 | Vector3D Terathon::InverseTransform(const Transform3D& m, const Vector3D& v) |
| 1065 | { |
| 1066 | const Vector3D& a = m[0]; |
| 1067 | const Vector3D& b = m[1]; |
| 1068 | const Vector3D& c = m[2]; |
| 1069 | |
| 1070 | Bivector3D s = a ^ b; |
| 1071 | float invDet = 1.0F / (s ^ c); |
| 1072 | |
| 1073 | return (Vector3D((b ^ c ^ v) * invDet, (c ^ a ^ v) * invDet, (s ^ v) * invDet)); |
| 1074 | } |
| 1075 | |
| 1076 | Point3D Terathon::InverseTransform(const Transform3D& m, const Point3D& p) |
| 1077 | { |