我正在与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(scene,camera);
一切都显示出来了,我可以使用导入的相机看到我的模型,但是我的相机没有看到场景,也没有像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
但不幸的是没有结果。
我怀疑问题在于您正在将camera.lookAt()移到“本地空间”中的某个位置。
尝试这样做:
var vector = new THREE.Vector3();
vector.setFromMatrixPosition( object.matrixWorld );
camera.lookAt( vector );
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句