Browse Source

REVIEWED: text_draw_3d, code formatting

pull/1695/head
raysan5 3 years ago
parent
commit
00e71faed6
2 changed files with 70 additions and 73 deletions
  1. +0
    -0
      examples/text/resources/shaders/glsl330/alpha_discard.fs
  2. +70
    -73
      examples/text/text_draw_3d.c

examples/text/resources/shaders/glsl330/alphaDiscard.fs → examples/text/resources/shaders/glsl330/alpha_discard.fs View File


+ 70
- 73
examples/text/text_draw_3d.c View File

@ -17,30 +17,41 @@
* This example has been created using raylib 3.5 (www.raylib.com) * This example has been created using raylib 3.5 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
* *
* Copyright (C) 2021 Vlad Adrian (@Demizdor - https://github.com/Demizdor)
* Copyright (C) 2021 Ramon Santamaria (@raysan5)
* Example contributed by Vlad Adrian (@Demizdor) and reviewed by Ramon Santamaria (@raysan5)
*
* Copyright (C) 2021 Vlad Adrian (@Demizdor - https://github.com/Demizdor)
*
********************************************************************************************/ ********************************************************************************************/
#include <stddef.h> // for NULL
#include <math.h> // for sinf()
#include "raylib.h" #include "raylib.h"
#include "rlgl.h" #include "rlgl.h"
#include <stddef.h> // Required for: NULL
#include <math.h> // Required for: sinf()
// To make it work with the older RLGL module just comment the line below // To make it work with the older RLGL module just comment the line below
#define RAYLIB_NEW_RLGL #define RAYLIB_NEW_RLGL
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// Globals // Globals
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
#define LETTER_BOUNDRY_SIZE 0.25f
#define TEXT_MAX_LAYERS 32
#define LETTER_BOUNDRY_SIZE 0.25f
#define TEXT_MAX_LAYERS 32
#define LETTER_BOUNDRY_COLOR VIOLET
bool SHOW_LETTER_BOUNDRY = false; bool SHOW_LETTER_BOUNDRY = false;
#define LETTER_BOUDRY_COLOR VIOLET
bool SHOW_TEXT_BOUNDRY = false; bool SHOW_TEXT_BOUNDRY = false;
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
// Data Types definition
//--------------------------------------------------------------------------------------
// Configuration structure for waving the text
typedef struct {
Vector3 waveRange;
Vector3 waveSpeed;
Vector3 waveOffset;
} WaveTextConfig;
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// Module Functions Declaration // Module Functions Declaration
@ -51,12 +62,7 @@ void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontS
void DrawText3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, Color tint); void DrawText3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, Color tint);
// Measure a text in 3D. For some reason `MeasureTextEx()` just doesn't seem to work so i had to use this instead. // Measure a text in 3D. For some reason `MeasureTextEx()` just doesn't seem to work so i had to use this instead.
Vector3 MeasureText3D(Font font, const char* text, float fontSize, float fontSpacing, float lineSpacing); Vector3 MeasureText3D(Font font, const char* text, float fontSize, float fontSpacing, float lineSpacing);
// Configuration structure for waving the text
typedef struct {
Vector3 waveRange;
Vector3 waveSpeed;
Vector3 waveOffset;
} WaveTextConfig;
// Draw a 2D text in 3D space and wave the parts that start with `~~` and end with `~~`. // Draw a 2D text in 3D space and wave the parts that start with `~~` and end with `~~`.
// This is a modified version of the original code by @Nighten found here https://github.com/NightenDushi/Raylib_DrawTextStyle // This is a modified version of the original code by @Nighten found here https://github.com/NightenDushi/Raylib_DrawTextStyle
void DrawTextWave3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, WaveTextConfig* config, float time, Color tint); void DrawTextWave3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, WaveTextConfig* config, float time, Color tint);
@ -64,9 +70,6 @@ void DrawTextWave3D(Font font, const char *text, Vector3 position, float fontSiz
Vector3 MeasureTextWave3D(Font font, const char* text, float fontSize, float fontSpacing, float lineSpacing); Vector3 MeasureTextWave3D(Font font, const char* text, float fontSize, float fontSpacing, float lineSpacing);
// Generates a nice color with a random hue // Generates a nice color with a random hue
Color GenerateRandomColor(float s, float v); Color GenerateRandomColor(float s, float v);
//--------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
// Program main entry point // Program main entry point
@ -81,7 +84,7 @@ int main(void)
SetConfigFlags(FLAG_MSAA_4X_HINT|FLAG_VSYNC_HINT); SetConfigFlags(FLAG_MSAA_4X_HINT|FLAG_VSYNC_HINT);
InitWindow(screenWidth, screenHeight, "raylib [text] example - draw 2D text in 3D"); InitWindow(screenWidth, screenHeight, "raylib [text] example - draw 2D text in 3D");
bool spin = true; // Spin the camera?
bool spin = true; // Spin the camera?
bool multicolor = false; // Multicolor mode bool multicolor = false; // Multicolor mode
// Define the camera to look into our 3d world // Define the camera to look into our 3d world
@ -105,7 +108,7 @@ int main(void)
float fontSpacing = 0.5f; float fontSpacing = 0.5f;
float lineSpacing = -1.0f; float lineSpacing = -1.0f;
// Set the text
// Set the text (using markdown!)
char text[64] = "Hello ~~World~~ in 3D!"; char text[64] = "Hello ~~World~~ in 3D!";
Vector3 tbox = {0}; Vector3 tbox = {0};
int layers = 1; int layers = 1;
@ -124,7 +127,7 @@ int main(void)
Color dark = RED; Color dark = RED;
// Load the alpha discard shader // Load the alpha discard shader
Shader alphaDiscard = LoadShader(NULL, "resources/shaders/glsl330/alphaDiscard.fs");
Shader alphaDiscard = LoadShader(NULL, "resources/shaders/glsl330/alpha_discard.fs");
// Array filled with multiple random colors (when multicolor mode is set) // Array filled with multiple random colors (when multicolor mode is set)
Color multi[TEXT_MAX_LAYERS] = {0}; Color multi[TEXT_MAX_LAYERS] = {0};
@ -147,7 +150,7 @@ int main(void)
UnloadFont(font); UnloadFont(font);
font = LoadFontEx(droppedFiles[0], fontSize, 0, 0); font = LoadFontEx(droppedFiles[0], fontSize, 0, 0);
} }
else if(IsFileExtension(droppedFiles[0], ".fnt"))
else if (IsFileExtension(droppedFiles[0], ".fnt"))
{ {
UnloadFont(font); UnloadFont(font);
font = LoadFont(droppedFiles[0]); font = LoadFont(droppedFiles[0]);
@ -157,9 +160,9 @@ int main(void)
} }
// Handle Events // Handle Events
if(IsKeyPressed(KEY_F1)) SHOW_LETTER_BOUNDRY = !SHOW_LETTER_BOUNDRY;
if(IsKeyPressed(KEY_F2)) SHOW_TEXT_BOUNDRY = !SHOW_TEXT_BOUNDRY;
if(IsKeyPressed(KEY_F3))
if (IsKeyPressed(KEY_F1)) SHOW_LETTER_BOUNDRY = !SHOW_LETTER_BOUNDRY;
if (IsKeyPressed(KEY_F2)) SHOW_TEXT_BOUNDRY = !SHOW_TEXT_BOUNDRY;
if (IsKeyPressed(KEY_F3))
{ {
// Handle camera change // Handle camera change
spin = !spin; spin = !spin;
@ -170,7 +173,7 @@ int main(void)
camera.fovy = 45.0f; // Camera field-of-view Y camera.fovy = 45.0f; // Camera field-of-view Y
camera.projection = CAMERA_PERSPECTIVE; // Camera mode type camera.projection = CAMERA_PERSPECTIVE; // Camera mode type
if(spin)
if (spin)
{ {
camera.position = (Vector3){ -10.0f, 15.0f, -10.0f }; // Camera position camera.position = (Vector3){ -10.0f, 15.0f, -10.0f }; // Camera position
SetCameraMode(camera, CAMERA_ORBITAL); SetCameraMode(camera, CAMERA_ORBITAL);
@ -183,7 +186,7 @@ int main(void)
} }
// Handle clicking the cube // Handle clicking the cube
if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{ {
Ray ray = GetMouseRay(GetMousePosition(), camera); Ray ray = GetMouseRay(GetMousePosition(), camera);
@ -191,36 +194,35 @@ int main(void)
bool collision = CheckCollisionRayBox(ray, bool collision = CheckCollisionRayBox(ray,
(BoundingBox){(Vector3){ cubePosition.x - cubeSize.x/2, cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2 }, (BoundingBox){(Vector3){ cubePosition.x - cubeSize.x/2, cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2 },
(Vector3){ cubePosition.x + cubeSize.x/2, cubePosition.y + cubeSize.y/2, cubePosition.z + cubeSize.z/2 }}); (Vector3){ cubePosition.x + cubeSize.x/2, cubePosition.y + cubeSize.y/2, cubePosition.z + cubeSize.z/2 }});
if(collision)
if (collision)
{ {
// generate new random colors
// Generate new random colors
light = GenerateRandomColor(0.5f, 0.78f); light = GenerateRandomColor(0.5f, 0.78f);
dark = GenerateRandomColor(0.4f, 0.58f); dark = GenerateRandomColor(0.4f, 0.58f);
} }
} }
// Handle text layers changes // Handle text layers changes
if(IsKeyPressed(KEY_HOME)){ if(layers > 1) --layers; }
else if(IsKeyPressed(KEY_END)) { if(layers < TEXT_MAX_LAYERS) ++layers; }
if (IsKeyPressed(KEY_HOME)) { if (layers > 1) --layers; }
else if (IsKeyPressed(KEY_END)) { if (layers < TEXT_MAX_LAYERS) ++layers; }
// Handle text changes // Handle text changes
if(IsKeyPressed(KEY_LEFT)) fontSize -= 0.5f;
else if(IsKeyPressed(KEY_RIGHT)) fontSize += 0.5f;
else if(IsKeyPressed(KEY_UP)) fontSpacing -= 0.1f;
else if(IsKeyPressed(KEY_DOWN)) fontSpacing += 0.1f;
else if(IsKeyPressed(KEY_PAGE_UP)) lineSpacing -= 0.1f;
else if(IsKeyPressed(KEY_PAGE_DOWN)) lineSpacing += 0.1f;
else if(IsKeyDown(KEY_INSERT)) layerDistance -= 0.001f;
else if(IsKeyDown(KEY_DELETE)) layerDistance += 0.001f;
else if(IsKeyPressed(KEY_TAB))
if (IsKeyPressed(KEY_LEFT)) fontSize -= 0.5f;
else if (IsKeyPressed(KEY_RIGHT)) fontSize += 0.5f;
else if (IsKeyPressed(KEY_UP)) fontSpacing -= 0.1f;
else if (IsKeyPressed(KEY_DOWN)) fontSpacing += 0.1f;
else if (IsKeyPressed(KEY_PAGE_UP)) lineSpacing -= 0.1f;
else if (IsKeyPressed(KEY_PAGE_DOWN)) lineSpacing += 0.1f;
else if (IsKeyDown(KEY_INSERT)) layerDistance -= 0.001f;
else if (IsKeyDown(KEY_DELETE)) layerDistance += 0.001f;
else if (IsKeyPressed(KEY_TAB))
{ {
// enable /disable multicolor mode
multicolor = !multicolor;
multicolor = !multicolor; // Enable /disable multicolor mode
if(multicolor)
if (multicolor)
{ {
// Fill color array with random colors // Fill color array with random colors
for(int i=0; i<TEXT_MAX_LAYERS; ++i)
for (int i = 0; i < TEXT_MAX_LAYERS; ++i)
{ {
multi[i] = GenerateRandomColor(0.5f, 0.8f); multi[i] = GenerateRandomColor(0.5f, 0.8f);
multi[i].a = GetRandomValue(0, 255); multi[i].a = GetRandomValue(0, 255);
@ -230,17 +232,18 @@ int main(void)
// Handle text input // Handle text input
int ch = GetCharPressed(); int ch = GetCharPressed();
if(IsKeyPressed(KEY_BACKSPACE))
if (IsKeyPressed(KEY_BACKSPACE))
{ {
// remove last char
// Remove last char
int len = TextLength(text); int len = TextLength(text);
if(len > 0) text[len-1] = '\0';
if (len > 0) text[len - 1] = '\0';
} }
else if(IsKeyPressed(KEY_ENTER))
else if (IsKeyPressed(KEY_ENTER))
{ {
// handle newline // handle newline
int len = TextLength(text); int len = TextLength(text);
if(len < sizeof(text)-1) {
if (len < sizeof(text) - 1)
{
text[len] = '\n'; text[len] = '\n';
text[len+1] ='\0'; text[len+1] ='\0';
} }
@ -249,7 +252,8 @@ int main(void)
{ {
// append only printable chars // append only printable chars
int len = TextLength(text); int len = TextLength(text);
if(len < sizeof(text)-1) {
if (len < sizeof(text) - 1)
{
text[len] = ch; text[len] = ch;
text[len+1] ='\0'; text[len+1] ='\0';
} }
@ -283,15 +287,16 @@ int main(void)
rlPushMatrix(); rlPushMatrix();
rlRotatef(90.0f, 1.0f, 0.0f, 0.0f); rlRotatef(90.0f, 1.0f, 0.0f, 0.0f);
rlRotatef(90.0f, 0.0f, 0.0f, -1.0f); rlRotatef(90.0f, 0.0f, 0.0f, -1.0f);
for(int i=0; i<layers; ++i)
for (int i = 0; i < layers; ++i)
{ {
Color clr = light; Color clr = light;
if(multicolor) clr = multi[i]; if(multicolor) clr = multi[i];
DrawTextWave3D(font, text, (Vector3){-tbox.x/2.0f, layerDistance*i, -4.5f}, fontSize, fontSpacing, lineSpacing, true, &wcfg, time, clr);
DrawTextWave3D(font, text, (Vector3){ -tbox.x/2.0f, layerDistance*i, -4.5f }, fontSize, fontSpacing, lineSpacing, true, &wcfg, time, clr);
} }
k">if(SHOW_TEXT_BOUNDRY) // draw the text boundry if set
DrawCubeWiresV((Vector3){0.0f, 0.0f, -4.5f+tbox.z/2}, tbox, dark);
// Draw the text boundry if set
class="k">if class="p">(SHOW_TEXT_BOUNDRY) DrawCubeWiresV((Vector3){ 0.0f, 0.0f, -4.5f + tbox.z/2 }, tbox, dark);
rlPopMatrix(); rlPopMatrix();
// Don't draw the letter boundries for the 3D text below // Don't draw the letter boundries for the 3D text below
@ -302,42 +307,42 @@ int main(void)
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
rlPushMatrix(); rlPushMatrix();
rlRotatef(180.0f, 0.0f, 1.0f, 0.0f); rlRotatef(180.0f, 0.0f, 1.0f, 0.0f);
char* opt = (char*)TextFormat("< SIZE: %2.1f >", fontSize);
char *opt = (char *)TextFormat("< SIZE: %2.1f >", fontSize);
quads += TextLength(opt); quads += TextLength(opt);
Vector3 m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); Vector3 m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f);
Vector3 pos = { -m.x/2.0f, 0.01f, 2.0f}; Vector3 pos = { -m.x/2.0f, 0.01f, 2.0f};
DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, BLUE); DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, BLUE);
pos.z += 0.5f + m.z; pos.z += 0.5f + m.z;
opt = (char*)TextFormat("< SPACING: %2.1f >", fontSpacing);
opt = (char *)TextFormat("< SPACING: %2.1f >", fontSpacing);
quads += TextLength(opt); quads += TextLength(opt);
m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f);
pos.x = -m.x/2.0f; pos.x = -m.x/2.0f;
DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, BLUE); DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, BLUE);
pos.z += 0.5f + m.z; pos.z += 0.5f + m.z;
opt = (char*)TextFormat("< LINE: %2.1f >", lineSpacing);
opt = (char *)TextFormat("< LINE: %2.1f >", lineSpacing);
quads += TextLength(opt); quads += TextLength(opt);
m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f);
pos.x = -m.x/2.0f; pos.x = -m.x/2.0f;
DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, BLUE); DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, BLUE);
pos.z += 1.0f + m.z; pos.z += 1.0f + m.z;
opt = (char*)TextFormat("< LBOX: %3s >", slb ?"ON":"OFF");
opt = (char *)TextFormat("< LBOX: %3s >", slb? "ON" : "OFF");
quads += TextLength(opt); quads += TextLength(opt);
m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f);
pos.x = -m.x/2.0f; pos.x = -m.x/2.0f;
DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, RED); DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, RED);
pos.z += 0.5f + m.z; pos.z += 0.5f + m.z;
opt = (char*)TextFormat("< TBOX: %3s >", SHOW_TEXT_BOUNDRY ?"ON":"OFF");
opt = (char *)TextFormat("< TBOX: %3s >", SHOW_TEXT_BOUNDRY? "ON" : "OFF");
quads += TextLength(opt); quads += TextLength(opt);
m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f);
pos.x = -m.x/2.0f; pos.x = -m.x/2.0f;
DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, RED); DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, RED);
pos.z += 0.5f + m.z; pos.z += 0.5f + m.z;
opt = (char*)TextFormat("< LAYER DISTANCE: %.3f >", layerDistance);
opt = (char *)TextFormat("< LAYER DISTANCE: %.3f >", layerDistance);
quads += TextLength(opt); quads += TextLength(opt);
m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f);
pos.x = -m.x/2.0f; pos.x = -m.x/2.0f;
@ -400,7 +405,7 @@ int main(void)
"Press [F3] to toggle the camera", 10, 35, 10, BLACK); "Press [F3] to toggle the camera", 10, 35, 10, BLACK);
quads += TextLength(text)*2*layers; quads += TextLength(text)*2*layers;
char* tmp = (char*)TextFormat("%2i layer(s) | %s camera | %4i quads (%4i verts)", layers, spin ? "ORBITAL" : "FREE", quads, quads*4);
char *tmp = (char *)TextFormat("%2i layer(s) | %s camera | %4i quads (%4i verts)", layers, spin? "ORBITAL" : "FREE", quads, quads*4);
int width = MeasureText(tmp, 10); int width = MeasureText(tmp, 10);
DrawText(tmp, screenWidth - 20 - width, 10, 10, DARKGREEN); DrawText(tmp, screenWidth - 20 - width, 10, 10, DARKGREEN);
@ -436,12 +441,9 @@ int main(void)
return 0; return 0;
} }
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// Module Functions Definitions // Module Functions Definitions
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// Draw codepoint at specified position in 3D space // Draw codepoint at specified position in 3D space
void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontSize, bool backface, Color tint) void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontSize, bool backface, Color tint)
{ {
@ -476,13 +478,13 @@ void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontS
const float th = (srcRec.y+srcRec.height)/font.texture.height; const float th = (srcRec.y+srcRec.height)/font.texture.height;
if(SHOW_LETTER_BOUNDRY) if(SHOW_LETTER_BOUNDRY)
DrawCubeWiresV((Vector3){ position.x+width/2, position.y, position.z+height/2}, (Vector3){width, LETTER_BOUNDRY_SIZE, height}, LETTER_BOUDRY_COLOR);
DrawCubeWiresV((Vector3){ position.x + width/2, position.y, position.z + height/2}, (Vector3){ width, LETTER_BOUNDRY_SIZE, height }, LETTER_BOUNDRY_COLOR);
#if defined(RAYLIB_NEW_RLGL) #if defined(RAYLIB_NEW_RLGL)
rlCheckRenderBatchLimit(4+4*backface);
rlCheckRenderBatchLimit(4 + 4*backface);
rlSetTexture(font.texture.id); rlSetTexture(font.texture.id);
#else #else
if (rlCheckBufferLimit(4+4*backface)) rlglDraw();
if (rlCheckBufferLimit(4 + 4*backface)) rlglDraw();
rlEnableTexture(font.texture.id); rlEnableTexture(font.texture.id);
#endif #endif
rlPushMatrix(); rlPushMatrix();
@ -498,7 +500,7 @@ void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontS
rlTexCoord2f(tw, th); rlVertex3f(x + width, y, z + height); // Bottom Right Of The Texture and Quad rlTexCoord2f(tw, th); rlVertex3f(x + width, y, z + height); // Bottom Right Of The Texture and Quad
rlTexCoord2f(tw, ty); rlVertex3f(x + width, y, z); // Top Right Of The Texture and Quad rlTexCoord2f(tw, ty); rlVertex3f(x + width, y, z); // Top Right Of The Texture and Quad
if(backface)
if (backface)
{ {
// Back Face // Back Face
rlNormal3f(0.0f, -1.0f, 0.0f); // Normal Pointing Down rlNormal3f(0.0f, -1.0f, 0.0f); // Normal Pointing Down
@ -515,11 +517,9 @@ void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontS
#else #else
rlDisableTexture(); rlDisableTexture();
#endif #endif
} }
} }
void DrawText3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, Color tint) void DrawText3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, Color tint)
{ {
int length = TextLength(text); // Total length in bytes of the text, scanned by codepoints in loop int length = TextLength(text); // Total length in bytes of the text, scanned by codepoints in loop
@ -529,7 +529,6 @@ void DrawText3D(Font font, const char *text, Vector3 position, float fontSize, f
float scale = fontSize/(float)font.baseSize; float scale = fontSize/(float)font.baseSize;
for (int i = 0; i < length;) for (int i = 0; i < length;)
{ {
// Get next codepoint from byte string and glyph index in font // Get next codepoint from byte string and glyph index in font
@ -568,7 +567,6 @@ Vector3 MeasureText3D(Font font, const char* text, float fontSize, float fontSpa
int len = TextLength(text); int len = TextLength(text);
int tempLen = 0; // Used to count longer text line num chars int tempLen = 0; // Used to count longer text line num chars
int lenCounter = 0; int lenCounter = 0;
float tempTextWidth = 0.0f; // Used to count longer text line width float tempTextWidth = 0.0f; // Used to count longer text line width
@ -685,7 +683,6 @@ Vector3 MeasureTextWave3D(Font font, const char* text, float fontSize, float fon
int len = TextLength(text); int len = TextLength(text);
int tempLen = 0; // Used to count longer text line num chars int tempLen = 0; // Used to count longer text line num chars
int lenCounter = 0; int lenCounter = 0;
float tempTextWidth = 0.0f; // Used to count longer text line width float tempTextWidth = 0.0f; // Used to count longer text line width
@ -744,7 +741,7 @@ Vector3 MeasureTextWave3D(Font font, const char* text, float fontSize, float fon
Color GenerateRandomColor(float s, float v) Color GenerateRandomColor(float s, float v)
{ {
const float Phi = 0.618033988749895; // golden ratio conjugate
const float Phi = 0.618033988749895f; // Golden ratio conjugate
float h = GetRandomValue(0, 360); float h = GetRandomValue(0, 360);
h = fmodf((h + h*Phi), 360.0f); h = fmodf((h + h*Phi), 360.0f);
return ColorFromHSV(h, s, v); return ColorFromHSV(h, s, v);

Loading…
Cancel
Save