three.js 控制相机居中,全屏渲染模型

  // 控制相机居中,全屏渲染模型
        function centerScale(camera, group) {
            // 包围盒计算模型对象的大小和位置
            var box3 = new THREE.Box3();
            box3.expandByObject(group); // 计算模型包围盒
            var size = new THREE.Vector3();
            box3.getSize(size); // 计算包围盒尺寸
            var center = new THREE.Vector3();
            box3.getCenter(center); // 计算一个层级模型对应包围盒的几何体中心坐标


            // 计算包围盒的最大边长
            function maxSize(vec3) {
                var max;
                if (vec3.x > vec3.y) {
                    max = vec3.x
                } else {
                    max = vec3.y
                }
                if (max > vec3.z) { } else {
                    max = vec3.z
                }
                return max;
            }

            var max = maxSize(size); //包围盒长宽高中最大的一个值,用来表征模型的尺寸
            // 1.相机位于模型包围盒之外  算法:模型世界坐标三个分量分别+1.5倍max       
            camera.position.copy(center.clone().addScalar(max * 1.5));
            // 2. 居中渲染:设置相机目标观察点,指向包围盒几何中心
            camera.lookAt(center);
            // 3.全屏渲染:渲染范围和模型尺寸相近 模型尺寸用长宽高其中最大值表征
            s = max / 2; //如果全屏渲染s是max 2倍左右
            camera.left = -s * k;
            camera.right = s * k;
            camera.top = s;
            camera.bottom = -s;
            camera.near = max * 0.1; //最好和相机位置或者说包围盒关联,别设置0.1 1之类看似小的值
            camera.far = max * 4; //根据相机位置和包围大小设置,把包围盒包含进去即可,宁可把偏大,不可偏小
            camera.updateProjectionMatrix(); //渲染范围改变,注意更新投影矩阵

            var controls = new THREE.OrbitControls(camera, renderer.domElement);
            // 如果使用了相机控件,与上面lookAt代码冲突,注意设置.target属性
            controls.target.copy(center);
            controls.update(); //update()函数内会执行camera.lookAt(controls.target) 
        }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

china-yun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值