|
@ -1913,13 +1913,23 @@ void BeginMode3D(Camera3D camera) |
|
|
|
|
|
|
|
|
float aspect = (float)CORE.Window.currentFbo.width/(float)CORE.Window.currentFbo.height; |
|
|
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 |
|
|
rlMatrixMode(RL_MODELVIEW); // Switch back to modelview matrix |
|
|
rlLoadIdentity(); // Reset current matrix (modelview) |
|
|
rlLoadIdentity(); // Reset current matrix (modelview) |
|
|