From 3264d0a5b9eced872e6f61ee6109495a4207e9ef Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Wed, 26 Nov 2025 23:50:08 +0100 Subject: [PATCH 1/2] added missing rotation of normals --- pkg/MeshTypes/matrix.go | 7 +++++++ pkg/MeshTypes/mesh.go | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/pkg/MeshTypes/matrix.go b/pkg/MeshTypes/matrix.go index 87d2017..5ffa456 100644 --- a/pkg/MeshTypes/matrix.go +++ b/pkg/MeshTypes/matrix.go @@ -43,3 +43,10 @@ func (a Matrix) MulPosition(b Vector) Vector { z := a.X20*b.X + a.X21*b.Y + a.X22*b.Z + a.X23 return Vector{x, y, z} } + +func (a Matrix) MulDirection(b Vector) Vector { + x := a.X00*b.X + a.X01*b.Y + a.X02*b.Z + y := a.X10*b.X + a.X11*b.Y + a.X12*b.Z + z := a.X20*b.X + a.X21*b.Y + a.X22*b.Z + return Vector{x, y, z}.Normalize() +} diff --git a/pkg/MeshTypes/mesh.go b/pkg/MeshTypes/mesh.go index 9b48026..de413f5 100644 --- a/pkg/MeshTypes/mesh.go +++ b/pkg/MeshTypes/mesh.go @@ -31,6 +31,18 @@ func (obj *Mesh) RotateAndTranslate(translationMatrix Matrix) { triangle.V0.Position = translationMatrix.MulPosition(triangle.V0.Position) triangle.V1.Position = translationMatrix.MulPosition(triangle.V1.Position) triangle.V2.Position = translationMatrix.MulPosition(triangle.V2.Position) + if triangle.V0.Normal != nil { + n0 := translationMatrix.MulDirection(*triangle.V0.Normal) + triangle.V0.Normal = &n0 + } + if triangle.V1.Normal != nil { + n1 := translationMatrix.MulDirection(*triangle.V1.Normal) + triangle.V1.Normal = &n1 + } + if triangle.V2.Normal != nil { + n2 := translationMatrix.MulDirection(*triangle.V2.Normal) + triangle.V2.Normal = &n2 + } } } From ebefce2d0c12e70c6afd26e01bbbc7c924967f23 Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Wed, 26 Nov 2025 23:53:33 +0100 Subject: [PATCH 2/2] fixed rotate and translate unit test --- tests/MeshTypes/mesh_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/MeshTypes/mesh_test.go b/tests/MeshTypes/mesh_test.go index fda14bd..509b7f9 100644 --- a/tests/MeshTypes/mesh_test.go +++ b/tests/MeshTypes/mesh_test.go @@ -85,6 +85,18 @@ func TestRotateAndTranslate(t *testing.T) { triangle.V0.Position = translationMatrix.MulPosition(triangle.V0.Position) // safe to use as func is tested in another place triangle.V1.Position = translationMatrix.MulPosition(triangle.V1.Position) triangle.V2.Position = translationMatrix.MulPosition(triangle.V2.Position) + if triangle.V0.Normal != nil { + n0 := translationMatrix.MulDirection(*triangle.V0.Normal) + triangle.V0.Normal = &n0 + } + if triangle.V1.Normal != nil { + n1 := translationMatrix.MulDirection(*triangle.V1.Normal) + triangle.V1.Normal = &n1 + } + if triangle.V2.Normal != nil { + n2 := translationMatrix.MulDirection(*triangle.V2.Normal) + triangle.V2.Normal = &n2 + } } if !reflect.DeepEqual(result, want) { t.Errorf("Mesh RotateAndTranslate() Output does not match expected")