| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package animation
- import rl "vendor:raylib"
- import r3d "../r3d"
- main :: proc() {
- // Initialize window
- rl.InitWindow(800, 450, "[r3d] - Animation example")
- defer rl.CloseWindow()
- rl.SetTargetFPS(60)
- // Initialize R3D with FXAA
- r3d.Init(rl.GetScreenWidth(), rl.GetScreenHeight())
- defer r3d.Close()
- r3d.SetAntiAliasing(.FXAA)
- // Setup environment sky
- cubemap := r3d.LoadCubemap("./resources/panorama/indoor.png", .AUTO_DETECT)
- env := r3d.GetEnvironment()
- env.background.skyBlur = 0.3
- env.background.energy = 0.6
- env.background.sky = cubemap
- // Setup environment ambient
- ambientMap := r3d.GenAmbientMap(cubemap, {.ILLUMINATION})
- env.ambient._map = ambientMap
- env.ambient.energy = 0.25
- // Setup tonemapping
- env.tonemap.mode = .FILMIC
- env.tonemap.exposure = 1.5
- // Generate a ground plane and load the animated model
- plane := r3d.GenMeshPlane(10, 10, 1, 1)
- model := r3d.LoadModel("./resources/models/CesiumMan.glb")
- // Load animations
- modelAnims := r3d.LoadAnimationLib("./resources/models/CesiumMan.glb")
- modelPlayer := r3d.LoadAnimationPlayer(model.skeleton, modelAnims)
- // Setup animation playing
- r3d.SetAnimationWeight(&modelPlayer, 0, 1.0)
- r3d.SetAnimationLoop(&modelPlayer, 0, true)
- r3d.PlayAnimation(&modelPlayer, 0)
- // Create model instances
- instances := r3d.LoadInstanceBuffer(4, {.POSITION})
- positions := cast([^]rl.Vector3)r3d.MapInstances(instances, {.POSITION})
- for z in 0..<2 {
- for x in 0..<2 {
- positions[z*2 + x] = {f32(x) - 0.5, 0, f32(z) - 0.5}
- }
- }
- r3d.UnmapInstances(instances, {.POSITION})
- // Setup lights with shadows
- light := r3d.CreateLight(.DIR)
- r3d.SetLightDirection(light, {-1.0, -1.0, -1.0})
- r3d.SetLightActive(light, true)
- r3d.SetLightRange(light, 10.0)
- r3d.EnableShadow(light)
- // Setup camera
- camera: rl.Camera3D = {
- position = {0, 1.5, 3.0},
- target = {0, 0.75, 0.0},
- up = {0, 1, 0},
- fovy = 60
- }
- // Main loop
- for !rl.WindowShouldClose()
- {
- delta := rl.GetFrameTime()
- rl.UpdateCamera(&camera, rl.CameraMode.ORBITAL)
- r3d.UpdateAnimationPlayer(&modelPlayer, delta)
- rl.BeginDrawing()
- rl.ClearBackground(rl.RAYWHITE)
- r3d.Begin(camera)
- r3d.DrawMesh(plane, r3d.GetDefaultMaterial(), {0, 0, 0}, 1.0)
- r3d.DrawAnimatedModel(model, modelPlayer, {0, 0, 0}, 1.25)
- r3d.DrawAnimatedModelInstanced(model, modelPlayer, instances, 4)
- r3d.End()
- rl.EndDrawing()
- }
- // Cleanup
- r3d.UnloadAnimationPlayer(modelPlayer)
- r3d.UnloadAnimationLib(modelAnims)
- r3d.UnloadModel(model, true)
- r3d.UnloadMesh(plane)
- }
|