Оберните сетку threejs на другую сетку

Я новичок в three.js, и у меня есть требование, чтобы в сетке нужно было обернуть другую сетку, имеющую кривую. В моей сцене у меня есть три сетки - plane1, plane2 и базовая сетка (эллипсоид) соответственно. См. ниже.

(b)

(а)

Я хочу иметь возможность каким-то образом проецировать сетку plane1 и plane2 на базовую сетку, чтобы она оборачивалась на поверхность базовой сетки. См. ниже. Если база была для, например. кубоид, тогда я бы просто поместил plane1 и plane2 на его плоскую поверхность, но поскольку моя базовая сетка изогнута, у меня возникла эта проблема. Возможно ли этого достичь в threejs, где вы можете проецировать сетки на другую сетку?

(c)  (d)


person Aniket Betkikar    schedule 02.02.2019    source источник


Ответы (1)


Что ж, чтобы "спроецировать" сетку на поверхность другой сетки, вам нужно сделать несколько лучей извне к центру эллипсоида. Raycaster может дать вам положение пересечения. Предполагая, что у вас есть эллипсоид, расположенный в (0, 0, 0), вы можете сделать что-то вроде этого:

https://threejs.org/docs/#api/en/core/Raycaster.set

// Vector with desired outer position
var startPoint = new Vector3(10, 5, 0);

// Normalized vector pointing toward center of ellipsoid 
// (basically in the opposite direction of startPoint)
var endDirection = new Vector3(-10, -5, 0).normalize();

raycaster.set(startPoint, endDirection);
var intersects = raycaster.intersectObjects( ellipsoid );
console.log(intersects);

Вы увидите, что переменная intersects будет иметь объект этого формата с полученной (x, y, z) точкой перехвата.

person Marquizzo    schedule 02.02.2019
comment
Спасибо за ответ. Я нашел скрипку, где это работает и использует преобразование лучей для определения положения. Я устал заменять геометрию прямоугольника на плоскую, и в результате получается плоская плоскость. Это потому, что я просто устанавливаю point.z после перекрестка? Вы можете проверить это здесь, fiddle. Нажмите q, чтобы выполнить перенос. - person Aniket Betkikar; 02.02.2019