ed0b0375e4d4fa989e50bcfd320648ea572881f3
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / renderer / octree / raytracer / CameraView.java
1 /*
2  * Sixth 3D engine. Author: Svjatoslav Agejenko. 
3  * This project is released under Creative Commons Zero (CC0) license.
4  */
5 package eu.svjatoslav.sixth.e3d.renderer.octree.raytracer;
6
7 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
8 import eu.svjatoslav.sixth.e3d.gui.Avatar;
9
10 public class CameraView {
11
12     Point3D cameraCenter;
13     Point3D topLeft;
14     Point3D topRight;
15     Point3D bottomLeft;
16     Point3D bottomRight;
17
18     public CameraView(final Avatar avatar, final double zoom) {
19         computeCameraCoordinates(avatar, zoom);
20     }
21
22     private void computeCameraCoordinates(final Avatar avatar, final double zoom) {
23         cameraCenter = new Point3D(avatar.getLocation()).scaleDown(zoom);
24
25         topLeft = new Point3D(cameraCenter.x, cameraCenter.y, cameraCenter.z
26                 + Camera.SIZE);
27         topRight = new Point3D(topLeft);
28         bottomLeft = new Point3D(topLeft);
29         bottomRight = new Point3D(topLeft);
30
31         final float viewAngle = (float) .6;
32
33         topLeft.rotate(cameraCenter, -viewAngle, -viewAngle);
34         topRight.rotate(cameraCenter, viewAngle, -viewAngle);
35         bottomLeft.rotate(cameraCenter, -viewAngle, viewAngle);
36         bottomRight.rotate(cameraCenter, viewAngle, viewAngle);
37
38         topLeft.rotate(cameraCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ());
39         topRight.rotate(cameraCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ());
40         bottomLeft.rotate(cameraCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ());
41         bottomRight.rotate(cameraCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ());
42     }
43
44 }