Как установить ViewPlatform и обновить TransformGroup? - PullRequest
3 голосов
/ 19 августа 2009

У меня есть сцена внутри TransformGroup, которая позволяет мыши масштабировать / поворачивать / панорамировать.

Мне нужно установить положение камеры достаточно далеко, чтобы я мог видеть всю сцену, что я делаю с помощью следующего кода:

    // Position the position from which the user is viewing the scene
    ViewingPlatform viewPlatform = universe.getViewingPlatform();
    TransformGroup viewTransform = viewPlatform.getViewPlatformTransform();
    Transform3D t3d = new Transform3D();
    viewTransform.getTransform(t3d);
    t3d.lookAt(new Point3d(0,0,50), new Point3d(0,0,0), new Vector3d(0,1,0));
    t3d.invert();
    viewTransform.setTransform(t3d);

Выполнение вышеуказанного кода работает в том смысле, что я могу манипулировать сценой с помощью мыши. Однако, если я поменяю эту строку:

t3d.lookAt(new Point3d(0,0,50), new Point3d(0,0,0), new Vector3d(0,1,0));

с:

// Change value from 50 to 90 to push the camera back further
t3d.lookAt(new Point3d(0,0,90), new Point3d(0,0,0), new Vector3d(0,1,0));

Я теряю способность манипулировать экраном с помощью мыши.

Как я могу сохранить способность трансформироваться с помощью мыши, одновременно толкая камеру назад, чтобы я мог видеть весь экран?

Большое спасибо заранее!

1 Ответ

4 голосов
/ 19 августа 2009
    GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
    Canvas3D canvas3d = new Canvas3D(config);

    // Manually create the viewing platform so that we can customize it
    ViewingPlatform viewingPlatform = new ViewingPlatform();

    // **** This is the part I was missing: Activation radius
    viewingPlatform.getViewPlatform().setActivationRadius(300f);

    // Set the view position back far enough so that we can see things
    TransformGroup viewTransform = viewingPlatform.getViewPlatformTransform();
    Transform3D t3d = new Transform3D();
    // Note: Now the large value works
    t3d.lookAt(new Point3d(0,0,150), new Point3d(0,0,0), new Vector3d(0,1,0));
    t3d.invert();
    viewTransform.setTransform(t3d);

    // Set back clip distance so things don't disappear 
    Viewer viewer = new Viewer(canvas3d);
    View view = viewer.getView();
    view.setBackClipDistance(300);

    SimpleUniverse universe = new SimpleUniverse(viewingPlatform, viewer);
...