X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Frenderer%2Foctree%2Fraytracer%2FCameraView.java;h=b06f0c3dd4a0b29db85143ccd04b1c2c835391d9;hb=ff13a51ec53b3d2ee1c9309152ed2b40366218b9;hp=6cc63696b84408c68eebb5ecaa511d0c26228bc0;hpb=197ac1b87328bb5b06ba52d3768af04b2007b087;p=sixth-3d.git diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/octree/raytracer/CameraView.java b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/octree/raytracer/CameraView.java index 6cc6369..b06f0c3 100644 --- a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/octree/raytracer/CameraView.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/octree/raytracer/CameraView.java @@ -1,47 +1,46 @@ /* * 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; + public class CameraView { - Point3D camCenter; - Point3D upLeft; - Point3D upRight; - Point3D downLeft; - Point3D downRight; + Point3D cameraCenter; + Point3D topLeft; + Point3D topRight; + Point3D bottomLeft; + Point3D 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); final float viewAngle = (float) .6; + 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()); + + // compute camera coordinates as if camera is at avatar's location and look + cameraCenter = new Point3D(avatar.getLocation()).scaleDown(zoom); + topLeft.add(cameraCenter); + topRight.add(cameraCenter); + bottomLeft.add(cameraCenter); + bottomRight.add(cameraCenter); - 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()); } }