如何更新几何顶点位置Objloader



我使用objloader加载多个对象。我试图移动一个对象,需要有更新的顶点位置。在加载对象时,我将buffergeometry转换为geometry并运行一些函数。我检查了一些样本,都更新了buffergeometry的顶点。我是否需要将其转换回buffergeometry ?我需要有实时的位置,而移动计算一些其他函数,所以我不喜欢继续从缓冲区转换到几何,反之亦然。

下面是一段代码:

          var tool= new THREE.OBJLoader();
          tool.load( '../obj/tool.obj', function ( object ) {
          var material = new THREE.MeshLambertMaterial({color:0xA0A0A0});             
          object.traverse( function ( child ) {
          if ( child instanceof THREE.Mesh ) {
               child.material = material;
               Geometry = new THREE.Geometry().fromBufferGeometry(child.geometry);
              }
          console.log(Geometry.vertices[220]);
          Geometry.position.x += 0.01;
          Geometry.verticesNeedUpdate = true;
          console.log(Geometry.vertices[220]);

另外,我检查了最新版本的迁移文档并签出了

OBJLoader返回BufferGeometry。你可以这样更新顶点位置:

geometry.attributes.position.setX( index, x );
geometry.attributes.position.setXYZ( index, x, y, z ); // alternate
geometry.attributes.position.needsUpdate = true; // only required if geometry previously-rendered

研究http://threejs.org/docs/参考/核心/BufferAttribute


可以转换为Geometry。在您的情况下,在加载器回调中执行以下操作:

child.geometry = new THREE.Geometry().fromBufferGeometry( child.geometry );

然后使用以下模式更新顶点位置:

geometry.vertices[ 0 ].set( x, y, z );
geometry.verticesNeedUpdate = true;

只在几何体之前被渲染过的情况下设置needsUpdate标志。

three.js r.71

相关内容

  • 没有找到相关文章

最新更新