2015-11-01 3 views
3

Функция демпфирования добавлена ​​в ветку r.72dev для трех. Он отлично работает для более плавного вращения.Three.js: OrbitControl с демпфированием зума?

Включает ли демпфирование (инерцию) для увеличения?

controls = new THREE.OrbitControls(camera, renderer.domElement); 
controls.enableDamping = true; 
controls.dampingFactor = 0.25; 
+0

испытаны ли вы его? Это должно быть быстрее, чем писать вопрос о SO :) – Atrahasis

+0

Конечно, я протестировал его. Кажется, не работает. –

+0

Да, я имею в виду, что код еще не реализует его, но может скоро наступить. Вы можете проверить, как это делает TrackballControls. – Atrahasis

ответ

3

Я добавил зум затухания в three.js r73OrbitControls, посмотреть демо:

http://jsfiddle.net/L0rdzbej/149/

Использование только как элементы управления орбиты по умолчанию, вы можете играть с этими настройками, чтобы настроить его:

controls.constraint.smoothZoom = true; 
controls.constraint.zoomDampingFactor = 0.2; 
controls.constraint.smoothZoomSpeed = 5.0; 

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

Мое решение основано на этом факте из paulkaplan от 2013 года: https://gist.github.com/paulkaplan/5770247. Излишне говорить, что три .js и Orbit Controls сильно изменились с тех пор. Я был бы признателен, если кто-то бывший автор хотел бы добавить эту функцию официально, но иногда это занимает довольно много времени ;-)


Чтобы дать вам краткий обзор я модифицированный следующее:

В OrbitContraint():

Пучок переменных, необходимых для масштабирования,

добавлена ​​функция: this.smoothZoomUpdate = function() { /* ... */ };

и призыв к ней внутри OrbitConstraint.update() функции:

Также внутри THREE.OrbitControls() модифицированной функции onMouseWheel() { /* ... */ }

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