diff --git a/examples/models/models_animation.py b/examples/models/models_animation.py new file mode 100644 index 0000000..f9041b9 --- /dev/null +++ b/examples/models/models_animation.py @@ -0,0 +1,85 @@ + +import pyray as ray + + +screen_width = 800 +screen_height = 450 + +ray.init_window(screen_width, screen_height, "raylib [models] example - model animation") + +# Define the camera to look into our 3d world +camera = ray.Camera3D() +camera.position = ray.Vector3( 10.0, 10.0, 10.0 ) # Camera position +camera.target = ray.Vector3( 0.0, 0.0, 0.0 ) # Camera looking at point +camera.up = ray.Vector3( 0.0, 1.0, 0.0 ) # Camera up vector (rotation towards target) +camera.fovy = 45.0 # Camera field-of-view Y +camera.projection = ray.CAMERA_PERSPECTIVE # Camera mode type + +model = ray.load_model("resources/models/iqm/guy.iqm") # Load the animated model mesh and basic data +texture = ray.load_texture("resources/models/iqm/guytex.png") # Load model texture and set material +ray.set_material_texture(model.materials, ray.MATERIAL_MAP_ALBEDO, texture) # Set model material map texture + +position = ( 0., 0., 0. ) # Set model position + +# Load animation data +count = ray.ffi.new("unsigned int *", 1) +anims = ray.load_model_animations("resources/models/iqm/guyanim.iqm", count) +anim_frame_counter = 0 + +ray.set_camera_mode(camera, ray.CAMERA_FREE) # Set free camera mode + +ray.set_target_fps(60) # Set our game to run at 60 frames-per-second +#-------------------------------------------------------------------------------------- + +# Main game loop +while not ray.window_should_close(): # Detect window close button or ESC key + # Update + #---------------------------------------------------------------------------------- + ray.update_camera(camera) + + # Play animation when spacebar is held down + if ray.is_key_down(ray.KEY_SPACE): + anim_frame_counter+=1 + ray.update_model_animation(model, anims[0], anim_frame_counter) + if anim_frame_counter >= anims[0].frameCount: + anim_frame_counter = 0 + + #---------------------------------------------------------------------------------- + + # Draw + #---------------------------------------------------------------------------------- + ray.begin_drawing() + + ray.clear_background(ray.RAYWHITE) + + ray.begin_mode_3d(camera) + + ray.draw_model_ex(model, position, ray.Vector3( 1.0, 0.0, 0.0 ), -90.0, ray.Vector3( 1.0, 1.0, 1.0 ), ray.WHITE) + + for i in range(model.boneCount): + ray.draw_cube(anims[0].framePoses[anim_frame_counter][i].translation, 0.2, 0.2, 0.2, ray.RED) + + ray.draw_grid(10, 1.0) # Draw a grid + + ray.end_mode_3d() + + ray.draw_text("PRESS SPACE to PLAY MODEL ANIMATION", 10, 10, 20, ray.MAROON) + ray.draw_text("(c) Guy IQM 3D model by @culacant", screen_width - 200, screen_height - 20, 10, ray.GRAY) + + ray.draw_fps(10, 400) + + ray.end_drawing() + #---------------------------------------------------------------------------------- + + +# De-Initialization +#-------------------------------------------------------------------------------------- +ray.unload_texture(texture) # Unload texture + +# Unload model animations data +for anim in anims: + ray.unload_model_animation(anim) + +ray.unload_model(model) # Unload model + +ray.close_window() # Close window and OpenGL context \ No newline at end of file diff --git a/examples/models/resources/models/iqm/guy.blend b/examples/models/resources/models/iqm/guy.blend new file mode 100644 index 0000000..3880467 Binary files /dev/null and b/examples/models/resources/models/iqm/guy.blend differ diff --git a/examples/models/resources/models/iqm/guy.iqm b/examples/models/resources/models/iqm/guy.iqm new file mode 100644 index 0000000..36bed5e Binary files /dev/null and b/examples/models/resources/models/iqm/guy.iqm differ diff --git a/examples/models/resources/models/iqm/guyanim.iqm b/examples/models/resources/models/iqm/guyanim.iqm new file mode 100644 index 0000000..824a68a Binary files /dev/null and b/examples/models/resources/models/iqm/guyanim.iqm differ diff --git a/examples/models/resources/models/iqm/guytex.png b/examples/models/resources/models/iqm/guytex.png new file mode 100644 index 0000000..05a58ee Binary files /dev/null and b/examples/models/resources/models/iqm/guytex.png differ diff --git a/examples/models/resources/models/iqm/vertex_colored_object.iqm b/examples/models/resources/models/iqm/vertex_colored_object.iqm new file mode 100644 index 0000000..ad0db07 Binary files /dev/null and b/examples/models/resources/models/iqm/vertex_colored_object.iqm differ