-
Notifications
You must be signed in to change notification settings - Fork 0
/
aabb.go
54 lines (43 loc) · 1 KB
/
aabb.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package u3d
import (
"math"
"github.com/go-utils/unum"
)
type AaBb struct {
Min, Max, Center, Extent unum.Vec3
}
func (me *AaBb) BoundingSphere(center *unum.Vec3) (radius float64) {
return math.Max(me.Min.Distance(center), me.Max.Distance(center))
}
func (me *AaBb) Clear() {
me.Min.Clear()
me.Max.Clear()
me.Center.Clear()
me.Extent.Clear()
}
func (me *AaBb) ResetMinMax() {
me.Max.SetToMin()
me.Min.SetToMax()
}
func (me *AaBb) SetCenterExtent() {
me.Center.SetFromAdd(&me.Max, &me.Min)
me.Center.Scale(0.5)
me.Extent.SetFromSub(&me.Max, &me.Min)
me.Extent.Scale(0.5)
}
func (me *AaBb) SetMinMax() {
me.Min.SetFromSub(&me.Center, &me.Extent)
me.Max.SetFromAdd(&me.Center, &me.Extent)
}
func (me *AaBb) Transform(mat *unum.Mat4) {
me.Center.TransformCoord(mat)
me.Extent.TransformNormal(mat, true)
me.SetMinMax()
}
func (me *AaBb) UpdateMinMax(vec *unum.Vec3) {
vec.Clamp(&me.Min, &me.Max)
}
func (me *AaBb) UpdateMinMaxFrom(aabb *AaBb) {
me.UpdateMinMax(&aabb.Min)
me.UpdateMinMax(&aabb.Max)
}