IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> UE4中三维几何总结——几何学基础 -> 正文阅读

[游戏开发]UE4中三维几何总结——几何学基础

UE4中三维几何学总结——几何学基础

1、简述

此文目的总结三维几何学基础,可以依此提纲做发散,不局限为UE4,任何三维领域系统均可以使用学习

2、三维坐标系统

  • 笛卡尔坐标系(直角坐标系)
  • 左/右手坐标系
  • 局部坐标系
  • 世界坐标系(3D世界的基础坐标系)
  • 视空间(观察空间和摄像机空间,将世界空间转换为摄像机视野前面的坐标)
  • 裁剪空间与设备坐标(通过投影矩阵将物体从观察空间转换到裁剪空间,并转换到指定范围的设备坐标中,最终映射到屏幕空间,表现为近大远小)

3、向量和运算

向量:在三维空间作为物理角度的向量具有以下特点

  • 向量就是具有大小和长度的量

  • 向量就是空间空的箭头

  • 向量可以随意平移

举例:力,force;速度,velocity。这些都是具有大小和方向的量,都可以看成是向量。具体向量加减乘除运算规则这里不做讲解。
可以查看UE4中的FVector描述

点积 :A向量在B向量的投影,与B向量的长度乘积
UE4中使用为 FVector::CrossProduct()
主要用来计算夹角,比如处理Lambert光照,光源方向与物体表面方向的夹角,判断目标是否在视野等

叉积:垂直于两个向量的向量,如果以AB向量为边构成一个平行四边形,那么这两个向量外积的模长与这个平行四边形的面积。
UE4中使用为 FVector::DotProduct(),

矩阵与线性运算

  • 线性变换是操作空间的一种手段,它能够保持网格线平行且等距,并保持原点不动;

  • 矩阵乘法可以视为一种基向量的线性组合

  • 矩阵乘法为计算线性变换作用于特定向量提供了一种途径,以二维空间中的变换为例: 经过一定的线性变换,我们关注基坐标变换后的位置,将其新的位置坐标构成矩阵,特别地,矩阵的列向量为描述线性变换提供了可能。

  • 矩阵可以理解为一种线性变换,这样将有助于矩阵乘法、行列式、基变换、特征值的理解。

4、三维坐标变化

UE4中,三维空间内的某个"朝向",其实有3种表达方式:方向向量、欧拉角、四元数。而且这几种表达方式,可以相互转换。

欧拉角:欧拉角使用最简单的x,y,z值来分别表示在x,y,z轴上的旋转角度,其取值为0-360(或者0-2pi),一般使用roll,pitch,yaw来表示这些分量的旋转值,欧拉角容易出现的问题是 1)不易在任意方向的旋转轴插值; 2)万向节死锁;3)旋转的次序无法确定。

万向节死锁:由于矩阵乘法的本质是将左侧矩阵表示的变换信息应用于右运算元(向量/矩阵),而多个线性变换间一般是不可交换的,即矩阵乘法不满足交换律。所以三次旋转的顺序非常重要,在Unity、UE4、3dsMax等软件中,以欧拉角形式调整旋转时一般会将旋转顺序固定,而这正是导致万向锁(Gimbol Lock)的原因。

四元数:根据以上原因引入的四元数可以很好解决万向锁问题,UE4中四元数的数据结构为 FQuat,参见 Quat.h。表达四元数的4个变量为 X/Y/Z/W
四元数,可以表示在三维空间中围绕一个轴的旋转。
X, Y, Z, W组件也作为轴/角度格式。

MS_ALIGN(16) struct FQuat 
{
public:
	/** The quaternion's X-component. */
	float X;
	/** The quaternion's Y-component. */
	float Y;
	/** The quaternion's Z-component. */
	float Z;
	/** The quaternion's W-component. */
	float W;
......

在组合四元数时顺序很重要:C = A * B将生成逻辑上的四元数C
首先应用B,然后应用A到任何后续的转换(先右,然后左)。
注意,这是相反的顺序的FTransform的乘法
示例:LocalToWorld = (LocalToWorld * DeltaRotation)将通过DeltaRotation改变局部空间的旋转。
示例:LocalToWorld = (DeltaRotation * LocalToWorld)将通过DeltaRotation改变世界空间的旋转。

应用:比如使用Matinee轨迹类型,在各种类型的 Actors 上设置不同类型数据的动画,使用四元数设置旋转插值等。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章           查看所有文章
加:2021-12-10 11:22:49  更:2021-12-10 11:24:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 21:44:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码