2014-09-05 5 views
1

Привет, у меня проблема с анимацией и движением в моей сцене three.js. Когда я перемещаю свою камеру (даже на 0,0000001%) (с помощью THREE.TrackballControls ИЛИ THREE.OrbitControls), или когда я одушевляю объект, используя Tween.js, моя анимация очень рывкая, объект прыгает, затягивая аниматином вокруг оси движения , похоже, что это ошибка с округлением в позиции.Jerky анимированные движения в three.js Анимация

Проблема больше, когда я перемещаюсь далеко от центра сцены (центр находится на вершине (0,0,0)), например, я на вершине (0,8000000,0), и проблема больше.

Выполняется, когда я перемещаю камеру или перемещаю объект.

Im используя стандартные примеры кодов и satndard библиотеки:

<script src="http://threejs.org/examples/../build/three.min.js"></script> 
<script src="js/Detector.js"></script> 
<script src="js/TrackballControls.js"></script> 
<script src="js/stats.js"></script> 
<script src="js/tween.min.js"></script> 

Я буду размещать часть кода здесь, но я не знаю, какая часть кода ..?

Видео проблемы здесь:

Video of screen

EDIT:

я пытаюсь переместить позиции объекта и камеры близко к центру (на XYZ: 0,0,1000), то есть гораздо меньше джиттера, но ошибка по-прежнему примечательна: Video 2 here

+0

Похоже, потеря точности (ТРИ использует только 32bits плавает в ее матричных вычислений). Можете ли вы указать точное положение в мире объекта и камеры в начале видео? – Volune

+0

Привет вершина камеры в мире 0,0, -10000100, объект 0,0, -10000000. Точка должна иметь звезду на 0,0,0 и планеты, вращающиеся вокруг. Но, если я перемещаю объект вблизи центра на 0,0,1000, он намного более плавный, но все же есть видимые «прерывания» в движении, я думаю, движение должно быть на 100% ясным, или я что-то пропустил? Спасибо за ваш ответ. – Martin112345

+0

Я пытаюсь переместить позиции объекта и камеры близко к центру (на XYZ: 0,0,1000), гораздо меньше дрожания, но ошибка по-прежнему примечательна http://viking.viaconn.net/trash/ScreenCapture_2014- 9-8% 2010.19.51.wmv – Martin112345

ответ

0

У меня есть другое решение для потери точности для огромной сцены.

Я решил сделать лучше изменить проблема с ослабленной точностью для перемещения камеры и объекта на большие расстояния (например, в координатах XYS (1000000000,165464464665464464,0)).

Я сделал родительский объект, который движется в противоположном направлении, чем мой корабль. Мой корабль всегда находится на сцене XYZ (0,0,0), а все другие сетки находятся в родительском объекте, который движется в противоположном направлении моего полета (перемещается вокруг моего корабля).

Когда я хочу переместить мой корабль, я меняю его с помощью ship.translateX(10) на parent.translateX(10*-1).

Эффект такой же, но точность будет всегда корректной на неограниченных расстояниях. Также мне не нужно обращаться с камерой, движущейся вокруг движущегося корабля, и мне не нужно перемещать skybox из-за того, что я все еще стоял с моим кораблем на месте сцены (мой корабль не мог выйти из skybox).

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

https://stackoverflow.com/questions/25771604/coordinates-of-objects-in-parent-box-towards-another-parent-box

3

В одном вопросе есть две проблемы.

Я решил это двумя способами.

Жаркие движения объекта при перемещении камеры. Похоже, что объект прыгает вокруг своей позиции, но он не движется, а камера движется (и прыгает на орбите или зум). Это вызвано потерей точности во время расстояния от центра сцены (это было около 10 миллионов).

Сцена простая не может быть такой большой или нужна, чтобы найти другое решение для перемещения камеры вокруг объекта без потери точности.

Solution is to move object closer to the center of scene Vertex(0,0,0). 

Второй рывками перемещение объекта во время движения ТВИН точки пром А в точку Б. Это было вызвано визуализации. Он был инициализирован в функции animate() после (через несколько минут позже), чем TWEEN.update(). Это означает, что время плавного движения объекта было неактивным в момент вычисления TWEEN. В следующем фрейме TWEEN вычисляет немного мута, чем анимированный, и объект подпрыгивает до правильного места. Повторяется каждый кадр.

Решение должно поместить вызов TWEEN.update() в render() (функция, инициированная инициализацией animate(), инициированной в то же время, что и рендер, должна быть в ручном режиме для TWEEN. (Спасибо вам за TWEEN.js его отличная работа SOLE!)).

перед:

function animate() { 
     render(); 
     TWEEN.update(); // this is recommended by TWEEN.js documentation 
     requestAnimationFrame(animate); 
} 

function render() {  
     renderer.render(scene, camera);   
} 

после:

function animate() { 
     render(); 
     requestAnimationFrame(animate); 
} 

function render() {  
     TWEEN.update(); // and this is working for me  
     renderer.render(scene, camera);   
} 

Эта проблема должна быть в каждой сцене, но и на малых расстояниях не видно.

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