模型自身position属性 为(0,0,0),但并不在场景中心, 可能建模的原因,位置放到中心但设置了偏移(不一定)。

解决方法:

主要代码

let box = new THREE.Box3();
// target 是目标模型
box.setFromObject(target);
let center = new THREE.Vector3();
box.getCenter(center)
// 相机放到模型附近 模型中心位置向量加上 德尔塔向量
camera.position.copy(center).add(delta)

delta计算

let delta = new THREE.Vector3();
// 设置初始向量
delta.set(0, 0, 1);
// 应用四元数
delta.applyQuaternion(camera.quaternion);
// 德尔塔向量乘以一个标量
delta.multiplyScalar(distance * 4);

distance计算

let sphere = new THREE.Sphere();
// box.getBoundingSphere(target) 获取到包围这个box的球
let distance = box.getBoundingSphere(sphere).radius;

完整代码

let box = new THREE.Box3();
// target 是目标模型
box.setFromObject(target);
let center = new THREE.Vector3();
box.getCenter(center)
// 计算 distance
let sphere = new THREE.Sphere();
// box.getBoundingSphere(target) 获取到包围这个box的球
let distance = box.getBoundingSphere(sphere).radius;
// 计算 delta
let delta = new THREE.Vector3();
// 设置初始向量
delta.set(0, 0, 1);
// 应用四元数
delta.applyQuaternion(camera.quaternion);
// 德尔塔向量乘以一个标量
delta.multiplyScalar(distance * 4);
// 相机放到模型附近 模型中心位置向量加上 德尔塔向量
camera.position.copy(center).add(delta)

扩展

1.四元数
在three.js中使用四元数来表示旋转
const quaternion = new THREE.Quaternion()
quaternion.setFromAxisAngle(new THREE.Vector3(0,1,0), Math.PI/2)
const vector = new THREE.Vector3(1,0,0)
vector.applyQuaternion(quaternion)

three设置相机面向模型的更多相关文章

  1. osg设置相机参数,包括初始位置

    严重注意!!!以下设置必须在viewer.realize();之后,否则不起作用!!!! 设置相机的位置,可以通过CameraManipulator(一般是osgGA::TrackballManipu ...

  2. 在TVideoGrabber中如何在预览时设置相机属性

    在使用TVideoGrabber进行预览时,如何设置相机的属性呢?比如曝光.对比度.亮度等. 下面来看一下,如何通过编程来调整这些设置: ——通过指定VideoDevice属性(在VideoDevic ...

  3. 从零开始一起学习SLAM | 相机成像模型

    上一篇文章<从零开始一起学习SLAM | 为啥需要李群与李代数?>以小白和师兄的对话展开,受到了很多读者的好评.本文继续采用对话的方式来学习一下相机成像模型,这个是SLAM中极其重要的内容 ...

  4. [CSS属性设置,盒子模型,网页布局]

    [CSS属性设置,盒子模型,网页布局] CSS属性设置 1. 宽和高 width:属性可以为元素设置宽度. height:属性可以为元素设置高度. 块级标签的宽度不修改的情况下默认占浏览器的一整行,块 ...

  5. cocos设置 相机矩阵和投影矩阵 源码浅析

    在cocos中,最后设置视口大小,相机矩阵,裁剪矩阵是在setProjection方法中,源码如下: void Director::setProjection(Projection projectio ...

  6. OpenCV 3.1 Set Camera Resolution 设置相机的分辨率

    在OpenCV中,有强大的处理相机事件的api,但是貌似没有直接获取相机的最大分辨率的函数,通过属性CV_CAP_PROP_FRAME_HEIGHT和CV_CAP_PROP_FRAME_WIDTH直接 ...

  7. CSS中的间距设置与盒子模型

    CSS间距 内补白 外补白 盒子模型 CSS间距 很多时候我们为了美观,需要对内容进行留白设置,这时候就需要设置间距了. 内补白 设置元素的内间距 padding: 检索或设置对象四边的内部边距 pa ...

  8. Unity设置相机正交相机和透视相机的动态切换

    Camera.main.orthographic = true;    Camera.main.orthographicSize = 4;    Camera.main.orthographic = ...

  9. Simulink仿真入门到精通(十七) Simulink代码生成技术详解

    17.1 基于模型的设计 基于模型设计是一种流程,较之传统软件开发流程而言,使开发者能够更快捷.更高效地进行开发.适用范围包括汽车电子信号处理.控制系统.通信行业和半导体行业. V字模型开发流程整体描 ...

随机推荐

  1. 图解CPU缓存一致性问题

    产生背景 CPU的读取速度比内存的快,一个快一个慢,就会有矛盾,就会有人想要解决这个矛盾,所以就提出多级缓存来解决,如下图所示. L1级缓存:分为数据域和程序域. L2级缓存:二级缓存.  L3级缓存 ...

  2. GAN实战笔记——第六章渐进式增长生成对抗网络(PGGAN)

    渐进式增长生成对抗网络(PGGAN) 使用 TensorFlow和 TensorFlow Hub( TFHUB)构建渐进式增长生成对抗网络( Progressive GAN, PGGAN或 PROGA ...

  3. IDEA 连接MySQL并使用

    IDEA 连接MySQL方式 MySQL使用命令行的形式实在是有点难受,多行书写的时候要是写错了就比较难过了,因此还是需要一个图形化的操作界面.有很多可选择方式,由于之前就下载了IDEA,其中也继承了 ...

  4. Pycharm:使用Edit Custom VM Options导致Pycharm无法启动

    解决办法: Edit Custom VM Options用来扩大内存,但是内存设置不当可能会导致Pycharm无法启动 如果无法启动,可以在我的文档中的pycharm201X.X(日期不同名字也不同) ...

  5. 使用Dapper访问SQL Server数据库

    对应Demo程序名:DapperDemo 准备工作:为项目安装Dapper类库 方法一:项目中添加:项目名右键:Manage NuGet Packages:搜索Dappe:点击安装 方法二:在NuGe ...

  6. php 数组汇总

    PHP 5 Array 函数 函数 描述 array() 创建数组. array_change_key_case() 返回其键均为大写或小写的数组. array_chunk() 把一个数组分割为新的数 ...

  7. 《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)

    1.简介 上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享. 2.项目实战1 @DataProvider + ...

  8. 服务器安装centos8提示显示器不支持输出的分辨率

    今天机房老服务器安装CENTOS8时启到到引导界面,显示器就提输出分辩率为1920*1080 60MHZ ,这怎么能支持.本想装了显卡来装,拆机一看我去不支持. 后来在网上一查才知道有解决方案. 可以 ...

  9. Centos8 Yum 安装Nginx指定版本

    查看系统和EPEL的nginx版本   dnf info nginx 通过官方 yum 源安装nginx       vi /etc/yum.repos.d/nginx.repo 列出所有版本    ...

  10. 使用WebService的优点

    1.支持跨平台,跨语言,远程调用 WSDL:web service definition language 直译 webservice定义语言 对应一种类型的文件.wsdl2.定义了web servi ...