add Transform.ScaleXY method
This commit is contained in:
parent
6a6a7791e1
commit
21733d0858
17
transform.go
17
transform.go
|
@ -15,15 +15,15 @@ import "github.com/go-gl/mathgl/mgl32"
|
||||||
//
|
//
|
||||||
// pixel.Position(pixel.V(100, 100)).Rotate(math.Pi / 3).Scale(1.5)
|
// pixel.Position(pixel.V(100, 100)).Rotate(math.Pi / 3).Scale(1.5)
|
||||||
type Transform struct {
|
type Transform struct {
|
||||||
pos, anc Vec
|
pos, anc, sca Vec
|
||||||
sca, rot float64
|
rot float64
|
||||||
}
|
}
|
||||||
|
|
||||||
// Position creates a Transformation object with specified position. Anchor is (0, 0), rotation is 0 and scale is 1.
|
// Position creates a Transformation object with specified position. Anchor is (0, 0), rotation is 0 and scale is 1.
|
||||||
func Position(position Vec) Transform {
|
func Position(position Vec) Transform {
|
||||||
return Transform{
|
return Transform{
|
||||||
pos: position,
|
pos: position,
|
||||||
sca: 1,
|
sca: V(1, 1),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +50,15 @@ func (t Transform) MoveAnchor(delta Vec) Transform {
|
||||||
// Note, that subsequent calls to this method accumulate the final scale factor. Scaling two times by 2 is equivalent
|
// Note, that subsequent calls to this method accumulate the final scale factor. Scaling two times by 2 is equivalent
|
||||||
// to scaling once by 4.
|
// to scaling once by 4.
|
||||||
func (t Transform) Scale(scale float64) Transform {
|
func (t Transform) Scale(scale float64) Transform {
|
||||||
|
t.sca *= V(scale, scale)
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
// ScaleXY scales the transform by the supplied X and Y factor. Note, that scale is applied before rotation.
|
||||||
|
//
|
||||||
|
// Note, that subsequent calls to this method accumulate the final scale factor. Scaling two times by 2 is equivalent
|
||||||
|
// to scaling once by 4.
|
||||||
|
func (t Transform) ScaleXY(scale Vec) Transform {
|
||||||
t.sca *= scale
|
t.sca *= scale
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
@ -67,8 +76,8 @@ func (t Transform) Rotate(angle float64) Transform {
|
||||||
func (t Transform) Mat3() mgl32.Mat3 {
|
func (t Transform) Mat3() mgl32.Mat3 {
|
||||||
mat := mgl32.Ident3()
|
mat := mgl32.Ident3()
|
||||||
mat = mat.Mul3(mgl32.Translate2D(float32(t.pos.X()), float32(t.pos.Y())))
|
mat = mat.Mul3(mgl32.Translate2D(float32(t.pos.X()), float32(t.pos.Y())))
|
||||||
mat = mat.Mul3(mgl32.Scale2D(float32(t.sca), float32(t.sca)))
|
|
||||||
mat = mat.Mul3(mgl32.Rotate3DZ(float32(t.rot)))
|
mat = mat.Mul3(mgl32.Rotate3DZ(float32(t.rot)))
|
||||||
|
mat = mat.Mul3(mgl32.Scale2D(float32(t.sca.X()), float32(t.sca.Y())))
|
||||||
mat = mat.Mul3(mgl32.Translate2D(float32(t.anc.X()), float32(t.anc.Y())))
|
mat = mat.Mul3(mgl32.Translate2D(float32(t.anc.X()), float32(t.anc.Y())))
|
||||||
return mat
|
return mat
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue