diff --git a/examples/models/models_skybox.py b/examples/models/models_skybox.py new file mode 100644 index 0000000..433ffd7 --- /dev/null +++ b/examples/models/models_skybox.py @@ -0,0 +1,67 @@ +from raylib.dynamic import raylib as rl, ffi +from raylib.colors import * + +screenWidth = 1260 +screenHeight = 768 + +rl.InitWindow(screenWidth, screenHeight, b'Skymap Demo') + +camera = ffi.new('struct Camera3D *', [[1, 1, 1], [4, 1, 4], [0, 1, 0], 70, 0]) + +cube = rl.GenMeshCube(100, 100, 100) +skybox = rl.LoadModelFromMesh(cube) + +skybox.materials[0].shader = rl.LoadShader( + b'resources/shaders/skybox.vs', + b'resources/shaders/skybox.fs' +) + +rl.SetShaderValue( + skybox.materials[0].shader, + rl.GetShaderLocation(skybox.materials[0].shader, b"environmentMap"), + ffi.new('int[]', [rl.MAP_CUBEMAP]), + rl.UNIFORM_INT +) + +shdrCubemap = rl.LoadShader( + b'resources/shaders/cubemap.vs', + b'resources/shaders/cubemap.fs' +) + +rl.SetShaderValue( + shdrCubemap, + rl.GetShaderLocation(shdrCubemap, b'equirectangularMap'), + ffi.new('int[]', [0]), + rl.UNIFORM_INT +) + +texHDR = rl.LoadTexture(b'resources/dresden_square.hdr') + +skybox.materials[0].maps[rl.MAP_CUBEMAP].texture = rl.GenTextureCubemap(shdrCubemap, texHDR, 512); + +rl.UnloadTexture(texHDR) +rl.UnloadShader(shdrCubemap) + +rl.SetCameraMode(camera[0], rl.CAMERA_FIRST_PERSON) + +rl.SetTargetFPS(60) + +while not rl.WindowShouldClose(): + rl.UpdateCamera(camera) + rl.BeginDrawing() + rl.ClearBackground(RAYWHITE) + rl.BeginMode3D(camera[0]) + rl.DrawModel(skybox, [0, 0, 0], 1.0, WHITE) + rl.DrawGrid(10, 1.0) + for x in range(10): + for y in range(10): + rl.DrawCube([x * 2, 0, y * 2], 1, 1, 1, MAROON) + rl.DrawCubeWires([x * 2, 0, y * 2], 1, 1, 1, RED) + rl.EndMode3D() + rl.DrawFPS(10, 10) + rl.EndDrawing() + +rl.CloseWindow() +rl.UnloadShader(skybox.materials[0].shader) +rl.UnloadTexture(skybox.materials[0].maps[rl.MAP_CUBEMAP].texture) +rl.UnloadModel(skybox) diff --git a/examples/models/resources/shaders/cubemap.fs b/examples/models/resources/shaders/cubemap.fs index f4eb606..e8e2853 100644 --- a/examples/models/resources/shaders/cubemap.fs +++ b/examples/models/resources/shaders/cubemap.fs @@ -8,31 +8,31 @@ #version 330 -# Input vertex attributes (from vertex shader) -in vec3 fragPos +// Input vertex attributes (from vertex shader) +in vec3 fragPosition; -# Input uniform values -uniform sampler2D equirectangularMap +// Input uniform values +uniform sampler2D equirectangularMap; -# Output fragment color -out vec4 finalColor +// Output fragment color +out vec4 finalColor; vec2 SampleSphericalMap(vec3 v) -[ - vec2 uv = vec2(atan(v.z, v.x), asin(v.y)) - uv *= vec2(0.1591, 0.3183) - uv += 0.5 - return uv -] +{ + vec2 uv = vec2(atan(v.z, v.x), asin(v.y)); + uv *= vec2(0.1591, 0.3183); + uv += 0.5; + return uv; +} void main() -[ - # Normalize local position - vec2 uv = SampleSphericalMap(normalize(fragPos)) +{ + // Normalize local position + vec2 uv = SampleSphericalMap(normalize(fragPosition)); - # Fetch color from texture map - vec3 color = texture(equirectangularMap, uv).rgb + // Fetch color from texture map + vec3 color = texture(equirectangularMap, uv).rgb; - # Calculate final fragment color - finalColor = vec4(color, 1.0) -] + // Calculate final fragment color + finalColor = vec4(color, 1.0); +} diff --git a/examples/models/resources/shaders/cubemap.vs b/examples/models/resources/shaders/cubemap.vs index e0249bc..5721eaa 100644 --- a/examples/models/resources/shaders/cubemap.vs +++ b/examples/models/resources/shaders/cubemap.vs @@ -8,21 +8,21 @@ #version 330 -# Input vertex attributes -in vec3 vertexPosition +// Input vertex attributes +in vec3 vertexPosition; -# Input uniform values -uniform mat4 projection -uniform mat4 view +// Input uniform values +uniform mat4 projection; +uniform mat4 view; -# Output vertex attributes (to fragment shader) -out vec3 fragPos +// Output vertex attributes (to fragment shader) +out vec3 fragPosition; void main() -[ - # Calculate fragment position based on model transformations - fragPos = vertexPosition +{ + // Calculate fragment position based on model transformations + fragPosition = vertexPosition; - # Calculate final vertex position - gl_Position = projection*view*vec4(vertexPosition, 1.0) -] + // Calculate final vertex position + gl_Position = projection*view*vec4(vertexPosition, 1.0); +} diff --git a/examples/models/resources/shaders/skybox.fs b/examples/models/resources/shaders/skybox.fs index 276017b..053a251 100644 --- a/examples/models/resources/shaders/skybox.fs +++ b/examples/models/resources/shaders/skybox.fs @@ -8,24 +8,24 @@ #version 330 -# Input vertex attributes (from vertex shader) -in vec3 fragPos +// Input vertex attributes (from vertex shader) +in vec3 fragPosition; -# Input uniform values -uniform samplerCube environmentMap +// Input uniform values +uniform samplerCube environmentMap; -# Output fragment color -out vec4 finalColor +// Output fragment color +out vec4 finalColor; void main() -[ - # Fetch color from texture map - vec3 color = texture(environmentMap, fragPos).rgb +{ + // Fetch color from texture map + vec3 color = texture(environmentMap, fragPosition).rgb; - # Apply gamma correction - color = color/(color + vec3(1.0)) - color = pow(color, vec3(1.0/2.2)) + // Apply gamma correction + color = color/(color + vec3(1.0)); + color = pow(color, vec3(1.0/2.2)); - # Calculate final fragment color - finalColor = vec4(color, 1.0) -] + // Calculate final fragment color + finalColor = vec4(color, 1.0); +} diff --git a/examples/models/resources/shaders/skybox.vs b/examples/models/resources/shaders/skybox.vs index 5ba5c09..4fe9a2c 100644 --- a/examples/models/resources/shaders/skybox.vs +++ b/examples/models/resources/shaders/skybox.vs @@ -8,25 +8,25 @@ #version 330 -# Input vertex attributes -in vec3 vertexPosition +// Input vertex attributes +in vec3 vertexPosition; -# Input uniform values -uniform mat4 projection -uniform mat4 view +// Input uniform values +uniform mat4 projection; +uniform mat4 view; -# Output vertex attributes (to fragment shader) -out vec3 fragPos +// Output vertex attributes (to fragment shader) +out vec3 fragPosition; void main() -[ - # Calculate fragment position based on model transformations - fragPos = vertexPosition +{ + // Calculate fragment position based on model transformations + fragPosition = vertexPosition; - # Remove translation from the view matrix - mat4 rotView = mat4(mat3(view)) - vec4 clipPos = projection*rotView*vec4(vertexPosition, 1.0) + // Remove translation from the view matrix + mat4 rotView = mat4(mat3(view)); + vec4 clipPos = projection*rotView*vec4(vertexPosition, 1.0); - # Calculate final vertex position - gl_Position = clipPos.xyww -] + // Calculate final vertex position + gl_Position = clipPos.xyzw; +}