首页 文章

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

提问于
浏览
1

我正在与Three.js斗争,以了解Collada动画如何锻炼!我在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(scene,camera);

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

我究竟做错了什么 ?

EDIT 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 回答

  • 2

    我怀疑问题是你正在做一个camera.lookAt()到一个位于“本地空间”的位置 .

    试着这样做:

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

相关问题