2017-02-18 2 views
4

Я пытаюсь ограничить движение положения камеры в определенных областях, определяемых детьми трехмерных объектов/объектов. Например, если бы у меня был объект дорожки в океане, и я хотел, чтобы мой пользователь мог перемещать камеру вперед и назад по этой дорожке. Подобно навигационной сетке контроллера первого лица в Unity, но без аспектов AI.Ограничение перемещения позиционирования камеры в область конкретного 3D-объекта

Мне понравилось бы решение на основе AFrame, но я не против писать пользовательский компонент, если есть решение THREE js.

Спасибо!

+0

В старые времена, там был этот компонент Three.js называется * PathControls *, реализующим справедливый бит этой функциональности. См. Http://stackoverflow.com/questions/23443110/how-to-move-camera-along-a-simple-path. Однако этот компонент больше не доступен. –

ответ

3

вы можете создать THREE.Box3, чтобы получить границы 3D-объекта/объектов детей с помощью:

var box = new THREE.Box3(); 
box.setFromObject(yourObject); 

Внутри первого контроллера человека вы можете проверить, если камера находится вне границ:

if(camera.position.x > box.max.x){ 
    camera.position.x = box.max.x; 
} 

if(camera.position.x < box.min.x){ 
    camera.position.x = box.max.x; 
} 

if(camera.position.z > box.max.z){ 
    camera.position.z = box.max.z; 
} 

if(camera.position.z < box.min.z){ 
    camera.position.z = box.max.z; 
} 

Я надеюсь, что это будет полезно

+0

Так я все равно делал это. Это работает для простой формы, такой как коробка, но это намного сложнее, если у нас есть пользовательская форма. – cnzac

+0

У меня есть предложение для сложных фигур. Я использовал его один раз: создайте карту высот. растровое изображение в черно-белом изображении, которое представляет, где есть предел – Tlatis

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