ThreeJs加载的顶点比obj文件中的顶点多

时间:2018-02-23 13:31:42

标签: javascript three.js

我有这段代码:

function render_obj(objPath){
  var loader = new THREE.OBJLoader();
  loader.load(
    objPath,
    function ( object ) {
      child = object.children[0];
      var geometry = new THREE.Geometry().fromBufferGeometry( child.geometry );      
      var material = new THREE.MeshBasicMaterial({wireframe: true});
      model = new THREE.Mesh(geometry, material);
      scene.add(model);
    },
    function ( xhr ) {
      console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
    },
    function ( error ) {
      console.log( 'An error happened' );
    }
  );
};

现在man.obj有214个顶点和332个面。当我通过这样做检查面部时:model.geometry.faces.length我得到332这是正确的。 当我model.geometry.vertices.length时,我得到996,我应该得到214 ......

为什么?

1 个答案:

答案 0 :(得分:1)

您正在使用的装载程序正在创建一个名为“三角汤”的东西。这意味着您的N个三角形实际上由N * 3个顶点定义。三角形本身并不存在,它只是从顶点解释而来。前三个是三角形,接下来是三个,依此类推。如果你有一个连续的平滑网格,那么很多顶点都会重复。

您可能感兴趣的是“索引”几何。在这种类型的几何体中,您有一个实际的三角形缓冲区,其中包含顶点的索引。在连续平滑网格中,许多三角形可以共享一个顶点。