我在使用JavaFX和FXyz 0.1.1将纹理应用于网格时遇到了问题。
我找到this question,即使有详细的答案也无法弄明白。我从头开始,完全从答案中复制代码,场景是黑色的,没有可见的二十面体。
我正在使用Java 8.提供的图像是一个gif,代码将其作为png引用。我已经尝试了文件的png和gif版本。据我所知,其他一切与答案中的代码完全一样。
我能够运行this并且没有问题地纹理该球体,但我希望能够使用icosohedron而不是球体。
答案 0 :(得分:1)
如果您使用FXyz library,您可以非常轻松地将不同的纹理应用于二十面体或library中可以找到的任何不同基元。
此代码段显示了5种不同的纹理模式:
@Override
public void start(Stage primaryStage) {
PerspectiveCamera camera = new PerspectiveCamera(true);
camera.setTranslateY(3);
camera.setTranslateX(4);
camera.setTranslateZ(-15);
IcosahedronMesh icoLine = new IcosahedronMesh(100, 0);
icoLine.setDrawMode(DrawMode.LINE);
icoLine.getTransforms().addAll(new Rotate(10, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS));
IcosahedronMesh icoColor = new IcosahedronMesh(100, 0);
icoColor.setTextureModeNone(Color.LIGHTGREEN);
icoColor.getTransforms().addAll(new Rotate(20, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS));
IcosahedronMesh icoFunction = new IcosahedronMesh(100, 0);
icoFunction.setTextureModeVertices3D(1530, p -> Math.cos(p.z));
icoFunction.getTransforms().addAll(new Rotate(30, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS));
IcosahedronMesh icoFaces = new IcosahedronMesh(100, 0);
icoFaces.setTextureModeFaces(5);
icoFaces.getTransforms().addAll(new Rotate(20, Rotate.X_AXIS), new Rotate(-10, Rotate.Y_AXIS));
IcosahedronMesh icoImage = new IcosahedronMesh(100, 0);
icoImage.setTextureModeImage(getClass().getResource("icon.jpg").toExternalForm());
icoImage.getTransforms().addAll(new Rotate(20, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS));
IcosahedronMesh icoPattern = new IcosahedronMesh(100, 0);
icoPattern.setTextureModePattern(Patterns.CarbonPatterns.CARBON_KEVLAR, 100);
icoPattern.getTransforms().addAll(new Rotate(20, Rotate.X_AXIS), new Rotate(-30, Rotate.Y_AXIS));
GridPane grid = new GridPane();
grid.add(new Group(icoLine), 0, 0);
grid.add(new Group(icoColor), 1, 0);
grid.add(new Group(icoFunction), 2, 0);
grid.add(new Group(icoFaces), 0, 1);
grid.add(new Group(icoImage), 1, 1);
grid.add(new Group(icoPattern), 2, 1);
Scene scene = new Scene(grid, 600, 400, true, SceneAntialiasing.BALANCED);
scene.setCamera(camera);
primaryStage.setScene(scene);
primaryStage.setTitle(("Icosahedron - FXyz3D"));
primaryStage.show();
}