emission.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include "r3d/r3d_environment.h"
  2. #include <r3d/r3d.h>
  3. #include <raymath.h>
  4. #ifndef RESOURCES_PATH
  5. # define RESOURCES_PATH "./"
  6. #endif
  7. static void ToggleLight(R3D_Light light, R3D_Skybox sky);
  8. int main(void)
  9. {
  10. // Initialize window
  11. InitWindow(800, 450, "[r3d] - Emission example");
  12. SetTargetFPS(60);
  13. // Initialize R3D
  14. R3D_Init(GetScreenWidth(), GetScreenHeight(), 0);
  15. // Configure post-processing (Tonemap + Bloom)
  16. R3D_ENVIRONMENT_SET(tonemap.mode, R3D_TONEMAP_ACES);
  17. R3D_ENVIRONMENT_SET(tonemap.exposure, 0.5f);
  18. R3D_ENVIRONMENT_SET(tonemap.white, 4.0f);
  19. R3D_ENVIRONMENT_SET(bloom.mode, R3D_BLOOM_ADDITIVE);
  20. R3D_ENVIRONMENT_SET(bloom.softThreshold, 0.2f);
  21. R3D_ENVIRONMENT_SET(bloom.threshold, 0.6f);
  22. R3D_ENVIRONMENT_SET(bloom.intensity, 0.2f);
  23. R3D_ENVIRONMENT_SET(bloom.levels, 0.5f);
  24. R3D_ENVIRONMENT_SET(ssil.enabled, true);
  25. R3D_ENVIRONMENT_SET(ssil.energy, 4.0f);
  26. // Load and set skybox
  27. R3D_Skybox skybox = R3D_LoadSkybox(RESOURCES_PATH "sky/skybox3.png", CUBEMAP_LAYOUT_AUTO_DETECT);
  28. R3D_ENVIRONMENT_SET(background.sky, skybox);
  29. R3D_ENVIRONMENT_SET(ambient.reflect, 0.6f);
  30. // Load model
  31. R3D_Model model = R3D_LoadModel(RESOURCES_PATH "emission.glb");
  32. // Create ground plane
  33. R3D_Mesh plane = R3D_GenMeshPlane(1000, 1000, 1, 1);
  34. R3D_Material material = R3D_GetDefaultMaterial();
  35. // Setup spotlight
  36. R3D_Light light = R3D_CreateLight(R3D_LIGHT_SPOT);
  37. R3D_LightLookAt(light, (Vector3){0, 10, 5}, (Vector3){0});
  38. R3D_SetLightOuterCutOff(light, 45.0f);
  39. R3D_SetLightInnerCutOff(light, 22.5f);
  40. R3D_EnableShadow(light, 4096);
  41. R3D_SetLightActive(light, true);
  42. // Setup camera
  43. Camera3D camera = {
  44. .position = {-1.0f, 1.75f, 1.75f},
  45. .target = {0, 0.5f, 0},
  46. .up = {0, 1, 0},
  47. .fovy = 60
  48. };
  49. float rotModel = 0.0f;
  50. // Main loop
  51. while (!WindowShouldClose())
  52. {
  53. float delta = GetFrameTime();
  54. // Input
  55. if (IsKeyPressed(KEY_SPACE)) {
  56. ToggleLight(light, skybox);
  57. }
  58. if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) {
  59. camera.position.y = Clamp(camera.position.y + 0.01f * GetMouseDelta().y, 0.25f, 2.5f);
  60. rotModel += 0.01f * GetMouseDelta().x;
  61. }
  62. BeginDrawing();
  63. ClearBackground(RAYWHITE);
  64. // Render scene
  65. R3D_Begin(camera);
  66. R3D_DrawMesh(&plane, &material, MatrixIdentity());
  67. R3D_DrawModelEx(&model, (Vector3){0}, (Vector3){0, 1, 0}, rotModel, (Vector3){1, 1, 1});
  68. R3D_End();
  69. // UI
  70. DrawText("Press SPACE to toggle the light", 10, 10, 20, LIME);
  71. DrawText("Model by har15204405", 10, GetScreenHeight() - 26, 16, LIME);
  72. EndDrawing();
  73. }
  74. // Cleanup
  75. R3D_UnloadModel(&model, true);
  76. R3D_UnloadMesh(&plane);
  77. R3D_Close();
  78. CloseWindow();
  79. return 0;
  80. }
  81. void ToggleLight(R3D_Light light, R3D_Skybox sky)
  82. {
  83. if (R3D_IsLightActive(light)) {
  84. R3D_SetLightActive(light, false);
  85. R3D_ENVIRONMENT_SET(background.sky, (R3D_Skybox) {0});
  86. R3D_ENVIRONMENT_SET(background.color, BLACK);
  87. R3D_ENVIRONMENT_SET(ambient.color, BLACK);
  88. } else {
  89. R3D_SetLightActive(light, true);
  90. R3D_ENVIRONMENT_SET(background.sky, sky);
  91. }
  92. }