Как добавить каркасы к экземплярам мешей в Three.js

Я реализую собственную сцену городского пейзажа в Three.js. Мне нужно отрендерить много одинаковых геометрических фигур, и для увеличения скорости я реализовал InstanceMesh.

Для обычных сеток я использовал этот код, чтобы добавить каркасы ко всем сеткам:

// material is created elsewhere
var geo = new THREE.CylinderGeometry(1, 1, item.height, 16, 16);
var mesh = new THREE.Mesh(geo, this.createMaterial(object.material));
scene.add( mesh );
// creating wireframes    
var edgegeo = new THREE.EdgesGeometry( geo ); 
var wire = new THREE.LineSegments( edgegeo, this.createMaterial("wire") );
scene.add( wire ); 

Это тоже, похоже, сработало:

mesh.add(wire) 

К сожалению, это не работает для экземпляров мешей, поскольку, похоже, не существует экземплярной версии LineSegments? Как мне подойти к этой проблеме?

Любая помощь приветствуется. Спасибо.


person garma    schedule 26.04.2020    source источник


Ответы (1)


Чтобы добиться того же, что и EdgesGeometry, вам придется вручную создать линейные сегменты (экземпляры) и выровнять их с прямоугольниками. Вам нужно будет выровнять по 12 строк в каждом блоке.

Итак, если у вас есть 10 блоки, которые все находятся под одним и тем же InstancedMesh, тогда у вас будет второй InstancedMesh, содержащий все строки, и вам понадобятся 10 * 12 или 120 строк во втором InstancedMesh.

Выполняя итерацию по каждому блоку первого InstancedMesh, вы перебираете 12 строк второго InstancedMesh.

person trusktr    schedule 28.07.2020