tofu

Making something with OpenGL in Go
Log | Files | Refs

commit 5b96d576e8246136082a29fbda54d97824f207aa
parent 2948e3da4df14788d2b96aa4de3b40242beded34
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sun, 17 Nov 2024 10:09:02 +0900

set normals

Diffstat:
Mcmd/sample/main.go | 1+
Mobject.go | 13+++++++++++++
2 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/cmd/sample/main.go b/cmd/sample/main.go @@ -242,6 +242,7 @@ func main() { if err != nil { log.Fatal(err) } + teapot.SetNormals() teapot.Load() app.program, err = tofu.NewProgram(vpath, fpath) diff --git a/object.go b/object.go @@ -167,6 +167,19 @@ func (obj Object) faceData() []uint32 { return fdata } +func (obj *Object) SetNormals() { + obj.Normals = make([]Vec3, len(obj.Faces)) + for i, f := range obj.Faces { + v := obj.Vertices[f.I[0].V].Sub(obj.Vertices[f.I[1].V]) + w := obj.Vertices[f.I[0].V].Sub(obj.Vertices[f.I[2].V]) + n := v.Cross(w).Normalize() + obj.Normals[i] = n + obj.Faces[i].I[0].N = i + obj.Faces[i].I[1].N = i + obj.Faces[i].I[2].N = i + } +} + // Load copies object data into the GPU. func (obj *Object) Load() { obj.vao = newVAO(obj)