sponza.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include <r3d/r3d.h>
  2. #include <raymath.h>
  3. #ifndef RESOURCES_PATH
  4. # define RESOURCES_PATH "./"
  5. #endif
  6. int main(void)
  7. {
  8. // Initialize window
  9. InitWindow(800, 450, "[r3d] - Sponza example");
  10. SetTargetFPS(60);
  11. // Initialize R3D
  12. R3D_Init(GetScreenWidth(), GetScreenHeight());
  13. // Post-processing setup
  14. R3D_ENVIRONMENT_SET(bloom.mode, R3D_BLOOM_MIX);
  15. R3D_ENVIRONMENT_SET(ssao.enabled, true);
  16. // Background and ambient
  17. R3D_ENVIRONMENT_SET(background.color, SKYBLUE);
  18. R3D_ENVIRONMENT_SET(ambient.color, GRAY);
  19. // Load Sponza model
  20. R3D_SetTextureFilter(TEXTURE_FILTER_ANISOTROPIC_8X);
  21. R3D_Model sponza = R3D_LoadModel(RESOURCES_PATH "models/Sponza.glb");
  22. // Setup lights
  23. R3D_Light lights[2];
  24. for (int i = 0; i < 2; i++) {
  25. lights[i] = R3D_CreateLight(R3D_LIGHT_OMNI);
  26. R3D_SetLightPosition(lights[i], (Vector3){ i ? -10.0f : 10.0f, 20.0f, 0.0f });
  27. R3D_SetLightActive(lights[i], true);
  28. R3D_SetLightEnergy(lights[i], 4.0f);
  29. R3D_SetShadowUpdateMode(lights[i], R3D_SHADOW_UPDATE_MANUAL);
  30. R3D_EnableShadow(lights[i]);
  31. }
  32. // Setup camera
  33. Camera3D camera = {
  34. .position = {8.0f, 1.0f, 0.5f},
  35. .target = {0.0f, 2.0f, -2.0f},
  36. .up = {0.0f, 1.0f, 0.0f},
  37. .fovy = 60.0f
  38. };
  39. // Capture mouse
  40. DisableCursor();
  41. // Main loop
  42. while (!WindowShouldClose())
  43. {
  44. UpdateCamera(&camera, CAMERA_FREE);
  45. // Toggle SSAO
  46. if (IsKeyPressed(KEY_ONE)) {
  47. R3D_ENVIRONMENT_SET(ssao.enabled, !R3D_ENVIRONMENT_GET(ssao.enabled));
  48. }
  49. // Toggle SSIL
  50. if (IsKeyPressed(KEY_TWO)) {
  51. R3D_ENVIRONMENT_SET(ssil.enabled, !R3D_ENVIRONMENT_GET(ssil.enabled));
  52. }
  53. // Toggle SSR
  54. if (IsKeyPressed(KEY_THREE)) {
  55. R3D_ENVIRONMENT_SET(ssr.enabled, !R3D_ENVIRONMENT_GET(ssr.enabled));
  56. }
  57. // Toggle fog
  58. if (IsKeyPressed(KEY_FOUR)) {
  59. R3D_ENVIRONMENT_SET(fog.mode, R3D_ENVIRONMENT_GET(fog.mode) == R3D_FOG_DISABLED ? R3D_FOG_EXP : R3D_FOG_DISABLED);
  60. }
  61. // Toggle FXAA
  62. if (IsKeyPressed(KEY_FIVE)) {
  63. R3D_SetAntiAliasing(!R3D_GetAntiAliasing());
  64. }
  65. // Cycle tonemapping
  66. if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
  67. R3D_Tonemap mode = R3D_ENVIRONMENT_GET(tonemap.mode);
  68. R3D_ENVIRONMENT_SET(tonemap.mode, (mode + R3D_TONEMAP_COUNT - 1) % R3D_TONEMAP_COUNT);
  69. }
  70. if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) {
  71. R3D_Tonemap mode = R3D_ENVIRONMENT_GET(tonemap.mode);
  72. R3D_ENVIRONMENT_SET(tonemap.mode, (mode + 1) % R3D_TONEMAP_COUNT);
  73. }
  74. BeginDrawing();
  75. ClearBackground(RAYWHITE);
  76. // Draw Sponza model
  77. R3D_Begin(camera);
  78. R3D_DrawModel(sponza, Vector3Zero(), 1.0f);
  79. R3D_End();
  80. // Draw lights
  81. BeginMode3D(camera);
  82. DrawSphere(R3D_GetLightPosition(lights[0]), 0.5f, WHITE);
  83. DrawSphere(R3D_GetLightPosition(lights[1]), 0.5f, WHITE);
  84. EndMode3D();
  85. // Display tonemapping
  86. R3D_Tonemap tonemap = R3D_ENVIRONMENT_GET(tonemap.mode);
  87. const char* tonemapText = "";
  88. switch (tonemap)
  89. {
  90. case R3D_TONEMAP_LINEAR: tonemapText = "< TONEMAP LINEAR >"; break;
  91. case R3D_TONEMAP_REINHARD: tonemapText = "< TONEMAP REINHARD >"; break;
  92. case R3D_TONEMAP_FILMIC: tonemapText = "< TONEMAP FILMIC >"; break;
  93. case R3D_TONEMAP_ACES: tonemapText = "< TONEMAP ACES >"; break;
  94. case R3D_TONEMAP_AGX: tonemapText = "< TONEMAP AGX >"; break;
  95. default: break;
  96. }
  97. DrawText(tonemapText, GetScreenWidth() - MeasureText(tonemapText, 20) - 10, 10, 20, LIME);
  98. DrawFPS(10, 10);
  99. EndDrawing();
  100. }
  101. // Cleanup
  102. R3D_UnloadModel(sponza, true);
  103. R3D_Close();
  104. CloseWindow();
  105. return 0;
  106. }