2 * Sixth 3D engine. Author: Svjatoslav Agejenko.
3 * This project is released under Creative Commons Zero (CC0) license.
5 package eu.svjatoslav.sixth.e3d.renderer.octree.raytracer;
7 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
8 import eu.svjatoslav.sixth.e3d.gui.Avatar;
10 import static eu.svjatoslav.sixth.e3d.renderer.octree.raytracer.Camera.SIZE;
12 public class CameraView {
20 public CameraView(final Avatar avatar, final double zoom) {
21 computeCameraCoordinates(avatar, zoom);
24 private void computeCameraCoordinates(final Avatar avatar, final double zoom) {
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);
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());
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);