2021SC@SDUSC
目录
OvMaths函数库主要包含了关于矩阵、向量等操作的函数,同时作为游戏引擎的数学库,OvMaths中还包含了计算机图形渲染所需的转化矩阵等的计算方法。以下是正文部分。
1.向量操作函数
该函数库中的向量操作函数包括2维、3维、4维这三种,以下仅对3维向量进行分析,4维向量由于其在计算机图形学中的特殊性,将会单独分析。
1.1 3维向量
namespace OvMaths
{
/**
* Mathematic representation of a 3D vector of floats
*/
struct FVector3
{
static const FVector3 One;
static const FVector3 Zero;
static const FVector3 Forward;
static const FVector3 Right;
static const FVector3 Up;
float x;
float y;
float z;
首先简单看看,3维向量定义了一个全1向量与一个全0向量,方便在下文的函数中直接调用。
然后是3个比较重要的向量:forward,up,right。下文简单介绍一下相关的图形学知识。
#include <utility>
#include <stdexcept>
#include <cmath>
#include "OvMaths/FVector3.h"
const OvMaths::FVector3 OvMaths::FVector3::One(1.0f, 1.0f, 1.0f);
const OvMaths::FVector3 OvMaths::FVector3::Zero(0.0f, 0.0f, 0.0f);
const OvMaths::FVector3 OvMaths::FVector3::Forward(0.0f, 0.0f, 1.0f);
const OvMaths::FVector3 OvMaths::FVector3::Right(1.0f, 0.0f, 0.0f);
const OvMaths::FVector3 OvMaths::FVector3::Up(0.0f, 1.0f, 0.0f);
在计算机图形学中,LookAt矩阵被用于定义摄像机的视角坐标系,而LookAt矩阵就是由forward,up,right这三个向量构成的。
其中forward向量为摄像机当前朝向的反方向,在初始世界坐标系中指向z轴的正半轴,因为摄像机会朝向z轴负半轴。
而right向量一般会由y轴叉乘forward向量获得,指明摄像机右侧方向。
最后将right向量与forward叉乘得到up向量。
(上图来自于LearnOpenGL官网)
往后是一系列的运算符重载函数与3维向量的基本运算法则,涉及基础的线性代数知识,这里不作详细讲解。
顺带一提,这部分计算的函数先定义了基础操作函数,例如Add,之后在运算符重载中直接复用,极大精简了代码。
OvMaths::FVector3 OvMaths