Ep5: Obj file loading+indexed drawing+uniforms

This commit is contained in:
bloeys
2021-11-06 22:23:48 +04:00
parent 2b341132f8
commit 3167bffbd1
12 changed files with 264 additions and 39 deletions

73
res/models/loader.go Executable file
View File

@ -0,0 +1,73 @@
package models
import (
"os"
"strconv"
"strings"
"github.com/bloeys/go-sdl-engine/logging"
)
type ObjInfo struct {
VertPos []float32
TriIndices []uint32
}
func LoadObj(file string) (objInfo ObjInfo, err error) {
b, err := os.ReadFile(file)
if err != nil {
return objInfo, err
}
lines := strings.Split(string(b), "\n")
for i := 0; i < len(lines); i++ {
s := strings.SplitN(lines[i], " ", 2)
switch s[0] {
case "v":
vertPosStrings := strings.Split(s[1], " ")
f, err := strconv.ParseFloat(vertPosStrings[0], 32)
if err != nil {
return objInfo, err
}
objInfo.VertPos = append(objInfo.VertPos, float32(f))
f, err = strconv.ParseFloat(vertPosStrings[1], 32)
if err != nil {
return objInfo, err
}
objInfo.VertPos = append(objInfo.VertPos, float32(f))
f, err = strconv.ParseFloat(vertPosStrings[2], 32)
if err != nil {
return objInfo, err
}
objInfo.VertPos = append(objInfo.VertPos, float32(f))
case "f":
facesStrings := strings.Split(s[1], " ")
objInfo.TriIndices = append(objInfo.TriIndices, getVertIndexFromFace(facesStrings[0]))
objInfo.TriIndices = append(objInfo.TriIndices, getVertIndexFromFace(facesStrings[1]))
objInfo.TriIndices = append(objInfo.TriIndices, getVertIndexFromFace(facesStrings[2]))
default:
}
}
return objInfo, nil
}
func getVertIndexFromFace(f string) uint32 {
indxStr := strings.SplitN(f, "/", 2)[0]
index, err := strconv.Atoi(indxStr)
if err != nil {
logging.ErrLog.Printf("Invalid face index '%v'. Err: %v", indxStr, err)
return 0
}
return uint32(index) - 1
}

46
res/models/obj.obj Executable file
View File

@ -0,0 +1,46 @@
# Blender v2.92.0 OBJ File: ''
# www.blender.org
mtllib obj.mtl
o Cube
v 2.275618 1.000000 0.349413
v 3.520138 -1.000000 0.102233
v 2.275618 1.000000 0.752820
v 3.520138 -1.000000 1.000000
v 0.244520 1.000000 0.349413
v -1.000000 -1.000000 0.102233
v 0.244520 1.000000 0.752820
v -1.000000 -1.000000 1.000000
vt 0.806168 0.568832
vt 0.693832 0.681168
vt 0.693832 0.568832
vt 0.375000 1.000000
vt 0.375000 0.750000
vt 0.375000 0.000000
vt 0.625000 0.250000
vt 0.375000 0.250000
vt 0.375000 0.500000
vt 0.125000 0.750000
vt 0.125000 0.500000
vt 0.806168 0.681168
vt 0.625000 0.931168
vt 0.625000 0.068832
vn 0.0000 1.0000 0.0000
vn 0.0000 0.1227 0.9924
vn -0.8490 0.5283 0.0000
vn 0.0000 -1.0000 0.0000
vn 0.8490 0.5283 0.0000
vn 0.0000 0.1227 -0.9924
usemtl Material
s off
f 5/1/1 3/2/1 1/3/1
f 3/2/2 8/4/2 4/5/2
f 8/6/3 5/7/3 6/8/3
f 2/9/4 8/10/4 6/11/4
f 1/3/5 4/5/5 2/9/5
f 5/7/6 2/9/6 6/8/6
f 5/1/1 7/12/1 3/2/1
f 3/2/2 7/13/2 8/4/2
f 8/6/3 7/14/3 5/7/3
f 2/9/4 4/5/4 8/10/4
f 1/3/5 3/2/5 4/5/5
f 5/7/6 1/3/6 2/9/6