Как установить координаты камеры для объекта в three.js? Используя пример загрузчика webgl obj + mtl

У меня есть 3D-модель в формате .obj. Однако координаты этой 3D-модели не равны (0,0,0). Это 3D-рендеринг изображений дрона, поэтому координаты являются фактическими координатами с географической привязкой.

Я следую примеру Three.js о том, как загрузить объект с его mtl на webgl. Я использую исходный HTML, за исключением того, что просто заменяю объект, указанный CerroPelaoLow как male02, и файлы помещаются в каталог obj. Firefox правильно отображает модель, но проблема заключается в положении.

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

Итак, как я могу использовать локальные координаты моего объекта или сфокусировать камеру, а затем использовать другой набор элементов управления?


person Luis Barrera    schedule 17.04.2017    source источник


Ответы (1)


Вы можете использовать boundingSphere или boundingBox геометрии вашего объекта для определения положения и вашей камеры. Я уже реализовал функциональность для фокусировки объекта или набора объектов. Итак, здесь я делюсь некоторым кодом:

// assuming following variables:
// object   -> your obj model (THREE.Mesh)
// camera   -> PerspectiveCamera
// controls -> I'm also using OrbitControls


// if boundingSphere isn't set yet
object.computeBoundingSphere();

var sphere = object.geometry.boundingSphere.clone();
sphere.applyMatrix4( object.matrixWorld );

// vector from current center to camera position (shouldn't be zero in length)
var s = new THREE.Vector3().subVectors( camera.position, controls.center );

var h = sphere.radius / Math.tan( camera.fov / 2 * Math.PI / 180 );

var newPos = new THREE.Vector3().addVectors( sphere.center, s.setLength(h) );

camera.position.copy( newPos );
controls.center.copy( sphere.center );
person Brakebein    schedule 18.04.2017