当前位置:网站首页>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()
边栏推荐
猜你喜欢

同样月薪6K,为什么同事跳槽月薪翻倍,而你只涨了1000?

创建型模式 - 抽象工厂模式AbstractFactory

Flink优化及相关

centos7安装mysql8

GameStop NFT 市场分析

LeetCode 2360. 图中的最长环 基环树找环+时间戳

最近公共祖先(LCA)学习笔记 | P3379 【模板】最近公共祖先(LCA)题解

If the watermark according to how to realize the function

I interviewed a 985 graduate, and I will never forget the expression when answering the "performance tuning" question

【Unity】Unity开发进阶(六)UnityEvent使用与源码解析
随机推荐
Towards a General Purpose CNN for Long Range Dependencies in ND
了解 NFT 质押:Web3 中赚取被动收益的另一种方式
gdb调试简要总结
“百日行动”进行时:700余交通安全隐患被揪出
圆锥折射作为偏振计量工具的模拟
【STM32学习3】DMA基础操作
Auto.js脚本程序打包
CodeTON Round 2 A - D
典型相关分析CCA计算过程
go exec 包
谷粒商城-day13-es和商品上架
PHP实现登录失败三次需要输入验证码需求
Do you understand the factory pattern?
TCP三次握手与四次挥手
在迁移测试中,源表、中间表、目标表的迁移规则
一个很少见但很有用的SQL功能
Matplotlib drawing core principles explain (more detailed)
不堪哥哥殴打谩骂,妹妹申请人身安全保护令获支持
浅读一下dotenv的主干逻辑的源码
【TypeScript】深入学习TypeScript模块化