From fadc29d811de346218b4d03a41e3d90904043bd6 Mon Sep 17 00:00:00 2001 From: Ray Date: Tue, 15 Nov 2022 12:16:28 +0100 Subject: [PATCH] WARNING: REMOVED: `DrawCubeTexture()`, `DrawCubeTextureRec()` Those two functions have been moved to a new example: `models_draw_cube_texture`. The reasons for this decision: - Function inflexibility: Many users with the need to draw a textured cube could need to customize the texture applied to every face, that function did not allow that kind of functionality. - rlgl functionality exposure: The implementation exposed will teach users how to implement custom textured triangles drawing. --- examples/models/models_draw_cube_texture.c | 245 +++++++++++++++++++ examples/models/models_draw_cube_texture.png | Bin 0 -> 63170 bytes src/raylib.h | 2 - src/rmodels.c | 145 ----------- 4 files changed, 245 insertions(+), 147 deletions(-) create mode 100644 examples/models/models_draw_cube_texture.c create mode 100644 examples/models/models_draw_cube_texture.png diff --git a/examples/models/models_draw_cube_texture.c b/examples/models/models_draw_cube_texture.c new file mode 100644 index 000000000..b36e968f4 --- /dev/null +++ b/examples/models/models_draw_cube_texture.c @@ -0,0 +1,245 @@ +/******************************************************************************************* +* +* raylib [models] example - Draw textured cube +* +* Example originally created with raylib 4.5, last time updated with raylib 4.5 +* +* 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) 2022 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#include "rlgl.h" // Required to define vertex data (immediate-mode style) + +//------------------------------------------------------------------------------------ +// Custom Functions Declaration +//------------------------------------------------------------------------------------ +void DrawCubeTexture(Texture2D texture, Vector3 position, float width, float height, float length, Color color); // Draw cube textured +void DrawCubeTextureRec(Texture2D texture, Rectangle source, Vector3 position, float width, float height, float length, Color color); // Draw cube with a region of a texture + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [models] example - draw cube texture"); + + // Define the camera to look into our 3d world + Camera camera = { 0 }; + camera.position = (Vector3){ 0.0f, 10.0f, 10.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; + + // Load texture to be applied to the cubes sides + Texture2D texture = LoadTexture("resources/cubicmap_atlas.png"); + + 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 + //---------------------------------------------------------------------------------- + // TODO: Update your variables here + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + BeginMode3D(camera); + + // Draw cube with an applied texture + DrawCubeTexture(texture, (Vector3){ -2.0f, 2.0f, 0.0f }, 2.0f, 4.0f, 2.0f, WHITE); + + // Draw cube with an applied texture, but only a defined rectangle piece of the texture + DrawCubeTextureRec(texture, (Rectangle){ 0, texture.height/2, texture.width/2, texture.height/2 }, + (Vector3){ 2.0f, 1.0f, 0.0f }, 2.0f, 2.0f, 2.0f, WHITE); + + DrawGrid(10, 1.0f); // Draw a grid + + EndMode3D(); + + DrawFPS(10, 10); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadTexture(texture); // Unload texture + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + +//------------------------------------------------------------------------------------ +// Custom Functions Definition +//------------------------------------------------------------------------------------ +// Draw cube textured +// NOTE: Cube position is the center position +void DrawCubeTexture(Texture2D texture, Vector3 position, float width, float height, float length, Color color) +{ + float x = position.x; + float y = position.y; + float z = position.z; + + // Set desired texture to be enabled while drawing following vertex data + rlSetTexture(texture.id); + + // Vertex data transformation can be defined with the commented lines, + // but in this example we calculate the transformed vertex data directly when calling rlVertex3f() + //rlPushMatrix(); + // NOTE: Transformation is applied in inverse order (scale -> rotate -> translate) + //rlTranslatef(2.0f, 0.0f, 0.0f); + //rlRotatef(45, 0, 1, 0); + //rlScalef(2.0f, 2.0f, 2.0f); + + rlBegin(RL_QUADS); + rlColor4ub(color.r, color.g, color.b, color.a); + // Front Face + rlNormal3f(0.0f, 0.0f, 1.0f); // Normal Pointing Towards Viewer + rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom Left Of The Texture and Quad + rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom Right Of The Texture and Quad + rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z + length/2); // Top Right Of The Texture and Quad + rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z + length/2); // Top Left Of The Texture and Quad + // Back Face + rlNormal3f(0.0f, 0.0f, - 1.0f); // Normal Pointing Away From Viewer + rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z - length/2); // Bottom Right Of The Texture and Quad + rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z - length/2); // Top Right Of The Texture and Quad + rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z - length/2); // Top Left Of The Texture and Quad + rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z - length/2); // Bottom Left Of The Texture and Quad + // Top Face + rlNormal3f(0.0f, 1.0f, 0.0f); // Normal Pointing Up + rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z - length/2); // Top Left Of The Texture and Quad + rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x - width/2, y + height/2, z + length/2); // Bottom Left Of The Texture and Quad + rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x + width/2, y + height/2, z + length/2); // Bottom Right Of The Texture and Quad + rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z - length/2); // Top Right Of The Texture and Quad + // Bottom Face + rlNormal3f(0.0f, - 1.0f, 0.0f); // Normal Pointing Down + rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x - width/2, y - height/2, z - length/2); // Top Right Of The Texture and Quad + rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x + width/2, y - height/2, z - length/2); // Top Left Of The Texture and Quad + rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom Left Of The Texture and Quad + rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom Right Of The Texture and Quad + // Right face + rlNormal3f(1.0f, 0.0f, 0.0f); // Normal Pointing Right + rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z - length/2); // Bottom Right Of The Texture and Quad + rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z - length/2); // Top Right Of The Texture and Quad + rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z + length/2); // Top Left Of The Texture and Quad + rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom Left Of The Texture and Quad + // Left Face + rlNormal3f( - 1.0f, 0.0f, 0.0f); // Normal Pointing Left + rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z - length/2); // Bottom Left Of The Texture and Quad + rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom Right Of The Texture and Quad + rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z + length/2); // Top Right Of The Texture and Quad + rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z - length/2); // Top Left Of The Texture and Quad + rlEnd(); + //rlPopMatrix(); + + rlSetTexture(0); +} + +// Draw cube with texture piece applied to all faces +void DrawCubeTextureRec(Texture2D texture, Rectangle source, Vector3 position, float width, float height, float length, Color color) +{ + float x = position.x; + float y = position.y; + float z = position.z; + float texWidth = (float)texture.width; + float texHeight = (float)texture.height; + + // Set desired texture to be enabled while drawing following vertex data + rlSetTexture(texture.id); + + // We calculate the normalized texture coordinates for the desired texture-source-rectangle + // It means converting from (tex.width, tex.height) coordinates to [0.0f, 1.0f] equivalent + rlBegin(RL_QUADS); + rlColor4ub(color.r, color.g, color.b, color.a); + + // Front face + rlNormal3f(0.0f, 0.0f, 1.0f); + rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x - width/2, y - height/2, z + length/2); + rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x + width/2, y - height/2, z + length/2); + rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); + rlVertex3f(x + width/2, y + height/2, z + length/2); + rlTexCoord2f(source.x/texWidth, source.y/texHeight); + rlVertex3f(x - width/2, y + height/2, z + length/2); + + // Back face + rlNormal3f(0.0f, 0.0f, - 1.0f); + rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x - width/2, y - height/2, z - length/2); + rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); + rlVertex3f(x - width/2, y + height/2, z - length/2); + rlTexCoord2f(source.x/texWidth, source.y/texHeight); + rlVertex3f(x + width/2, y + height/2, z - length/2); + rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x + width/2, y - height/2, z - length/2); + + // Top face + rlNormal3f(0.0f, 1.0f, 0.0f); + rlTexCoord2f(source.x/texWidth, source.y/texHeight); + rlVertex3f(x - width/2, y + height/2, z - length/2); + rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x - width/2, y + height/2, z + length/2); + rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x + width/2, y + height/2, z + length/2); + rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); + rlVertex3f(x + width/2, y + height/2, z - length/2); + + // Bottom face + rlNormal3f(0.0f, - 1.0f, 0.0f); + rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); + rlVertex3f(x - width/2, y - height/2, z - length/2); + rlTexCoord2f(source.x/texWidth, source.y/texHeight); + rlVertex3f(x + width/2, y - height/2, z - length/2); + rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x + width/2, y - height/2, z + length/2); + rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x - width/2, y - height/2, z + length/2); + + // Right face + rlNormal3f(1.0f, 0.0f, 0.0f); + rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x + width/2, y - height/2, z - length/2); + rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); + rlVertex3f(x + width/2, y + height/2, z - length/2); + rlTexCoord2f(source.x/texWidth, source.y/texHeight); + rlVertex3f(x + width/2, y + height/2, z + length/2); + rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x + width/2, y - height/2, z + length/2); + + // Left face + rlNormal3f( - 1.0f, 0.0f, 0.0f); + rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x - width/2, y - height/2, z - length/2); + rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); + rlVertex3f(x - width/2, y - height/2, z + length/2); + rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); + rlVertex3f(x - width/2, y + height/2, z + length/2); + rlTexCoord2f(source.x/texWidth, source.y/texHeight); + rlVertex3f(x - width/2, y + height/2, z - length/2); + + rlEnd(); + + rlSetTexture(0); +} \ No newline at end of file diff --git a/examples/models/models_draw_cube_texture.png b/examples/models/models_draw_cube_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..45b3a13d1024093f09f9f64ea2b98d68b89303ac GIT binary patch literal 63170 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 z%0D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 rotate -> translate) - //rlTranslatef(2.0f, 0.0f, 0.0f); - //rlRotatef(45, 0, 1, 0); - //rlScalef(2.0f, 2.0f, 2.0f); - - rlBegin(RL_QUADS); - rlColor4ub(color.r, color.g, color.b, color.a); - // Front Face - rlNormal3f(0.0f, 0.0f, 1.0f); // Normal Pointing Towards Viewer - rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom Left Of The Texture and Quad - rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom Right Of The Texture and Quad - rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z + length/2); // Top Right Of The Texture and Quad - rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z + length/2); // Top Left Of The Texture and Quad - // Back Face - rlNormal3f(0.0f, 0.0f, - 1.0f); // Normal Pointing Away From Viewer - rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z - length/2); // Bottom Right Of The Texture and Quad - rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z - length/2); // Top Right Of The Texture and Quad - rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z - length/2); // Top Left Of The Texture and Quad - rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z - length/2); // Bottom Left Of The Texture and Quad - // Top Face - rlNormal3f(0.0f, 1.0f, 0.0f); // Normal Pointing Up - rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z - length/2); // Top Left Of The Texture and Quad - rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x - width/2, y + height/2, z + length/2); // Bottom Left Of The Texture and Quad - rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x + width/2, y + height/2, z + length/2); // Bottom Right Of The Texture and Quad - rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z - length/2); // Top Right Of The Texture and Quad - // Bottom Face - rlNormal3f(0.0f, - 1.0f, 0.0f); // Normal Pointing Down - rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x - width/2, y - height/2, z - length/2); // Top Right Of The Texture and Quad - rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x + width/2, y - height/2, z - length/2); // Top Left Of The Texture and Quad - rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom Left Of The Texture and Quad - rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom Right Of The Texture and Quad - // Right face - rlNormal3f(1.0f, 0.0f, 0.0f); // Normal Pointing Right - rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z - length/2); // Bottom Right Of The Texture and Quad - rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z - length/2); // Top Right Of The Texture and Quad - rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x + width/2, y + height/2, z + length/2); // Top Left Of The Texture and Quad - rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x + width/2, y - height/2, z + length/2); // Bottom Left Of The Texture and Quad - // Left Face - rlNormal3f( - 1.0f, 0.0f, 0.0f); // Normal Pointing Left - rlTexCoord2f(0.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z - length/2); // Bottom Left Of The Texture and Quad - rlTexCoord2f(1.0f, 0.0f); rlVertex3f(x - width/2, y - height/2, z + length/2); // Bottom Right Of The Texture and Quad - rlTexCoord2f(1.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z + length/2); // Top Right Of The Texture and Quad - rlTexCoord2f(0.0f, 1.0f); rlVertex3f(x - width/2, y + height/2, z - length/2); // Top Left Of The Texture and Quad - rlEnd(); - //rlPopMatrix(); - - rlSetTexture(0); -} - -// Draw cube with texture piece applied to all faces -void DrawCubeTextureRec(Texture2D texture, Rectangle source, Vector3 position, float width, float height, float length, Color color) -{ - float x = position.x; - float y = position.y; - float z = position.z; - float texWidth = (float)texture.width; - float texHeight = (float)texture.height; - - rlSetTexture(texture.id); - - rlBegin(RL_QUADS); - rlColor4ub(color.r, color.g, color.b, color.a); - - // Front face - rlNormal3f(0.0f, 0.0f, 1.0f); - rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x - width/2, y - height/2, z + length/2); - rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x + width/2, y - height/2, z + length/2); - rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); - rlVertex3f(x + width/2, y + height/2, z + length/2); - rlTexCoord2f(source.x/texWidth, source.y/texHeight); - rlVertex3f(x - width/2, y + height/2, z + length/2); - - // Back face - rlNormal3f(0.0f, 0.0f, - 1.0f); - rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x - width/2, y - height/2, z - length/2); - rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); - rlVertex3f(x - width/2, y + height/2, z - length/2); - rlTexCoord2f(source.x/texWidth, source.y/texHeight); - rlVertex3f(x + width/2, y + height/2, z - length/2); - rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x + width/2, y - height/2, z - length/2); - - // Top face - rlNormal3f(0.0f, 1.0f, 0.0f); - rlTexCoord2f(source.x/texWidth, source.y/texHeight); - rlVertex3f(x - width/2, y + height/2, z - length/2); - rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x - width/2, y + height/2, z + length/2); - rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x + width/2, y + height/2, z + length/2); - rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); - rlVertex3f(x + width/2, y + height/2, z - length/2); - - // Bottom face - rlNormal3f(0.0f, - 1.0f, 0.0f); - rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); - rlVertex3f(x - width/2, y - height/2, z - length/2); - rlTexCoord2f(source.x/texWidth, source.y/texHeight); - rlVertex3f(x + width/2, y - height/2, z - length/2); - rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x + width/2, y - height/2, z + length/2); - rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x - width/2, y - height/2, z + length/2); - - // Right face - rlNormal3f(1.0f, 0.0f, 0.0f); - rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x + width/2, y - height/2, z - length/2); - rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); - rlVertex3f(x + width/2, y + height/2, z - length/2); - rlTexCoord2f(source.x/texWidth, source.y/texHeight); - rlVertex3f(x + width/2, y + height/2, z + length/2); - rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x + width/2, y - height/2, z + length/2); - - // Left face - rlNormal3f( - 1.0f, 0.0f, 0.0f); - rlTexCoord2f(source.x/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x - width/2, y - height/2, z - length/2); - rlTexCoord2f((source.x + source.width)/texWidth, (source.y + source.height)/texHeight); - rlVertex3f(x - width/2, y - height/2, z + length/2); - rlTexCoord2f((source.x + source.width)/texWidth, source.y/texHeight); - rlVertex3f(x - width/2, y + height/2, z + length/2); - rlTexCoord2f(source.x/texWidth, source.y/texHeight); - rlVertex3f(x - width/2, y + height/2, z - length/2); - - rlEnd(); - - rlSetTexture(0); -} - // Draw sphere void DrawSphere(Vector3 centerPos, float radius, Color color) {