From f2f472c801abf0d45ed619fdcfb1e8c6ef28ff75 Mon Sep 17 00:00:00 2001 From: oscujic <52619003+oscujic@users.noreply.github.com> Date: Sun, 19 Jul 2026 19:33:29 -0600 Subject: [PATCH] Fix DrawSphereWires (Less aggressively) Summary: - Eliminated some redundancies - Fixed a bug(?) where the sphere would have 1 more "ring" (latitude division) than expected - Fixed a bug where the top ring was double-covered - Added comments denoting which code draws which lines --- src/rmodels.c | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/rmodels.c b/src/rmodels.c index 0325f9b1b..6cf049e41 100644 --- a/src/rmodels.c +++ b/src/rmodels.c @@ -542,30 +542,31 @@ void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Col rlBegin(RL_LINES); rlColor4ub(color.r, color.g, color.b, color.a); - for (int i = 0; i < (rings + 2); i++) + for (int i = 0; i < rings; i++) { for (int j = 0; j < slices; j++) { - rlVertex3f(cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*i))*sinf(DEG2RAD*(360.0f*j/slices)), - sinf(DEG2RAD*(270 + (180.0f/(rings + 1))*i)), - cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*i))*cosf(DEG2RAD*(360.0f*j/slices))); - rlVertex3f(cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1)))*sinf(DEG2RAD*(360.0f*(j + 1)/slices)), - sinf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1))), - cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1)))*cosf(DEG2RAD*(360.0f*(j + 1)/slices))); - - rlVertex3f(cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1)))*sinf(DEG2RAD*(360.0f*(j + 1)/slices)), - sinf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1))), - cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1)))*cosf(DEG2RAD*(360.0f*(j + 1)/slices))); - rlVertex3f(cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1)))*sinf(DEG2RAD*(360.0f*j/slices)), - sinf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1))), - cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1)))*cosf(DEG2RAD*(360.0f*j/slices))); - - rlVertex3f(cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1)))*sinf(DEG2RAD*(360.0f*j/slices)), - sinf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1))), - cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*(i + 1)))*cosf(DEG2RAD*(360.0f*j/slices))); - rlVertex3f(cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*i))*sinf(DEG2RAD*(360.0f*j/slices)), - sinf(DEG2RAD*(270 + (180.0f/(rings + 1))*i)), - cosf(DEG2RAD*(270 + (180.0f/(rings + 1))*i))*cosf(DEG2RAD*(360.0f*j/slices))); + // Diagonal Lines + rlVertex3f(sinf(DEG2RAD*((180.0f/rings)*i))*sinf(DEG2RAD*(360.0f*j/slices)), + cosf(DEG2RAD*((180.0f/rings)*i)), + sinf(DEG2RAD*((180.0f/rings)*i))*cosf(DEG2RAD*(360.0f*j/slices))); + rlVertex3f(sinf(DEG2RAD*((180.0f/rings)*(i + 1)))*sinf(DEG2RAD*(360.0f*(j + 1)/slices)), + cosf(DEG2RAD*((180.0f/rings)*(i + 1))), + sinf(DEG2RAD*((180.0f/rings)*(i + 1)))*cosf(DEG2RAD*(360.0f*(j + 1)/slices))); + // Latitude Lines + rlVertex3f(sinf(DEG2RAD*((180.0f/rings)*i))*sinf(DEG2RAD*(360.0f*(j + 1)/slices)), + cosf(DEG2RAD*((180.0f/rings)*i)), + sinf(DEG2RAD*((180.0f/rings)*i))*cosf(DEG2RAD*(360.0f*(j + 1)/slices))); + rlVertex3f(sinf(DEG2RAD*((180.0f/rings)*i))*sinf(DEG2RAD*(360.0f*j/slices)), + cosf(DEG2RAD*((180.0f/rings)*i)), + sinf(DEG2RAD*((180.0f/rings)*i))*cosf(DEG2RAD*(360.0f*j/slices))); + // Longitude Lines + rlVertex3f(sinf(DEG2RAD*((180.0f/rings)*(i + 1)))*sinf(DEG2RAD*(360.0f*j/slices)), + cosf(DEG2RAD*((180.0f/rings)*(i + 1))), + sinf(DEG2RAD*((180.0f/rings)*(i + 1)))*cosf(DEG2RAD*(360.0f*j/slices))); + rlVertex3f(sinf(DEG2RAD*((180.0f/rings)*i))*sinf(DEG2RAD*(360.0f*j/slices)), + cosf(DEG2RAD*((180.0f/rings)*i)), + sinf(DEG2RAD*((180.0f/rings)*i))*cosf(DEG2RAD*(360.0f*j/slices))); } } rlEnd();