From ce660a4b6ba367bd162dd2cff26d02c80a34c912 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sun, 06 Oct 2019 13:09:09 -0400 Subject: [PATCH] Fix camera up and skybox AO --- ObjEditor.java | 2 ++ CameraPane.java | 36 +++++++++++++++++++++++++++++++++--- Camera.java | 5 +++-- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/Camera.java b/Camera.java index 27803e7..0994899 100644 --- a/Camera.java +++ b/Camera.java @@ -382,13 +382,14 @@ { double K = 0.25; - if (!CameraPane.capsLocked) + if (!CameraPane.capsLocked || CameraPane.ambientOcclusion) K = 1; locationBuf.y = location.y * K + locationBuf.y * (1 - K); lookAtBuf.y = lookAt.y * K + lookAtBuf.y * (1 - K); - K = 0.1; + if (CameraPane.capsLocked && !CameraPane.ambientOcclusion) + K = 0.1; upBuf.x = UP.x * K + upBuf.x * (1 - K); upBuf.y = UP.y * K + upBuf.y * (1 - K); diff --git a/CameraPane.java b/CameraPane.java index 7434ed9..95e0a7a 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -9367,7 +9367,9 @@ boolean pointselection = false; ///*static*/ boolean lighttouched = true; boolean deselect; - private boolean ambientOcclusion = false; + + static boolean ambientOcclusion = false; + static boolean flash = false; /*static*/ boolean wait = false; boolean displaydone = false; // after repaint() calls @@ -11260,7 +11262,7 @@ //gl.glEnable(gl.GL_ALPHA_TEST); //gl.glActiveTexture(GL.GL_TEXTURE0); - if (!IsFrozen() && !ambientOcclusion) + if (!IsFrozen()) // && !ambientOcclusion) { DrawSkyBox(gl, (float)ratio); } @@ -18046,7 +18048,7 @@ gl.glReadPixels(0, 0, OCCLUSION_SIZE, OCCLUSION_SIZE, GL.GL_BGRA, GL.GL_UNSIGNED_INT_8_8_8_8_REV, occlusioncolorbuffer); - int[] pixels = selectsizebuffer.array(); + int[] pixels = occlusioncolorbuffer.array(); // BufferedImage rendImage = new BufferedImage(OCCLUSION_SIZE, OCCLUSION_SIZE, BufferedImage.TYPE_INT_RGB); // rendImage.setRGB(0,0, OCCLUSION_SIZE,OCCLUSION_SIZE, pixels, OCCLUSION_SIZE*(OCCLUSION_SIZE-1),-OCCLUSION_SIZE); @@ -18065,6 +18067,9 @@ double FACTOR = 1; + float minvalue = 1; + float maxvalue = 0; + for (int i = 0; i < depths.length; i++) { int x = i / OCCLUSION_SIZE - OCCLUSION_SIZE / 2; @@ -18148,6 +18153,27 @@ double scale = ray.z; // 1; // cos + int pixel = pixels[newindex]; + + float value = (pixel&255) / 255.0f; + + pixel >>= 8; + + value += (pixel&255) / 255.0f; + + pixel >>= 8; + + value += (pixel&255) / 255.0f; + + value /= 3; + + if (minvalue > value) + minvalue = value; + if (maxvalue < value) + maxvalue = value; + + //scale *= value; + float depth = depths[newindex]; /* @@ -18184,6 +18210,8 @@ double z_eye = tempmat2[3*4 + 2] / (depth * -2.0 + 1.0 - tempmat2[2*4 + 2]); double factor = 1 - Math.exp(-z_eye * z_eye / FACTOR); + + factor *= value; r += factor * scale; g += factor * scale; @@ -18227,6 +18255,8 @@ stackdepth--; +// System.err.println("minvalue = " + minvalue); +// System.err.println("maxvalue = " + maxvalue); //System.err.println("depth = " + stackdepth); // DEBUG /* diff --git a/ObjEditor.java b/ObjEditor.java index 2afeb9e..f752583 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -4216,6 +4216,8 @@ //mid.shadow = 0.25f; // mid.shift = 1.5f; // mid.sheen = 10f; + + mid.parallax = 0; SetMaterial(mid, null); } -- Gitblit v1.6.2