Коробка 3D JavaFX Поворот

У меня есть две коробки (группа), и при повороте изображение отображается так:

Поля отображения Поля отображения

Повернуть блоки Повернуть блоки


При вращении Коробка (JANELA_MEIO_BOX) искажается:

public class Demo1 extends Application {

private PhongMaterial texturedMaterial = new PhongMaterial();
private Image texture = new Image("/T3D/mapfooter.JPG");
private final PhongMaterial redMaterial = new PhongMaterial();

public static void main(String[] args) {
    Application.launch(args);
}

@Override
public void start(final Stage stage) {

    redMaterial.setSpecularColor(Color.ORANGE);
    redMaterial.setDiffuseColor(Color.RED);

    texturedMaterial.setDiffuseMap(texture);
    javafx.scene.shape.Box JANELA_MEIO_BOX = new javafx.scene.shape.Box();

    /*  rotate  */
    JANELA_MEIO_BOX.setWidth(600.0); 
    JANELA_MEIO_BOX.setHeight(340.0);
    JANELA_MEIO_BOX.setDepth(100.0);
    JANELA_MEIO_BOX.setMaterial(texturedMaterial);

    Group JANELA_001 = new Group();

    stage.setTitle("Cube");

    final CameraView cameraView = new CameraView();


    final Scene scene = new Scene(cameraView, 1000, 800, true);
     scene.setFill(new RadialGradient(225, 0.85, 300, 300, 500, false,
            CycleMethod.NO_CYCLE, new Stop[]{new Stop(0f, Color.BLUE),
                new Stop(1f, Color.LIGHTBLUE)}));
    PerspectiveCamera camera = new PerspectiveCamera();
    scene.setCamera(camera);
    scene.setOnScroll((final ScrollEvent e) -> {
        camera.setTranslateZ(camera.getTranslateZ() + e.getDeltaY());
    });


    javafx.scene.shape.Box JAN_MAIN = new javafx.scene.shape.Box();
    JAN_MAIN.setMaterial(redMaterial);
    JAN_MAIN.setWidth(1000.0);
    JAN_MAIN.setHeight(600.0);
    JAN_MAIN.setDepth(100.0);

     JAN_MAIN.getTransforms().add(new Translate(1, 1, 1));


    JANELA_MEIO_BOX.getTransforms().add(new Translate(1, 1, 1));

    JANELA_001.getChildren().addAll(JAN_MAIN, JANELA_MEIO_BOX);

    cameraView.add(JANELA_001);

            /*  mouse events */


    cameraView.frameCam(stage, scene);
     MouseHandler mouseHandler = new MouseHandler(scene, cameraView);
    KeyHandler keyHandler = new KeyHandler(stage, scene, cameraView);
    /*  scene */

    stage.setScene(scene);
    stage.show();
}

При вращении Коробка (JANELA_MEIO_BOX) искажается


person Roberto Teixeira    schedule 29.05.2017    source источник
comment
ps: строки (коробка) после поворота не видны!   -  person Roberto Teixeira    schedule 29.05.2017


Ответы (1)


У вас есть две коробки: куб 1000x600x100 и куб 600x340x100.

Когда вы объединяете их обоих в группу, они помещаются в центр: больший изменяется от -500 до 500 по X, от -300 до 300 по Y, от -50 до 50 по Z, и то же самое касается меньшего. один, тоже по Z от -50 до 50.

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

артефакты

Одно из быстрых решений, если вы хотите увидеть обе формы, — просто сделать меньшую немного глубже:

JANELA_MEIO_BOX.setDepth(100.1);

нет артефактов

И также удобно, что вы установили Сглаживание сцены на Сбалансированное:

final Scene scene = new Scene(cameraView, 1000, 800, true, SceneAntialiasing.BALANCED);
person José Pereda    schedule 30.05.2017
comment
Спасибо, Хосе Переда! Идеальный ! Большое спасибо! - person Roberto Teixeira; 31.05.2017
comment
Было бы хорошо, если бы вы отметили вопрос как принятый, чтобы он мог помочь и другим. - person José Pereda; 31.05.2017
comment
Ладно, Хосе Переда. Сделанный ! Спасибо ! - person Roberto Teixeira; 31.05.2017