From dc9ae9d9866293761ee3bc9d82f720df6e740e7f Mon Sep 17 00:00:00 2001 From: maelstrom Date: Sun, 30 Mar 2025 22:40:09 +0200 Subject: [PATCH] fix(cframe): lookat function returning wrong results --- core/src/datatypes/cframe.cpp | 4 ++-- core/src/objects/handles.cpp | 2 +- core/src/rendering/renderer.cpp | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/datatypes/cframe.cpp b/core/src/datatypes/cframe.cpp index 8a45eea..d65a6df 100644 --- a/core/src/datatypes/cframe.cpp +++ b/core/src/datatypes/cframe.cpp @@ -42,9 +42,9 @@ glm::mat3 lookAt(Data::Vector3 position, Data::Vector3 lookAt, Data::Vector3 up) Data::Vector3 f = (lookAt - position).Unit(); // Forward/Look Data::Vector3 u = up.Unit(); // Up Data::Vector3 s = f.Cross(u).Unit(); // Right - u = s.Cross(f); + u = s.Cross(f).Unit(); - return { s, u, f }; + return { s, u, -f }; } Data::CFrame::CFrame(Data::Vector3 position, Data::Vector3 lookAt, Data::Vector3 up) diff --git a/core/src/objects/handles.cpp b/core/src/objects/handles.cpp index 303d0bc..7671f3e 100644 --- a/core/src/objects/handles.cpp +++ b/core/src/objects/handles.cpp @@ -46,7 +46,7 @@ Data::CFrame Handles::GetCFrameOfHandle(HandleFace face) { Data::Vector3 handleOffset = this->worldMode ? ((Data::Vector3::ONE * 2.f) + adornee->lock()->GetAABB() * 0.5f) : Data::Vector3(2.f + adornee->lock()->size * 0.5f); Data::Vector3 handlePos = localFrame * (handleOffset * face.normal); - Data::CFrame cframe(handlePos, handlePos + localFrame.Rotation() * face.normal, upAxis); + Data::CFrame cframe(handlePos, handlePos + localFrame.Rotation() * -face.normal, upAxis); return cframe; } diff --git a/core/src/rendering/renderer.cpp b/core/src/rendering/renderer.cpp index 1f7141e..46de714 100644 --- a/core/src/rendering/renderer.cpp +++ b/core/src/rendering/renderer.cpp @@ -193,6 +193,7 @@ void renderHandles() { glDepthMask(GL_TRUE); glCullFace(GL_BACK); + glFrontFace(GL_CCW); // This is right... Probably..... // Use shader handleShader->use();