применение текстуры к сетке в javafx

У меня возникли проблемы с применением текстуры к сетке с использованием JavaFX и FXyz 0.1.1.

Я нашел этот вопрос и даже с подробным ответом тут не смог разобраться. Я начал с нуля, точно скопировав код из ответа, и сцена черная без видимого икосоэдра.

Я использую Java 8. Предоставленное изображение представляет собой gif, а код ссылается на него как на png. Я пробовал это с версиями файла png и gif. Насколько я могу судить, все остальное в точности соответствует коду в ответе на указанный вопрос.

Я могу запустить это и текстурировать эту сферу без проблем, но я хотел бы иметь возможность использовать икосоэдр вместо сферы.


person sdp0et    schedule 12.05.2017    source источник


Ответы (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(); 

}

Текстуры икосаэдра

person José Pereda    schedule 12.05.2017
comment
Спасибо за ответ и примеры. Они заставили меня двигаться в том направлении, которое я искал. - person sdp0et; 13.05.2017