package meshviewer; import javafx.application.Application; import javafx.beans.property.DoubleProperty; import javafx.beans.property.SimpleDoubleProperty; import javafx.scene.Group; import javafx.scene.PerspectiveCamera; import javafx.scene.PointLight; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.ScrollBar; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.paint.PhongMaterial; import javafx.scene.shape.DrawMode; import javafx.scene.shape.Shape3D; import javafx.scene.shape.Sphere; import javafx.scene.transform.Rotate; import javafx.stage.Stage; public class Bug extends Application { private Shape3D shape; private PhongMaterial material; private ScrollBar rotateXScroll; private ScrollBar rotateYScroll; private ScrollBar rotateZScroll; private Group grp1; private Group grp2; private Group grp3; private Group grp4; private PointLight pointLight; // private CheckBox diffuseMapCheck; // private CheckBox bumpMapCheck; // final Image diffuseMap = new Image("bug/cup_diffuseMap_1024.png"); // final Image bumpMap = new Image("bug/cup_normalMap_1024.png"); public Shape3D getShape() { return new Sphere(100); } public static void main(String[] args) { System.setProperty("prism.dirtyopts", "false"); launch(args); } protected Group buildGroup(Group grp) { Group grp4 = new Group(grp); grp4.setTranslateZ(15); return grp4; } // public void setDiffuseMap(boolean bln) { // if (bln) { // material.setDiffuseMap(diffuseMap); // material.setDiffuseColor(Color.TRANSPARENT); // // } else { // material.setDiffuseMap(null); // material.setDiffuseColor(Color.LIGHTGREY); // } // } // // public void setBumpMap(boolean bln) { // if (bln) { // material.setBumpMap(bumpMap); // // } else { // material.setBumpMap(null); // } // } // private void initMaterialControls() { // diffuseMapCheck = new CheckBox("Diffuse"); // diffuseMapCheck.selectedProperty().addListener(new ChangeListener() { // @Override // public void changed(ObservableValue ov, Boolean t, Boolean t1) { // setDiffuseMap(t1); // } // }); // bumpMapCheck = new CheckBox("Bump"); // bumpMapCheck.selectedProperty().addListener(new ChangeListener() { // @Override // public void changed(ObservableValue ov, Boolean t, Boolean t1) { // setBumpMap(t1); // } // }); // // } private void initMaterial() { material = new PhongMaterial(); material.setDiffuseColor(Color.LIGHTGRAY); material.setSpecularColor(Color.rgb(30, 30, 30)); shape.setMaterial(material); } private void initRotationControls() { DoubleProperty xAxis = grp1.rotateProperty(); DoubleProperty yAxis = grp2.rotateProperty(); DoubleProperty zAxis = grp3.rotateProperty(); rotateXScroll = new ScrollBar(); rotateYScroll = new ScrollBar(); rotateZScroll = new ScrollBar(); rotateXScroll.setMax(360); rotateYScroll.setMax(360); rotateZScroll.setMax(360); rotateXScroll.setMin(0); rotateYScroll.setMin(0); rotateZScroll.setMin(0); rotateXScroll.setValue(xAxis.doubleValue()); rotateYScroll.setValue(yAxis.doubleValue()); rotateZScroll.setValue(zAxis.doubleValue()); rotateXScroll.valueProperty().bindBidirectional(xAxis); rotateYScroll.valueProperty().bindBidirectional(yAxis); rotateZScroll.valueProperty().bindBidirectional(zAxis); } public void setDrawMode(DrawMode mode) { shape.setDrawMode(mode); } private Group getGroup() { shape = getShape(); grp1 = new Group(shape); grp1.setRotationAxis(Rotate.X_AXIS); grp2 = new Group(grp1); grp2.setRotationAxis(Rotate.Y_AXIS); grp3 = new Group(grp2); grp3.setRotationAxis(Rotate.Z_AXIS); grp4 = new Group(grp3); grp4.setTranslateX(250); grp4.setTranslateY(250); return grp4; } private HBox getShapePane() { initRotationControls(); //initMaterialControls(); //VBox colorImageBox = new VBox(); HBox pane = new HBox(); VBox rotateBox = new VBox(); //colorImageBox.getChildren().addAll(new Label("diffuse map"), diffuseMapCheck, bumpMapCheck); rotateBox.getChildren().addAll(new Label("Rotate X,Y,Z"), rotateXScroll, rotateYScroll, rotateZScroll); pane.getChildren().addAll(/*colorImageBox,/**/ rotateBox); return pane; } private PerspectiveCamera addCamera(Scene scene) { PerspectiveCamera perspectiveCamera = new PerspectiveCamera(); scene.setCamera(perspectiveCamera); return perspectiveCamera; } private Group getLight(Group grp) { Group root; pointLight = new PointLight(Color.ANTIQUEWHITE); pointLight.setTranslateX(250); pointLight.setTranslateY(-10); pointLight.setTranslateZ(-300); root = new Group(grp, pointLight); root.setFocusTraversable(true); return root; } @Override public void start(Stage stage) throws Exception { stage.setTitle("title"); stage.setScene(buildScene()); stage.show(); } private Scene buildScene() { Group group = getLight(buildGroup(getGroup())); initMaterial(); VBox panesBox = new VBox(); panesBox.getChildren().addAll(getShapePane()); Group root = new Group(group, panesBox); root.setPickOnBounds(false); Scene scene = new Scene(root, 500, 500, true); addCamera(scene); return scene; } static { System.setProperty("prism.dirtyopts", "false"); } }