My implementation:
[java]/**
* Обновление позиции камеры.
*
* @param camera камера, чью позицию надо изменить.
* @param object объект, за которым надо разместить камеру.
*/
public static final void updateCameraPosition(Camera camera, SpaceShip object)
{
// получаем буффер
LocalThread local = LocalThread.get();
// получаем позицию объекта
Vector3f loc = object.getLocation();
// создаем новую позицию камеры
Vector3f cameraLoc = local.getNextVector();
// добалвяем направление объекта
cameraLoc.set(object.getDirection());
// получаем отступ от объекта
int offset = object.getSizeX();
// добавляем дистанцию до объекта
cameraLoc.multLocal(offset * -3);
// добалвяем позицию объекта
cameraLoc.addLocal(loc);
// создаем вектор прицеливания
Vector3f aiming = local.getNextVector();
// получаем направление вектора
aiming.set(object.getDirection());
// добавляем дистанцию прицеливания
aiming.multLocal(object.getAimingDistance());
// добалвяем позицию корабля
aiming.addLocal(loc);
// создаем вектор вверх
Vector3f up = local.getNextVector();
// получаем разворот объъекта
Quaternion rotation = object.getRotation();
// получаем направление ввверх
rotation.getRotationColumn(1, up);
// поднимаем камеру
cameraLoc.addLocal(up.mult(offset, local.getNextVector()));
// применяем положение
camera.setLocation(cameraLoc);
// получаем игровой контролер
GameController control = GameController.getInstance();
// если режим интерфейса, то выходим
if(control.getInputMode() == InputMode.INTERFACE_MODE)
return;
// обновляем разворот
camera.lookAt(aiming, up);
}[/java]
The problem: the camera vibrates slightly when you move the object, if the camera is undocked, the object moves smoothly