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

---
 CameraPane.java |   36 +++++++++++++++++++++++++++++++++---
 1 files changed, 33 insertions(+), 3 deletions(-)

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
 			/*

--
Gitblit v1.6.2