added models waving cubes example

This commit is contained in:
Tim Fong 2 2023-08-11 23:41:31 +07:00
parent 6c9e42301d
commit ef20eaf7c9

View file

@ -0,0 +1,79 @@
from pyray import *
import pyray
import math
# Program main entry point
# Initialization
screenWidth = 800
screenHeight = 450
init_window(screenWidth, screenHeight, "raylib [models] example - waving cubes")
# Initialize the camera
camera = Camera3D()
camera.position = Vector3(30.0, 20.0, 30.0) # Camera position
camera.target = Vector3(0.0, 0.0, 0.0) # Camera looking at point
camera.up = Vector3(0.0, 1.0, 0.0) # Camera up vector (rotation towards target)
camera.fovy = 70.0 # Camera field-of-view Y
camera.projection = pyray.CAMERA_PERSPECTIVE # Camera projection type
# Specify the amount of blocks in each direction
numBlocks = 15
set_target_fps(60)
# Main game loop
while not window_should_close(): # Detect window close button or ESC key
# Update
time = get_time()
# Calculate time scale for cube position and size
scale = (2.0 + math.sin(time)) * 0.7
# Move camera around the scene
cameraTime = time * 0.3
camera.position.x = math.cos(cameraTime) * 40.0
camera.position.z = math.sin(cameraTime) * 40.0
# Draw
begin_drawing()
clear_background(RAYWHITE)
begin_mode_3d(camera)
draw_grid(10, 5.0)
for x in range(numBlocks):
for y in range(numBlocks):
for z in range(numBlocks):
# Scale of the blocks depends on x/y/z positions
blockScale = (x + y + z) / 30.0
# Scatter makes the waving effect by adding blockScale over time
scatter = math.sin(blockScale * 20.0 + time * 4.0)
# Calculate the cube position
cubePos = Vector3(
(x - numBlocks / 2) * (scale * 3.0) + scatter,
(y - numBlocks / 2) * (scale * 2.0) + scatter,
(z - numBlocks / 2) * (scale * 3.0) + scatter,
)
# Pick a color with a hue depending on cube position for the rainbow color effect
cubeColor = color_from_hsv(((x + y + z) * 18) % 360, 0.75, 0.9)
# Calculate cube size
cubeSize = (2.4 - scale) * blockScale
# And finally, draw the cube!
draw_cube(cubePos, cubeSize, cubeSize, cubeSize, cubeColor)
end_mode_3d()
draw_fps(10, 10)
end_drawing()
# De-Initialization
close_window() # Close window and OpenGL context