来自Collada的Three.js,Imported Camera无法查看对象场景

时间:2014-07-26 19:02:46

标签: javascript three.js collada

我正在努力与Three.js一起了解Collada Animation的锻炼方式! 我在3Dsmax中获得了一个带有移动摄像头的动画,然后我将场景导出到了Collada。

loader.load( ColladaName, function ( collada ) {

    model = collada.scene;
    model.updateMatrix();
    animations = collada.animations;
    kfAnimationsLength = animations.length;
    model.scale.x = model.scale.y = model.scale.z = 0.001; // 1/8 scale, modeled in cm
    document.getElementById('preload').style.opacity = '0';

    callback()

} );

我从collada中捕获了相机对象:

 model.traverse(function(child) {

    if (child instanceof THREE.PerspectiveCamera) {

        camera = child;
        camera.near = 1;
        camera.fov = 30;
        camera.castShadow = true;
    }

    if (child instanceof THREE.SpotLight) {

        child.castShadow = true;

        child.shadowBias = 0.02;

        child.shadowCameraNear = 1;
        child.shadowCameraFov = 60;
        child.intensity = 1.2;

        child.shadowMapWidth = 1024; // default is 1024
        child.shadowMapHeight = 1024; // default is 1024
        child.shadowDarkness = 0.06; // default is 512

    }

});

 camera.aspect = window.innerWidth / window.innerHeight;

 camera.updateProjectionMatrix();

然后我在我的场景中渲染它:    camera.lookAt(scene.position)    renderer.render(场景,相机);

一切都出现了,我可以看到我的模型,用我的进口相机,但是我的相机看不到场景并且不像我的3Dsm放大那样重现x旋转,并缩小! 如果我记录相机位置,它总是显示:0,0,0。更好的是,如果我记录了model.children [0]位置,它对应于导入collada的透视摄像头,它总是显示0,0,0

我做错了什么?

编辑1:

我尝试使用collada中的导入相机设置相机矩阵:

camera.matrixNeedsUpdate = true;
model.children[0].matrixNeedsUpdate = true;
model.children[0].lookAt(model.position)

camera.matrix.elements = model.children[0].matrix.elements

但遗憾的是没有结果......

1 个答案:

答案 0 :(得分:2)

我怀疑问题是你正在将camera.lookAt()放到“本地空间”中的位置。

尝试这样做:

var vector = new THREE.Vector3();
vector.setFromMatrixPosition( object.matrixWorld );

camera.lookAt( vector );