Ответ 1
Проблема заключается в следующем:
Чтобы дать поведение человека, , когда точка зрения перемещается, вы должны рассчитать новые позиции по оси x/y/z для объектов (а не только угол поворота в случае например, вращения).
Преобразование CSS должно работать следующим образом: мы даем перспектива, например, 800px для сцены. Тогда объекты будут видны с позицией Z до 800px, если позиция Z, например 1000px, будет за нашей точкой зрения, поэтому мы не сможем увидеть элемент.
Тем не менее, после ротации вы должны рассчитать новую позицию для предметов на основе нашей новой точки зрения.
Чтобы быть яснее , я обновил ваш пример гораздо более простым кодом (он поддерживает только поворот и есть только одно изображение): http://jsfiddle.net/gaAXk/12/
- Перспектива в примере - 800px.
- Изображение первоначально помещается в x = 0px, y = 0px, z = 0px. Таким образом, это будет видно перед нами на "расстоянии" 800 пикселей.
- Когда мы поворачиваем точку зрения, элемент должен перемещаться по окружности вокруг точки зрения, поэтому необходимо обновить положения x, z и угол поворота элемента.
Элемент в примере перемещается по окружности с радиусом 800px (функция calculatePos() выполняет трюк).
Тот же расчет должен быть обновлен, если мы изменим позицию (если точка зрения приближается к некоторым объектам и далее от других).
Это не так тривиально. Если у кого-то есть лучшие решения (я не 3D-эксперт), я буду рад услышать некоторые из них.