|
|
|
|
@ -2,13 +2,10 @@ package visualiser.layout;
|
|
|
|
|
|
|
|
|
|
import javafx.geometry.Point3D;
|
|
|
|
|
import javafx.scene.image.Image;
|
|
|
|
|
import javafx.scene.image.PixelWriter;
|
|
|
|
|
import javafx.scene.image.WritableImage;
|
|
|
|
|
import javafx.scene.paint.Color;
|
|
|
|
|
import javafx.scene.paint.PhongMaterial;
|
|
|
|
|
import javafx.scene.shape.MeshView;
|
|
|
|
|
import javafx.scene.transform.Rotate;
|
|
|
|
|
import visualiser.utils.PerlinNoiseGenerator;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
@ -22,6 +19,8 @@ public class SkyBox {
|
|
|
|
|
private double y;
|
|
|
|
|
private double z;
|
|
|
|
|
private double freq;
|
|
|
|
|
private double yshift;
|
|
|
|
|
private double clipOverlap;
|
|
|
|
|
private List<Subject3D> skyBoxPlanes = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
public SkyBox(int edgeLength, double freq, double x, double y, double z) {
|
|
|
|
|
@ -30,6 +29,8 @@ public class SkyBox {
|
|
|
|
|
this.y = y;
|
|
|
|
|
this.z = z;
|
|
|
|
|
this.freq = freq;
|
|
|
|
|
this.yshift = -size/64;
|
|
|
|
|
clipOverlap = 3;
|
|
|
|
|
makeSkyBox();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -39,17 +40,17 @@ public class SkyBox {
|
|
|
|
|
addBack();
|
|
|
|
|
addLeft();
|
|
|
|
|
addRight();
|
|
|
|
|
addSeaOverlay();
|
|
|
|
|
//addSeaOverlay();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void addTop() {
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/skyTop.png")));
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/ThickCloudsWaterUp2048.png")));
|
|
|
|
|
|
|
|
|
|
surface.setRotationAxis(new Point3D(0, 0, 1));
|
|
|
|
|
surface.setRotate(180);
|
|
|
|
|
|
|
|
|
|
surface.setTranslateX(x);
|
|
|
|
|
surface.setTranslateY(y - size + 1);
|
|
|
|
|
surface.setTranslateY(y - size/2 + yshift + clipOverlap);
|
|
|
|
|
surface.setTranslateZ(z);
|
|
|
|
|
|
|
|
|
|
Subject3D top = new SkyBoxPlane(surface);
|
|
|
|
|
@ -57,7 +58,7 @@ public class SkyBox {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void addRight() {
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/skyRight.png")));
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/ThickCloudsWaterRight2048.png")));
|
|
|
|
|
|
|
|
|
|
surface.setTranslateX(size/2);
|
|
|
|
|
surface.setTranslateY(size/2);
|
|
|
|
|
@ -67,8 +68,8 @@ public class SkyBox {
|
|
|
|
|
surface.setTranslateY(-size/2);
|
|
|
|
|
|
|
|
|
|
surface.setTranslateX(x);
|
|
|
|
|
surface.setTranslateY(y - size/2);
|
|
|
|
|
surface.setTranslateZ(z + size/2 - 1);
|
|
|
|
|
surface.setTranslateY(y + yshift);
|
|
|
|
|
surface.setTranslateZ(z + size/2 - clipOverlap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Subject3D right = new SkyBoxPlane(surface);
|
|
|
|
|
@ -76,7 +77,7 @@ public class SkyBox {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void addLeft() {
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/skyLeft.png")));
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/ThickCloudsWaterLeft2048.png")));
|
|
|
|
|
|
|
|
|
|
surface.setTranslateX(size/2);
|
|
|
|
|
surface.setTranslateY(size/2);
|
|
|
|
|
@ -89,8 +90,8 @@ public class SkyBox {
|
|
|
|
|
surface.setScaleZ(-1);
|
|
|
|
|
|
|
|
|
|
surface.setTranslateX(x);
|
|
|
|
|
surface.setTranslateY(y - size/2);
|
|
|
|
|
surface.setTranslateZ(z - size/2 + 1);
|
|
|
|
|
surface.setTranslateY(y + yshift);
|
|
|
|
|
surface.setTranslateZ(z - size/2 + clipOverlap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Subject3D left = new SkyBoxPlane(surface);
|
|
|
|
|
@ -98,7 +99,7 @@ public class SkyBox {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void addBack() {
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/skyBack.png")));
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/ThickCloudsWaterBack2048.png")));
|
|
|
|
|
surface.getTransforms().add(new Rotate(90, 0, 0));
|
|
|
|
|
|
|
|
|
|
surface.setRotationAxis(new Point3D(1, 0, 0));
|
|
|
|
|
@ -107,8 +108,8 @@ public class SkyBox {
|
|
|
|
|
surface.setScaleY(-1);
|
|
|
|
|
surface.setScaleZ(-1);
|
|
|
|
|
|
|
|
|
|
surface.setTranslateX(x - size/2 + 1);
|
|
|
|
|
surface.setTranslateY(y - size/2);
|
|
|
|
|
surface.setTranslateX(x - size/2 + clipOverlap);
|
|
|
|
|
surface.setTranslateY(y + yshift);
|
|
|
|
|
surface.setTranslateZ(z);
|
|
|
|
|
|
|
|
|
|
Subject3D back = new SkyBoxPlane(surface);
|
|
|
|
|
@ -116,7 +117,7 @@ public class SkyBox {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void addFront() {
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/skyFront.png")));
|
|
|
|
|
MeshView surface = makeSurface(new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/ThickCloudsWaterFront2048.png")));
|
|
|
|
|
|
|
|
|
|
surface.setTranslateX(size/2);
|
|
|
|
|
surface.setTranslateY(size/2);
|
|
|
|
|
@ -125,8 +126,8 @@ public class SkyBox {
|
|
|
|
|
surface.setTranslateX(-size/2);
|
|
|
|
|
surface.setTranslateY(-size/2);
|
|
|
|
|
|
|
|
|
|
surface.setTranslateX(x + size/2 - 1);
|
|
|
|
|
surface.setTranslateY(y - size/2);
|
|
|
|
|
surface.setTranslateX(x + size/2 - clipOverlap);
|
|
|
|
|
surface.setTranslateY(y + yshift);
|
|
|
|
|
surface.setTranslateZ(z);
|
|
|
|
|
|
|
|
|
|
Subject3D front = new SkyBoxPlane(surface);
|
|
|
|
|
@ -136,9 +137,9 @@ public class SkyBox {
|
|
|
|
|
private MeshView makeSurface(Image diffuseMap) {
|
|
|
|
|
|
|
|
|
|
PhongMaterial material = new PhongMaterial();
|
|
|
|
|
//material.setDiffuseColor(Color.BLUE);
|
|
|
|
|
material.setDiffuseColor(Color.web("#FFFFFF"));
|
|
|
|
|
material.setSpecularColor(Color.web("#000000"));
|
|
|
|
|
material.setDiffuseMap(diffuseMap);
|
|
|
|
|
//material.setSpecularColor(Color.WHITE);
|
|
|
|
|
|
|
|
|
|
Plane3D plane = new Plane3D(size, size, 10, 10);
|
|
|
|
|
MeshView surface = new MeshView(plane);
|
|
|
|
|
|