Normand Briere
2019-11-07 f868664f7e7626f651e6ade9c9f6863851ef43b7
Camera.java
....@@ -288,25 +288,15 @@
288288 // Zoom
289289 double factor = Math.exp(-dy/300.0); // (1 + dy/100);
290290
291
- if (viewCode != 0)
292
- {
293
- LA.vecSub(location, lookAt, location);
291
+ LA.vecSub(location, lookAt, location);
294292
295
- cVector p = location;
293
+ cVector p = location;
296294
297
- p.x *= factor;
298
- p.y *= factor;
299
- p.z *= factor;
295
+ p.x *= factor;
296
+ p.y *= factor;
297
+ p.z *= factor;
300298
301
- LA.vecAdd(location, lookAt, location);
302
- }
303
- else
304
- if (//shaper_fovy < 180 && factor > 1 ||
305
- shaper_fovy * factor < 150)
306
- {
307
- shaper_fovy *= factor;
308
- //System.out.println("fovy = " + shaper_fovy);
309
- }
299
+ LA.vecAdd(location, lookAt, location);
310300 }
311301 else
312302 {
....@@ -340,9 +330,12 @@
340330 location.set(lookAt);
341331 lookAt.set(cStatic.point1);
342332
343
- cStatic.point1.set(locationBuf);
344
- locationBuf.set(lookAtBuf);
345
- lookAtBuf.set(cStatic.point1);
333
+ if (viewCode == 0 && locationBuf != null)
334
+ {
335
+ cStatic.point1.set(locationBuf);
336
+ locationBuf.set(lookAtBuf);
337
+ lookAtBuf.set(cStatic.point1);
338
+ }
346339 // UP.mul(-1);
347340
348341 RotatePosition(dx,-dy);
....@@ -354,9 +347,12 @@
354347 location.set(lookAt);
355348 lookAt.set(cStatic.point1);
356349
357
- cStatic.point1.set(locationBuf);
358
- locationBuf.set(lookAtBuf);
359
- lookAtBuf.set(cStatic.point1);
350
+ if (viewCode == 0 && locationBuf != null)
351
+ {
352
+ cStatic.point1.set(locationBuf);
353
+ locationBuf.set(lookAtBuf);
354
+ lookAtBuf.set(cStatic.point1);
355
+ }
360356
361357 computeTransform();
362358 }
....@@ -386,8 +382,24 @@
386382 {
387383 double K = 0.25;
388384
385
+ if (!CameraPane.capsLocked || CameraPane.ambientOcclusion)
386
+ K = 1;
387
+
389388 locationBuf.y = location.y * K + locationBuf.y * (1 - K);
390389 lookAtBuf.y = lookAt.y * K + lookAtBuf.y * (1 - K);
390
+
391
+ int Y = 1;
392
+
393
+ if (UP.y < 0)
394
+ Y = -1;
395
+
396
+ UP.x = 0 * K + UP.x * (1 - K);
397
+ UP.y = Y * K + UP.y * (1 - K);
398
+ UP.z = 0 * K + UP.z * (1 - K);
399
+ UP.normalize();
400
+
401
+ if (CameraPane.capsLocked && !CameraPane.ambientOcclusion)
402
+ K = 0.1;
391403
392404 upBuf.x = UP.x * K + upBuf.x * (1 - K);
393405 upBuf.y = UP.y * K + upBuf.y * (1 - K);
....@@ -421,19 +433,19 @@
421433 up2.x = UP2.x;
422434 up2.y = UP2.y;
423435 up2.z = UP2.z;
424
- LA.vecSub(lookAt, location, away);
425
- LA.vecNormalize(away);
426436 LA.vecCross(away, up2, right2);
427437 if (!(right2.length2() > 0))
428438 {
439
+ System.out.println("NO UP VECTOR: " + up2);
440
+ System.out.println("lookAtBuf: " + lookAtBuf);
441
+ System.out.println("locationBuf: " + locationBuf);
429442 System.exit(0);
443
+
430444 // old problem...
431445 assert (right2.length2() <= 0 || right2.length2() > 0); // weirdest thing ever
432446 up2.x = UP.x = 0;
433447 up2.y = UP.y = 1;
434448 up2.z = UP.z = 0;
435
- LA.vecSub(lookAt, location, away);
436
- LA.vecNormalize(away);
437449 LA.vecCross(away, up2, right2);
438450 }
439451 }