bloom.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "./common.h"
  2. /* === Resources === */
  3. static Model sphere = { 0 };
  4. static R3D_Skybox skybox = { 0 };
  5. static Camera3D camera = { 0 };
  6. static Material materials[5 * 5] = { 0 };
  7. /* === Examples === */
  8. const char* Init(void)
  9. {
  10. R3D_Init(GetScreenWidth(), GetScreenHeight(), 0);
  11. SetTargetFPS(60);
  12. R3D_SetBloomMode(R3D_BLOOM_ADDITIVE);
  13. sphere = LoadModelFromMesh(GenMeshSphere(0.5f, 64, 64));
  14. UnloadMaterial(sphere.materials[0]);
  15. for (int y = 0; y < 5; y++) {
  16. for (int x = 0; x < 5; x++) {
  17. int i = y * 5 + x;
  18. materials[i] = LoadMaterialDefault();
  19. materials[i].maps[MATERIAL_MAP_EMISSION].value = 1.0f;
  20. materials[i].maps[MATERIAL_MAP_OCCLUSION].value = 1.0f;
  21. materials[i].maps[MATERIAL_MAP_ROUGHNESS].value = (float)x / 5;
  22. materials[i].maps[MATERIAL_MAP_METALNESS].value = (float)y / 5;
  23. materials[i].maps[MATERIAL_MAP_ALBEDO].color = ColorFromHSV(x / 5.0f * 330, 1.0f, 1.0f);
  24. materials[i].maps[MATERIAL_MAP_EMISSION].color = materials[i].maps[MATERIAL_MAP_ALBEDO].color;
  25. materials[i].maps[MATERIAL_MAP_EMISSION].texture = materials[i].maps[MATERIAL_MAP_ALBEDO].texture;
  26. }
  27. }
  28. skybox = R3D_LoadSkybox(RESOURCES_PATH "sky/skybox1.png", CUBEMAP_LAYOUT_AUTO_DETECT);
  29. R3D_EnableSkybox(skybox);
  30. camera = (Camera3D){
  31. .position = (Vector3) { 0, 0, 5 },
  32. .target = (Vector3) { 0, 0, 0 },
  33. .up = (Vector3) { 0, 1, 0 },
  34. .fovy = 60,
  35. };
  36. return "[r3d] - bloom example";
  37. }
  38. void Update(float delta)
  39. {
  40. UpdateCamera(&camera, CAMERA_ORBITAL);
  41. }
  42. void Draw(void)
  43. {
  44. R3D_Begin(camera);
  45. for (int y = -2; y <= 2; y++) {
  46. for (int x = -2; x <= 2; x++) {
  47. sphere.materials[0] = materials[(y + 2) * 5 + (x + 2)];
  48. R3D_DrawModel(sphere, (Vector3) { x * 1.1f, y * 1.1f, 0.0f }, 1.0f);
  49. }
  50. }
  51. R3D_End();
  52. R3D_DrawBufferEmission(10, 10, 100, 100);
  53. R3D_DrawBufferBloom(120, 10, 100, 100);
  54. }
  55. void Close(void)
  56. {
  57. UnloadModel(sphere);
  58. R3D_UnloadSkybox(skybox);
  59. R3D_Close();
  60. }