ColladaLoader无法加载两个不同的模型

时间:2015-11-09 07:51:52

标签: javascript three.js collada

如果我运行下面的示例,它会给我这个错误:

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

1 个答案:

答案 0 :(得分:1)

你正在践踏model变量。您提供的回调在模型加载之前不会运行,但它已经开始加载另一个回调。

model = colladaModel.scene;

您没有声明变量model,这使得它成为一个全局变量,因此在浏览器范围内共享这两个回调之间的变量。实际上你正在那里使用window.model

将它们更改为:

var model = colladaModel.scene;