diff --git a/gglm/mat2.go b/gglm/mat2.go index 019712d..e8b847a 100755 --- a/gglm/mat2.go +++ b/gglm/mat2.go @@ -44,6 +44,16 @@ func (m *Mat2) Sub(m2 *Mat2) { m.Data[3] -= m2.Data[3] } +//Add m *= m2 +func (m *Mat2) Mul(m2 *Mat2) { + m.Data = [4]float32{ + m.Data[0]*m2.Data[0] + m.Data[1]*m2.Data[2], + m.Data[0]*m2.Data[1] + m.Data[1]*m2.Data[3], + m.Data[2]*m2.Data[0] + m.Data[3]*m2.Data[2], + m.Data[2]*m2.Data[1] + m.Data[3]*m2.Data[3], + } +} + //Scale m *= x (element wise multiplication) func (m *Mat2) Scale(x float32) { m.Data[0] *= x @@ -76,6 +86,17 @@ func SubMat2(m1, m2 *Mat2) *Mat2 { } } +func MulMat2(m1, m2 *Mat2) *Mat2 { + return &Mat2{ + Data: [4]float32{ + m1.Data[0]*m2.Data[0] + m1.Data[1]*m2.Data[2], + m1.Data[0]*m2.Data[1] + m1.Data[1]*m2.Data[3], + m1.Data[2]*m2.Data[0] + m1.Data[3]*m2.Data[2], + m1.Data[2]*m2.Data[1] + m1.Data[3]*m2.Data[3], + }, + } +} + //NewMat2Id returns the 2x2 identity matrix func NewMat2Id() *Mat2 { return &Mat2{ diff --git a/main.go b/main.go index 0555771..da29a2c 100755 --- a/main.go +++ b/main.go @@ -1,29 +1,4 @@ package main -import ( - "github.com/bloeys/gglm/gglm" -) - func main() { - - // v1 := gglm.NewVec2([]float32{4, 5}) - // v2 := gglm.NewVec2([]float32{1, 1}) - // println(v1.Mag()) - // println(v1.SqrMag()) - // v1 := gglm.NewVec2(nil) - // v2 := gglm.NewVec2(nil) - // v1.Add(v2) - - m1 := &gglm.Mat4{} - m2 := &gglm.Mat4{ - Data: [16]float32{ - -10, 0, 100, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - }, - } - - m3 := gglm.AddMat4(m1, m2) - m2.Add(m3) } diff --git a/main_test.go b/main_test.go index bdc0376..4c145e9 100755 --- a/main_test.go +++ b/main_test.go @@ -8,20 +8,20 @@ import ( func BenchmarkVec3Add(b *testing.B) { - v1 := gglm.NewMat4Id() - v2 := gglm.NewMat4Id() + v1 := gglm.NewMat2Id() + v2 := gglm.NewMat2Id() for i := 0; i < b.N; i++ { - gglm.AddMat4(v1, v2) + v1.Mul(v2) } } func BenchmarkVec3Add2(b *testing.B) { - v1 := gglm.NewMat4Id() - v2 := gglm.NewMat4Id() + v1 := gglm.NewMat2Id() + v2 := gglm.NewMat2Id() for i := 0; i < b.N; i++ { - v1.Add(v2) + v1.Mul(v2) } }