2015-04-29 4 views
0

Я создал кубик Рубика jPCT, и теперь мне нужно повернуть весь этот куб. Я попытался добиться этого с помощью матриц вращения, и у меня есть вращающиеся элементы с одним кубом, но это не кажется хорошим способом.jPCT: Странное вращение камеры

Поэтому я хочу повернуть камеру вокруг куба вместо вращения куба. Это довольно легко, но проблема в том, что jPCT меняет ориентацию камеры в случайном порядке или я совершил еще одну ошибку, и я не могу ее исправить.

SimpleVector cameraPos = new SimpleVector(-20, 0, 0); 
SimpleVector cubeCenter = new SimpleVector(2, 2, 2); 

while (!org.lwjgl.opengl.Display.isCloseRequested()) { 
    refreshScene(); 

    // Camera position is repeatedly rotated 
    cameraPos.rotateAxis(new SimpleVector(0, 0, 1), (float) Math.toRadians(1)); 
    // Here I set camera position 
    world.getCamera().setPosition(cameraPos); 
    // Camera looks at the center of cube, but unfortunately 
    // not with fixed orientation 
    world.getCamera().lookAt(cubeCenter); 

    try { 
     Thread.sleep(50); 
    } catch (InterruptedException e) { 

    } 
} 

Приведенный выше код выполняет это странное вращение куба:

Current camera rotation

Это здорово, но мне нужно повернуть мой кубик так: Desired camera rotation

Я попытался установить ориентацию камеры по setOrientation метод:

SimpleVector upVector = world.getCamera().getUpVector(); 
upVector.scalarMul(-1.0f); 
world.getCamera().setOrientation(world.getCamera().getDirection(), upVector); 

Последняя строка в этом коде должна ИМХО поворачивать ориентацию камеры вверх ногами, но она просто ничего не делает. Я использую последнюю версию jPCT.

Как добиться правильной ориентации камеры? Любая помощь очень приветствуется!

ответ

0

Если вы хотите повернуть куб, который, по-видимому, вам действительно нужен, почему бы просто не поместить фиктивный объект Object3D в его центр, сделать все элементы кубических детей этого манекена и только вращать манекен? Это должно дать вам желаемые результаты. О вашем подходе: вы можете быть уверены, что вращение не случайное. Вы получаете то, о чем просите в своем коде. Почему это приводит к тому, что вы на самом деле видите здесь, трудно сказать, не зная полной настройки сцены. Во всяком случае, самый простой способ, чтобы вращать камеру вокруг некоторой фиксированной точки в пространстве, чтобы сделать его в этот момент в начальной настройке, а затем сделать что-то вроде этого:

cam.moveCamera(Camera.CAMERA_MOVEIN, distance); 
cam.rotateAxis(<some axis>, <float>); 
cam.moveCamera(Camera.CAMERA_MOVEOUT, distance); 

Где расстояние начального расстояния от камеры к поворотному шарниру. Вы можете find an example here.

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