Применяя текстуру к сетке в javafx
У меня были проблемы с наложением текстуры на сетку с использованием JavaFX и FXyz 0.1.1.
Я нашел этот вопрос и даже с подробным ответом не смог разобраться. Я начал с нуля, точно скопировав код из ответа, и сцена черная, без видимого икосоэдра.
Я использую Java 8. Предоставленное изображение представляет собой GIF и код ссылается на него как PNG. Я пробовал это как с png и gif версиями файла. Насколько я могу сказать, все остальное в точности как код в ответе на указанный вопрос.
Я могу запустить это и текстурировать эту сферу без проблем, но я бы хотел иметь возможность использовать икосоэдр вместо сферы.
1 ответ
Если вы используете библиотеку FXyz, вы можете очень легко применить различные текстуры к икосаэдру или к любому из различных примитивов, которые вы можете найти в библиотеке.
Этот фрагмент показывает 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();
}