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

5 篇文章 1 订阅

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 上设置不同类型数据的动画,使用四元数设置旋转插值等。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值