2016-04-12 7 views
1

Я только что начал java3D, и я могу перемещать камеру вверх/вниз/влево/вправо/вперед/назад, но я не могу понять, как сделать камеру изменение угла, например, переход от ожидающего взгляда влево. Может ли кто-нибудь дать мне пример? Кроме того, должен ли я ставить getViewingPlatform(). GetViewPlatformTransform(). SetTransform (test.position); в моем основном методе, или я должен сделать что-то еще?Как повернуть камеру/viewPlatform в java 3d

Я пробовал только с помощью мыши и повернул вид OrbitBehavior orbit = new OrbitBehavior (canvas, OrbitBehavior.REVERSE_ROTATE);

orbit.setSchedulingBounds(new BoundingSphere()); 
orbit.setRotXFactor(2); 
orbit.setRotYFactor(2); 

Но он не работает, когда я добавить getViewingPlatform() getViewPlatformTransform() SetTransform (test.position)..; для цикла while в основном методе. Угол обзора повторно сбрасывается.

+0

Пожалуйста, укажите, что вы пытались. – Reinard

ответ

2

Вместо поворота зрителя (камеры) с помощью углов вы можете управлять им, определяя 3D-«gazePoint» (основное внимание сосредоточено на). Чтобы камера не наклонялась в сторону, определите upDir = [0, 1, 0] (J3D предполагает + ось y вверх).

Затем измените viewTransform, который живет в simpleUniverse.

Вот пример кода из моего приложения:

// ***********declare these variables in class where canvas3D lives ***** 
//J3D stuff 
public InteractiveCanvas3D canvas3D; 
public SimpleUniverse  simpleUniv; 
private Transform3D   viewingTransform; 
private TransformGroup viewingTransformGroup; 

public static Point3d viewersLocation; 
public static Point3d gazePoint; //point viewer is looking at 

// and initialize as follows: 

viewingTransformGroup = simpleUniv.getViewingPlatform().getViewPlatformTransform(); 
viewingTransform = new Transform3D(); 


//called to update viewer's location and gaze: 
// *********************** UpdateViewerGeometryJ3D 
public void UpdateViewerGeometryJ3D() { 
    Point3d eye = viewersLocation; 
    Point3d center = gazePoint; 
    Vector3d up = upDir; 
    viewingTransform.lookAt(eye, center, up); 
    viewingTransform.invert(); 
    viewingTransformGroup.setTransform(viewingTransform); 

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

+0

У меня вопрос. Когда вы двигаетесь вверх по левому краю вправо, а угол камеры меняется, сохраняются ли направления? Например, если бы я должен был двигаться вперед, тогда посмотрим вправо, но затем снова удерживайте клавишу «вперед», я буду двигаться вперед в новом направлении (справа) или вперед в старом направлении (направление начала)? –

+0

№ GazePoint ("lookAt()") не влияет на движение зрителя, только направление смотрится. Чтобы сделать аналогию с драйверами с резиновыми ножками, допустим, на плече автотрассы есть автомобиль. Драйверы пристально смотрят на место горения автомобиля (GazePoint). Его шея продолжает поворачиваться, чтобы продолжать смотреть на ту же неподвижную точку, что и он. Я обнаружил, что техника «движущегося зрителя + фиксированная точка взгляда» дает пользователю реалистичное ощущение пребывания в трехмерном пространстве. Это более интуитивно, поскольку он имитирует то, как люди фиксируют свое внимание на объекте. – pbierre

 Смежные вопросы

  • Нет связанных вопросов^_^