From 699df2e775b0ba8ab8a48927a9f370b351251ed1 Mon Sep 17 00:00:00 2001 From: Joseph Date: Tue, 26 Sep 2017 18:30:29 +1300 Subject: [PATCH] Using new arrow / arrow textures. Made sails not clickable. --- .../Controllers/NextMarkController.java | 21 +++--- .../Controllers/RaceViewController.java | 1 + .../main/java/visualiser/layout/Assets3D.java | 2 +- .../src/main/resources/assets/mark_arrow.x3d | 62 ++++++++++++++++++ .../textures/Material Diffuse Color.002 | Bin 0 -> 38559 bytes 5 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 racevisionGame/src/main/resources/assets/mark_arrow.x3d create mode 100644 racevisionGame/src/main/resources/assets/textures/Material Diffuse Color.002 diff --git a/racevisionGame/src/main/java/visualiser/Controllers/NextMarkController.java b/racevisionGame/src/main/java/visualiser/Controllers/NextMarkController.java index 20ee5926..4f4d3f9c 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/NextMarkController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/NextMarkController.java @@ -19,6 +19,8 @@ import javafx.scene.transform.Rotate; import shared.model.Bearing; import shared.model.CompoundMark; import shared.model.GPSCoordinate; +import visualiser.layout.Annotation3D; +import visualiser.layout.Assets3D; import visualiser.layout.Subject3D; import visualiser.layout.View3D; import visualiser.model.VisualiserBoat; @@ -57,24 +59,16 @@ public class NextMarkController { private void initialise3dArrowView() { ObservableList viewSubjects = FXCollections.observableArrayList(); - URL asset = this.getClass().getClassLoader().getResource("assets/arrow V1.0.4.stl"); - StlMeshImporter importer = new StlMeshImporter(); - importer.read(asset); + String arrowPath = "assets/mark_arrow.x3d"; - MeshView arrow = new MeshView(importer.getImport()); - PhongMaterial arrowMat = new PhongMaterial(Color.GREEN); - arrow.setMaterial(arrowMat); - - AmbientLight ambientLight = new AmbientLight(Color.web("#777777")); - ambientLight.setLightOn(true); + Shape3D arrow = Assets3D.loadX3d(arrowPath); arrow.setScaleX(25); arrow.setScaleY(25); - arrow.setScaleZ(200); + arrow.setScaleZ(100); arrow.setRotationAxis(new Point3D(1,0,0)); arrowStackPane3d.getChildren().add(arrow); - //arrowStackPane3d.getChildren().add(ambientLight); AnimationTimer arrow3d = new AnimationTimer() { @Override @@ -101,7 +95,7 @@ public class NextMarkController { private double calculateZRotate() { CompoundMark target = boat.getCurrentLeg().getEndCompoundMark(); Bearing headingToMark = GPSCoordinate.calculateBearing(boat.getPosition(), target.getAverageGPSCoordinate()); - return -headingToMark.degrees() + boat.getBearing().degrees(); + return -headingToMark.degrees() + boat.getBearing().degrees() + 180; } private double calculateXRotate(double zRotation) { @@ -115,6 +109,7 @@ public class NextMarkController { zRotation = 360 - zRotation; } - return 90 - 20 * Math.cos(Math.toRadians(zRotation)); + return 110; +// return 90 - 20 * Math.cos(Math.toRadians(zRotation)); } } diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java index 117475a6..746d25d3 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java @@ -420,6 +420,7 @@ public class RaceViewController extends Controller { //add sail Sails3D sails3D = new Sails3D(); Subject3D sailsSubject = new Subject3D(sails3D, 0); + sails3D.setMouseTransparent(true); sails3D.setMaterial(boatColorMat); sailsSubject.setXRot(0d); sailsSubject.setHeading(visualiserRace.getVisualiserRaceState().getWindDirection().degrees()); diff --git a/racevisionGame/src/main/java/visualiser/layout/Assets3D.java b/racevisionGame/src/main/java/visualiser/layout/Assets3D.java index 756d5a9e..28bb3497 100644 --- a/racevisionGame/src/main/java/visualiser/layout/Assets3D.java +++ b/racevisionGame/src/main/java/visualiser/layout/Assets3D.java @@ -52,7 +52,7 @@ public class Assets3D { windArrow = new Annotation3D(loadX3d(arrowPath)); } - private static Shape3D loadX3d(String path){ + public static Shape3D loadX3d(String path){ X3dModelImporter x3dModelImporter = new X3dModelImporter(); URL asset = Assets3D.class.getClassLoader().getResource(path); x3dModelImporter.read(asset); diff --git a/racevisionGame/src/main/resources/assets/mark_arrow.x3d b/racevisionGame/src/main/resources/assets/mark_arrow.x3d new file mode 100644 index 00000000..1b41caec --- /dev/null +++ b/racevisionGame/src/main/resources/assets/mark_arrow.x3d @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/racevisionGame/src/main/resources/assets/textures/Material Diffuse Color.002 b/racevisionGame/src/main/resources/assets/textures/Material Diffuse Color.002 new file mode 100644 index 0000000000000000000000000000000000000000..0c5dbaeb72c2960fcd502b6a0b3e680347d0f1bb GIT binary patch literal 38559 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 literal 0 HcmV?d00001