Matrix4x4::Matrix4x4(const Vector& vecForward, const Vector& vecUp, const Vector& vecRight, const Vector& vecPosition) { SetForwardVector(vecForward); SetUpVector(vecUp); SetRightVector(vecRight); SetTranslation(vecPosition); m[0][3] = 0; m[1][3] = 0; m[2][3] = 0; m[3][3] = 1; }
void Matrix4x4::SetOrientation(const Vector& v, const Vector& vecUp) { Vector vecDir = v.Normalized(); Vector vecLeft; if (vecDir != vecUp && vecDir != -vecUp) vecLeft = vecUp.Cross(vecDir).Normalized(); else vecLeft = Vector(0, 1, 0); SetForwardVector(vecDir); SetLeftVector(vecLeft); SetUpVector(vecDir.Cross(vecLeft).Normalized()); }