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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 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) {