| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package probe
- import rl "vendor:raylib"
- import "core:math"
- import r3d "../r3d"
- main :: proc() {
- // Initialize window
- rl.InitWindow(800, 450, "[r3d] - Probe example")
- defer rl.CloseWindow()
- rl.SetTargetFPS(60)
- // Initialize R3D
- r3d.Init(rl.GetScreenWidth(), rl.GetScreenHeight())
- defer r3d.Close()
- // Setup environment sky
- cubemap := r3d.LoadCubemap("./resources/panorama/indoor.png", .AUTO_DETECT)
- defer r3d.UnloadCubemap(cubemap)
- env := r3d.GetEnvironment()
- env.background.skyBlur = 0.3
- env.background.sky = cubemap
- // Setup environment ambient
- ambientMap := r3d.GenAmbientMap(cubemap, {.ILLUMINATION, .REFLECTION})
- defer r3d.UnloadAmbientMap(ambientMap)
- env.ambient._map = ambientMap
- // Setup tonemapping
- env.tonemap.mode = .FILMIC
- // Create meshes
- plane := r3d.GenMeshPlane(30, 30, 1, 1)
- defer r3d.UnloadMesh(plane)
- sphere := r3d.GenMeshSphere(0.5, 64, 64)
- defer r3d.UnloadMesh(sphere)
- material := r3d.GetDefaultMaterial()
- // Create light
- light := r3d.CreateLight(.SPOT)
- r3d.LightLookAt(light, {0, 10, 5}, {0, 0, 0})
- r3d.SetLightActive(light, true)
- r3d.EnableShadow(light)
- // Create probe
- probe := r3d.CreateProbe({.ILLUMINATION, .REFLECTION})
- r3d.SetProbePosition(probe, {0, 1, 0})
- r3d.SetProbeShadows(probe, true)
- r3d.SetProbeFalloff(probe, 0.5)
- r3d.SetProbeActive(probe, true)
- // Setup camera
- camera: rl.Camera3D = {
- position = {0, 3.0, 6.0},
- target = {0, 0.5, 0},
- up = {0, 1, 0},
- fovy = 60,
- }
- // Main loop
- for !rl.WindowShouldClose()
- {
- rl.UpdateCamera(&camera, rl.CameraMode.ORBITAL)
- rl.BeginDrawing()
- rl.ClearBackground(rl.RAYWHITE)
- r3d.Begin(camera)
- material.orm.roughness = 0.5
- material.orm.metalness = 0.0
- r3d.DrawMesh(plane, material, {0, 0, 0}, 1.0)
- for i in -1..=1 {
- material.orm.roughness = math.abs(f32(i)) * 0.4
- material.orm.metalness = 1.0 - math.abs(f32(i))
- r3d.DrawMesh(sphere, material, {f32(i) * 3.0, 1.0, 0}, 2.0)
- }
- r3d.End()
- rl.EndDrawing()
- }
- }
|