前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这是Creator 3D?相机都拍不出这么精细!大神分享

这是Creator 3D?相机都拍不出这么精细!大神分享

作者头像
张晓衡
发布2021-02-23 15:17:55
7400
发布2021-02-23 15:17:55
举报

前言

在3d游戏中经常会用到镜头跟随效果,这次我们就来实现它!

阅读本文需要一些的基本知识:

  • 向量基本运算(加法/减法/乘积)
  • 会调用四元数API接口
  • 运动学(速度/加速度/位移)

效果预览如下(可调远近上下/弹性跟随):

实现

相机跟随的原理就像是,你暗中跟随观察(尾随)你心仪的对象(Object)。

既然是观察,就要与对象保持一定的距离

为了不被对象发现,我们观察的位置和对象的朝向有关。

当然,你要看到对象,你的眼睛方向一定得看着对象吧,这就是视口方向

原理图

针对我们要达到的效果,需要定义好以下几个变量。

  • 观察对象的朝向(上方向,前方向)
  • 摄像机与对象的距离(水平距离,垂直距离)

最终我们需要算出以下几个玩意儿:

  • 相机位置
  • 相机旋转角度

位置

求相机的位置分两步:

  1. 根据对象的前方向和相机的水平距离,求出中间点坐标
  2. 根据对象的上方向和相机的垂直距离,求出相机的位置

计算位置

中文式伪代码如下:

代码语言:javascript
复制
对象到中间点的向量 = -1 * 对象前方向 * 相机的水平距离
中间的坐标 = 对象到中间点的向量 + 对象点坐标
中间点到相机的向量 = 对象上方向 * 相机的垂直距离
相机坐标 = 中间点坐标 + 中间点到相机的向量

角度

旋转角度可以通过视口朝向和上方向得出。

旋转角度的求法

伪代码如下:

代码语言:javascript
复制
前向向量 = 对象坐标 - 相机坐标
旋转角度 = 旋转API(前向向量的归一化, 对象上向量)

需要注意的是,在 Cocos Creator 中相机朝向和节点旋转的角度是相反的,所以前向量的方向要取反向。

摄像机节点

弹簧

我们还可以给相机添加一个弹性跟随的效果。

计算过程如下:

  • 先根据上面的方法计算出相机的理想位置。
  • 然后假设现在相机所在的位置和理想的位置中有个弹簧。
  • 再根据弹簧模型求出合力(加速度)
  • 最后模拟运动算出时间点位置(位置+速度)

弹簧模型

弹簧简易模型受两个因素影响:

  • 弹簧长度(即相对位置)--拉力
  • 当前速度 --阻力

为此我们可以定义想要的弹力系数阻力系数

结合起来的计算位置的伪代码如下:

代码语言:javascript
复制
理想位置 = 计算理想位置()
相对距离的向量 = 理想位置 - 当前位置
加速度 = - 相对距离*弹力系数 - 当前速度*阻力系数
当前速度 = 当前速度 + 加速度*间隔时间
当前位置 = 当前位置 + 当前速度

扩展

还可以用其他的方法去更新位置:

积分法

关于弹簧系数的关系参考:

弹簧模型系数

小结

位置!距离!旋转!弹簧!

以上为白玉无冰使用 Cocos Creator 3.0 preview-1 实现 "弹性跟随相机!" 的技术分享。欢迎三连(点赞/在看/留言/分享)支持!

FFF = 专注(focus)、反馈(feedback)以及纠正(fix it)!

参考资料

《游戏编程算法与技巧》

《大学物理(核心知识)》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Creator星球游戏开发社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实现
    • 位置
      • 角度
        • 弹簧
          • 扩展
          • 小结
            • 参考资料
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档