From 67f448a0980e83df8c9252b6b38911fb406cb11b Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Fri, 14 Jun 2024 23:15:59 -0500 Subject: backface culling --- src/main/java/dev/figboot/cuberender/state/Framebuffer.java | 5 +++++ src/main/java/dev/figboot/cuberender/test/GraphicsPanel.java | 2 ++ 2 files changed, 7 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/dev/figboot/cuberender/state/Framebuffer.java b/src/main/java/dev/figboot/cuberender/state/Framebuffer.java index 17f4870..8da0803 100644 --- a/src/main/java/dev/figboot/cuberender/state/Framebuffer.java +++ b/src/main/java/dev/figboot/cuberender/state/Framebuffer.java @@ -27,6 +27,7 @@ public class Framebuffer { @Setter private Matrix4f transform; @Setter private BlendMode blendMode = BlendMode.DISABLE; + @Setter private boolean cullBackFace = true; public Framebuffer(int width, int height) { this.width = width; @@ -114,6 +115,10 @@ public class Framebuffer { vert2 = transform.transform(vert2); normal = transform.transform(normal).normalize(); + if (cullBackFace && normal.z < 0) { + return; + } + float sx0 = logToScrX(vert0.x), sy0 = logToScrY(vert0.y); float sx1 = logToScrX(vert1.x), sy1 = logToScrY(vert1.y); float sx2 = logToScrX(vert2.x), sy2 = logToScrY(vert2.y); diff --git a/src/main/java/dev/figboot/cuberender/test/GraphicsPanel.java b/src/main/java/dev/figboot/cuberender/test/GraphicsPanel.java index aa34853..2f7f1fc 100644 --- a/src/main/java/dev/figboot/cuberender/test/GraphicsPanel.java +++ b/src/main/java/dev/figboot/cuberender/test/GraphicsPanel.java @@ -315,6 +315,7 @@ public class GraphicsPanel extends JPanel { long start = System.nanoTime(); framebuffer.setBlendMode(BlendMode.DISABLE); + framebuffer.setCullBackFace(true); framebuffer.clear(Framebuffer.FB_CLEAR_COLOR | Framebuffer.FB_CLEAR_DEPTH, 0xFF000000); long t1 = System.nanoTime(); @@ -327,6 +328,7 @@ public class GraphicsPanel extends JPanel { framebuffer.setDepthMode(Framebuffer.FB_DEPTH_USE | Framebuffer.FB_DEPTH_COMMIT_TRANSPARENT); framebuffer.setBlendMode(BlendMode.BLEND_OVER); + framebuffer.setCullBackFace(false); framebuffer.drawMesh(meshes.get(BodyPart.HAT)); framebuffer.drawMesh(meshes.get(BodyPart.TORSO_OVERLAY)); framebuffer.drawMesh(meshes.get(BodyPart.LEFT_ARM_OVERLAY)); -- cgit v1.2.3-70-g09d2