ThreeJS Translate устарел, теперь добавляет вместо позиции - PullRequest
0 голосов
/ 16 апреля 2019

В three.js r96 существовал перевод (x, y, z).Я бы использовал это, чтобы переместить объект из его начальной точки.

Теперь в r103 это устарело для translateX (x), однако, глядя на вывод консоли в сетке, я вижу, что если у меня есть позицияскажем, position.set (50,0,0) и traslateX (50), тогда атрибуты Mesh показывают позицию (100,0,0).

https://codepen.io/anon/pen/XQVmyZ

Вот пример проблемы.В этом коде у меня есть три самолета.Вращающаяся плоскость должна вращаться вокруг оси y в точке пересечения красного и синего.

Если моя плоскость равна 100, то установка положения (50,0,0) должна сдвинуть синийот центра до самого правого края красного цвета.Это должно быть новое происхождение синего цвета.

Теперь, если я перевожу синий на ось x 50, то точка начала все еще должна быть в том же месте, но теперь синий цвет при повороте будет вращаться вокруг оси Y, расположенной на самой внешней стороне синего цвета.левая точка.Как вы видите, это не так.

Взгляд в Mesh показывает, что это не перевод, а только позиция.

plane3.position.set(50,0,0);
//plane3.translate(50,0,0);  //Used to work
plane3.translateX(50); //New translate, adds to position instead
//var vector = new THREE.Vector3( 1, 0, 0 );
//plane3.translateOnAxis(vector,40);

function render() {
 requestAnimationFrame( render );
 plane3.rotation.y += 0.03;
     renderer.render( scene, camera );
}

Мой желаемый результат такой, каким я мог бы поворачиватьсясиний на самой крайней левой оси Y.

1 Ответ

0 голосов
/ 16 апреля 2019

Кажется, вы смешиваете устаревший метод Object3D.translate() с BufferGeometry.translate(). Если вы переводите геометрию вместо трехмерного объекта, можно изменить точку поворота, как и ожидалось. Я надеюсь, что обновленная кодовая ручка покажет ожидаемый визуальный результат:

https://codepen.io/anon/pen/BEJpLg

...