Browse Source

Texture Tiling Example - luis605 (#3353)

* Texture Tiling Example - luis605

* Removed SetTraceLogLevel(LOG_WARNING);
Luís Almeida 1 year ago
parent
commit
bc15c19518

+ 14 - 0
examples/shaders/resources/shaders/glsl330/tiling.fs

@@ -0,0 +1,14 @@
+#version 330 core
+
+uniform sampler2D diffuseMap;
+uniform vec2 tiling;
+
+in vec2 fragTexCoord;
+
+out vec4 fragColor;
+
+void main()
+{
+    vec2 texCoord = fragTexCoord * tiling;
+    fragColor = texture(diffuseMap, texCoord);
+}

+ 94 - 0
examples/shaders/shader_texture_tiling.c

@@ -0,0 +1,94 @@
+/*******************************************************************************************
+*
+*   raylib [textures] example - Texture Tiling
+*
+*   Example demonstrates how to tile a texture on a 3D model using raylib.
+*
+*   Example contributed by Luís Almeida (https://github.com/luis605)
+*
+*   Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
+*   BSD-like license that allows static linking with closed source software
+*
+*   Copyright (c) 2023 Luís Almeida (https://github.com/luis605)
+*
+********************************************************************************************/
+
+#include "raylib.h"
+
+//------------------------------------------------------------------------------------
+// Program main entry point
+//------------------------------------------------------------------------------------
+
+int main(void)
+{
+    const int screenWidth = 800;
+    const int screenHeight = 600;
+
+    // Initialization
+    //--------------------------------------------------------------------------------------
+    InitWindow(screenWidth, screenHeight, "Raylib Texture Tiling");
+
+    SetTargetFPS(60);
+
+    // Load a texture
+    Texture2D texture = LoadTexture("resources/raylib_logo.png");
+
+    // Create a cube mesh
+    Mesh cube = GenMeshCube(1.0f, 1.0f, 1.0f);
+
+    // Load the texture onto the GPU
+    Model model = LoadModelFromMesh(cube);
+    model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture;
+
+    // Set the tiling of the texture
+    float tiling[2] = {3.0f, 3.0f};
+    Shader shader = LoadShader(0, "resources/shaders/glsl330/tiling.fs"); // Create a custom shader in a .glsl file
+    SetShaderValue(shader, GetShaderLocation(shader, "tiling"), tiling, SHADER_UNIFORM_VEC2);
+    model.materials[0].shader = shader;
+
+    // Camera setup
+    Camera camera = { 0 };
+    camera.position = (Vector3){ 3.0f, 3.0f, 3.0f };
+    camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };
+    camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };
+    camera.fovy = 45.0f;
+    camera.projection = CAMERA_PERSPECTIVE;
+
+    // Main game loop
+    while (!WindowShouldClose())
+    {
+        // Update
+        //----------------------------------------------------------------------------------
+
+        BeginDrawing();
+        ClearBackground(RAYWHITE);
+        UpdateCamera(&camera, CAMERA_FREE);
+
+        // Draw the model
+        {
+            BeginMode3D(camera);
+            BeginShaderMode(shader);
+
+            DrawModel(model, (Vector3){ 0.0f, 0.0f, 0.0f }, 5.0f, WHITE);
+
+            EndShaderMode();
+            EndMode3D();
+        }
+        
+        DrawText("Use mouse to rotate the camera", 10, 10, 20, DARKGRAY);
+
+        EndDrawing();
+    }
+
+    // De-Initialization
+    //--------------------------------------------------------------------------------------
+
+    UnloadTexture(texture);     // Unload texture
+    UnloadModel(model);         // Unload model
+    UnloadShader(shader);       // Unload shader
+
+
+    CloseWindow();              // Close window and OpenGL context
+
+    return 0;
+}