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=ce927871564b77b333cd75a73113090341658945;hb=cad5276b56cfbd0b194dbacb894fea20b9dd5b15;hp=ed0b0375e4d4fa989e50bcfd320648ea572881f3;hpb=dad067ef848d1488f8d048eb4323ebbcb1bae761;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 ed0b037..ce92787 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 @@ -7,38 +7,34 @@ 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 cameraCenter; - Point3D topLeft; - Point3D topRight; - Point3D bottomLeft; - Point3D bottomRight; + /** + * 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) { - cameraCenter = new Point3D(avatar.getLocation()).scaleDown(zoom); - - topLeft = new Point3D(cameraCenter.x, cameraCenter.y, cameraCenter.z - + Camera.SIZE); - topRight = new Point3D(topLeft); - bottomLeft = new Point3D(topLeft); - bottomRight = new Point3D(topLeft); - + // compute camera view coordinates as if camera is at (0,0,0) and look at (0,0,1) final float viewAngle = (float) .6; - - topLeft.rotate(cameraCenter, -viewAngle, -viewAngle); - topRight.rotate(cameraCenter, viewAngle, -viewAngle); - bottomLeft.rotate(cameraCenter, -viewAngle, viewAngle); - bottomRight.rotate(cameraCenter, viewAngle, viewAngle); - - topLeft.rotate(cameraCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ()); - topRight.rotate(cameraCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ()); - bottomLeft.rotate(cameraCenter, -avatar.getAngleXZ(), -avatar.getAngleYZ()); - bottomRight.rotate(cameraCenter, -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); } }