b06f0c3dd4a0b29db85143ccd04b1c2c835391d9
[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 import static eu.svjatoslav.sixth.e3d.renderer.octree.raytracer.Camera.SIZE;
11
12 public class CameraView {
13
14     Point3D cameraCenter;
15     Point3D topLeft;
16     Point3D topRight;
17     Point3D bottomLeft;
18     Point3D bottomRight;
19
20     public CameraView(final Avatar avatar, final double zoom) {
21         computeCameraCoordinates(avatar, zoom);
22     }
23
24     private void computeCameraCoordinates(final Avatar avatar, final double zoom) {
25
26         final float viewAngle = (float) .6;
27         topLeft = new Point3D(0,0, SIZE).rotate(-viewAngle, -viewAngle);
28         topRight = new Point3D(0,0, SIZE).rotate(viewAngle, -viewAngle);
29         bottomLeft = new Point3D(0,0,SIZE).rotate(-viewAngle, viewAngle);
30         bottomRight = new Point3D(0,0,SIZE).rotate(viewAngle, viewAngle);
31
32         topLeft.rotate(-avatar.getAngleXZ(), -avatar.getAngleYZ());
33         topRight.rotate(-avatar.getAngleXZ(), -avatar.getAngleYZ());
34         bottomLeft.rotate(-avatar.getAngleXZ(), -avatar.getAngleYZ());
35         bottomRight.rotate(-avatar.getAngleXZ(), -avatar.getAngleYZ());
36
37         // compute camera coordinates as if camera is at avatar's location and look
38         cameraCenter = new Point3D(avatar.getLocation()).scaleDown(zoom);
39         topLeft.add(cameraCenter);
40         topRight.add(cameraCenter);
41         bottomLeft.add(cameraCenter);
42         bottomRight.add(cameraCenter);
43
44     }
45
46 }