new skybox textures. Still need to fix two planes having a small gap between them. #story[1196]
@@ -215,14 +215,20 @@ public class RaceController extends Controller {
|
|||||||
RaceDataSource raceData = visualiserRace.getVisualiserRaceState().getRaceDataSource();
|
RaceDataSource raceData = visualiserRace.getVisualiserRaceState().getRaceDataSource();
|
||||||
final GPSConverter gpsConverter = new GPSConverter(raceData, 450, 450);
|
final GPSConverter gpsConverter = new GPSConverter(raceData, 450, 450);
|
||||||
|
|
||||||
|
SkyBox skyBox = new SkyBox(750, 200, 250, 0, 210);
|
||||||
|
viewSubjects.addAll(skyBox.getSkyBoxPlanes());
|
||||||
|
|
||||||
// Set up sea surface
|
// Set up sea surface
|
||||||
SeaSurface sea = new SeaSurface(750, 200);
|
SeaSurface sea = new SeaSurface(750, 200);
|
||||||
sea.setX(250);
|
sea.setX(250);
|
||||||
sea.setZ(210);
|
sea.setZ(210);
|
||||||
viewSubjects.add(sea);
|
viewSubjects.add(sea);
|
||||||
|
|
||||||
SkyBox skyBox = new SkyBox(750, 200, 250, 0, 210);
|
// Set up sea surface overlay
|
||||||
viewSubjects.addAll(skyBox.getSkyBoxPlanes());
|
SeaSurface seaOverlay = new SeaSurface(4000, 200);
|
||||||
|
seaOverlay.setX(250);
|
||||||
|
seaOverlay.setZ(210);
|
||||||
|
viewSubjects.add(seaOverlay);
|
||||||
|
|
||||||
Boundary3D boundary3D = new Boundary3D(visualiserRace.getVisualiserRaceState().getRaceDataSource().getBoundary(), gpsConverter);
|
Boundary3D boundary3D = new Boundary3D(visualiserRace.getVisualiserRaceState().getRaceDataSource().getBoundary(), gpsConverter);
|
||||||
for (Subject3D subject3D: boundary3D.getBoundaryNodes()){
|
for (Subject3D subject3D: boundary3D.getBoundaryNodes()){
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import visualiser.utils.PerlinNoiseGenerator;
|
|||||||
* Creates a SeaSurface
|
* Creates a SeaSurface
|
||||||
*/
|
*/
|
||||||
public class SeaSurface extends Subject3D {
|
public class SeaSurface extends Subject3D {
|
||||||
|
private static Image image;
|
||||||
/**
|
/**
|
||||||
* Sea Surface Constructor
|
* Sea Surface Constructor
|
||||||
* @param size size of the sea surface (has to be square for simplicity's sake)
|
* @param size size of the sea surface (has to be square for simplicity's sake)
|
||||||
@@ -24,6 +25,7 @@ public class SeaSurface extends Subject3D {
|
|||||||
*/
|
*/
|
||||||
public SeaSurface(int size, double freq){
|
public SeaSurface(int size, double freq){
|
||||||
super(createSurface(size, freq));
|
super(createSurface(size, freq));
|
||||||
|
image = new Image(getClass().getClassLoader().getResourceAsStream("images/skybox/ThickCloudsWaterDown2048.png"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -31,9 +33,11 @@ public class SeaSurface extends Subject3D {
|
|||||||
*/
|
*/
|
||||||
private static Shape3D createSurface(int size, double freq){
|
private static Shape3D createSurface(int size, double freq){
|
||||||
float[][] noiseArray = PerlinNoiseGenerator.createNoise(size, freq);
|
float[][] noiseArray = PerlinNoiseGenerator.createNoise(size, freq);
|
||||||
Image diffuseMap = createImage(noiseArray.length, noiseArray);
|
Image diffuseMap = createImage(noiseArray.length, noiseArray); //image
|
||||||
|
|
||||||
PhongMaterial material = new PhongMaterial();
|
PhongMaterial material = new PhongMaterial();
|
||||||
|
material.setDiffuseColor(Color.web("#FFFFFF"));
|
||||||
|
material.setSpecularColor(Color.web("#000000"));
|
||||||
material.setDiffuseMap(diffuseMap);
|
material.setDiffuseMap(diffuseMap);
|
||||||
|
|
||||||
Plane3D seaPlane = new Plane3D(noiseArray.length, noiseArray.length, 10, 10);
|
Plane3D seaPlane = new Plane3D(noiseArray.length, noiseArray.length, 10, 10);
|
||||||
|
|||||||
@@ -2,13 +2,10 @@ package visualiser.layout;
|
|||||||
|
|
||||||
import javafx.geometry.Point3D;
|
import javafx.geometry.Point3D;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.PixelWriter;
|
|
||||||
import javafx.scene.image.WritableImage;
|
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.scene.paint.PhongMaterial;
|
import javafx.scene.paint.PhongMaterial;
|
||||||
import javafx.scene.shape.MeshView;
|
import javafx.scene.shape.MeshView;
|
||||||
import javafx.scene.transform.Rotate;
|
import javafx.scene.transform.Rotate;
|
||||||
import visualiser.utils.PerlinNoiseGenerator;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -22,6 +19,8 @@ public class SkyBox {
|
|||||||
private double y;
|
private double y;
|
||||||
private double z;
|
private double z;
|
||||||
private double freq;
|
private double freq;
|
||||||
|
private double yshift;
|
||||||
|
private double clipOverlap;
|
||||||
private List<Subject3D> skyBoxPlanes = new ArrayList<>();
|
private List<Subject3D> skyBoxPlanes = new ArrayList<>();
|
||||||
|
|
||||||
public SkyBox(int edgeLength, double freq, double x, double y, double z) {
|
public SkyBox(int edgeLength, double freq, double x, double y, double z) {
|
||||||
@@ -30,6 +29,8 @@ public class SkyBox {
|
|||||||
this.y = y;
|
this.y = y;
|
||||||
this.z = z;
|
this.z = z;
|
||||||
this.freq = freq;
|
this.freq = freq;
|
||||||
|
this.yshift = -size/64;
|
||||||
|
clipOverlap = 3;
|
||||||
makeSkyBox();
|
makeSkyBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,17 +40,17 @@ public class SkyBox {
|
|||||||
addBack();
|
addBack();
|
||||||
addLeft();
|
addLeft();
|
||||||
addRight();
|
addRight();
|
||||||
addSeaOverlay();
|
//addSeaOverlay();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addTop() {
|
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.setRotationAxis(new Point3D(0, 0, 1));
|
||||||
surface.setRotate(180);
|
surface.setRotate(180);
|
||||||
|
|
||||||
surface.setTranslateX(x);
|
surface.setTranslateX(x);
|
||||||
surface.setTranslateY(y - size + 1);
|
surface.setTranslateY(y - size/2 + yshift + clipOverlap);
|
||||||
surface.setTranslateZ(z);
|
surface.setTranslateZ(z);
|
||||||
|
|
||||||
Subject3D top = new SkyBoxPlane(surface);
|
Subject3D top = new SkyBoxPlane(surface);
|
||||||
@@ -57,7 +58,7 @@ public class SkyBox {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addRight() {
|
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.setTranslateX(size/2);
|
||||||
surface.setTranslateY(size/2);
|
surface.setTranslateY(size/2);
|
||||||
@@ -67,8 +68,8 @@ public class SkyBox {
|
|||||||
surface.setTranslateY(-size/2);
|
surface.setTranslateY(-size/2);
|
||||||
|
|
||||||
surface.setTranslateX(x);
|
surface.setTranslateX(x);
|
||||||
surface.setTranslateY(y - size/2);
|
surface.setTranslateY(y + yshift);
|
||||||
surface.setTranslateZ(z + size/2 - 1);
|
surface.setTranslateZ(z + size/2 - clipOverlap);
|
||||||
|
|
||||||
|
|
||||||
Subject3D right = new SkyBoxPlane(surface);
|
Subject3D right = new SkyBoxPlane(surface);
|
||||||
@@ -76,7 +77,7 @@ public class SkyBox {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addLeft() {
|
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.setTranslateX(size/2);
|
||||||
surface.setTranslateY(size/2);
|
surface.setTranslateY(size/2);
|
||||||
@@ -89,8 +90,8 @@ public class SkyBox {
|
|||||||
surface.setScaleZ(-1);
|
surface.setScaleZ(-1);
|
||||||
|
|
||||||
surface.setTranslateX(x);
|
surface.setTranslateX(x);
|
||||||
surface.setTranslateY(y - size/2);
|
surface.setTranslateY(y + yshift);
|
||||||
surface.setTranslateZ(z - size/2 + 1);
|
surface.setTranslateZ(z - size/2 + clipOverlap);
|
||||||
|
|
||||||
|
|
||||||
Subject3D left = new SkyBoxPlane(surface);
|
Subject3D left = new SkyBoxPlane(surface);
|
||||||
@@ -98,7 +99,7 @@ public class SkyBox {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addBack() {
|
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.getTransforms().add(new Rotate(90, 0, 0));
|
||||||
|
|
||||||
surface.setRotationAxis(new Point3D(1, 0, 0));
|
surface.setRotationAxis(new Point3D(1, 0, 0));
|
||||||
@@ -107,8 +108,8 @@ public class SkyBox {
|
|||||||
surface.setScaleY(-1);
|
surface.setScaleY(-1);
|
||||||
surface.setScaleZ(-1);
|
surface.setScaleZ(-1);
|
||||||
|
|
||||||
surface.setTranslateX(x - size/2 + 1);
|
surface.setTranslateX(x - size/2 + clipOverlap);
|
||||||
surface.setTranslateY(y - size/2);
|
surface.setTranslateY(y + yshift);
|
||||||
surface.setTranslateZ(z);
|
surface.setTranslateZ(z);
|
||||||
|
|
||||||
Subject3D back = new SkyBoxPlane(surface);
|
Subject3D back = new SkyBoxPlane(surface);
|
||||||
@@ -116,7 +117,7 @@ public class SkyBox {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addFront() {
|
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.setTranslateX(size/2);
|
||||||
surface.setTranslateY(size/2);
|
surface.setTranslateY(size/2);
|
||||||
@@ -125,8 +126,8 @@ public class SkyBox {
|
|||||||
surface.setTranslateX(-size/2);
|
surface.setTranslateX(-size/2);
|
||||||
surface.setTranslateY(-size/2);
|
surface.setTranslateY(-size/2);
|
||||||
|
|
||||||
surface.setTranslateX(x + size/2 - 1);
|
surface.setTranslateX(x + size/2 - clipOverlap);
|
||||||
surface.setTranslateY(y - size/2);
|
surface.setTranslateY(y + yshift);
|
||||||
surface.setTranslateZ(z);
|
surface.setTranslateZ(z);
|
||||||
|
|
||||||
Subject3D front = new SkyBoxPlane(surface);
|
Subject3D front = new SkyBoxPlane(surface);
|
||||||
@@ -136,9 +137,9 @@ public class SkyBox {
|
|||||||
private MeshView makeSurface(Image diffuseMap) {
|
private MeshView makeSurface(Image diffuseMap) {
|
||||||
|
|
||||||
PhongMaterial material = new PhongMaterial();
|
PhongMaterial material = new PhongMaterial();
|
||||||
//material.setDiffuseColor(Color.BLUE);
|
material.setDiffuseColor(Color.web("#FFFFFF"));
|
||||||
|
material.setSpecularColor(Color.web("#000000"));
|
||||||
material.setDiffuseMap(diffuseMap);
|
material.setDiffuseMap(diffuseMap);
|
||||||
//material.setSpecularColor(Color.WHITE);
|
|
||||||
|
|
||||||
Plane3D plane = new Plane3D(size, size, 10, 10);
|
Plane3D plane = new Plane3D(size, size, 10, 10);
|
||||||
MeshView surface = new MeshView(plane);
|
MeshView surface = new MeshView(plane);
|
||||||
|
|||||||
|
After Width: | Height: | Size: 5.0 MiB |
|
After Width: | Height: | Size: 3.6 MiB |
|
After Width: | Height: | Size: 4.8 MiB |
|
After Width: | Height: | Size: 4.4 MiB |
|
After Width: | Height: | Size: 4.6 MiB |
|
After Width: | Height: | Size: 2.4 MiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |