summaryrefslogtreecommitdiff
path: root/indra/llmath/llcoordframe.cpp
diff options
context:
space:
mode:
authorErik Kundiman <erik@megapahit.org>2025-04-19 22:07:21 +0800
committerErik Kundiman <erik@megapahit.org>2025-04-19 22:12:00 +0800
commitba20ac5718de63c499fe08ea4079695962dc2f17 (patch)
tree88c7b17304445278adb73135e2794a2afa3aa20f /indra/llmath/llcoordframe.cpp
parentad9c801edb13568657c0964ebfb74257da6d9e00 (diff)
parent11cd9b91a2cf3e71cb6dae0a08dff2b878163ce8 (diff)
Merge tag 'Second_Life_Release#11cd9b9-2025.05' into 2025.05
Diffstat (limited to 'indra/llmath/llcoordframe.cpp')
-rw-r--r--indra/llmath/llcoordframe.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/indra/llmath/llcoordframe.cpp b/indra/llmath/llcoordframe.cpp
index 4d6276b2cd..b42541c7c0 100644
--- a/indra/llmath/llcoordframe.cpp
+++ b/indra/llmath/llcoordframe.cpp
@@ -26,7 +26,6 @@
#include "linden_common.h"
-//#include "vmath.h"
#include "v3math.h"
#include "m3math.h"
#include "v4math.h"
@@ -329,28 +328,30 @@ void LLCoordFrame::rotate(const LLMatrix3 &rotation_matrix)
}
+// Rotate 2 normalized orthogonal vectors in direction from `source` to `target`
+static void rotate2(LLVector3& source, LLVector3& target, F32 angle)
+{
+ F32 sx = source[VX], sy = source[VY], sz = source[VZ];
+ F32 tx = target[VX], ty = target[VY], tz = target[VZ];
+ F32 c = cosf(angle), s = sinf(angle);
+
+ source.set(sx * c + tx * s, sy * c + ty * s, sz * c + tz * s);
+ target.set(tx * c - sx * s, ty * c - sy * s, tz * c - sz * s);
+}
+
void LLCoordFrame::roll(F32 angle)
{
- LLQuaternion q(angle, mXAxis);
- LLMatrix3 rotation_matrix(q);
- rotate(rotation_matrix);
- CHECK_FINITE_OBJ();
+ rotate2(mYAxis, mZAxis, angle);
}
void LLCoordFrame::pitch(F32 angle)
{
- LLQuaternion q(angle, mYAxis);
- LLMatrix3 rotation_matrix(q);
- rotate(rotation_matrix);
- CHECK_FINITE_OBJ();
+ rotate2(mZAxis, mXAxis, angle);
}
void LLCoordFrame::yaw(F32 angle)
{
- LLQuaternion q(angle, mZAxis);
- LLMatrix3 rotation_matrix(q);
- rotate(rotation_matrix);
- CHECK_FINITE_OBJ();
+ rotate2(mXAxis, mYAxis, angle);
}
// get*() routines