mirror of
https://github.com/bloeys/gglm.git
synced 2025-12-29 13:38:20 +00:00
221 lines
4.4 KiB
Go
Executable File
221 lines
4.4 KiB
Go
Executable File
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/bloeys/gglm/gglm"
|
|
)
|
|
|
|
func main() {
|
|
|
|
// Mat3
|
|
m1 := &gglm.Mat3{
|
|
Data: [3][3]float32{
|
|
{1, 4, 7},
|
|
{2, 5, 8},
|
|
{3, 6, 9},
|
|
},
|
|
}
|
|
|
|
m2 := &gglm.Mat3{
|
|
Data: [3][3]float32{
|
|
{1, 1, 1},
|
|
{2, 2, 2},
|
|
{3, 3, 3},
|
|
},
|
|
}
|
|
|
|
m3 := gglm.MulMat3(m1, m2)
|
|
m1.Mul(m2)
|
|
println(m1.String())
|
|
println(m3.String())
|
|
|
|
// Mat4
|
|
m4 := &gglm.Mat4{
|
|
Data: [4][4]float32{
|
|
{1, 5, 9, 13},
|
|
{2, 6, 10, 14},
|
|
{3, 7, 11, 15},
|
|
{4, 8, 12, 16},
|
|
},
|
|
}
|
|
|
|
m5 := &gglm.Mat4{
|
|
Data: [4][4]float32{
|
|
{1, 2, 3, 4},
|
|
{1, 2, 3, 4},
|
|
{1, 2, 3, 4},
|
|
{1, 2, 3, 4},
|
|
},
|
|
}
|
|
|
|
m6 := gglm.MulMat4(m4, m5)
|
|
m4.Mul(m5)
|
|
println(m4.String())
|
|
println(m6.String())
|
|
println(m4.Eq(&m6))
|
|
|
|
// Vec2
|
|
v1 := &gglm.Vec2{Data: [2]float32{1, 2}}
|
|
v2 := &gglm.Vec2{Data: [2]float32{3, 4}}
|
|
println(gglm.DistVec2(v1, v2))
|
|
println(gglm.SqrDistVec2(v2, v1))
|
|
println(v1.Eq(v2))
|
|
v2.Set(1, 2)
|
|
println(v1.Eq(v2))
|
|
|
|
v1.AddXY(v2.X(), v2.Y())
|
|
println(v1.String())
|
|
|
|
println("V1: " + v1.String())
|
|
v1.Normalize()
|
|
println("V1 Normal: " + v1.String())
|
|
|
|
// Vec3
|
|
v3 := &gglm.Vec3{Data: [3]float32{1, 2, 3}}
|
|
v4 := &gglm.Vec3{Data: [3]float32{4, 5, 6}}
|
|
println(gglm.DistVec3(v3, v4))
|
|
println(gglm.SqrDistVec3(v4, v3))
|
|
|
|
println(v3.Eq(v4))
|
|
v4.Set(1, 2, 3)
|
|
println(v3.Eq(v4))
|
|
|
|
println(gglm.DotVec3(v3, v4))
|
|
|
|
v3v4Cross := gglm.Cross(v3, v4)
|
|
println(v3v4Cross.String())
|
|
|
|
println("V3: " + v3.String())
|
|
v3.Normalize()
|
|
println("V3 Normal: " + v3.String())
|
|
|
|
// Vec4
|
|
v5 := &gglm.Vec4{Data: [4]float32{1, 2, 3, 4}}
|
|
v6 := &gglm.Vec4{Data: [4]float32{5, 6, 7, 8}}
|
|
println(gglm.DistVec4(v5, v6))
|
|
println(gglm.SqrDistVec4(v5, v6))
|
|
|
|
println(v5.Eq(v6))
|
|
v6.Set(1, 2, 3, 4)
|
|
println(v5.Eq(v6))
|
|
|
|
println(gglm.DotVec4(v5, v6))
|
|
|
|
v5.Add(v6)
|
|
v5.AddXYZW(v6.X(), v6.Y(), v6.Z(), v6.W())
|
|
println(v6.String())
|
|
|
|
println("V6: " + v6.String())
|
|
v6.Normalize()
|
|
println("V6 Normal: " + v6.String())
|
|
|
|
// Mat2Vec2
|
|
mat2A := gglm.Mat2{
|
|
Data: [2][2]float32{
|
|
{1, 3},
|
|
{2, 4},
|
|
},
|
|
}
|
|
|
|
vec2A := gglm.Vec2{Data: [2]float32{1, 2}}
|
|
mat2Vec2Mul := gglm.MulMat2Vec2(&mat2A, &vec2A)
|
|
println(mat2Vec2Mul.String())
|
|
|
|
// Mat3Vec3
|
|
mat3A := gglm.Mat3{
|
|
Data: [3][3]float32{
|
|
{1, 4, 7},
|
|
{2, 5, 8},
|
|
{3, 6, 9},
|
|
},
|
|
}
|
|
|
|
vec3A := gglm.Vec3{Data: [3]float32{1, 2, 3}}
|
|
mm3v3 := gglm.MulMat3Vec3(&mat3A, &vec3A)
|
|
println(mm3v3.String())
|
|
|
|
// ReflectVec2
|
|
vec2B := &gglm.Vec2{Data: [2]float32{4, 5}}
|
|
normA := &gglm.Vec2{Data: [2]float32{0, 1}}
|
|
rVec2A := gglm.ReflectVec2(vec2B, normA)
|
|
println(rVec2A.String())
|
|
|
|
// Quaternion
|
|
vRot := &gglm.Vec3{Data: [3]float32{60, 30, 20}}
|
|
q := gglm.NewQuatEulerVec(vRot.AsRad())
|
|
println("\n" + vRot.AsRad().String())
|
|
println(q.String(), "\n", q.Mag())
|
|
|
|
q = gglm.NewQuatAngleAxisVec(60*gglm.Deg2Rad, vRot.Normalize())
|
|
println("\n" + vRot.Normalize().String())
|
|
println(q.String())
|
|
|
|
// Transform
|
|
translationMat := gglm.NewTranslationMat(&gglm.Vec3{Data: [3]float32{1, 2, 3}})
|
|
|
|
rotDegs := gglm.NewVec3(60, 30, 20)
|
|
quat := gglm.NewQuatEulerVec(rotDegs.AsRad())
|
|
rotMat := gglm.NewRotMat(&quat)
|
|
|
|
scale := gglm.NewVec3(1, 1, 1)
|
|
scaleMat := gglm.NewScaleMat(&scale)
|
|
|
|
modelMat := gglm.NewTrMatId()
|
|
modelMat.Mul(translationMat.Mul(rotMat.Mul(scaleMat)))
|
|
|
|
println("\n\n\n", modelMat.String())
|
|
|
|
// Clone Vec2
|
|
v2Orig := gglm.Vec2{Data: [2]float32{1, 2}}
|
|
v2Clone := v2Orig.Clone()
|
|
v2Clone.SetX(99)
|
|
println("\n\n", v2Orig.String(), "; ", v2Clone.String())
|
|
|
|
// Clone TrMat
|
|
pos := gglm.NewVec3(1, 2, 3)
|
|
trMatOrig := gglm.NewTranslationMat(&pos)
|
|
trMatClone := trMatOrig.Clone()
|
|
|
|
trMatCloneScale := gglm.NewVec3(2, 2, 2)
|
|
trMatClone.Scale(&trMatCloneScale)
|
|
|
|
pos = gglm.NewVec3(9, 0, 0)
|
|
trMatClone.Translate(&pos)
|
|
println("\n\n", trMatOrig.String(), "; ", trMatClone.String())
|
|
|
|
// Quat geo
|
|
q1Degs := gglm.NewVec3(180*gglm.Deg2Rad, 0, 0)
|
|
q1 := gglm.NewQuatEulerVec(&q1Degs)
|
|
|
|
q2Degs := gglm.NewVec3(0, 180*gglm.Deg2Rad, 0)
|
|
q2 := gglm.NewQuatEulerVec(&q2Degs)
|
|
println(gglm.AngleQuat(&q1, &q2) * gglm.Rad2Deg)
|
|
|
|
// LookAt
|
|
camPos := gglm.NewVec3(0, 0, 3)
|
|
worldUp := gglm.NewVec3(0, 1, 0)
|
|
targetPos := gglm.NewVec3(0, 0, 0)
|
|
viewMat := gglm.LookAtRH(&camPos, &targetPos, &worldUp)
|
|
println(viewMat.String())
|
|
|
|
// Mat2Col
|
|
mc := gglm.NewMat2Id()
|
|
println("===============================")
|
|
println(mc.String())
|
|
|
|
mc.Data = [2][2]float32{
|
|
{1, 3},
|
|
{2, 4},
|
|
}
|
|
println(mc.String())
|
|
fmt.Printf("Arr: %v", mc.Data)
|
|
|
|
mc2 := gglm.Mat2{Data: [2][2]float32{
|
|
{1, 3},
|
|
{2, 4},
|
|
}}
|
|
|
|
println(mc2.Mul(&mc).String())
|
|
}
|