raylib-go/examples/models/vox_loading/main.go
2025-06-22 17:48:18 -04:00

82 lines
1.8 KiB
Go

package main
import (
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
screenWidth := int32(1280)
screenHeight := int32(720)
rl.InitWindow(screenWidth, screenHeight, "raylib [models] example - voxel loading")
camera := rl.Camera{}
camera.Position = rl.NewVector3(10.0, 10.0, 10.0)
camera.Target = rl.NewVector3(0.0, 0.0, 0.0)
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
camera.Fovy = 45.0
camera.Projection = rl.CameraPerspective
voxFiles := []string{"knight.vox", "sword.vox", "monument.vox"}
var models []rl.Model
for i := 0; i < len(voxFiles); i++ {
models = append(models, rl.LoadModel(voxFiles[i]))
bb := rl.GetModelBoundingBox(models[i])
center := rl.Vector3Zero()
center.X = bb.Min.X + ((bb.Max.X - bb.Min.X) / 2)
center.Z = bb.Min.Z + ((bb.Max.Z - bb.Min.Z) / 2)
matTranslate := rl.MatrixTranslate(-center.X, 0, -center.Z)
models[i].Transform = matTranslate
}
currentModel := 0
rl.DisableCursor()
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rl.UpdateCamera(&camera, rl.CameraOrbital)
if rl.IsKeyPressed(rl.KeyUp) {
currentModel++
if currentModel >= len(models) {
currentModel = 0
}
}
if rl.IsKeyPressed(rl.KeyDown) {
currentModel--
if currentModel < 0 {
currentModel = len(models) - 1
}
}
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode3D(camera)
rl.DrawModel(models[currentModel], rl.Vector3Zero(), 1, rl.White)
rl.EndMode3D()
rl.DrawText("current voxel file: "+voxFiles[currentModel], 10, 10, 10, rl.Black)
rl.DrawText("UP/DOWN ARROW KEYS CHANGE FILE", 10, 30, 10, rl.Black)
rl.DrawText("MOUSE SCROLL OR KEYPAD + / - TO CHANGE ZOOM", 10, 50, 10, rl.Black)
rl.EndDrawing()
}
for i := 0; i < len(models); i++ {
rl.UnloadModel(models[i])
}
rl.CloseWindow()
}