Unity --- quaternion(四元数)类API

这篇具有很好参考价值的文章主要介绍了Unity --- quaternion(四元数)类API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity --- quaternion(四元数)类API

1.欧拉角转四元数 --- 调用方法 ; 四元数转欧拉角 --- 调用属性 Unity --- quaternion(四元数)类API

2.上面这个方法是绕给定轴/角进行旋转Unity --- quaternion(四元数)类API 1.第三个方法 --- LookRotation() --- 该方法需要一个Vector3类对象(以向量的形式)作为参数 --- 该方法会返回一个四元数 ,返回的这个新的四元数能够使物体自身坐标系的Z轴向量会旋转到与方法给定的向量的方向一致。Unity --- quaternion(四元数)类API

 2.但是这个方法有一个缺点,就是如果我们直接将得到的四元数赋值给this.transform.rotation的话,确实能够实现注视转向的效果,但是这种直接改变游戏物体的旋转四元数的方式呈现出的效果就是上一帧旋转到这,下一帧就旋转到另一个地方的跳跃式旋转(类似于this,transform.LookAt()方法) --- 这种方式不够自然,不符合人类逐渐运动的直觉,因此为了实现逐渐运动(旋转)过去的效果,我们需要引入另一个方法 --- Lerp方法!

3.再次强调Lerp方法需要三个参数,数值起点,数值终点以及比例参数

其能实现的效果是:每调用一次该方法就会返回一个数值,且数值不会小于起点大于终点

具体的数值选取步骤如下:

a.确定当前起点k,确定起点k到终点m的长度x = m - k,确定比例参数z

b.返回数值p --- p = k + x*z 

c.更改起点值 k = p

上面就是调用一次lerp方法后会执行的步骤,多次调用就是上面步骤的不断重复

(PS:Vector3中的Lerp方法的数值起点,数值终点的参数类型是Vector3,同时方法的返回类型也是Vector3,而Quaternion中的数值类型则是Quaternion,方法的返回类型则是Quaternion)

4.综上,如果想实现逐步转过去的话基本逻辑就是:

a.通过LookRotation方法计算出旋转终点四元数(物体当前四元数即为起点),同时确定好调用方法的时间间隔

b.将确定好的起点终点,以及比例作为参数传给Lerp方法

c.按照预先设计好的时间间隔不断调用Lerp方法,同时在获得方法返回值后,将返回值赋值给 this.transform.rotation --- 以此实现数值的逐渐变化,在视觉上呈现出逐步旋转的效果Unity --- quaternion(四元数)类API

1.用Lerp进行旋转的效果是 :先快后慢的向目标旋转,如果想实现匀速的向目标旋转的话有两种方式:a.使用动画曲线,将曲线设为匀速变化的形态 --- 具体形态就是45°斜直线

b.第二种就是换一个方法 --- 将RotateToward()方法即可 --- 换了方法后参数不用变Unity --- quaternion(四元数)类API 

1.将差值改为插值!

2.需要注意的是 --- 所有的插值方法Lerp除非比例参数为1,不然最终都只能无限靠近终点而无法到达终点Unity --- quaternion(四元数)类API

1.如何判断两个四元数对应的旋转角度之间差多少度?

答:Quaternion提供了一个方法 --- Angle() --- 该方法需要我们提供两个四元数作为参数 --- 调用方法后会返回一个浮点数float,该浮点数的大小就是两个四元数对应的旋转角度之间的差值Unity --- quaternion(四元数)类API 1.如何使得一个游戏物体的自身坐标系的x轴转向指定目标呢?

上面是一种方法 --- 首先this.tranform.right获得的属性right是可读可写的属性

a.如果在没有修改的情况下读的话,默认返回一个Vector3向量对象,该向量的方向是当前物体自身坐标系的x轴方向,大小为1(向量是在世界坐标系中表达的)

 b.如果进行写操作的话,比如我们传入一个新的向量,那么此时当前物体自身坐标系的x轴方向会和新的向量的方向一致,大小仍为1(PS:当前物体的整个自身坐标系都会随着x轴的变化而跟着变化 --- 因为x,y,z轴相互垂直,一个轴方向变了其它轴的方向也要跟着一起变)

this.tranform.up,  this.tranform.forward....等等属性都是同理的

2.用上面这种方式确实能够实现物体的x轴的转向指定的位置(通过改变向量),但是呈现出的效果是跳跃式转向,如果我们想实现渐近式转向该怎么做呢?

答案就是:使用插值方法来进行转向

a.首先我们需要获得当前物体旋转到目标位置后的四元数是多少

Unity --- quaternion(四元数)类API

获取方式是通过调用Quaternion中的静态方法 --- FromToRotation来实现 --- 该方法需要两个参数 --- 向量a,向量b --- 调用该方法后可以获得一个四元数对应的旋转角度 = 从向量a转向向量b所需的角度

b.调用Lerp方法,给定起点 --- 物体当前的旋转四元数,给定终点 --- a步骤求得的最终四元数,以及比例参数(不要忘了动画曲线)文章来源地址https://www.toymoban.com/news/detail-406152.html

