• threejs 动态调整相机位置,使相机正好能看到对象


    在这里插入图片描述

    核心代码

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    C++:模板(函数模板、类模板)
    Vue中过滤器用法详解
    tensorflow简单的Demo
    Tensorflow的GPU分配方法
    微信小程序 block 标签
    企业电脑监控软件
    计算机毕设(附源码)JAVA-SSM基于协同过滤算法的甜品推荐系统
    PHP生成word文档的简单实现
    I3C协议通讯详解
    mac上使用svn
  • 原文地址:https://blog.csdn.net/u010568976/article/details/126098443