如何更新几何顶点位置Objloader(How to update the Geometry ver

2019-10-24 15:06发布

我使用objloader加载多个对象。 我想移动的对象之一,需要有更新的顶点位置。 而加载的对象我转换buffergeometry以几何形状和运行某些功能。 我查了一些样本全部更新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]);

此外,我检查了最新版本的迁移文件,并检查了他们。

Answer 1:

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/#Reference/Core/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



文章来源: How to update the Geometry vertex position Objloader