From f868664f7e7626f651e6ade9c9f6863851ef43b7 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Wed, 06 Nov 2019 23:12:57 -0500
Subject: [PATCH] Dangerous "reset".

---
 Camera.java |   64 +++++++++++++++++++-------------
 1 files changed, 38 insertions(+), 26 deletions(-)

diff --git a/Camera.java b/Camera.java
index 9968d81..2bb124c 100644
--- a/Camera.java
+++ b/Camera.java
@@ -288,25 +288,15 @@
                     // Zoom
                     double factor = Math.exp(-dy/300.0); // (1 + dy/100);
 
-                    if (viewCode != 0)
-                    {
-                        LA.vecSub(location, lookAt, location);
+                    LA.vecSub(location, lookAt, location);
 
-                        cVector p = location;
+                    cVector p = location;
 
-                        p.x *= factor;
-                        p.y *= factor;
-                        p.z *= factor;
+                    p.x *= factor;
+                    p.y *= factor;
+                    p.z *= factor;
 
-                        LA.vecAdd(location, lookAt, location);
-                    }
-                    else
-                    if (//shaper_fovy < 180 && factor > 1 ||
-                        shaper_fovy * factor < 150)
-                    {
-                        shaper_fovy *= factor;
-                        //System.out.println("fovy = " + shaper_fovy);
-                    }
+                    LA.vecAdd(location, lookAt, location);
                 }
                 else
                 {
@@ -340,9 +330,12 @@
             location.set(lookAt);
             lookAt.set(cStatic.point1);
             
-            cStatic.point1.set(locationBuf);
-            locationBuf.set(lookAtBuf);
-            lookAtBuf.set(cStatic.point1);
+            if (viewCode == 0 && locationBuf != null)
+            {
+                cStatic.point1.set(locationBuf);
+                locationBuf.set(lookAtBuf);
+                lookAtBuf.set(cStatic.point1);
+            }
          //   UP.mul(-1);
             
             RotatePosition(dx,-dy);
@@ -354,9 +347,12 @@
             location.set(lookAt);
             lookAt.set(cStatic.point1);
             
-            cStatic.point1.set(locationBuf);
-            locationBuf.set(lookAtBuf);
-            lookAtBuf.set(cStatic.point1);
+            if (viewCode == 0 && locationBuf != null)
+            {
+                cStatic.point1.set(locationBuf);
+                locationBuf.set(lookAtBuf);
+                lookAtBuf.set(cStatic.point1);
+            }
             
             computeTransform();
 	}
@@ -386,8 +382,24 @@
         {
             double K = 0.25;
             
+            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);
+            
+            int Y = 1;
+            
+            if (UP.y < 0)
+                Y = -1;
+            
+            UP.x = 0 * K + UP.x * (1 - K);
+            UP.y = Y * K + UP.y * (1 - K);
+            UP.z = 0 * K + UP.z * (1 - K);
+            UP.normalize();
+            
+            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);
@@ -421,19 +433,19 @@
 			up2.x = UP2.x;
 			up2.y = UP2.y;
 			up2.z = UP2.z;
-			LA.vecSub(lookAt, location, away);
-			LA.vecNormalize(away);
 			LA.vecCross(away, up2, right2);
 			if (!(right2.length2() > 0))
                         {
+                            System.out.println("NO UP VECTOR: " + up2);
+                            System.out.println("lookAtBuf: " + lookAtBuf);
+                            System.out.println("locationBuf: " + locationBuf);
                     System.exit(0);
+
                             // old problem...
                             assert (right2.length2() <= 0 || right2.length2() > 0); // weirdest thing ever
                             up2.x = UP.x = 0;
                             up2.y = UP.y = 1;
                             up2.z = UP.z = 0;
-                            LA.vecSub(lookAt, location, away);
-                            LA.vecNormalize(away);
                             LA.vecCross(away, up2, right2);
                         }
 		}

--
Gitblit v1.6.2