Когда я использую SubScene, мои 3D-модели начинают глючить.Есть идеи почему? - PullRequest
0 голосов
/ 07 мая 2019

Я создаю приложение, которое имеет 2 подсцены, одну для графического интерфейса пользователя и одну для отображения 3D-моделей (в моем случае OBJ).

Для импорта файла OBJ я использую библиотеку ObjModelImporterJFX от InteractiveMesh .

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

Вот мой код:

public class Main extends Application{

    @Override
    public void start(Stage stage) throws Exception{

        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

        PerspectiveCamera camera = new PerspectiveCamera(true);

        Group model = loadOBJ("course.obj");
        Group course = new Group(model);

        BorderPane borderPane = new BorderPane();

        Pane pane1 = new Pane(course);
        Pane pane2 = new Pane(root);

        SubScene subScene1 = new SubScene(pane1, 1000, 720);
        subScene1.setCamera(camera);

        SubScene subScene2 = new SubScene(pane2,500,500);

        borderPane.setLeft(subScene1);
        borderPane.setRight(subScene2);

        Scene scene = new Scene(borderPane, 1280,720, true);

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


    private Group loadOBJ(String fileName){

        URL url = getClass().getResource(fileName);

        Group modelRoot = new Group();

        ObjModelImporter importer = new ObjModelImporter();
        importer.read(url);

        for (MeshView view : importer.getImport()){
            modelRoot.getChildren().add(view);
        }

        return modelRoot;
    }


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

Я надеюсь, что кто-тоесть идея, почему это так.Заранее спасибо:)

ОБНОВЛЕНИЕ: Чтобы исправить это, включите deepBuffer , изменив конструктор SubScene с

SubScene subScene1 = new SubScene(pane1, 1000, 720);

на

SubScene subScene1 = new SubScene(pane1, 1000, 720, true, null);
...