From 175d05420ce03760252c2d42e0e264168a02176a Mon Sep 17 00:00:00 2001 From: bloeys Date: Tue, 9 Nov 2021 09:55:24 +0400 Subject: [PATCH] Add perspective func+fix LookAt --- gglm/transform.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/gglm/transform.go b/gglm/transform.go index 3b0bb11..3000d2c 100755 --- a/gglm/transform.go +++ b/gglm/transform.go @@ -2,6 +2,7 @@ package gglm import ( "fmt" + "math" ) var _ Mat = &TrMat{} @@ -110,12 +111,24 @@ func LookAt(pos, targetPos, worldUp *Vec3) *TrMat { {right.Data[0], up.Data[0], forward.Data[0], 0}, {right.Data[1], up.Data[1], forward.Data[1], 0}, {right.Data[2], up.Data[2], forward.Data[2], 0}, - {-DotVec3(pos, right), -DotVec3(pos, up), -DotVec3(pos, forward), 1}, + {-DotVec3(pos, right), -DotVec3(pos, up), DotVec3(pos, forward), 1}, }, }, } } +func Perspective(fov, aspectRatio, nearClip, farClip float32) *Mat4 { + halfFovTan := float32(math.Tan(float64(fov * 0.5))) + return &Mat4{ + Data: [4][4]float32{ + {1 / (aspectRatio * halfFovTan), 0, 0, 0}, + {0, 1 / halfFovTan, 0, 0}, + {0, 0, -(nearClip + farClip) / (farClip - nearClip), -1}, + {0, 0, -(2 * farClip * nearClip) / (farClip - nearClip), 0}, + }, + } +} + func NewTrMatId() *TrMat { return &TrMat{ Mat4: *NewMat4Id(),