DirectX11学习笔记一:准备工作_XMVECTOR的使用

一、XMVECTOR简介

  XNAMath 是DirectX11后新加入的一个数字格式库,建立在SIMD指令集上。

 在XNA数字库中核心向量是XMVECTOR

因为XMVECTOR是直接映射SIMD硬件上的128位寄存器,所以其他变量需要做运算时,需要全部转换成XMVECTOR形式再进行运算最后得出结果再转换成目标类型。

定义为:

typedef __m128 XMVECTOR;



还有其他的诸如 XMFLOAT2,XMFLOAT3,XMFLOAT4,这些变量便可以按需要在类成员中设定

    typedef struct _XMFLOAT2  
    {  
        FLOAT x;  
        FLOAT y;  
    } XMFLOAT2;  
      
    typedef struct _XMFLOAT3  
    {  
        FLOAT x;  
        FLOAT y;  
        FLOAT z;  
    } XMFLOAT3;  
      
    typedef struct _XMFLOAT4  
    {  
        FLOAT x;  
        FLOAT y;  
        FLOAT z;  
        FLOAT w;  
    } XMFLOAT4;  


数字库中的类型使用大致规则如下:

1. 在局部、全局变量中使用XMVECTOR类型;

2. 在类中定义向量成员时,使用类型XMFLOAT2,XMFLOAT3,XMFLOAT4;

3. 对类中的向量进行运算时,用Load型函数把相应向量读取到XMVECTOR中,再进行运算;

4. 运算完后把相应的结果XMVECTOR通过Store型函数存储到相应的XMFLOATx向量中。

二,XMVECTOR的使用规定

1,当XMVECTOR在函数中作为参数传入时,规定前三个XMVECTOR类型必须为FXMVECTOR,往后的所有XMVECTOR类型为CXMVECTOR,这样规定有利于运行效率,不必深究

2,定义常量XMVECTOR数据是,应使用XMVECTOR32型,即:

const XMVECTOR32 g={0.f,0.f,0.f,0.f}


三,一些基本级XMVECTOR操作函数和Setter函数

Setter函数

    XMVECTOR XMVectorZero();        //[0,0,0,0]  
    XMVECTOR XMVectorSplatOne();    //[1.f, 1.f, 1.f, 1.f]  
    XVMECTOR XMVectorSet(FLOAT x, FLOAT y, FLOAT z, FLOAT w);   //[x,y,z,w]  
    XMVECTOR XMVectorReplicate(FLOAT s);    //[s, s, s, s]  
    XMVECTOR XMVectorSplatX(FXMVECTOR v);   //[v.x, v.x, v.x, v.x]  
    XMVECTOR XMVectorSplatY(FXMVECTOR v);   //[v.y, v.y, v.y, v.y]  
    XMVECTOR XMVectorSplatZ(FXMVECTOR v);   //[v.y, v.y, v.y, v.y]  


操作函数

    XMVECTOR XMVector3Length(FXMVECTOR v);     //长度L,结果为[L,L,L,L],效率起见,全部为XMVECTOR类型,我们只取一个维即可。  
    XMVECTOR XMVector3LengthSq(FXMVECTOR v);   //长度L平方根,结果存放同上。其他任何返回scalar数的同理  
    XMVECTOR XMVector3Dot(FXMVECTOR v1, FXMVECTOR v2);  //点积dot,[dot, dot, dot, dot]  
    XMVECTOR XMVector3Cross(FXMVECTOR v1, FXMVECTOR v2);    //叉乘  
    XMVECTOR XMVector3Normalize(FXMVECTOR v);       //归一化  
    XMVECTOR XMVector3Orthogonal(FXMVECTOR v);      //返回一个垂直的向量  
    XMVECTOR XMVector3AngleBetweenVectors(FXMVECTOR v1, FXMVECTOR v2);  //返回两向量间角度angle,[angle, angle, angle, angle] 
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值