X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Frenderer%2Foctree%2Fraytracer%2FRayTracer.java;h=8f7923fe6c1e7487f84deead715fd602c2836bce;hb=cad5276b56cfbd0b194dbacb894fea20b9dd5b15;hp=af06b2ca1fdf3996281ee4c0f704e2575e1a11c5;hpb=59baa428fb2d9e7f0fe5423f4cea47f2d6245914;p=sixth-3d.git diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/octree/raytracer/RayTracer.java b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/octree/raytracer/RayTracer.java index af06b2c..8f7923f 100755 --- a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/octree/raytracer/RayTracer.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/octree/raytracer/RayTracer.java @@ -1,12 +1,7 @@ /* - * Sixth 3D engine. Copyright ©2012-2019, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 3 of the GNU Lesser General Public License - * or later as published by the Free Software Foundation. - * + * 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.gui.ViewPanel; @@ -22,8 +17,8 @@ public class RayTracer implements Runnable { private final Camera camera; private final Texture texture; private final ViewPanel viewPanel; - private OctreeVolume octreeVolume; - private Vector lights; + private final OctreeVolume octreeVolume; + private final Vector lights; private int computedLights; public RayTracer(final Texture texture, final OctreeVolume octreeVolume, @@ -56,25 +51,25 @@ public class RayTracer implements Runnable { final CameraView cameraView = camera.getCameraView(); // calculate vertical vectors - final double x1p = cameraView.downLeft.x - cameraView.upLeft.x; - final double y1p = cameraView.downLeft.y - cameraView.upLeft.y; - final double z1p = cameraView.downLeft.z - cameraView.upLeft.z; + final double x1p = cameraView.bottomLeft.x - cameraView.topLeft.x; + final double y1p = cameraView.bottomLeft.y - cameraView.topLeft.y; + final double z1p = cameraView.bottomLeft.z - cameraView.topLeft.z; - final double x2p = cameraView.downRight.x - cameraView.upRight.x; - final double y2p = cameraView.downRight.y - cameraView.upRight.y; - final double z2p = cameraView.downRight.z - cameraView.upRight.z; + final double x2p = cameraView.bottomRight.x - cameraView.topRight.x; + final double y2p = cameraView.bottomRight.y - cameraView.topRight.y; + final double z2p = cameraView.bottomRight.z - cameraView.topRight.z; long nextBitmapUpdate = System.currentTimeMillis() + PROGRESS_UPDATE_FREQUENCY_MILLIS; for (int y = 0; y < height; y++) { - final double cx1 = cameraView.upLeft.x + ((x1p * y) / height); - final double cy1 = cameraView.upLeft.y + ((y1p * y) / height); - final double cz1 = cameraView.upLeft.z + ((z1p * y) / height); + final double cx1 = cameraView.topLeft.x + ((x1p * y) / height); + final double cy1 = cameraView.topLeft.y + ((y1p * y) / height); + final double cz1 = cameraView.topLeft.z + ((z1p * y) / height); - final double cx2 = cameraView.upRight.x + ((x2p * y) / height); - final double cy2 = cameraView.upRight.y + ((y2p * y) / height); - final double cz2 = cameraView.upRight.z + ((z2p * y) / height); + final double cx2 = cameraView.topRight.x + ((x2p * y) / height); + final double cy2 = cameraView.topRight.y + ((y2p * y) / height); + final double cz2 = cameraView.topRight.z + ((z2p * y) / height); // calculate horisontal vector final double x3p = cx2 - cx1; @@ -86,11 +81,11 @@ public class RayTracer implements Runnable { final double cy3 = cy1 + ((y3p * x) / width); final double cz3 = cz1 + ((z3p * x) / width); - final Ray r = new Ray(cameraView.camCenter.x, - cameraView.camCenter.y, cameraView.camCenter.z, cx3 - - cameraView.camCenter.x, cy3 - - cameraView.camCenter.y, cz3 - - cameraView.camCenter.z); + final Ray r = new Ray(cameraView.cameraCenter.x, + cameraView.cameraCenter.y, cameraView.cameraCenter.z, cx3 + - cameraView.cameraCenter.x, cy3 + - cameraView.cameraCenter.y, cz3 + - cameraView.cameraCenter.z); final int c = traceRay(r); final Color color = new Color(c); @@ -127,9 +122,9 @@ public class RayTracer implements Runnable { float red = 30, green = 30, blue = 30; for (final LightSource l : lights) { - final int xDist = (l.x - ray.hitCellX); - final int yDist = (l.y - ray.hitCellY); - final int zDist = (l.z - ray.hitCellZ); + final double xDist = (l.location.x - ray.hitCellX); + final double yDist = (l.location.y - ray.hitCellY); + final double zDist = (l.location.z - ray.hitCellZ); double newRed = 0, newGreen = 0, newBlue = 0; double tempRed, tempGreen, tempBlue; @@ -141,8 +136,8 @@ public class RayTracer implements Runnable { final Ray r1 = new Ray(ray.hitCellX, ray.hitCellY - (float) 1.5, ray.hitCellZ, - (float) l.x - (float) ray.hitCellX, l.y - - (ray.hitCellY - (float) 1.5), (float) l.z + (float) l.location.x - (float) ray.hitCellX, l.location.y + - (ray.hitCellY - (float) 1.5), (float) l.location.z - (float) ray.hitCellZ); final int rt1 = octreeVolume.traceCell(0, 0, 0, @@ -157,8 +152,8 @@ public class RayTracer implements Runnable { final Ray r2 = new Ray(ray.hitCellX - (float) 1.5, ray.hitCellY, ray.hitCellZ, - l.x - (ray.hitCellX - (float) 1.5), (float) l.y - - (float) ray.hitCellY, (float) l.z + l.location.x - (ray.hitCellX - (float) 1.5), (float) l.location.y + - (float) ray.hitCellY, (float) l.location.z - (float) ray.hitCellZ); final int rt2 = octreeVolume.traceCell(0, 0, 0, @@ -180,8 +175,8 @@ public class RayTracer implements Runnable { final Ray r3 = new Ray(ray.hitCellX, ray.hitCellY, ray.hitCellZ - (float) 1.5, - (float) l.x - (float) ray.hitCellX, (float) l.y - - (float) ray.hitCellY, l.z + (float) l.location.x - (float) ray.hitCellX, (float) l.location.y + - (float) ray.hitCellY, l.location.z - (ray.hitCellZ - (float) 1.5)); final int rt3 = octreeVolume.traceCell(0, 0, 0, @@ -202,8 +197,8 @@ public class RayTracer implements Runnable { final Ray r4 = new Ray(ray.hitCellX, ray.hitCellY + (float) 1.5, ray.hitCellZ, - (float) l.x - (float) ray.hitCellX, l.y - - (ray.hitCellY + (float) 1.5), (float) l.z + (float) l.location.x - (float) ray.hitCellX, l.location.y + - (ray.hitCellY + (float) 1.5), (float) l.location.z - (float) ray.hitCellZ); final int rt4 = octreeVolume.traceCell(0, 0, 0, @@ -224,8 +219,8 @@ public class RayTracer implements Runnable { final Ray r5 = new Ray(ray.hitCellX + (float) 1.5, ray.hitCellY, ray.hitCellZ, - l.x - (ray.hitCellX + (float) 1.5), (float) l.y - - (float) ray.hitCellY, (float) l.z + l.location.x - (ray.hitCellX + (float) 1.5), (float) l.location.y + - (float) ray.hitCellY, (float) l.location.z - (float) ray.hitCellZ); final int rt5 = octreeVolume.traceCell(0, 0, 0, @@ -246,8 +241,8 @@ public class RayTracer implements Runnable { final Ray r6 = new Ray(ray.hitCellX, ray.hitCellY, ray.hitCellZ + (float) 1.5, - (float) l.x - (float) ray.hitCellX, (float) l.y - - (float) ray.hitCellY, l.z + (float) l.location.x - (float) ray.hitCellX, (float) l.location.y + - (float) ray.hitCellY, l.location.z - (ray.hitCellZ + (float) 1.5)); final int rt6 = octreeVolume.traceCell(0, 0, 0,