我当前正在使用three.js几何类创建一个形状,然后对该形状执行多个CSG操作。从而不断重绘形状。

执行多个csg操作的过程很慢,因为我正在使用光线投射来获得单击时的形状,并执行选定形状和预定义形状(任何形状或几何形状)的CSG。

所以我的问题是:

  • 是否可以使用缓冲区几何来加快我的CSG,但是那是否有任何库可以对THREE.BufferGeometry实例执行CSG操作?
  • 有没有一种方法可以通过使用任何其他方法来加快过程?

  • 这是我的代码流:
    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();
     }
    

    我正在使用this库进行CSG操作,并且总体流程类似于three.js示例中的this example

    最佳答案

    我没有用于性能比较的元素,但是您可以在Wilt的ThreeCSG ThreeCSG develop的development分支中找到一个buffergeometry库。

    它支持buffergeometry(来自示例):

    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一起使用

    09-20 13:39