首页 > 其他分享 >游戏开发之旅 3D数学学习 (1) 四元数的运用

游戏开发之旅 3D数学学习 (1) 四元数的运用

时间:2023-01-25 01:33:07浏览次数:47  
标签:FVector 欧拉角 之旅 旋转 四元 GetActorQuat forward 3D

为什么要用四元数?

首先,在一般的游戏引擎中,通常会以欧拉角作为物体旋转的参考或者操作物体旋转的手段。但是,众所周知,欧拉角虽然简单易懂,易于操作。但是,使用欧拉角进行游戏编写过程中,会遇到万向锁的情况,而四元数恰恰能帮我们解决这个问题。

  1. 无需担心万向锁问题
  2. 可以使用球面插值进行旋转
  3. 清晰简明的表达

如何理解四元数

我们都知道,如果你以前没有接触过四元数,那么初次使用会让你感觉到无从下手。
按笔者的理解,三维空间中的任何对象、参与者或向量都有一个方向,而四元数就是这样定义的。但与此同时,方向可以定义为从“零”方向到当前方向的旋转。它与向量相同,可以定义为空间中的某个位置或从“零”到该位置的位置增量或方向。

在UE4中,我们可以很轻松的获得某一个actor的四元数
FQuat currentQuat = GetOwner()->GetActorQuat();

同时我们也可以旋转一个X轴单位向量
FVector forward = GetOwner()->GetActorQuat() * FVector(1.0f, 0.0f, 0.0f);
image

效果如上图,方块上的箭头为方框的正方形,旁边的箭头为独立的箭头,使用下面的代码控制。
FQuat currot = GetActorQuat();
FVector forward = currot * FVector(1,0,0);
ArrowComponent->SetWorldRotation(UKismetMathLibrary::MakeRotFromX(forward.GetSafeNormal()));

标签:FVector,欧拉角,之旅,旋转,四元,GetActorQuat,forward,3D
From: https://www.cnblogs.com/AstroMoonStone/p/17066612.html

相关文章

  • 【题解】CF193D Two Segments
    题意给定一个\(1\simN\)的排列,在这个排列中选出两段互不重叠的区间,求使选出的元素排序后构成公差为1的等差数列的方案数。选出的两段区间中元素构成的集合相同时视为同一......
  • Three.js 进阶之旅:新春特典-Rabbit craft go
    声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。摘要兔年到了,祝大家身体健,康万事顺利。本文内......
  • Unity3D入门基础知识
    一、基础概念1、物体与空物体物体(GameObject),其实是一个节点或容器。一般所谓的“物体”,即有形状的东西,对应的Mesh,网格信息代表了物体(形状)。空物体(EmptyObject),即空对象......
  • 【优秀论文解读】BoW3D: Bag of Words for Real-time Loop Closing in 3D LiDAR SLAM
    论文简介本论文新颖性在于3D激光雷达中实时闭环且能够实时进行回环矫正词袋模型为BoW3D实时构建词袋效率高但是鲁棒性未知词袋存储word包含两种变量:Dim_value为描......
  • 【3D展会解决方案】广州华锐互动-海博会Web3D云展系统
    中国海洋经济博览会(简称“海博会”)属于国家六大部委之一国家自然资源部的项目,采取的是“线上+线下”结合的参展模式,其中线上云展厅系统由广州华锐互动制作,集技术交流、产......
  • Redis学习之旅(1)
    1、学习路线​从这章开始,我们开始系统的学习redis,说白了,就是希望花很少的时间掌握更丰富的知识和经验,解决更多的问题,这就要我们能够抓住主线,在自己的脑海中绘制一幅......
  • Redis学习之旅(1)
    1、学习路线从这章开始,我们开始系统的学习redis,说白了,就是希望花很少的时间掌握更丰富的知识和经验,解决更多的问题,这就要我们能够抓住主线,在自己的脑海中绘制一幅Redis全......
  • 确定空间中平面的方法以及3d相关高中基础知识
    不在一条直线上的三个点确定一个平面一条直线和直线外一点确定一个平面知道平面上一点以及平面的法向量就可以确定一个平面对于任意一个面的法向量,我们总可以选......
  • 用Three.js写h5小游戏-3d飞机大战
    用Three.js写h5小游戏-飞机大战​​博主的话​​​​运行图片​​​​目录路径!​​index.html​​博主的话Three.js是js的一个3D引擎,比较复杂。比如光是Three.js就附带了10......
  • 使用 SAP UI5 3D Viewer 控件显示 3D 模型效果试读版
    ​​使用SAPUI53DViewer控件显示3D模型效果试读版​​ 借助SAPUI5控件家族提供的3DViewer控件,我们可以直接在浏览器里实现一些基本的3D可视化功能。......