From 5967c1ba1a8b6311cc4abd1a3a2b3d61cccc7760 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 19 Mar 2021 21:55:47 +0100 Subject: [PATCH] REVIEWED: BeginMode3D() --- src/core.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/core.c b/src/core.c index 3c0017b0..bd099967 100644 --- a/src/core.c +++ b/src/core.c @@ -1913,13 +1913,23 @@ void BeginMode3D(Camera3D camera) float aspect = (float)CORE.Window.currentFbo.width/(float)CORE.Window.currentFbo.height; - double top = 0; - if (camera.projection == CAMERA_PERSPECTIVE) top = RL_CULL_DISTANCE_NEAR*tan(camera.fovy*0.5*DEG2RAD); - else if (camera.projection == CAMERA_ORTHOGRAPHIC) top = camera.fovy/2.0; + // NOTE: zNear and zFar values are important when computing depth buffer values + if (camera.projection == CAMERA_PERSPECTIVE) + { + // Setup perspective projection + double top = RL_CULL_DISTANCE_NEAR*tan(camera.fovy*0.5*DEG2RAD); + double right = top*aspect; - rlFrustum(-top*aspect, top*aspect, -top, top, RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR); + rlFrustum(-right, right, -top, top, RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR); + } + else if (camera.projection == CAMERA_ORTHOGRAPHIC) + { + // Setup orthographic projection + double top = camera.fovy/2.0; + double right = top*aspect; - // NOTE: zNear and zFar values are important when computing depth buffer values + rlOrtho(-right, right, -top,top, RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR); + } rlMatrixMode(RL_MODELVIEW); // Switch back to modelview matrix rlLoadIdentity(); // Reset current matrix (modelview)