2016-04-23 3 views
1

Я загружаю один объект с objloader на свою сцену, позже загружаю второй объект на свою сцену, но я хочу изменить его абсолютное положение на другую сторону моего первого объекта.three.js Как разместить один объект рядом с другим (глобальное мировое положение)

Все позиции обоих объектов относительно локальных (0,0,0).

Как я могу изменить его глобальную позицию?

+0

Можете ли вы добавить соответствующий код? Получение помощи может быть проще. –

+0

Это не работает, но идея здесь: object1.position.set (object2.position.copy); Я попытался с matrixWorld.getPosition() или localToWorld, он всегда возвращает относительную позицию (0,0,0) – davincy

ответ

1

Я нашел ответ:

object1.position.copy(object2.matrixWorld.getPosition()); 
0

Каждый объект, который вы можете положить в сцену, имеет свойство «position», которое представляет собой трехмерный вектор. Вы можете просто изменить его значения x/y/z.

Например, если ваш объект называется «сетка»:

mesh.position.x += 1; //you need re-render if you change something in the object after adding to the scene 
yourScene.add(mesh); 

Это переместит объект на один «блок» на сцене. Это означает, что вы можете сделать это:

mesh2.position.x = mesh1.position.x + 1; 
yourScene.add(mesh1); 
yourScene.add(mesh2); 

Здесь Вы можете проверить другие свойства и методы, доступные для объектов, которые можно поставить на three.js сцену:

http://threejs.org/docs/#Reference/Core/Object3D

+0

Я знаю это, но я хочу получить позицию моего другого объекта для перемещения этого объекта рядом с ним ... – davincy

+0

Could пожалуйста, покажите код, который у вас есть? Было бы намного легче помочь вам. Основной принцип заключается в том, чтобы получить доступ к вектору положения объекта, это единственное место, где three.js сохраняет позицию. Вы также можете получить доступ к сцене, если у вас нет прямого обращения к объекту, пройдите через детей сцены и найдите тот, который вы хотите. Опять же, без кода может быть трудно догадаться, в чем проблема, с которой вы боретесь. – Scharnvirk

+0

К сожалению, у меня нет кода, потому что все, что я пытаюсь, не работает. Всегда возвращаем 0. В основном я пытаюсь найти позицию мира x (на сцене) одного объекта, чтобы установить его на другой объект. Вы знаете ? – davincy

1

Ответ, который опубликовал davincy, теперь устарел. В моей версии трижды он ответил этим предупреждением:

THREE.Matrix4: .getPosition() удален. Вместо этого используйте Vector3.setFromMatrixPosition (matrix).

Так тогда вам нужно заменить его следующим:

objectA.position.setFromMatrixPosition(objectB.matrixWorld); 

, где objectB является объектом, который находится в сцене, и объект, который вы хотите Objecta скопировать свою позицию с.

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