CSG-операции над буферной геометрией

В настоящее время я использую класс геометрии three.js для создания фигуры, а затем выполняю несколько операций CSG для этой фигуры. Таким образом непрерывно перерисовывается форма.

Этот процесс выполнения нескольких операций csg является медленным, так как я использую приведение лучей, чтобы получить форму при нажатии и выполнить CSG для выбранной формы и предварительно определенной формы (любой формы или геометрии).

Итак, мои вопросы:

  • Будет ли использование буфера геометрии ускорить мою CSG, но, тем не менее, есть ли библиотека для выполнения операций CSG на THREE.BufferGeometry случаи?

  • Есть ли способ, которым я могу ускорить процесс, используя любые другие методы?

Это мой поток кода:

var objects = [];

init();
render();

function init(){
 //scene and camera setup ... etc
   var sphere =  new THREE.SphereGeometry(200, 32, 32);
   objects.push(sphere);
 // raycasting config
 // bind mouse click and move event
 }
  function onMouseDown() {

   var intersects = raycaster.intersectObjects(objects);
   .....
   // get intersected shape ..
   // perfrom csg with predifend shape .
   // Also contains steps to convert 
      geometry to *CSG libaray geometry* 
      and back to Three.js geometry)..
   // replace the shape with existing
   .....
    render();
 }

Я использую эту библиотеку для операций CSG, и общий поток аналогичен этому примеру в примерах three.js.

2 ответа

Решение

У меня нет элемента для сравнения производительности, но вы можете найти библиотеку буферной геометрии в ветви разработки ThreeCSG ThreeCSG, разработанной из Wilt

Поддерживается буферная геометрия (из примеров):

var nonIndexedBoxMesh = new THREE.Mesh( nonIndexedBufferGeometry, material );
var bsp1 = new ThreeBSP( nonIndexedBoxMesh );
var indexedBoxMesh = new THREE.Mesh( indexedBufferGeometry, material );
var bsp2 = new ThreeBSP( indexedBoxMesh );
var geometry = bsp1.subtract( bsp2 ).toBufferGeometry();
var mesh = new THREE.Mesh( geometry, material );

Работает с r75

Для улучшения производительности CSG я настоятельно рекомендую взглянуть на этот репозиторий OctreeCSG!Он использует новый метод, известный как Octree-Embedded BSP , для увеличения производительности почти в 1000 раз (подробности здесь )!

Я не думаю, используете ли вы стандартныйGeometryилиBufferGeometryбудет иметь большое значение (если таковое имеется). Основным катализатором производительности является базовый алгоритм CSG.

Другие вопросы по тегам