到了这里,关于Unity --- quaternion(四元数)类API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学概率 | 旋转矩阵、欧拉角、四元数

    目录 一,旋转矩阵 二维旋转矩阵 三维旋转矩阵 二,欧拉角 三,四元数 四,矩阵、欧拉角、四元数相互转换 四元数转矩阵 矩阵转四元数 欧拉角转矩阵 矩阵转欧拉角 欧拉角转四元数 四元数转欧拉角 二维旋转矩阵 R() =  推导,以二维平面为例旋转:  = cos( + ) = coscos - si

    2024年02月06日
    浏览(49)
  • 四元数傅里叶变换(Quaternion Fourier Transforms) 在信号和图像处理中的应用

    引言: 信号和图像处理是现代科学和工程领域中非常重要的一个方向,它涉及到对信号和图像进行分析、压缩、增强和恢复等操作。传统的信号和图像处理方法主要依赖于傅里叶变换和滤波器等工具,但这些方法在处理复杂系统时存在一定的局限性。近年来,四元数傅里叶变

    2024年02月02日
    浏览(48)
  • 四元数,欧拉角和旋转矩阵相互转换

    打印输出: 在线转换网站:1、三维在线旋转变换网站 https://www.andre-gaschler.com/rotationconverter/ 2、 Rotation Conversion Tool https://danceswithcode.net/engineeringnotes/quaternions/conversion_tool.html 3、角度、弧度在线转换工具 https://www.osgeo.cn/app/sc210 参考链接:https://www.jianshu.com/p/4fda4c34b829 https://

    2024年02月14日
    浏览(43)
  • 欧拉角,轴角,四元数与旋转矩阵详解

    入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、欧拉角 1、静态定义 2、欧拉角的表示  3、欧拉角表示的优缺点  4、欧拉角的万向节死锁(静态不存在万向锁的问题) 二、四元数 1、提出意义和定

    2024年01月17日
    浏览(47)
  • 四元数,旋转矩阵,欧拉角互转(python)

    运行代码之前需要安装pyquaternion和scipy。 pip install pyquaternion pip install scipy 代码之前放下面,main函数有使用的方式

    2024年02月12日
    浏览(46)
  • 【Eigen库使用】角轴、旋转矩阵、欧拉角、四元数转换

    在slam中经常用到的四种描述机器人orientation的变量,他们之间可以相互转化,使用Eigen库可以很容易的做到这一点, 需要特别关注的是:欧拉角与其余量之间的转换关系 : 1)首先要明确的是, 必须要明确欧拉角的旋转次序 ,你可以选择RPY、YPR等方式,在相同的orientation下,

    2024年01月18日
    浏览(51)
  • 坐标系变换推导(欧拉角、方向余弦矩阵、四元数)+代码解析

    描述两个坐标系之间的变换关系主要有几个方法 1、欧拉角法(存在奇异性和万向锁而且三个轴旋转的顺序不好定) 2、方向余弦矩阵法(翻译为Directional cosine matrix,简称DCM,也称为旋转矩阵,看了很多博客写的是C11-C33的那个矩阵,没明白为什么也称之为一个方法,有知道的指导

    2024年02月08日
    浏览(95)
  • 欧拉角,四元数和旋转矩阵互转代码【python版】

    欧拉角以 Roll、Pitch、Yaw 的顺序表示 四元数以[ q w q_w q w ​ , q x q_x q x ​ , q y q_y q y ​ , q z q_z q z ​ ]的顺序表示 代码包括了 欧拉角与四元数互转 , 旋转矩阵与四元数互转 , 欧拉角与旋转矩阵互转 ,输入参数均为 np.array 形式 代码内置了角度制和弧度制😃😃 当时因为这块

    2023年04月22日
    浏览(54)
  • pytorch3d旋转矩阵转四元数transforms.matrix_to_quaternion函数隐藏的大坑及其解决方法

      在pytorch旋转矩阵转四元数及各种旋转表示方式之间的转换实现代码这篇博客里,我提到可以使用pytorch3d实现批量旋转表示方法之间的转换。但是最近在使用它的matrix_to_quaternion函数的时候,发现了一个隐藏的巨大bug:它不会确保输出的四元数中的那个实数w恒为正。这样就

    2024年02月13日
    浏览(51)
  • 转换矩阵、平移矩阵、旋转矩阵关系以及python实现旋转矩阵、四元数、欧拉角之间转换

    由于在平时总是或多或少的遇到平移旋转的问题,每次都是现查资料,然后查了忘,忘了继续查,这次弄明白之后干脆写一篇文章,给人方便同时于己方便,后续如有扩充或变动也方便添加。 假设有两个向量 a 1 = ( x 1 , y 1 , z 1 ) a_1 = (x_1, y_1, z_1) a 1 ​ = ( x 1 ​ , y 1 ​ , z 1 ​

    2024年02月03日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包