我正在努力与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
但遗憾的是没有结果......
答案 0 :(得分:2)
我怀疑问题是你正在将camera.lookAt()放到“本地空间”中的位置。
尝试这样做:
var vector = new THREE.Vector3();
vector.setFromMatrixPosition( object.matrixWorld );
camera.lookAt( vector );