| @ -0,0 +1,105 @@ | |||||
| /******************************************************************************************* | |||||
| * | |||||
| * raylib [models] example - Waving cubes | |||||
| * | |||||
| * This example has been created using raylib 2.5 (www.raylib.com) | |||||
| * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) | |||||
| * | |||||
| * Copyright (c) 2019 Ramon Santamaria (@raysan5) | |||||
| * | |||||
| ********************************************************************************************/ | |||||
| #include "raylib.h" | |||||
| #include <math.h> | |||||
| int main() | |||||
| { | |||||
| // Initialization | |||||
| //-------------------------------------------------------------------------------------- | |||||
| const int screenWidth = 800; | |||||
| const int screenHeight = 450; | |||||
| InitWindow(screenWidth, screenHeight, "raylib [models] example - waving cubes"); | |||||
| // Initialize the camera | |||||
| Camera3D camera; | |||||
| camera.position = (Vector3){ 30.0f, 20.0f, 30.0f }; | |||||
| camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; | |||||
| camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; | |||||
| camera.fovy = 70.0f; | |||||
| camera.type = CAMERA_PERSPECTIVE; | |||||
| // Specify the amount of blocks in each direction | |||||
| const int numBlocks = 15; | |||||
| SetTargetFPS(60); | |||||
| //-------------------------------------------------------------------------------------- | |||||
| // Main game loop | |||||
| while (!WindowShouldClose()) // Detect window close button or ESC key | |||||
| { | |||||
| // Update | |||||
| double time = GetTime(); | |||||
| // Calculate time scale for cube position and size | |||||
| float scale = (2.0f + (float)sin(time)) * 0.7f; | |||||
| // Move camera around the scene | |||||
| double cameraTime = time * 0.3; | |||||
| camera.position.x = (float)cos(cameraTime) * 40.0f; | |||||
| camera.position.z = (float)sin(cameraTime) * 40.0f; | |||||
| // Draw | |||||
| //---------------------------------------------------------------------------------- | |||||
| BeginDrawing(); | |||||
| ClearBackground(RAYWHITE); | |||||
| BeginMode3D(camera); | |||||
| DrawGrid(10, 5.0f); | |||||
| for (int x = 0; x < numBlocks; x++) { | |||||
| for (int y = 0; y < numBlocks; y++) { | |||||
| for (int z = 0; z < numBlocks; z++) { | |||||
| // Scale of the blocks depends on x/y/z positions | |||||
| float blockScale = (x + y + z) / 30.0f; | |||||
| // Scatter makes the waving effect by adding blockScale over time | |||||
| float scatter = sinf(blockScale * 20.0f + (float)(time * 4.0f)); | |||||
| // Calculate the cube position | |||||
| Vector3 cubePos = { | |||||
| (float)(x - numBlocks / 2) * (scale * 3.0f) + scatter, | |||||
| (float)(y - numBlocks / 2) * (scale * 2.0f) + scatter, | |||||
| (float)(z - numBlocks / 2) * (scale * 3.0f) + scatter | |||||
| }; | |||||
| // Pick a color with a hue depending on cube position for the rainbow color effect | |||||
| Color cubeColor = ColorFromHSV((Vector3){ (float)(((x + y + z) * 18) % 360), 0.75f, 0.9f }); | |||||
| // Calculate cube size | |||||
| float cubeSize = (2.4f - scale) * blockScale; | |||||
| // And finally, draw the cube! | |||||
| DrawCube(cubePos, cubeSize, cubeSize, cubeSize, cubeColor); | |||||
| } | |||||
| } | |||||
| } | |||||
| DrawFPS(10, 10); | |||||
| EndMode3D(); | |||||
| EndDrawing(); | |||||
| //---------------------------------------------------------------------------------- | |||||
| } | |||||
| // De-Initialization | |||||
| //-------------------------------------------------------------------------------------- | |||||
| CloseWindow(); // Close window and OpenGL context | |||||
| //-------------------------------------------------------------------------------------- | |||||
| return 0; | |||||
| } | |||||