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