如何更新几何顶点位置Objloader

时间:2015-08-06 15:27:39

标签: three.js geometry updates vertices

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

这是一段代码:

          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]);

此外,我查看了最新版本的迁移文档并将其签出。

1 个答案:

答案 0 :(得分: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