probe.odin 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package probe
  2. import rl "vendor:raylib"
  3. import "core:math"
  4. import r3d "../r3d"
  5. main :: proc() {
  6. // Initialize window
  7. rl.InitWindow(800, 450, "[r3d] - Probe example")
  8. defer rl.CloseWindow()
  9. rl.SetTargetFPS(60)
  10. // Initialize R3D
  11. r3d.Init(rl.GetScreenWidth(), rl.GetScreenHeight())
  12. defer r3d.Close()
  13. // Setup environment sky
  14. cubemap := r3d.LoadCubemap("./resources/panorama/indoor.png", .AUTO_DETECT)
  15. defer r3d.UnloadCubemap(cubemap)
  16. env := r3d.GetEnvironment()
  17. env.background.skyBlur = 0.3
  18. env.background.sky = cubemap
  19. // Setup environment ambient
  20. ambientMap := r3d.GenAmbientMap(cubemap, {.ILLUMINATION, .REFLECTION})
  21. defer r3d.UnloadAmbientMap(ambientMap)
  22. env.ambient._map = ambientMap
  23. // Setup tonemapping
  24. env.tonemap.mode = .FILMIC
  25. // Create meshes
  26. plane := r3d.GenMeshPlane(30, 30, 1, 1)
  27. defer r3d.UnloadMesh(plane)
  28. sphere := r3d.GenMeshSphere(0.5, 64, 64)
  29. defer r3d.UnloadMesh(sphere)
  30. material := r3d.GetDefaultMaterial()
  31. // Create light
  32. light := r3d.CreateLight(.SPOT)
  33. r3d.LightLookAt(light, {0, 10, 5}, {0, 0, 0})
  34. r3d.SetLightActive(light, true)
  35. r3d.EnableShadow(light)
  36. // Create probe
  37. probe := r3d.CreateProbe({.ILLUMINATION, .REFLECTION})
  38. r3d.SetProbePosition(probe, {0, 1, 0})
  39. r3d.SetProbeShadows(probe, true)
  40. r3d.SetProbeFalloff(probe, 0.5)
  41. r3d.SetProbeActive(probe, true)
  42. // Setup camera
  43. camera: rl.Camera3D = {
  44. position = {0, 3.0, 6.0},
  45. target = {0, 0.5, 0},
  46. up = {0, 1, 0},
  47. fovy = 60,
  48. }
  49. // Main loop
  50. for !rl.WindowShouldClose()
  51. {
  52. rl.UpdateCamera(&camera, rl.CameraMode.ORBITAL)
  53. rl.BeginDrawing()
  54. rl.ClearBackground(rl.RAYWHITE)
  55. r3d.Begin(camera)
  56. material.orm.roughness = 0.5
  57. material.orm.metalness = 0.0
  58. r3d.DrawMesh(plane, material, {0, 0, 0}, 1.0)
  59. for i in -1..=1 {
  60. material.orm.roughness = math.abs(f32(i)) * 0.4
  61. material.orm.metalness = 1.0 - math.abs(f32(i))
  62. r3d.DrawMesh(sphere, material, {f32(i) * 3.0, 1.0, 0}, 2.0)
  63. }
  64. r3d.End()
  65. rl.EndDrawing()
  66. }
  67. }