mirror of
https://github.com/bloeys/nmage.git
synced 2025-12-29 13:28:20 +00:00
Day8: Assimp+Basic Lights+Asserts+vert normals&colors
This commit is contained in:
BIN
res/models/color-cube.fbx
Executable file
BIN
res/models/color-cube.fbx
Executable file
Binary file not shown.
@ -1,73 +0,0 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user