lights.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "./common.h"
  2. /* === Resources === */
  3. static Model plane = { 0 };
  4. static Mesh sphere = { 0 };
  5. static Material material = { 0 };
  6. static Camera3D camera = { 0 };
  7. static Matrix* transforms = NULL;
  8. static R3D_Light lights[100] = { 0 };
  9. /* === Examples === */
  10. const char* Init(void)
  11. {
  12. R3D_Init(GetScreenWidth(), GetScreenHeight(), 0);
  13. SetTargetFPS(60);
  14. plane = LoadModelFromMesh(GenMeshPlane(1000, 1000, 1, 1));
  15. plane.materials[0].maps[MATERIAL_MAP_OCCLUSION].value = 1;
  16. plane.materials[0].maps[MATERIAL_MAP_ROUGHNESS].value = 1;
  17. plane.materials[0].maps[MATERIAL_MAP_METALNESS].value = 0;
  18. sphere = GenMeshSphere(0.35f, 16, 16);
  19. material = LoadMaterialDefault();
  20. material.maps[MATERIAL_MAP_OCCLUSION].value = 1;
  21. material.maps[MATERIAL_MAP_ROUGHNESS].value = 0.25;
  22. material.maps[MATERIAL_MAP_METALNESS].value = 0.75;
  23. camera = (Camera3D) {
  24. .position = (Vector3) { 0, 2, 2 },
  25. .target = (Vector3) { 0, 0, 0 },
  26. .up = (Vector3) { 0, 1, 0 },
  27. .fovy = 60,
  28. };
  29. transforms = RL_MALLOC(100 * 100 * sizeof(Matrix));
  30. for (int x = -50; x < 50; x++) {
  31. for (int z = -50; z < 50; z++) {
  32. int index = (z + 50) * 100 + (x + 50);
  33. transforms[index] = MatrixTranslate(x, 0, z);
  34. }
  35. }
  36. for (int x = -5; x < 5; x++) {
  37. for (int z = -5; z < 5; z++) {
  38. int index = (z + 5) * 10 + (x + 5);
  39. lights[index] = R3D_CreateLight(R3D_LIGHT_OMNI);
  40. R3D_SetLightPosition(lights[index], (Vector3) { x * 10, 10, z * 10 });
  41. R3D_SetLightColor(lights[index], ColorFromHSV((float)index / 100 * 360, 1.0f, 1.0f));
  42. R3D_SetLightRange(lights[index], 20.0f);
  43. R3D_SetLightActive(lights[index], true);
  44. }
  45. }
  46. return "[r3d] - lights example";
  47. }
  48. void Update(float delta)
  49. {
  50. UpdateCamera(&camera, CAMERA_ORBITAL);
  51. }
  52. void Draw(void)
  53. {
  54. R3D_Begin(camera);
  55. R3D_DrawModel(plane, (Vector3) { 0, -0.5f, 0 }, 1.0f);
  56. R3D_DrawMeshInstanced(sphere, material, transforms, 100 * 100);
  57. R3D_End();
  58. DrawFPS(10, 10);
  59. if (IsKeyDown(KEY_SPACE)) {
  60. BeginMode3D(camera);
  61. for (int i = 0; i < 100; i++) {
  62. R3D_DrawLightShape(lights[i]);
  63. }
  64. EndMode3D();
  65. }
  66. }
  67. void Close(void)
  68. {
  69. UnloadModel(plane);
  70. UnloadMesh(sphere);
  71. UnloadMaterial(material);
  72. R3D_Close();
  73. }