Updated readability of the code.
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / renderer / octree / raytracer / CameraView.java
index 6cc6369..ce92787 100644 (file)
@@ -1,47 +1,40 @@
 /*
  * Sixth 3D engine. Author: Svjatoslav Agejenko. 
  * This project is released under Creative Commons Zero (CC0) license.
- *
-*
  */
-
 package eu.svjatoslav.sixth.e3d.renderer.octree.raytracer;
 
 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
 import eu.svjatoslav.sixth.e3d.gui.Avatar;
 
+import static eu.svjatoslav.sixth.e3d.renderer.octree.raytracer.Camera.SIZE;
+
+/**
+ * Represents camera view. Used to compute direction of rays during ray tracing.
+ */
 public class CameraView {
 
-    Point3D camCenter;
-    Point3D upLeft;
-    Point3D upRight;
-    Point3D downLeft;
-    Point3D downRight;
+    /**
+     * Camera view coordinates.
+     */
+    Point3D cameraCenter, topLeft, topRight, bottomLeft, bottomRight;
 
     public CameraView(final Avatar avatar, final double zoom) {
-        computeCameraCoordinates(avatar, zoom);
-    }
-
-    private void computeCameraCoordinates(final Avatar avatar, final double zoom) {
-        camCenter = new Point3D(avatar.getLocation()).scaleDown(zoom);
-
-        upLeft = new Point3D(camCenter.x, camCenter.y, camCenter.z
-                + Camera.CAMERA_SIZE);
-        upRight = new Point3D(upLeft);
-        downLeft = new Point3D(upLeft);
-        downRight = new Point3D(upLeft);
-
+        // compute camera view coordinates as if camera is at (0,0,0) and look at (0,0,1)
         final float viewAngle = (float) .6;
-
-        upLeft.rotate(camCenter, -viewAngle, -viewAngle);
-        upRight.rotate(camCenter, viewAngle, -viewAngle);
-        downLeft.rotate(camCenter, -viewAngle, viewAngle);
-        downRight.rotate(camCenter, viewAngle, viewAngle);
-
-        upLeft.rotate(camCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ());
-        upRight.rotate(camCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ());
-        downLeft.rotate(camCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ());
-        downRight.rotate(camCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ());
+        cameraCenter = new Point3D();
+        topLeft = new Point3D(0,0, SIZE).rotate(-viewAngle, -viewAngle);
+        topRight = new Point3D(0,0, SIZE).rotate(viewAngle, -viewAngle);
+        bottomLeft = new Point3D(0,0,SIZE).rotate(-viewAngle, viewAngle);
+        bottomRight = new Point3D(0,0,SIZE).rotate(viewAngle, viewAngle);
+
+        topLeft.rotate(-avatar.getAngleXZ(), -avatar.getAngleYZ());
+        topRight.rotate(-avatar.getAngleXZ(), -avatar.getAngleYZ());
+        bottomLeft.rotate(-avatar.getAngleXZ(), -avatar.getAngleYZ());
+        bottomRight.rotate(-avatar.getAngleXZ(), -avatar.getAngleYZ());
+
+        // place camera view at avatar location
+        avatar.getLocation().clone().scaleDown(zoom).addTo(cameraCenter, topLeft, topRight, bottomLeft, bottomRight);
     }
 
 }