DirectX12学习笔记(一)Vector Algebra

本系列笔记主要写DirectX 12的概念和API,和图形学相关的内容(包括数学、光照等)大多会略过,大家想学习可以自己看原书~


第一节:介绍了下向量与坐标系。

第二节至第四节:向量的长度,单位向量,点积和叉积。

第五节:点在坐标系下的描述。

第六节:

DirectX有自己的3D数学库DirectXMath,利用SSE2指令集,可以用128位的SIMD寄存器计算4个32位float或int类型的数据。

如果是32位平台,要使用这个库,还需要在 配置属性 > C/C++ > 代码生成 > 启用增强指令集 中选择开启SSE2。并且在 配置属性 > C/C++ > 代码生成 > 浮点模型中启用快速模式。而所有64位的CPU是支持SSE2的。

typedef __m128 XMVECTOR;

XMVECTOR就是DirectX Math的主要向量类型。__m128 是SIMD的特殊类型,会被自动分配为16个字节的字长,映射到SIMD硬件寄存器上,进行SIMD操作。

具体介绍了以下几点:

1.n维向量(只有2-4)可以用XMFLOATn类型,但直接用这些类型计算无法利用SIMD,所以需要Loading和Storage函数对数据进行和XMVECTOR类型转换。一般类的成员变量声明为这几种类型。

2.为了提高效率,可以将XMVECTOR值作为参数传递给SSE/SSE2寄存器中的函数,而不是传递给堆栈。通过这种方式传递参数的数量取决于平台和编辑器,因此再封装一层,对于不同数量的参数,即不同的寄存器用不同的类型传递XMVECTOR参数。

  • 前三个参数用FXMVECTOR
  • 第四个用GXMVECTOR
  • 第五和六用HXMVECTOR
  • 额外的都用CXMVECTOR

3.如果是常量,用XMVECTORF32和XMVECTORU32替代XMVECTOR。

4.DirectX Math也自带一些常用的数学常量,如PI,并且定义了一些常用数学函数,如角度和弧度的相互转换,最大最小值。

5.介绍setter函数和向量函数,其中为了有效的保证使用SIMD计算,如向量的点积会返回XMVECTOR类型。

6.提供了一些高效的求近似值的函数。

7.注意浮点数误差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值