如何更新 Geometry 顶点位置 Objloader
How to update the Geometry vertex position 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
returnsBufferGeometry
。您可以像这样更新顶点位置:
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
我正在使用 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
returnsBufferGeometry
。您可以像这样更新顶点位置:
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