DirectX 中的 XMVECTOR

XMVECTOR in DirectX

抱歉这个愚蠢的问题....但为什么这不起作用?为了显示问题,我写了这个简单的代码:

#include <windows.h> 
#include <DirectXMath.h>
#include <DirectXPackedVector.h>
#include <iostream>
using namespace std;
using namespace DirectX;
using namespace DirectX::PackedVector;

int main()
{
XMVECTOR c = XMVECTORSet(3.0f, 3.0f, 3.0f, 3.0f);

return 0;
}

VS 答案"error C3861: 'XMVECTORSet': identifier not found"

你应该使用XMVectorSet而不是XMVECTORSet(这个函数不存在)

msdn

上的函数定义

有多种方法可以为 DirectXMath 初始化矢量化常量。当参数是浮点变量而不是文字值时,XMVectorSet 最好。

XMVECTOR c = XMVectorSet( 3.f, 3.f, 3.f, .3f );

对于文字常量,最好使用:

const XMVECTORF32 c = { 3.f, 3.f, 3.f, 3.f };

clang will want you to write it as: const XMVECTORF32 c = { { { 3.f, 3.f, 3.f, 3f.f } } }; if you have -Wmissing-braces enabled.

其他选项(同样,对于文字值来说不是最好的,但对于变量来说更好):

XMVECTOR c = XMVectorReplicate( 3.f );
float x = 3.f;
XMVECTOR c = XMVectorReplicatePtr(&x);
const XMVECTORF32 t = { 1.f, 2.f, 3.f, 4.f };
XMVECTOR c = XMVectorSplatZ(t);

DirectXMath Programmer's Guide 是一篇简短的文章,涵盖了很多用例。

If you are new to DirectXMath, you should consider using the SimpleMath wrapper types for DirectXMath that is included in DirectX Tool Kit for DX11 / DX12.