Los documentos oficiales tienen un buen ejemplo de cómo agregar un archivo .obj a una escena.
const loader = new OBJLoader(); // load a resource loader.load( // resource URL 'models/monster.obj', // called when resource is loaded function ( object ) { scene.add( object ); }, // called when loading is in progresses function ( xhr ) { console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' ); }, // called when loading has errors function ( error ) { console.log( 'An error happened' ); } ); Sin embargo, no estoy seguro de cómo haría ahora para manipular el objeto cargado. La URL se usa para cargar el objeto y luego el objeto cargado se pasa como argumento a la función de carga, es decir, la primera función sin nombre se pasa a loader.load . Sin embargo, ¿cuál sería la 'mejor' forma de retener una referencia a ese objeto?
Esto es bastante simple. Simplemente cree una referencia antes de llamar a la función de carga.
const loader = new OBJLoader(); //Add a reference before loading model var object; //This is the same code, just without spaces/comments loader.load('models/monster.obj', function ( object ) { scene.add( object ); }, function ( xhr ) { console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' ); }, function ( error ) { console.log( 'An error happened' ); }); //After loading, you can now manipulate the model object.rotation.set(x, y, z); object.position.set(x, y, z);La única forma en que puedo manejar no parece muy buena, pero funciona.
Simplemente podría vincularlo a la ventana o documento actual:
function ( object ) { scene.add( object ); window.obj = object; // binding it to the window }Pero esto me parece un poco extraño, ya que lo vincularía al espacio global. ¿Qué pasa si quisiera mantener el alcance más contenido, por ejemplo?