当前位置:网站首页>threejs 动态调整相机位置,使相机正好能看到对象
threejs 动态调整相机位置,使相机正好能看到对象
2022-08-02 22:01:00 【K歌、之王】
核心代码
obj为目标对象\ controls 为OrbitControls
let box3 = new THREE.Box3()
box3.expandByObject(obj) // 计算模型包围盒
let size = new THREE.Vector3()
box3.getSize(size) // 计算包围盒尺寸
let center = new THREE.Vector3()
box3.getCenter(center) // 计算一个层级模型对应包围盒的几何体中心坐标
function maxSize(vec3) {
let max
if (vec3.x > vec3.y) {
max = vec3.x
} else {
max = vec3.y
}
if (max > vec3.z) {
} else {
max = vec3.z
}
return max
}
let max = maxSize(size) //包围盒长宽高中最大的一个值,用来表征模型的尺寸
// 1.控制渲染范围,但是不要忘记相机位于模型包围盒之外
this.camera.position.copy(center.clone().addScalar(max))
// 2. 居中渲染:设置相机目标观察点,指向包围盒几何中心
this.camera.lookAt(center)
// 3.注意near和far尺寸控制
this.camera.near = max * 0.1//最好和相机位置或者说包围盒关联,别设置0.1 1之类看似小的值
this.camera.far = max * 300//根据相机位置和包围大小设置,把包围盒包含进去即可,宁可把偏大,不可偏小
this.camera.updateProjectionMatrix()//渲染范围改变,注意更新投影矩阵
this.controls.target.copy(center)
this.controls.update()
边栏推荐
猜你喜欢
随机推荐
Unity WallFxPack使用
成功解决TypeError: can‘t multiply sequence by non-int of type ‘float‘
win10桌面图标全部变成白色的怎么办
圆锥折射作为偏振计量工具的模拟
多租户的多种实现方案
Task 4 Machine Learning Library Scikit-learn
The only way to go from a monthly salary of 10k to 30k: automated testing
典型相关分析CCA计算过程
Auto.js脚本程序打包
浅读一下dotenv的主干逻辑的源码
学习基因富集工具DAVID(2)
mysql查询表中重复记录
宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码
CS5213 chip | HDMI to VGA converter chip data sharing
2022-08-02 第六小组 瞒春 学习笔记
IDO代币预售合约系统开发技术详细
不堪哥哥殴打谩骂,妹妹申请人身安全保护令获支持
谷粒商城-day13-es和商品上架
雷克萨斯lm的安全性如何?
In-depth study TypeScript TypeScript 】 【 class (under)