three.js 导入模型,解决渲染容器固定后模型会被拉伸的问题

 

init(){  // 这里只写出部分关键代码,具体的效果还需要自行参照官方文档实现
            // 创建场景对象
            scene = new THREE.Scene();
            camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
            camera.position.set(2, 1, 8);
            camera.lookAt(scene.position);

            // 容器
            var demobox = document.getElementById("demo")
            // 渲染
            renderer = new THREE.WebGLRenderer( { antialias: true } );
            renderer.setClearColor(0x0785FD)
            //设置canvas画布的大小为容器宽高
            renderer.setSize( demobox.clientWidth, demobox.clientHeight );  
}
animate(){
            requestAnimationFrame( this.animate );
            
            // 防止模型被拉伸变形
            const canvas = renderer.domElement;
            camera.aspect = canvas.clientWidth / canvas.clientHeight;
            camera.updateProjectionMatrix();
            
            renderer.render(scene, camera); // 渲染场景中的模型
        },

拓展:

new THREE.PerspectiveCamera 构造函数用来创建透视投影相机,该构造函数总共有四个参数,分别是fov,aspect,near,far 。fov表示摄像机视锥体垂直视野角度,最小值为0,最大值为180,默认值为50,实际项目中一般都定义45,因为45最接近人正常睁眼角度;aspect表示摄像机视锥体长宽比,默认长宽比为1,即表示看到的是正方形,实际项目中使用的是屏幕的宽高比;near表示摄像机视锥体近端面,这个值默认为0.1,实际项目中都会设置为1;far表示摄像机视锥体远端面,默认为2000,这个值可以是无限的,说的简单点就是我们视觉所能看到的最远距离。

除了上述四个基本属性之外,透视投影相机六个属性,分别是:filmGauge,filmOffset,focus,isPerspectiveCamera,view,zoom。这几个参数在实际应用中很少用到,基本都保持默认值。如果想了解各属性的意义及完成的功能可以通过官方文档去了解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值