OrbitBehavior для нескольких Canvas3D - PullRequest
0 голосов
/ 09 марта 2019

новичок java3d здесь.Я изучил основы.Удалось создать две холсты, смотрящие на один и тот же объект.Мне также удалось использовать OrbitBehavior, чтобы вращать платформу с помощью мыши:

OrbitBehavior orbit = new OrbitBehavior(canvas1, 
OrbitBehavior.REVERSE_ALL);
orbit.setSchedulingBounds(bounds);
ViewingPlatform vp = universe.getViewingPlatform();
vp.setViewPlatformBehavior(orbit);

Дело в том, что независимо от того, использую ли я canvas1 или canvas2 в конструкторе выше, оба полотна вращаются вместе.Так не слишком уверен, что ссылка для?То, что я хотел, - это иметь возможность вращать каждый вид независимо от того, на каком холсте находится мышь.Что я делаю не так?

1 Ответ

0 голосов
/ 11 марта 2019

Хорошо, я нашел ответ сам.Мне нужны две ViewPlatform, которые недоступны в SimpleUniverse.Если кто-то найдет это полезным, ниже приведен код, который создает два Canvas3D и каждую платформу, управляемую мышью независимо.

        VirtualUniverse u = new VirtualUniverse();
    Locale locale = new Locale(u);
    BranchGroup scene = new Scene(); // this is my own BranchGroup derived class for the geometry 
    locale.addBranchGraph(scene);

    GraphicsConfigTemplate3D gc3D = new GraphicsConfigTemplate3D();
    gc3D.setSceneAntialiasing( GraphicsConfigTemplate.PREFERRED );
    GraphicsDevice gd[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();

    Canvas3D canvas = new Canvas3D(gd[0].getBestConfiguration( gc3D ));
    canvas.setPreferredSize(new Dimension(600,600));
    ViewPlatform vp = new ViewPlatform();
    vp.setViewAttachPolicy( View.RELATIVE_TO_FIELD_OF_VIEW );
    ViewingPlatform viewingp = new ViewingPlatform();
    viewingp.setViewPlatform(vp);
    locale.addBranchGraph(viewingp);
    View view = new View();
    PhysicalBody pb = new PhysicalBody();
    PhysicalEnvironment pe = new PhysicalEnvironment();
    view.setPhysicalEnvironment( pe );
    view.setPhysicalBody( pb );
    view.attachViewPlatform( vp );
    view.addCanvas3D( canvas);
    OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL);
    orbit.setSchedulingBounds(Scene.worldBounds);
    viewingp.setViewPlatformBehavior(orbit);

    Canvas3D canvas2 = new Canvas3D(gd[0].getBestConfiguration( gc3D ));
    canvas2.setPreferredSize(new Dimension(600,600));
    ViewPlatform vp2 = new ViewPlatform();
    vp2.setViewAttachPolicy( View.RELATIVE_TO_FIELD_OF_VIEW );
    ViewingPlatform viewingp2 = new ViewingPlatform();
    viewingp2.setViewPlatform(vp2);
    locale.addBranchGraph(viewingp2);
    View view2 = new View();
    PhysicalBody pb2 = new PhysicalBody();
    PhysicalEnvironment pe2 = new PhysicalEnvironment();
    view2.setPhysicalEnvironment( pe2 );
    view2.setPhysicalBody( pb2 );
    view2.attachViewPlatform( vp2 );
    view2.addCanvas3D( canvas2);
    OrbitBehavior orbit2 = new OrbitBehavior(canvas2, OrbitBehavior.REVERSE_ALL);
    orbit2.setSchedulingBounds(Scene.worldBounds);
    viewingp2.setViewPlatformBehavior(orbit2);
...