You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
6.1 KiB
174 lines
6.1 KiB
package visualiser.layout;
|
|
|
|
import com.interactivemesh.jfx.importer.obj.ObjModelImporter;
|
|
import com.interactivemesh.jfx.importer.stl.StlMeshImporter;
|
|
import com.interactivemesh.jfx.importer.x3d.X3dModelImporter;
|
|
import javafx.geometry.Point3D;
|
|
import javafx.scene.Group;
|
|
import javafx.scene.paint.Color;
|
|
import javafx.scene.paint.Material;
|
|
import javafx.scene.paint.PhongMaterial;
|
|
import javafx.scene.shape.MeshView;
|
|
import javafx.scene.shape.Shape3D;
|
|
import visualiser.Controllers.HostGameController;
|
|
|
|
import java.net.URL;
|
|
|
|
/**
|
|
* Created by Gondr on 21/09/2017.
|
|
*/
|
|
public class Assets3D {
|
|
|
|
public static MeshView[] sails;
|
|
public static MeshView[] sea;
|
|
public static MeshView[] seagull;
|
|
public static Subject3D windArrow;
|
|
public static Subject3D compass;
|
|
public static Subject3D cwNextArrow;
|
|
public static Subject3D ccwNextArrow;
|
|
public static SkyBox skyBox;
|
|
public static Subject3D boatHighlight;
|
|
public static Subject3D sharks;
|
|
|
|
public static void loadAssets(){
|
|
loadSails();
|
|
loadWindArrow();
|
|
loadNextArrow();
|
|
loadSeaSurface();
|
|
loadSkybox();
|
|
loadSeagull();
|
|
loadBoatHightlight();
|
|
}
|
|
|
|
private static void loadNextArrow(){
|
|
StlMeshImporter objModelImporter = new StlMeshImporter();
|
|
String cwPath = "assets/Next Mark Arrow CW V1.0.stl";
|
|
URL asset = Assets3D.class.getClassLoader().getResource(cwPath);
|
|
objModelImporter.read(asset);
|
|
Material markColor = new PhongMaterial(new Color(0.15,0.9,0.2,1));
|
|
|
|
MeshView cwMesh = new MeshView(objModelImporter.getImport());
|
|
cwMesh.setMaterial(markColor);
|
|
cwMesh.setMouseTransparent(true);
|
|
cwMesh.toBack();
|
|
cwMesh.setVisible(false);
|
|
cwNextArrow = new Annotation3D(cwMesh);
|
|
|
|
String ccwPath = "assets/Next Mark Arrow CCW V1.0.stl";
|
|
URL ccwAsset = Assets3D.class.getClassLoader().getResource(ccwPath);
|
|
objModelImporter.read(ccwAsset);
|
|
|
|
MeshView ccwMesh = new MeshView(objModelImporter.getImport());
|
|
ccwMesh.setMaterial(markColor);
|
|
ccwMesh.setMouseTransparent(true);
|
|
ccwMesh.toBack();
|
|
cwMesh.setVisible(false);
|
|
ccwNextArrow = new Annotation3D(ccwMesh);
|
|
|
|
}
|
|
|
|
private static void loadBoatHightlight(){
|
|
Material markColor = new PhongMaterial(new Color(0,1,0,0.5));
|
|
StlMeshImporter objModelImporter = new StlMeshImporter();
|
|
String path = "assets/V1.0 Boat Highlight.stl";
|
|
URL highlight = Assets3D.class.getClassLoader().getResource(path);
|
|
objModelImporter.read(highlight);
|
|
|
|
MeshView hMesh = new MeshView(objModelImporter.getImport());
|
|
hMesh.setMaterial(markColor);
|
|
hMesh.setMouseTransparent(true);
|
|
hMesh.toBack();
|
|
boatHighlight = new Subject3D(hMesh, 0);
|
|
|
|
}
|
|
|
|
private static void loadSails(){
|
|
sails = new MeshView[40];
|
|
ObjModelImporter objModelImporter = new ObjModelImporter();
|
|
|
|
for (int i = 0; i < sails.length; i++){
|
|
String path = String.format("assets/Sails/V1.5 Sail_%06d.obj", i + 1);
|
|
URL asset = Assets3D.class.getClassLoader().getResource(path);
|
|
objModelImporter.read(asset);
|
|
if (objModelImporter.getImport().length > 0) {
|
|
sails[i] = objModelImporter.getImport()[0];
|
|
/*sails[i].setRotationAxis(new Point3D(1, 0, 0));
|
|
sails[i].setRotate(-90);*/
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void loadSeaSurface(){
|
|
sea = new MeshView[100];
|
|
ObjModelImporter objModelImporter = new ObjModelImporter();
|
|
|
|
for (int i = 0; i < sea.length; i++){
|
|
// String path = String.format("assets/Ocean V1.0 Small Animation/Ocean V1.0 Large Animation_%06d.obj", i + 1);
|
|
// String path = String.format("assets/Ocean V1.0 Animation/Ocean V1.0_%06d.obj", i + 1);
|
|
String path = String.format("assets/Ocean Animation/Ocean Animation_%06d.obj", i + 1);
|
|
URL asset = Assets3D.class.getClassLoader().getResource(path);
|
|
objModelImporter.read(asset);
|
|
if (objModelImporter.getImport().length > 0) {
|
|
sea[i] = objModelImporter.getImport()[0];
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void loadSeagull(){
|
|
seagull = new MeshView[30];
|
|
ObjModelImporter objModelImporter = new ObjModelImporter();
|
|
|
|
for (int i = 0; i < seagull.length; i++){
|
|
String path = String.format("assets/V1.1 Animated/Seagull V1.1_%06d.obj", i + 1);
|
|
URL asset = Assets3D.class.getClassLoader().getResource(path);
|
|
objModelImporter.read(asset);
|
|
if (objModelImporter.getImport().length > 0) {
|
|
seagull[i] = objModelImporter.getImport()[0];
|
|
}
|
|
}
|
|
}
|
|
|
|
public static Shape3D getBoat(){
|
|
String path = "assets/V1.4 Boat.x3d";
|
|
return loadX3d(path);
|
|
}
|
|
|
|
public static Shape3D getMark(){
|
|
String path = "assets/Burger Bouy V1.1.x3d";
|
|
return loadX3d(path);
|
|
}
|
|
|
|
private static void loadWindArrow(){
|
|
String compassPath = "assets/wind_compass.x3d";
|
|
compass = new Annotation3D(loadX3d(compassPath));
|
|
String arrowPath = "assets/wind_arrow.x3d";
|
|
windArrow = new Annotation3D(loadX3d(arrowPath));
|
|
}
|
|
|
|
public static Shape3D getSharks(){
|
|
String path = "assets/V1.0 Sharks.x3d";
|
|
return loadX3d(path);
|
|
}
|
|
|
|
public static Shape3D loadX3d(String path){
|
|
X3dModelImporter x3dModelImporter = new X3dModelImporter();
|
|
URL asset = Assets3D.class.getClassLoader().getResource(path);
|
|
x3dModelImporter.read(asset);
|
|
if (x3dModelImporter.getImport().length > 0) {
|
|
//if (x3dModelImporter.getImport()[0] instanceof MeshView) {
|
|
Group g = (Group)((Group)((Group) x3dModelImporter.getImport()[0]).getChildren().get(0)).getChildren().get(0);
|
|
Shape3D shape = (Shape3D)g.getChildren().get(0);
|
|
return shape;
|
|
/*} else {
|
|
System.err.println("Boat is not a Mesh View 0.0");
|
|
}*/
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private static void loadSkybox(){
|
|
skyBox = new SkyBox(750, 200, 250, 0, 210);
|
|
}
|
|
|
|
}
|