ColladaLoader 无法加载两个不同的模型
ColladaLoader can't load two different models
如果我 运行 下面的例子会给我这个错误:
Uncaught TypeError: Cannot read property 'x' of undefinedt @ three.min.js:462renderBuffer @ three.min.js:549k @ three.min.js:450render @ three.min.js:561render @ loaderTest.html:46
这是调用 render() 的最后一行
如果我使用 loader.load(..) 加载两次相同的模型,错误不会发生,只有当我选择不同的模型时才会发生。
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
var light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
var loader = new THREE.ColladaLoader();
loader.options.convertUpAxis = true;
loader.load("models/model1.dae", function(colladaModel){
var model = colladaModel.scene;
model.position.set(0,0,0);
scene.add(model);
});
loader.load("models/model2.dae", function(colladaModel){
var model = colladaModel.scene;
model.position.set(20,0,0);
scene.add(model);
});
camera.position.z = 100;
var render = function () {
requestAnimationFrame( render );
renderer.render(scene, camera);
};
render();
您正在践踏 model
变量。您提供的回调在加载模型之前不会 运行,但它也已经开始加载另一个。
model = colladaModel.scene;
您没有声明您的变量 model
,这使它成为一个全局变量,因此在浏览器范围内以及在这两个回调之间共享)。你在那里使用的实际上是window.model
。
将它们更改为:
var model = colladaModel.scene;
如果我 运行 下面的例子会给我这个错误:
Uncaught TypeError: Cannot read property 'x' of undefinedt @ three.min.js:462renderBuffer @ three.min.js:549k @ three.min.js:450render @ three.min.js:561render @ loaderTest.html:46
这是调用 render() 的最后一行
如果我使用 loader.load(..) 加载两次相同的模型,错误不会发生,只有当我选择不同的模型时才会发生。
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
var light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
var loader = new THREE.ColladaLoader();
loader.options.convertUpAxis = true;
loader.load("models/model1.dae", function(colladaModel){
var model = colladaModel.scene;
model.position.set(0,0,0);
scene.add(model);
});
loader.load("models/model2.dae", function(colladaModel){
var model = colladaModel.scene;
model.position.set(20,0,0);
scene.add(model);
});
camera.position.z = 100;
var render = function () {
requestAnimationFrame( render );
renderer.render(scene, camera);
};
render();
您正在践踏 model
变量。您提供的回调在加载模型之前不会 运行,但它也已经开始加载另一个。
model = colladaModel.scene;
您没有声明您的变量 model
,这使它成为一个全局变量,因此在浏览器范围内以及在这两个回调之间共享)。你在那里使用的实际上是window.model
。
将它们更改为:
var model = colladaModel.scene;