Skip to content

Commit 75244d5

Browse files
committed
fixed rasterizer working in wrong coordinate system (same rotation matrices now produce different results) + removed early rounding to reduce errors
1 parent 795e31c commit 75244d5

2 files changed

Lines changed: 11 additions & 8 deletions

File tree

model_manipulation.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,16 @@ func normalizeAndRotateStageModel(canvas *Canvas, stageModel *StageModel, rotati
9191
height := float64(canvas.height - 1)
9292

9393
// normalizing to canvas dimensions
94-
diff := theoretical_max.Sub(theoretical_min)
95-
scale := width / diff.X
96-
if scale*diff.Y >= float64(canvas.height) {
97-
scale = height / diff.Y
94+
// NOTE: stagemodel coordinate system is z for up and x for right position
95+
visualWidth := theoretical_max.X - theoretical_min.X
96+
visualHeight := math.Abs(theoretical_max.Z - theoretical_min.Z)
97+
scale := width / visualWidth
98+
if scale*visualHeight > height {
99+
scale = height / visualHeight
98100
}
99101
centeringMatrix = centeringMatrix.MulScalar(scale)
100102
centeringMatrix.X03 += width / 2
101-
centeringMatrix.X13 += height / 2
103+
centeringMatrix.X23 -= height / 2
102104

103105
rotateAndTranslateStageModel(stageModel, centeringMatrix)
104106
}

triangle.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ type Triangle struct {
2121
}
2222

2323
func NewTriangleFromMeshTriangle(triangle MeshTypes.Triangle) Triangle {
24+
// NOTE: mesh coordinate system is z for up and x for right position
2425
return Triangle{
25-
Point{x: math.Round(triangle.V0.Position.X), y: math.Round(triangle.V0.Position.Y), z: triangle.V0.Position.Z},
26-
Point{x: math.Round(triangle.V1.Position.X), y: math.Round(triangle.V1.Position.Y), z: triangle.V1.Position.Z},
27-
Point{x: math.Round(triangle.V2.Position.X), y: math.Round(triangle.V2.Position.Y), z: triangle.V2.Position.Z},
26+
Point{x: (triangle.V0.Position.X), y: -(triangle.V0.Position.Z), z: -triangle.V0.Position.Y},
27+
Point{x: (triangle.V1.Position.X), y: -(triangle.V1.Position.Z), z: -triangle.V1.Position.Y},
28+
Point{x: (triangle.V2.Position.X), y: -(triangle.V2.Position.Z), z: -triangle.V2.Position.Y},
2829
}
2930
}
3031

0 commit comments

Comments
 (0)