From fb1037a2417e516d4be02d962b113e5d55cd5855 Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 1 Sep 2022 20:46:06 +0200 Subject: [PATCH] ADDED: Complete support for M3D animations! #2648 --- examples/README.md | 255 +++++++++--------- examples/models/models_loading_m3d.c | 139 ++++++---- examples/models/models_loading_m3d.png | Bin 16992 -> 23682 bytes .../models/resources/models/m3d/CesiumMan.m3d | Bin 0 -> 73844 bytes .../models/resources/models/m3d/seagull.m3d | Bin 0 -> 10263 bytes .../models/resources/models/m3d/suzanne.m3d | Bin 0 -> 11645 bytes src/rmodels.c | 63 ++++- 7 files changed, 263 insertions(+), 194 deletions(-) create mode 100644 examples/models/resources/models/m3d/CesiumMan.m3d create mode 100644 examples/models/resources/models/m3d/seagull.m3d create mode 100644 examples/models/resources/models/m3d/suzanne.m3d diff --git a/examples/README.md b/examples/README.md index 158f81df4..7a3e72f87 100644 --- a/examples/README.md +++ b/examples/README.md @@ -24,36 +24,36 @@ Examples using raylib core platform functionality like window creation, inputs, | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 01 | [core_basic_window](core/core_basic_window.c) | core_basic_window | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 02 | [core_input_keys](core/core_input_keys.c) | core_input_keys | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 03 | [core_input_mouse](core/core_input_mouse.c) | core_input_mouse | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) | -| 04 | [core_input_mouse_wheel](core/core_input_mouse_wheel.c) | core_input_mouse_wheel | ⭐️☆☆☆ | 1.1 | 1.3 | [Ray](https://github.com/raysan5) | -| 05 | [core_input_gamepad](core/core_input_gamepad.c) | core_input_gamepad | ⭐️☆☆☆ | 1.1 | **4.2** | [Ray](https://github.com/raysan5) | -| 06 | [core_input_multitouch](core/core_input_multitouch.c) | core_input_multitouch | ⭐️☆☆☆ | 2.1 | 2.5 | [Berni](https://github.com/Berni8k) | -| 07 | [core_input_gestures](core/core_input_gestures.c) | core_input_gestures | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) | -| 08 | [core_2d_camera](core/core_2d_camera.c) | core_2d_camera | ⭐️⭐️☆☆ | 1.5 | 3.0 | [Ray](https://github.com/raysan5) | -| 09 | [core_2d_camera_mouse_zoom](core/core_2d_camera_mouse_zoom.c) | core_2d_camera_mouse_zoom | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) | -| 10 | [core_2d_camera_platformer](core/core_2d_camera_platformer.c) | core_2d_camera_platformer | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [avyy](https://github.com/avyy) | -| 11 | [core_3d_camera_mode](core/core_3d_camera_mode.c) | core_3d_camera_mode | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 12 | [core_3d_camera_free](core/core_3d_camera_free.c) | core_3d_camera_free | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 13 | [core_3d_camera_first_person](core/core_3d_camera_first_person.c) | core_3d_camera_first_person | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 14 | [core_3d_picking](core/core_3d_picking.c) | core_3d_picking | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 15 | [core_world_screen](core/core_world_screen.c) | core_world_screen | ⭐️⭐️☆☆ | 1.3 | 1.4 | [Ray](https://github.com/raysan5) | -| 16 | [core_custom_logging](core/core_custom_logging.c) | core_custom_logging | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Pablo Marcos Oltra](https://github.com/pamarcos) | -| 17 | [core_window_flags](core/core_window_flags.c) | core_window_flags | ⭐️⭐️⭐️☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 18 | [core_window_letterbox](core/core_window_letterbox.c) | core_window_letterbox | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Anata](https://github.com/anatagawa) | -| 19 | [core_window_should_close](core/core_window_should_close.c) | core_window_should_close | ⭐️☆☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | -| 20 | [core_drop_files](core/core_drop_files.c) | core_drop_files | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | -| 21 | [core_random_values](core/core_random_values.c) | core_random_values | ⭐️☆☆☆ | 1.1 | 1.1 | [Ray](https://github.com/raysan5) | -| 22 | [core_storage_values](core/core_storage_values.c) | core_storage_values | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) | -| 23 | [core_vr_simulator](core/core_vr_simulator.c) | core_vr_simulator | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | -| 24 | [core_loading_thread](core/core_loading_thread.c) | core_loading_thread | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [Ray](https://github.com/raysan5) | -| 25 | [core_scissor_test](core/core_scissor_test.c) | core_scissor_test | ⭐️☆☆☆ | 2.5 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) | -| 26 | [core_basic_screen_manager](core/core_basic_screen_manager.c) | core_basic_screen_manager | ⭐️☆☆☆ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) | -| 27 | [core_custom_frame_control](core/core_custom_frame_control.c) | core_custom_frame_control | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) | -| 28 | [core_smooth_pixelperfect](core/core_smooth_pixelperfect.c) | core_smooth_pixelperfect | ⭐️⭐️⭐️☆ | 3.7 | **4.0** | [Giancamillo Alessandroni](https://github.com/NotManyIdeasDev) | -| 29 | [core_split_screen](core/core_split_screen.c) | core_split_screen | ⭐️⭐️⭐️⭐️ | 3.7 | **4.0** | [Jeffery Myers](https://github.com/JeffM2501) | -| 30 | [core_window_should_close](core/core_window_should_close.c) | core_window_should_close | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | +| 01 | [core_basic_window](core/core_basic_window.c) | core_basic_window | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 02 | [core_input_keys](core/core_input_keys.c) | core_input_keys | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 03 | [core_input_mouse](core/core_input_mouse.c) | core_input_mouse | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) | +| 04 | [core_input_mouse_wheel](core/core_input_mouse_wheel.c) | core_input_mouse_wheel | ⭐️☆☆☆ | 1.1 | 1.3 | [Ray](https://github.com/raysan5) | +| 05 | [core_input_gamepad](core/core_input_gamepad.c) | core_input_gamepad | ⭐️☆☆☆ | 1.1 | **4.2** | [Ray](https://github.com/raysan5) | +| 06 | [core_input_multitouch](core/core_input_multitouch.c) | core_input_multitouch | ⭐️☆☆☆ | 2.1 | 2.5 | [Berni](https://github.com/Berni8k) | +| 07 | [core_input_gestures](core/core_input_gestures.c) | core_input_gestures | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) | +| 08 | [core_2d_camera](core/core_2d_camera.c) | core_2d_camera | ⭐️⭐️☆☆ | 1.5 | 3.0 | [Ray](https://github.com/raysan5) | +| 09 | [core_2d_camera_mouse_zoom](core/core_2d_camera_mouse_zoom.c) | core_2d_camera_mouse_zoom | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) | +| 10 | [core_2d_camera_platformer](core/core_2d_camera_platformer.c) | core_2d_camera_platformer | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [avyy](https://github.com/avyy) | +| 11 | [core_3d_camera_mode](core/core_3d_camera_mode.c) | core_3d_camera_mode | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 12 | [core_3d_camera_free](core/core_3d_camera_free.c) | core_3d_camera_free | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 13 | [core_3d_camera_first_person](core/core_3d_camera_first_person.c) | core_3d_camera_first_person | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 14 | [core_3d_picking](core/core_3d_picking.c) | core_3d_picking | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 15 | [core_world_screen](core/core_world_screen.c) | core_world_screen | ⭐️⭐️☆☆ | 1.3 | 1.4 | [Ray](https://github.com/raysan5) | +| 16 | [core_custom_logging](core/core_custom_logging.c) | core_custom_logging | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Pablo Marcos Oltra](https://github.com/pamarcos) | +| 17 | [core_window_flags](core/core_window_flags.c) | core_window_flags | ⭐️⭐️⭐️☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 18 | [core_window_letterbox](core/core_window_letterbox.c) | core_window_letterbox | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Anata](https://github.com/anatagawa) | +| 19 | [core_window_should_close](core/core_window_should_close.c) | core_window_should_close | ⭐️☆☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | +| 20 | [core_drop_files](core/core_drop_files.c) | core_drop_files | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | +| 21 | [core_random_values](core/core_random_values.c) | core_random_values | ⭐️☆☆☆ | 1.1 | 1.1 | [Ray](https://github.com/raysan5) | +| 22 | [core_storage_values](core/core_storage_values.c) | core_storage_values | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) | +| 23 | [core_vr_simulator](core/core_vr_simulator.c) | core_vr_simulator | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | +| 24 | [core_loading_thread](core/core_loading_thread.c) | core_loading_thread | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [Ray](https://github.com/raysan5) | +| 25 | [core_scissor_test](core/core_scissor_test.c) | core_scissor_test | ⭐️☆☆☆ | 2.5 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) | +| 26 | [core_basic_screen_manager](core/core_basic_screen_manager.c) | core_basic_screen_manager | ⭐️☆☆☆ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) | +| 27 | [core_custom_frame_control](core/core_custom_frame_control.c) | core_custom_frame_control | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) | +| 28 | [core_smooth_pixelperfect](core/core_smooth_pixelperfect.c) | core_smooth_pixelperfect | ⭐️⭐️⭐️☆ | 3.7 | **4.0** | [Giancamillo Alessandroni](https://github.com/NotManyIdeasDev) | +| 29 | [core_split_screen](core/core_split_screen.c) | core_split_screen | ⭐️⭐️⭐️⭐️ | 3.7 | **4.0** | [Jeffery Myers](https://github.com/JeffM2501) | +| 30 | [core_window_should_close](core/core_window_should_close.c) | core_window_should_close | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | ### category: shapes @@ -61,22 +61,22 @@ Examples using raylib shapes drawing functionality, provided by raylib [shapes]( | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 31 | [shapes_basic_shapes](shapes/shapes_basic_shapes.c) | shapes_basic_shapes | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) | -| 32 | [shapes_bouncing_ball](shapes/shapes_bouncing_ball.c) | shapes_bouncing_ball | ⭐️☆☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 33 | [shapes_colors_palette](shapes/shapes_colors_palette.c) | shapes_colors_palette | ⭐️⭐️☆☆ | 1.0 | 2.5 | [Ray](https://github.com/raysan5) | -| 34 | [shapes_logo_raylib](shapes/shapes_logo_raylib.c) | shapes_logo_raylib | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 35 | [shapes_logo_raylib_anim](shapes/shapes_logo_raylib_anim.c) | shapes_logo_raylib_anim | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | -| 36 | [shapes_rectangle_scaling](shapes/shapes_rectangle_scaling.c) | shapes_rectangle_scaling | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | -| 37 | [shapes_lines_bezier](shapes/shapes_lines_bezier.c) | shapes_lines_bezier | ⭐️☆☆☆ | 1.7 | 1.7 | [Ray](https://github.com/raysan5) | -| 38 | [shapes_collision_area](shapes/shapes_collision_area.c) | shapes_collision_area | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 39 | [shapes_following_eyes](shapes/shapes_following_eyes.c) | shapes_following_eyes | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 40 | [shapes_easings_ball_anim](shapes/shapes_easings_ball_anim.c) | shapes_easings_ball_anim | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 41 | [shapes_easings_box_anim](shapes/shapes_easings_box_anim.c) | shapes_easings_box_anim | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 42 | [shapes_easings_rectangle_array](shapes/shapes_easings_rectangle_array.c) | shapes_easings_rectangle_array | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 43 | [shapes_draw_ring](shapes/shapes_draw_ring.c) | shapes_draw_ring | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | -| 44 | [shapes_draw_circle_sector](shapes/shapes_draw_circle_sector.c) | shapes_draw_circle_sector | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | -| 45 | [shapes_draw_rectangle_rounded](shapes/shapes_draw_rectangle_rounded.c) | shapes_draw_rectangle_rounded | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | -| 46 | [shapes_top_down_lights](shapes/shapes_top_down_lights.c) | shapes_top_down_lights | ⭐️⭐️⭐️⭐️ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) | +| 31 | [shapes_basic_shapes](shapes/shapes_basic_shapes.c) | shapes_basic_shapes | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) | +| 32 | [shapes_bouncing_ball](shapes/shapes_bouncing_ball.c) | shapes_bouncing_ball | ⭐️☆☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 33 | [shapes_colors_palette](shapes/shapes_colors_palette.c) | shapes_colors_palette | ⭐️⭐️☆☆ | 1.0 | 2.5 | [Ray](https://github.com/raysan5) | +| 34 | [shapes_logo_raylib](shapes/shapes_logo_raylib.c) | shapes_logo_raylib | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 35 | [shapes_logo_raylib_anim](shapes/shapes_logo_raylib_anim.c) | shapes_logo_raylib_anim | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | +| 36 | [shapes_rectangle_scaling](shapes/shapes_rectangle_scaling.c) | shapes_rectangle_scaling | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | +| 37 | [shapes_lines_bezier](shapes/shapes_lines_bezier.c) | shapes_lines_bezier | ⭐️☆☆☆ | 1.7 | 1.7 | [Ray](https://github.com/raysan5) | +| 38 | [shapes_collision_area](shapes/shapes_collision_area.c) | shapes_collision_area | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 39 | [shapes_following_eyes](shapes/shapes_following_eyes.c) | shapes_following_eyes | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 40 | [shapes_easings_ball_anim](shapes/shapes_easings_ball_anim.c) | shapes_easings_ball_anim | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 41 | [shapes_easings_box_anim](shapes/shapes_easings_box_anim.c) | shapes_easings_box_anim | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 42 | [shapes_easings_rectangle_array](shapes/shapes_easings_rectangle_array.c) | shapes_easings_rectangle_array | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 43 | [shapes_draw_ring](shapes/shapes_draw_ring.c) | shapes_draw_ring | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | +| 44 | [shapes_draw_circle_sector](shapes/shapes_draw_circle_sector.c) | shapes_draw_circle_sector | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | +| 45 | [shapes_draw_rectangle_rounded](shapes/shapes_draw_rectangle_rounded.c) | shapes_draw_rectangle_rounded | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | +| 46 | [shapes_top_down_lights](shapes/shapes_top_down_lights.c) | shapes_top_down_lights | ⭐️⭐️⭐️⭐️ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) | ### category: textures @@ -84,28 +84,28 @@ Examples using raylib textures functionality, including image/textures loading/g | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 47 | [textures_logo_raylib](textures/textures_logo_raylib.c) | textures_logo_raylib | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 48 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | textures_srcrec_dstrec | ⭐️⭐️⭐️☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 49 | [textures_image_drawing](textures/textures_image_drawing.c) | textures_image_drawing | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) | -| 50 | [textures_image_generation](textures/textures_image_generation.c) | textures_image_generation | ⭐️⭐️☆☆ | 1.8 | 1.8 | [Ray](https://github.com/raysan5) | -| 51 | [textures_image_loading](textures/textures_image_loading.c) | textures_image_loading | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 52 | [textures_image_processing](textures/textures_image_processing.c) | textures_image_processing | ⭐️⭐️⭐️☆ | 1.4 | 3.5 | [Ray](https://github.com/raysan5) | -| 53 | [textures_image_text](textures/textures_image_text.c) | textures_image_text | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | -| 54 | [textures_to_image](textures/textures_to_image.c) | textures_to_image | ⭐️☆☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 55 | [textures_raw_data](textures/textures_raw_data.c) | textures_raw_data | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | -| 56 | [textures_particles_blending](textures/textures_particles_blending.c) | textures_particles_blending | ⭐️☆☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) | -| 57 | [textures_npatch_drawing](textures/textures_npatch_drawing.c) | textures_npatch_drawing | ⭐️⭐️⭐️☆ | 2.0 | 2.5 | [Jorge A. Gomes](https://github.com/overdev) | -| 58 | [textures_background_scrolling](textures/textures_background_scrolling.c) | textures_background_scrolling | ⭐️☆☆☆ | 2.0 | 2.5 | [Ray](https://github.com/raysan5) | -| 59 | [textures_sprite_anim](textures/textures_sprite_anim.c) | textures_sprite_anim | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 60 | [textures_sprite_button](textures/textures_sprite_button.c) | textures_sprite_button | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 61 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | textures_sprite_explosion | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 62 | [textures_bunnymark](textures/textures_bunnymark.c) | textures_bunnymark | ⭐️⭐️⭐️☆ | 1.6 | 2.5 | [Ray](https://github.com/raysan5) | -| 63 | [textures_mouse_painting](textures/textures_mouse_painting.c) | textures_mouse_painting | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) | -| 64 | [textures_blend_modes](textures/textures_blend_modes.c) | textures_blend_modes | ⭐️☆☆☆ | 3.5 | 3.5 | [Karlo Licudine](https://github.com/accidentalrebel) | -| 65 | [textures_draw_tiled](textures/textures_draw_tiled.c) | textures_draw_tiled | ⭐️⭐️⭐️☆ | 3.0 | **4.2** | [Vlad Adrian](https://github.com/demizdor) | -| 66 | [textures_polygon](textures/textures_polygon.c) | textures_polygon | ⭐️☆☆☆ | 3.7 | 3.7 | [Chris Camacho](https://github.com/codifies) | -| 67 | [textures_fog_of_war](textures/textures_fog_of_war.c) | textures_fog_of_war | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | -| 68 | [textures_gif_player](textures/textures_gif_player.c) | textures_gif_player | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | +| 47 | [textures_logo_raylib](textures/textures_logo_raylib.c) | textures_logo_raylib | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 48 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | textures_srcrec_dstrec | ⭐️⭐️⭐️☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 49 | [textures_image_drawing](textures/textures_image_drawing.c) | textures_image_drawing | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) | +| 50 | [textures_image_generation](textures/textures_image_generation.c) | textures_image_generation | ⭐️⭐️☆☆ | 1.8 | 1.8 | [Ray](https://github.com/raysan5) | +| 51 | [textures_image_loading](textures/textures_image_loading.c) | textures_image_loading | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 52 | [textures_image_processing](textures/textures_image_processing.c) | textures_image_processing | ⭐️⭐️⭐️☆ | 1.4 | 3.5 | [Ray](https://github.com/raysan5) | +| 53 | [textures_image_text](textures/textures_image_text.c) | textures_image_text | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | +| 54 | [textures_to_image](textures/textures_to_image.c) | textures_to_image | ⭐️☆☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 55 | [textures_raw_data](textures/textures_raw_data.c) | textures_raw_data | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | +| 56 | [textures_particles_blending](textures/textures_particles_blending.c) | textures_particles_blending | ⭐️☆☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) | +| 57 | [textures_npatch_drawing](textures/textures_npatch_drawing.c) | textures_npatch_drawing | ⭐️⭐️⭐️☆ | 2.0 | 2.5 | [Jorge A. Gomes](https://github.com/overdev) | +| 58 | [textures_background_scrolling](textures/textures_background_scrolling.c) | textures_background_scrolling | ⭐️☆☆☆ | 2.0 | 2.5 | [Ray](https://github.com/raysan5) | +| 59 | [textures_sprite_anim](textures/textures_sprite_anim.c) | textures_sprite_anim | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 60 | [textures_sprite_button](textures/textures_sprite_button.c) | textures_sprite_button | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 61 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | textures_sprite_explosion | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 62 | [textures_bunnymark](textures/textures_bunnymark.c) | textures_bunnymark | ⭐️⭐️⭐️☆ | 1.6 | 2.5 | [Ray](https://github.com/raysan5) | +| 63 | [textures_mouse_painting](textures/textures_mouse_painting.c) | textures_mouse_painting | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) | +| 64 | [textures_blend_modes](textures/textures_blend_modes.c) | textures_blend_modes | ⭐️☆☆☆ | 3.5 | 3.5 | [Karlo Licudine](https://github.com/accidentalrebel) | +| 65 | [textures_draw_tiled](textures/textures_draw_tiled.c) | textures_draw_tiled | ⭐️⭐️⭐️☆ | 3.0 | **4.2** | [Vlad Adrian](https://github.com/demizdor) | +| 66 | [textures_polygon](textures/textures_polygon.c) | textures_polygon | ⭐️☆☆☆ | 3.7 | 3.7 | [Chris Camacho](https://github.com/codifies) | +| 67 | [textures_fog_of_war](textures/textures_fog_of_war.c) | textures_fog_of_war | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | +| 68 | [textures_gif_player](textures/textures_gif_player.c) | textures_gif_player | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | ### category: text @@ -113,42 +113,43 @@ Examples using raylib text functionality, including sprite fonts loading/generat | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 69 | [text_raylib_fonts](text/text_raylib_fonts.c) | text_raylib_fonts | ⭐️☆☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) | -| 70 | [text_font_spritefont](text/text_font_spritefont.c) | text_font_spritefont | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 71 | [text_font_filters](text/text_font_filters.c) | text_font_filters | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | -| 72 | [text_font_loading](text/text_font_loading.c) | text_font_loading | ⭐️☆☆☆ | 1.4 | 3.0 | [Ray](https://github.com/raysan5) | -| 73 | [text_font_sdf](text/text_font_sdf.c) | text_font_sdf | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 74 | [text_format_text](text/text_format_text.c) | text_format_text | ⭐️☆☆☆ | 1.1 | 3.0 | [Ray](https://github.com/raysan5) | -| 75 | [text_input_box](text/text_input_box.c) | text_input_box | ⭐️⭐️☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) | -| 76 | [text_writing_anim](text/text_writing_anim.c) | text_writing_anim | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) | -| 77 | [text_rectangle_bounds](text/text_rectangle_bounds.c) | text_rectangle_bounds | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | -| 78 | [text_unicode](text/text_unicode.c) | text_unicode | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | -| 79 | [text_draw_3d](text/text_draw_3d.c) | text_draw_3d | ⭐️⭐️⭐️⭐️ | 3.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | -| 80 | [text_codepoints_loading](text/text_codepoints_loading.c) | text_codepoints_loading | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | - +| 69 | [text_raylib_fonts](text/text_raylib_fonts.c) | text_raylib_fonts | ⭐️☆☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) | +| 70 | [text_font_spritefont](text/text_font_spritefont.c) | text_font_spritefont | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 71 | [text_font_filters](text/text_font_filters.c) | text_font_filters | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | +| 72 | [text_font_loading](text/text_font_loading.c) | text_font_loading | ⭐️☆☆☆ | 1.4 | 3.0 | [Ray](https://github.com/raysan5) | +| 73 | [text_font_sdf](text/text_font_sdf.c) | text_font_sdf | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 74 | [text_format_text](text/text_format_text.c) | text_format_text | ⭐️☆☆☆ | 1.1 | 3.0 | [Ray](https://github.com/raysan5) | +| 75 | [text_input_box](text/text_input_box.c) | text_input_box | ⭐️⭐️☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) | +| 76 | [text_writing_anim](text/text_writing_anim.c) | text_writing_anim | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) | +| 77 | [text_rectangle_bounds](text/text_rectangle_bounds.c) | text_rectangle_bounds | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | +| 78 | [text_unicode](text/text_unicode.c) | text_unicode | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | +| 79 | [text_draw_3d](text/text_draw_3d.c) | text_draw_3d | ⭐️⭐️⭐️⭐️ | 3.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | +| 80 | [text_codepoints_loading](text/text_codepoints_loading.c) | text_codepoints_loading | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | + ### category: models Examples using raylib models functionality, including models loading/generation and drawing, provided by raylib [models](../src/models.c) module. | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 81 | [models_animation](models/models_animation.c) | models_animation | ⭐️⭐️☆☆ | 2.5 | 3.5 | [culacant](https://github.com/culacant) | -| 82 | [models_billboard](models/models_billboard.c) | models_billboard | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | -| 83 | [models_box_collisions](models/models_box_collisions.c) | models_box_collisions | ⭐️☆☆☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | -| 84 | [models_cubicmap](models/models_cubicmap.c) | models_cubicmap | ⭐️⭐️☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) | -| 85 | [models_first_person_maze](models/models_first_person_maze.c) | models_first_person_maze | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 86 | [models_geometric_shapes](models/models_geometric_shapes.c) | models_geometric_shapes | ⭐️☆☆☆ | 1.0 | 3.5 | [Ray](https://github.com/raysan5) | -| 87 | [models_mesh_generation](models/models_mesh_generation.c) | models_mesh_generation | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | -| 88 | [models_mesh_picking](models/models_mesh_picking.c) | models_mesh_picking | ⭐️⭐️⭐️☆ | 1.7 | **4.0** | [Joel Davis](https://github.com/joeld42) | -| 89 | [models_loading](models/models_loading.c) | models_loading | ⭐️☆☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | -| 90 | [models_loading_gltf](models/models_loading_gltf.c) | models_loading_gltf | ⭐️☆☆☆ | 3.7 | **4.2** | [Ray](https://github.com/raysan5) | -| 91 | [models_loading_vox](models/models_loading_vox.c) | models_loading_vox | ⭐️☆☆☆ | **4.0** | **4.0** | [Johann Nadalutti](https://github.com/procfxgen) | -| 92 | [models_orthographic_projection](models/models_orthographic_projection.c) | models_orthographic_projection | ⭐️☆☆☆ | 2.0 | 3.7 | [Max Danielsson](https://github.com/autious) | -| 93 | [models_rlgl_solar_system](models/models_rlgl_solar_system.c) | models_rlgl_solar_system | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | -| 94 | [models_yaw_pitch_roll](models/models_yaw_pitch_roll.c) | models_yaw_pitch_roll | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Berni](https://github.com/Berni8k) | -| 95 | [models_waving_cubes](models/models_waving_cubes.c) | models_waving_cubes | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [codecat](https://github.com/codecat) | -| 96 | [models_heightmap](models/models_heightmap.c) | models_heightmap | ⭐️☆☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) | -| 97 | [models_skybox](models/models_skybox.c) | models_skybox | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | +| 81 | [models_animation](models/models_animation.c) | models_animation | ⭐️⭐️☆☆ | 2.5 | 3.5 | [culacant](https://github.com/culacant) | +| 82 | [models_billboard](models/models_billboard.c) | models_billboard | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | +| 83 | [models_box_collisions](models/models_box_collisions.c) | models_box_collisions | ⭐️☆☆☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | +| 84 | [models_cubicmap](models/models_cubicmap.c) | models_cubicmap | ⭐️⭐️☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) | +| 85 | [models_first_person_maze](models/models_first_person_maze.c) | models_first_person_maze | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 86 | [models_geometric_shapes](models/models_geometric_shapes.c) | models_geometric_shapes | ⭐️☆☆☆ | 1.0 | 3.5 | [Ray](https://github.com/raysan5) | +| 87 | [models_mesh_generation](models/models_mesh_generation.c) | models_mesh_generation | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | +| 88 | [models_mesh_picking](models/models_mesh_picking.c) | models_mesh_picking | ⭐️⭐️⭐️☆ | 1.7 | **4.0** | [Joel Davis](https://github.com/joeld42) | +| 89 | [models_loading](models/models_loading.c) | models_loading | ⭐️☆☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | +| 90 | [models_loading_gltf](models/models_loading_gltf.c) | models_loading_gltf | ⭐️☆☆☆ | 3.7 | **4.2** | [Ray](https://github.com/raysan5) | +| 91 | [models_loading_vox](models/models_loading_vox.c) | models_loading_vox | ⭐️☆☆☆ | **4.0** | **4.0** | [Johann Nadalutti](https://github.com/procfxgen) | +| 92 | [models_loading_m3d](models/models_loading_m3d.c) | models_loading_m3d | ⭐️☆☆☆ | **4.2** | **4.2** | [bzt](https://bztsrc.gitlab.io/model3d) | +| 93 | [models_orthographic_projection](models/models_orthographic_projection.c) | models_orthographic_projection | ⭐️☆☆☆ | 2.0 | 3.7 | [Max Danielsson](https://github.com/autious) | +| 94 | [models_rlgl_solar_system](models/models_rlgl_solar_system.c) | models_rlgl_solar_system | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | +| 95 | [models_yaw_pitch_roll](models/models_yaw_pitch_roll.c) | models_yaw_pitch_roll | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Berni](https://github.com/Berni8k) | +| 96 | [models_waving_cubes](models/models_waving_cubes.c) | models_waving_cubes | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [codecat](https://github.com/codecat) | +| 97 | [models_heightmap](models/models_heightmap.c) | models_heightmap | ⭐️☆☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) | +| 98 | [models_skybox](models/models_skybox.c) | models_skybox | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | ### category: shaders @@ -156,36 +157,36 @@ Examples using raylib shaders functionality, including shaders loading, paramete | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 98 | [shaders_basic_lighting](shaders/shaders_basic_lighting.c) | shaders_basic_lighting | ⭐️⭐️⭐️⭐️ | 3.0 | **4.2** | [Chris Camacho](https://github.com/codifies) | -| 99 | [shaders_model_shader](shaders/shaders_model_shader.c) | shaders_model_shader | ⭐️⭐️☆☆ | 1.3 | 3.7 | [Ray](https://github.com/raysan5) | -| 100 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | shaders_shapes_textures | ⭐️⭐️☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) | -| 101 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | shaders_custom_uniform | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 102 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | shaders_postprocessing | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 103 | [shaders_palette_switch](shaders/shaders_palette_switch.c) | shaders_palette_switch | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Marco Lizza](https://github.com/MarcoLizza) | -| 104 | [shaders_raymarching](shaders/shaders_raymarching.c) | shaders_raymarching | ⭐️⭐️⭐️⭐️ | 2.0 | **4.2** | [Ray](https://github.com/raysan5) | -| 105 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | shaders_texture_drawing | ⭐️⭐️☆☆ | 2.0 | 3.7 | [Michał Ciesielski](https://github.com/) | -| 106 | [shaders_texture_outline](shaders/shaders_texture_outline.c) | shaders_texture_outline | ⭐️⭐️⭐️☆ | **4.0** | **4.0** | [Samuel Skiff](https://github.com/GoldenThumbs) | -| 107 | [shaders_texture_waves](shaders/shaders_texture_waves.c) | shaders_texture_waves | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Anata](https://github.com/anatagawa) | -| 108 | [shaders_julia_set](shaders/shaders_julia_set.c) | shaders_julia_set | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [eggmund](https://github.com/eggmund) | -| 109 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | shaders_eratosthenes | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [ProfJski](https://github.com/ProfJski) | -| 110 | [shaders_fog](shaders/shaders_fog.c) | shaders_fog | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | -| 111 | [shaders_simple_mask](shaders/shaders_simple_mask.c) | shaders_simple_mask | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | -| 112 | [shaders_hot_reloading](shaders/shaders_hot_reloading.c) | shaders_hot_reloading | ⭐️⭐️⭐️☆ | 3.0 | 3.5 | [Ray](https://github.com/raysan5) | -| 113 | [shaders_mesh_instancing](shaders/shaders_mesh_instancing.c) | shaders_mesh_instancing | ⭐️⭐️⭐️⭐️ | 3.7 | **4.2** | [seanpringle](https://github.com/seanpringle) | -| 114 | [shaders_multi_sample2d](shaders/shaders_multi_sample2d.c) | shaders_multi_sample2d | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 115 | [shaders_spotlight](shaders/shaders_spotlight.c) | shaders_spotlight | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | - +| 99 | [shaders_basic_lighting](shaders/shaders_basic_lighting.c) | shaders_basic_lighting | ⭐️⭐️⭐️⭐️ | 3.0 | **4.2** | [Chris Camacho](https://github.com/codifies) | +| 100 | [shaders_model_shader](shaders/shaders_model_shader.c) | shaders_model_shader | ⭐️⭐️☆☆ | 1.3 | 3.7 | [Ray](https://github.com/raysan5) | +| 101 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | shaders_shapes_textures | ⭐️⭐️☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) | +| 102 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | shaders_custom_uniform | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 103 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | shaders_postprocessing | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 104 | [shaders_palette_switch](shaders/shaders_palette_switch.c) | shaders_palette_switch | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Marco Lizza](https://github.com/MarcoLizza) | +| 105 | [shaders_raymarching](shaders/shaders_raymarching.c) | shaders_raymarching | ⭐️⭐️⭐️⭐️ | 2.0 | **4.2** | [Ray](https://github.com/raysan5) | +| 106 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | shaders_texture_drawing | ⭐️⭐️☆☆ | 2.0 | 3.7 | [Michał Ciesielski](https://github.com/) | +| 107 | [shaders_texture_outline](shaders/shaders_texture_outline.c) | shaders_texture_outline | ⭐️⭐️⭐️☆ | **4.0** | **4.0** | [Samuel Skiff](https://github.com/GoldenThumbs) | +| 108 | [shaders_texture_waves](shaders/shaders_texture_waves.c) | shaders_texture_waves | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Anata](https://github.com/anatagawa) | +| 109 | [shaders_julia_set](shaders/shaders_julia_set.c) | shaders_julia_set | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [eggmund](https://github.com/eggmund) | +| 110 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | shaders_eratosthenes | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [ProfJski](https://github.com/ProfJski) | +| 111 | [shaders_fog](shaders/shaders_fog.c) | shaders_fog | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | +| 112 | [shaders_simple_mask](shaders/shaders_simple_mask.c) | shaders_simple_mask | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | +| 113 | [shaders_hot_reloading](shaders/shaders_hot_reloading.c) | shaders_hot_reloading | ⭐️⭐️⭐️☆ | 3.0 | 3.5 | [Ray](https://github.com/raysan5) | +| 114 | [shaders_mesh_instancing](shaders/shaders_mesh_instancing.c) | shaders_mesh_instancing | ⭐️⭐️⭐️⭐️ | 3.7 | **4.2** | [seanpringle](https://github.com/seanpringle) | +| 115 | [shaders_multi_sample2d](shaders/shaders_multi_sample2d.c) | shaders_multi_sample2d | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 116 | [shaders_spotlight](shaders/shaders_spotlight.c) | shaders_spotlight | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | + ### category: audio Examples using raylib audio functionality, including sound/music loading and playing. This functionality is provided by raylib [raudio](../src/raudio.c) module. Note this module can be used standalone independently of raylib, check [raudio_standalone](others/raudio_standalone.c) example. | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 116 | [audio_module_playing](audio/audio_module_playing.c) | audio_module_playing | ⭐️☆☆☆ | 1.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 117 | [audio_music_stream](audio/audio_music_stream.c) | audio_music_stream | ⭐️☆☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | -| 118 | [audio_raw_stream](audio/audio_raw_stream.c) | audio_raw_stream | ⭐️⭐️⭐️☆ | 1.6 | **4.2** | [Ray](https://github.com/raysan5) | -| 119 | [audio_sound_loading](audio/audio_sound_loading.c) | audio_sound_loading | ⭐️☆☆☆ | 1.1 | 3.5 | [Ray](https://github.com/raysan5) | -| 120 | [audio_multichannel_sound](audio/audio_multichannel_sound.c) | audio_multichannel_sound | ⭐️☆☆☆ | 3.0 | 3.5 | [Chris Camacho](https://github.com/codifies) | +| 117 | [audio_module_playing](audio/audio_module_playing.c) | audio_module_playing | ⭐️☆☆☆ | 1.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 118 | [audio_music_stream](audio/audio_music_stream.c) | audio_music_stream | ⭐️☆☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | +| 119 | [audio_raw_stream](audio/audio_raw_stream.c) | audio_raw_stream | ⭐️⭐️⭐️☆ | 1.6 | **4.2** | [Ray](https://github.com/raysan5) | +| 120 | [audio_sound_loading](audio/audio_sound_loading.c) | audio_sound_loading | ⭐️☆☆☆ | 1.1 | 3.5 | [Ray](https://github.com/raysan5) | +| 121 | [audio_multichannel_sound](audio/audio_multichannel_sound.c) | audio_multichannel_sound | ⭐️☆☆☆ | 3.0 | 3.5 | [Chris Camacho](https://github.com/codifies) | ### category: others @@ -193,11 +194,11 @@ Examples showing raylib misc functionality that does not fit in other categories | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 121 | [rlgl_standalone](others/rlgl_standalone.c) | rlgl_standalone | ⭐️⭐️⭐️⭐️ | 1.6 | **4.0** | [Ray](https://github.com/raysan5) | -| 122 | [rlgl_compute_shader](others/rlgl_compute_shader.c) | rlgl_compute_shader | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Teddy Astie](https://github.com/tsnake41) | -| 123 | [easings_testbed](others/easings_testbed.c) | easings_testbed | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Juan Miguel López](https://github.com/flashback-fx) | -| 124 | [raylib_opengl_interop](others/raylib_opengl_interop.c) | raylib_opengl_interop | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Stephan Soller](https://github.com/arkanis) | -| 125 | [embedded_files_loading](others/embedded_files_loading.c) | embedded_files_loading | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Kristian Holmgren](https://github.com/defutura) | +| 122 | [rlgl_standalone](others/rlgl_standalone.c) | rlgl_standalone | ⭐️⭐️⭐️⭐️ | 1.6 | **4.0** | [Ray](https://github.com/raysan5) | +| 123 | [rlgl_compute_shader](others/rlgl_compute_shader.c) | rlgl_compute_shader | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Teddy Astie](https://github.com/tsnake41) | +| 124 | [easings_testbed](others/easings_testbed.c) | easings_testbed | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Juan Miguel López](https://github.com/flashback-fx) | +| 125 | [raylib_opengl_interop](others/raylib_opengl_interop.c) | raylib_opengl_interop | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Stephan Soller](https://github.com/arkanis) | +| 126 | [embedded_files_loading](others/embedded_files_loading.c) | embedded_files_loading | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Kristian Holmgren](https://github.com/defutura) | As always contributions are welcome, feel free to send new examples! Here it is an [examples template](examples_template.c) to start with! diff --git a/examples/models/models_loading_m3d.c b/examples/models/models_loading_m3d.c index f67ba5e57..d11c3a005 100644 --- a/examples/models/models_loading_m3d.c +++ b/examples/models/models_loading_m3d.c @@ -1,97 +1,101 @@ /******************************************************************************************* * -* raylib [models] example - Load M3D model (with optional animations) and play them +* raylib [models] example - Load models M3D * -* Example static mesh Suzanne from Blender -* Example animated seagull model from Scorched 3D, licensed GPLv2 +* Example originally created with raylib 4.5-dev, last time updated with raylib 4.5-dev +* +* Example contributed by bzt (@bztsrc) and reviewed by Ramon Santamaria (@raysan5) +* +* NOTES: +* - Model3D (M3D) fileformat specs: https://gitlab.com/bztsrc/model3d +* - Bender M3D exported: https://gitlab.com/bztsrc/model3d/-/tree/master/blender +* WARNING: Make sure to add "(action)" markers to the timeline if you want multiple animations. +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software * -* Copyright (c) 2019-2022 Culacant (@culacant) and Ramon Santamaria (@raysan5) * Copyright (c) 2022 bzt (@bztsrc) * -******************************************************************************************** -* -* NOTE: To export a model from blender, just use https://gitlab.com/bztsrc/model3d/-/tree/master/blender -* and make sure to add "(action)" markers to the timeline if you want multiple animations. -* ********************************************************************************************/ #include "raylib.h" -#include -#include - //------------------------------------------------------------------------------------ // Program main entry point //------------------------------------------------------------------------------------ -int main(int argc, char **argv) +int main(void) { - char *model_fn = argc > 1 ? argv[1] : "resources/models/m3d/seagull.m3d"; - // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; - InitWindow(screenWidth, screenHeight, "raylib [models] example - M3D model"); + InitWindow(screenWidth, screenHeight, "raylib [models] example - M3D model loading"); // Define the camera to look into our 3d world Camera camera = { 0 }; - camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point + camera.position = (Vector3){ 1.5f, 1.5f, 1.5f }; // Camera position + camera.target = (Vector3){ 0.0f, 0.4f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y camera.projection = CAMERA_PERSPECTIVE; // Camera mode type Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position + + char modelFileName[128] = "resources/models/m3d/CesiumMan.m3d"; + bool drawMesh = 1; + bool drawSkeleton = 1; + bool animPlaying = false; // Store anim state, what to draw // Load model - Model model = LoadModel(model_fn); // Load the animated model mesh and basic data + Model model = LoadModel(modelFileName); // Load the bind-pose model mesh and basic data - // Load animation data - unsigned int animsCount = 0, animsSkel = 1, animsMesh = 1; - ModelAnimation *anims = LoadModelAnimations(model_fn, &animsCount); + // Load animations + unsigned int animsCount = 0; int animFrameCounter = 0, animId = 0; + ModelAnimation *anims = LoadModelAnimations(modelFileName, &animsCount); // Load skeletal animation data - SetCameraMode(camera, CAMERA_FREE); // Set free camera mode - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetCameraMode(camera, CAMERA_FREE); // Set free camera mode + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); - // Play animation when spacebar is held down if (animsCount) { - if (IsKeyDown(KEY_SPACE)) + // Play animation when spacebar is held down (or step one frame with N) + if (IsKeyDown(KEY_SPACE) || IsKeyPressed(KEY_N)) { animFrameCounter++; - UpdateModelAnimation(model, anims[animId], animFrameCounter); + if (animFrameCounter >= anims[animId].frameCount) animFrameCounter = 0; - //printf("anim %u, frame %u / %u\n",animId,animFrameCounter,anims[animId].frameCount); + + UpdateModelAnimation(model, anims[animId], animFrameCounter); + animPlaying = true; } - if (IsKeyDown(KEY_S)) - { - animsSkel ^= 1; - } - if (IsKeyDown(KEY_M)) - { - animsMesh ^= 1; - } - - // Select animation on mouse click - if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) + + // Select animation by pressing A + if (IsKeyPressed(KEY_A)) { animFrameCounter = 0; animId++; + if (animId >= animsCount) animId = 0; UpdateModelAnimation(model, anims[animId], 0); + animPlaying = true; } } + + // Toggle skeleton drawing + if (IsKeyPressed(KEY_S)) drawSkeleton ^= 1; + + // Toggle mesh drawing + if (IsKeyPressed(KEY_M)) drawMesh ^= 1; //---------------------------------------------------------------------------------- // Draw @@ -102,25 +106,53 @@ int main(int argc, char **argv) BeginMode3D(camera); - if (animsMesh) - DrawModel(model, position, 1.0f, WHITE); // Draw 3d model with texture + // Draw 3d model with texture + if (drawMesh) DrawModel(model, position, 1.0f, WHITE); - if (anims && animsSkel) - for (int i = 0; i < model.boneCount; i++) + // Draw the animated skeleton + if (drawSkeleton) + { + // Loop to (boneCount - 1) because the last one is a special "no bone" bone, + // needed to workaround buggy models + // without a -1, we would always draw a cube at the origin + for (int i = 0; i < model.boneCount - 1; i++) { - DrawCube(anims[animId].framePoses[animFrameCounter][i].translation, 0.05f, 0.05f, 0.05f, RED); - if (anims[animId].bones[i].parent >= 0) - DrawLine3D(anims[animId].framePoses[animFrameCounter][i].translation, - anims[animId].framePoses[animFrameCounter][anims[animId].bones[i].parent].translation, RED); + // By default the model is loaded in bind-pose by LoadModel(). + // But if UpdateModelAnimation() has been called at least once + // then the model is already in animation pose, so we need the animated skeleton + if (!animPlaying || !animsCount) + { + // Display the bind-pose skeleton + DrawCube(model.bindPose[i].translation, 0.04f, 0.04f, 0.04f, RED); + + if (model.bones[i].parent >= 0) + { + DrawLine3D(model.bindPose[i].translation, + model.bindPose[model.bones[i].parent].translation, RED); + } + } + else + { + // Display the frame-pose skeleton + DrawCube(anims[animId].framePoses[animFrameCounter][i].translation, 0.05f, 0.05f, 0.05f, RED); + + if (anims[animId].bones[i].parent >= 0) + { + DrawLine3D(anims[animId].framePoses[animFrameCounter][i].translation, + anims[animId].framePoses[animFrameCounter][anims[animId].bones[i].parent].translation, RED); + } + } } + } DrawGrid(10, 1.0f); // Draw a grid EndMode3D(); - DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, GetScreenHeight() - 30, 10, MAROON); - DrawText("MOUSE LEFT BUTTON to CYCLE THROUGH ANIMATIONS", 10, GetScreenHeight() - 20, 10, DARKGRAY); - DrawText("(c) Seagull model by Scorched3D", screenWidth - 200, screenHeight - 20, 10, GRAY); + DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, GetScreenHeight() - 60, 10, MAROON); + DrawText("PRESS A to CYCLE THROUGH ANIMATIONS", 10, GetScreenHeight() - 40, 10, DARKGRAY); + DrawText("PRESS M to toggle MESH, S to toggle SKELETON DRAWING", 10, GetScreenHeight() - 20, 10, DARKGRAY); + DrawText("(c) CesiumMan model by KhronosGroup", GetScreenWidth() - 210, GetScreenHeight() - 20, 10, GRAY); EndDrawing(); //---------------------------------------------------------------------------------- @@ -130,8 +162,7 @@ int main(int argc, char **argv) //-------------------------------------------------------------------------------------- // Unload model animations data - for (unsigned int i = 0; i < animsCount; i++) UnloadModelAnimation(anims[i]); - RL_FREE(anims); + UnloadModelAnimations(anims, animsCount); UnloadModel(model); // Unload model diff --git a/examples/models/models_loading_m3d.png b/examples/models/models_loading_m3d.png index 80c859fee02548c70a84f42fd75584cf341d36e5..2214b8e0152194319b3cb88f763d85df9019e5a0 100644 GIT binary patch literal 23682 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%0A)!XZwaN=%@-7J^3FpdeEr{tIXyqcl4 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 diff --git a/examples/models/resources/models/m3d/CesiumMan.m3d b/examples/models/resources/models/m3d/CesiumMan.m3d new file mode 100644 index 0000000000000000000000000000000000000000..ddf9f50926fcfb2aebccfbc630fd0005b1819954 GIT binary patch literal 73844 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 YPV@5B^G{nXZ&9m{7f)t5bK7Ji0OYXv=l}o! literal 0 HcmV?d00001 diff --git a/examples/models/resources/models/m3d/suzanne.m3d b/examples/models/resources/models/m3d/suzanne.m3d new file mode 100644 index 0000000000000000000000000000000000000000..9bc64d7d787a4cd7c135af96c71cc0c6d8c463f5 GIT binary patch literal 11645 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 z;(V{numbone && m3d->numskin) { - for (n = 0; n < 3; n++) { + if (m3d->numbone && m3d->numskin) + { + for (n = 0; n < 3; n++) + { int skinid = m3d->vertex[m3d->face[i].vertex[n]].skinid; - // check if there's a skin for this mesh, should be, just failsafe + + // Check if there is a skin for this mesh, should be, just failsafe if (skinid != M3D_UNDEF && skinid < m3d->numskin) { for (j = 0; j < 4; j++) { - model.meshes[k].boneIds[l * 12 + n * 4 + j] = m3d->skin[skinid].boneid[j]; - model.meshes[k].boneWeights[l * 12 + n * 4 + j] = m3d->skin[skinid].weight[j]; + model.meshes[k].boneIds[l*12 + n*4 + j] = m3d->skin[skinid].boneid[j]; + model.meshes[k].boneWeights[l*12 + n*4 + j] = m3d->skin[skinid].weight[j]; } } + else + { + // raylib does not handle boneless meshes with skeletal animations, so + // we put all vertices without a bone into a special "no bone" bone + model.meshes[k].boneIds[l * 12 + n * 4] = m3d->numbone; + model.meshes[k].boneWeights[l * 12 + n * 4] = 1.0f; + } } } } @@ -5352,11 +5362,12 @@ static Model LoadM3D(const char *fileName) } // Load bones - if(m3d->numbone) + if (m3d->numbone) { - model.boneCount = m3d->numbone; - model.bones = RL_MALLOC(m3d->numbone*sizeof(BoneInfo)); - model.bindPose = RL_MALLOC(m3d->numbone*sizeof(Transform)); + model.boneCount = m3d->numbone + 1; + model.bones = RL_CALLOC(model.boneCount, sizeof(BoneInfo)); + model.bindPose = RL_CALLOC(model.boneCount, sizeof(Transform)); + for (i = 0; i < m3d->numbone; i++) { model.bones[i].parent = m3d->bone[i].parent; @@ -5381,6 +5392,18 @@ static Model LoadM3D(const char *fileName) model.bindPose[i].scale = Vector3Multiply(model.bindPose[i].scale, model.bindPose[model.bones[i].parent].scale); } } + + // Add a special "no bone" bone + model.bones[i].parent = -1; + strcpy(model.bones[i].name, "NO BONE"); + model.bindPose[i].translation.x = 0.0f; + model.bindPose[i].translation.y = 0.0f; + model.bindPose[i].translation.z = 0.0f; + model.bindPose[i].rotation.x = 0.0f; + model.bindPose[i].rotation.y = 0.0f; + model.bindPose[i].rotation.z = 0.0f; + model.bindPose[i].rotation.w = 1.0f; + model.bindPose[i].scale.x = model.bindPose[i].scale.y = model.bindPose[i].scale.z = 1.0f; } // Load bone-pose default mesh into animation vertices. These will be updated when UpdateModelAnimation gets @@ -5440,8 +5463,8 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, unsigned int for (unsigned int a = 0; a < m3d->numaction; a++) { animations[a].frameCount = m3d->action[a].durationmsec / M3D_ANIMDELAY; - animations[a].boneCount = m3d->numbone; - animations[a].bones = RL_MALLOC(m3d->numbone*sizeof(BoneInfo)); + animations[a].boneCount = m3d->numbone + 1; + animations[a].bones = RL_MALLOC((m3d->numbone + 1)*sizeof(BoneInfo)); animations[a].framePoses = RL_MALLOC(animations[a].frameCount*sizeof(Transform *)); // strncpy(animations[a].name, m3d->action[a].name, sizeof(animations[a].name)); TRACELOG(LOG_INFO, "MODEL: [%s] animation #%i: %i msec, %i frames", fileName, a, m3d->action[a].durationmsec, animations[a].frameCount); @@ -5452,11 +5475,15 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, unsigned int strncpy(animations[a].bones[i].name, m3d->bone[i].name, sizeof(animations[a].bones[i].name)); } + // A special, never transformed "no bone" bone, used for boneless vertices + animations[a].bones[i].parent = -1; + strcpy(animations[a].bones[i].name, "NO BONE"); + // M3D stores frames at arbitrary intervals with sparse skeletons. We need full skeletons at // regular intervals, so let the M3D SDK do the heavy lifting and calculate interpolated bones for (i = 0; i < animations[a].frameCount; i++) { - animations[a].framePoses[i] = RL_MALLOC(m3d->numbone*sizeof(Transform)); + animations[a].framePoses[i] = RL_MALLOC((m3d->numbone + 1)*sizeof(Transform)); m3db_t *pose = m3d_pose(m3d, a, i * M3D_ANIMDELAY); if (pose != NULL) @@ -5473,7 +5500,7 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, unsigned int animations[a].framePoses[i][j].rotation = QuaternionNormalize(animations[a].framePoses[i][j].rotation); animations[a].framePoses[i][j].scale.x = animations[a].framePoses[i][j].scale.y = animations[a].framePoses[i][j].scale.z = 1.0f; - // Child bones are stored in parent bone relative space, convert that into model space + // Child bones are stored in parent bone relative space, convert that into model space if (animations[a].bones[j].parent >= 0) { animations[a].framePoses[i][j].rotation = QuaternionMultiply(animations[a].framePoses[i][animations[a].bones[j].parent].rotation, animations[a].framePoses[i][j].rotation); @@ -5482,6 +5509,16 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, unsigned int animations[a].framePoses[i][j].scale = Vector3Multiply(animations[a].framePoses[i][j].scale, animations[a].framePoses[i][animations[a].bones[j].parent].scale); } } + + // Default transform for the "no bone" bone + animations[a].framePoses[i][j].translation.x = 0.0f; + animations[a].framePoses[i][j].translation.y = 0.0f; + animations[a].framePoses[i][j].translation.z = 0.0f; + animations[a].framePoses[i][j].rotation.x = 0.0f; + animations[a].framePoses[i][j].rotation.y = 0.0f; + animations[a].framePoses[i][j].rotation.z = 0.0f; + animations[a].framePoses[i][j].rotation.w = 1.0f; + animations[a].framePoses[i][j].scale.x = animations[a].framePoses[i][j].scale.y = animations[a].framePoses[i][j].scale.z = 1.0f; RL_FREE(pose); } }