zworld-demo/plugin/math/mat4/project_test.go

57 lines
1.3 KiB
Go
Raw Normal View History

2023-12-22 22:04:27 +08:00
package mat4_test
import (
"testing"
. "zworld/plugin/math/mat4"
"zworld/plugin/math/vec3"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
func TestMat4(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "math/mat4")
}
type TransformTest struct {
Input vec3.T
Output vec3.T
}
func AssertTransforms(t *testing.T, transform T, cases []TransformTest) {
t.Helper()
for _, c := range cases {
point := transform.TransformPoint(c.Input)
if !point.ApproxEqual(c.Output) {
t.Errorf("expected %v was %v", c.Output, point)
}
}
}
func TestOrthographicRZ(t *testing.T) {
proj := OrthographicRZ(0, 10, 0, 10, -1, 1)
AssertTransforms(t, proj, []TransformTest{
{vec3.New(5, 5, 0), vec3.New(0, 0, 0.5)},
{vec3.New(5, 5, 1), vec3.New(0, 0, 0)},
{vec3.New(5, 5, -1), vec3.New(0, 0, 1)},
{vec3.New(0, 0, -1), vec3.New(-1, -1, 1)},
})
}
func TestPerspectiveVK(t *testing.T) {
proj := Perspective(45, 1, 1, 100)
AssertTransforms(t, proj, []TransformTest{
{vec3.New(0, 0, 1), vec3.New(0, 0, 0)},
{vec3.New(0, 0, 100), vec3.New(0, 0, 1)},
})
}
var _ = Describe("LookAt (LH)", func() {
It("correctly projects", func() {
proj := LookAt(vec3.Zero, vec3.UnitZ, vec3.UnitY)
Expect(proj.Forward().ApproxEqual(vec3.UnitZ)).To(BeTrue())
})
})