summaryrefslogtreecommitdiffhomepage
path: root/src/customBeginMode3D
diff options
context:
space:
mode:
Diffstat (limited to 'src/customBeginMode3D')
-rw-r--r--src/customBeginMode3D38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/customBeginMode3D b/src/customBeginMode3D
new file mode 100644
index 0000000..7be9b9f
--- /dev/null
+++ b/src/customBeginMode3D
@@ -0,0 +1,38 @@
+// place this code into raylib/src/rcore.c
+void customBeginMode3D(Camera camera)
+{
+ rlDrawRenderBatchActive(); // Update and draw internal render batch
+
+ rlMatrixMode(RL_PROJECTION); // Switch to projection matrix
+ rlPushMatrix(); // Save previous matrix, which contains the settings for the 2d ortho projection
+ rlLoadIdentity(); // Reset current matrix (projection)
+
+ float aspect = ((float)CORE.Window.currentFbo.width / 2.0f)/(float)CORE.Window.currentFbo.height;
+
+ // 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(-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;
+
+ 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)
+
+ // Setup Camera view
+ Matrix matView = MatrixLookAt(camera.position, camera.target, camera.up);
+ rlMultMatrixf(MatrixToFloat(matView)); // Multiply modelview matrix by view matrix (camera)
+
+ rlEnableDepthTest(); // Enable DEPTH_TEST for 3D
+}