three.js - texture - Cómo actualizar la posición del vértice Geometry Objloader
three js rotation (1)
OBJLoader
devuelve BufferGeometry
. Puede actualizar una posición de vértice como esta:
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
Estudie http://threejs.org/docs/#Reference/Core/BufferAttribute
En cambio, puede convertir a Geometry
. En su caso, haga lo siguiente en la devolución de llamada del cargador:
child.geometry = new THREE.Geometry().fromBufferGeometry( child.geometry );
Luego actualiza una posición de vértice usando este patrón:
geometry.vertices[ 0 ].set( x, y, z );
geometry.verticesNeedUpdate = true;
Solo configure el indicador needsUpdate
si la geometría se ha renderizado previamente.
three.js r.71
Estoy usando objloader para cargar múltiples objetos. Intento mover uno de los objetos y necesito tener las posiciones de vértices actualizadas. al cargar los objetos, convertí la geometría del buffer en geometría y ejecuté algunas funciones. Comprobé algunas muestras, todas actualizando los vértices de la geometría del buffer. ¿Debo volver a convertirlo en buffergeometry o no? Necesito tener las posiciones de tiempo real mientras me muevo para calcular algunas otras funciones, así que prefiero no seguir convirtiendo de buffer a geometría y viceversa.
Aquí hay un fragmento de código:
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]);
Además, revisé el documento de migración de las últimas versiones y las revisé.