XMVECTOR学习笔记

本文介绍了在DirectX Math中XMVECTOR作为向量核心类型的应用,利用SIMD指令集加速计算。详细讨论了XMVECTOR的内存对齐、类成员变量的处理、在DX12中调用参数的规则,以及常量向量的使用。同时,提到了DirectXMath库提供的估算方法和浮点误差处理策略。
摘要由CSDN通过智能技术生成

在DirectX Math中,向量的核心数据类型为 XMVECTOR,使用了SIMD指令集加速。
下面引用百度对SIMD的介绍:
Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。

SSE2指令集:
SSE2(Streaming SIMD Extensions 2,Intel官方称为SIMD 流技术扩展 2或数据流单指令多数据扩展指令集 2)指令集是Intel公司在SSE指令集的基础上发展起来的。相比于SSE,SSE2使用了144个新增指令,扩展了MMX技术和SSE技术,这些指令提高了广大应用程序的运行性能。

XMVECTOR的定义类似这样:typedef __m128 XMVECTOR;当我们使用它进行计算时,只利用了我们需要的维度数据,其他维度数据被置为0

XMVECTOR要求16字节对齐,对于全局变量和局部变量这是自动完成的。但在类成员变量中,我们需要利用其他定义的几个结构体XMFLOAT2(2D),XMFLOAT3 (3D),XMFLOAT4(4D)去代替。
定义如下:

struct XMFLOAT2
{
    float x;
    float y;
    XMFLOAT2() {}
    XMFLOAT2(float _x, float _y) : x(_x), y(_y) {}
    explicit XMFLOAT2(_In_reads_(2) const float *pArray):x(pArray[0]), y(pArray[1]) 
    {}
    XMFLOAT2& operator= (const XMFLOAT2& Float2)
    { x = Float2.x; y = Float2.y; return *this; }
};

但是,对于这种类型的运算是不会使用SIMD加速的,所以在调用类成员进行计算时,我们需要将其类型转化为XMVECTOR,幸运的是DirectXMath库提供了这样的转换函数。

//FLOAT TO VECTOR
// Loads XMFLOAT2 into XMVECTOR
XMVECTOR XM_CALLCONV XMLoadFloat2(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值