zworld/engine/renderapi/vertex/triangle.go

24 lines
597 B
Go
Raw Permalink Normal View History

2024-01-14 22:56:06 +08:00
package vertex
import "zworld/plugins/math/vec3"
type Triangle struct {
A, B, C vec3.T
}
func (t *Triangle) Normal() vec3.T {
// Set Vector U to (Triangle.p2 minus Triangle.p1)
u := t.B.Sub(t.A)
// Set Vector V to (Triangle.p3 minus Triangle.p1)
v := t.C.Sub(t.A)
// Set Normal.x to (multiply U.y by V.z) minus (multiply U.z by V.y)
x := u.Y*v.Z - u.Z*v.Y
// Set Normal.y to (multiply U.z by V.x) minus (multiply U.x by V.z)
y := u.Z*v.X - u.X*v.Z
// Set Normal.z to (multiply U.x by V.y) minus (multiply U.y by V.x)
z := u.X*v.Y - u.Y*v.X
return vec3.New(x, y, z).Normalized()
}