This commit is contained in:
Richard Smith 2019-05-21 10:56:31 +01:00
parent cd300d256e
commit a703659c9d
76 changed files with 87245 additions and 0 deletions

View file

@ -0,0 +1,113 @@
/*******************************************************************************************
*
* raylib example - procedural mesh generation
*
* This example has been created using raylib 1.8 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2017 Ramon Santamaria (Ray San)
*
********************************************************************************************/
#include "raylib.h"
#define NUM_MODELS 7 # We generate 7 parametric 3d shapes
int main()
[
# Initialization
#--------------------------------------------------------------------------------------
int screenWidth = 800
int screenHeight = 450
InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh generation")
# We generate a checked image for texturing
Image checked = GenImageChecked(2, 2, 1, 1, RED, GREEN)
Texture2D texture = LoadTextureFromImage(checked)
UnloadImage(checked)
Model models[NUM_MODELS]
models[0] = LoadModelFromMesh(GenMeshPlane(2, 2, 5, 5))
models[1] = LoadModelFromMesh(GenMeshCube(2.0, 1.0, 2.0))
models[2] = LoadModelFromMesh(GenMeshSphere(2, 32, 32))
models[3] = LoadModelFromMesh(GenMeshHemiSphere(2, 16, 16))
models[4] = LoadModelFromMesh(GenMeshCylinder(1, 2, 16))
models[5] = LoadModelFromMesh(GenMeshTorus(0.25f, 4.0, 16, 32))
models[6] = LoadModelFromMesh(GenMeshKnot(1.0, 2.0, 16, 128))
# Set checked texture as default diffuse component for all models material
for (int i = 0 i < NUM_MODELS i++) models[i].material.maps[MAP_DIFFUSE].texture = texture
# Define the camera to look into our 3d world
Camera camera = [[ 5.0, 5.0, 5.0 ], [ 0.0, 0.0, 0.0 ], [ 0.0, 1.0, 0.0 ], 45.0, 0 ]
# Model drawing position
Vector3 position = [ 0.0, 0.0, 0.0 ]
int currentModel = 0
SetCameraMode(camera, CAMERA_ORBITAL) # Set a orbital 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
[
# Update
#----------------------------------------------------------------------------------
UpdateCamera(&camera) # Update internal camera and our camera
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
[
currentModel = (currentModel + 1)%NUM_MODELS # Cycle between the textures
]
#----------------------------------------------------------------------------------
# Draw
#----------------------------------------------------------------------------------
BeginDrawing()
ClearBackground(RAYWHITE)
BeginMode3D(camera)
DrawModel(models[currentModel], position, 1.0, WHITE)
DrawGrid(10, 1.0)
EndMode3D()
DrawRectangle(30, 400, 310, 30, Fade(SKYBLUE, 0.5f))
DrawRectangleLines(30, 400, 310, 30, Fade(DARKBLUE, 0.5f))
DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL MODELS", 40, 410, 10, BLUE)
switch(currentModel)
[
case 0: DrawText("PLANE", 680, 10, 20, DARKBLUE) break
case 1: DrawText("CUBE", 680, 10, 20, DARKBLUE) break
case 2: DrawText("SPHERE", 680, 10, 20, DARKBLUE) break
case 3: DrawText("HEMISPHERE", 640, 10, 20, DARKBLUE) break
case 4: DrawText("CYLINDER", 680, 10, 20, DARKBLUE) break
case 5: DrawText("TORUS", 680, 10, 20, DARKBLUE) break
case 6: DrawText("KNOT", 680, 10, 20, DARKBLUE) break
default: break
]
EndDrawing()
#----------------------------------------------------------------------------------
]
# De-Initialization
#--------------------------------------------------------------------------------------
# Unload models data (GPU VRAM)
for (int i = 0 i < NUM_MODELS i++) UnloadModel(models[i])
CloseWindow() # Close window and OpenGL context
#--------------------------------------------------------------------------------------
return 0
]