-1

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

#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 回答“错误 C3861: 'XMVECTORSet': identifier not found”

4

2 回答 2

1

您应该使用XMVectorSet代替XMVECTORSet(此功能不存在)

msdn上的函数定义

于 2020-03-11T23:11:51.847 回答
1

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

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

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

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

clang 会希望你把它写成:const XMVECTORF32 c = { { { 3.f, 3.f, 3.f, 3f.f } } };如果你-Wmissing-braces启用了。

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

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程序员指南是一个简短的阅读,它涵盖了很多用例。

如果您是 DirectXMath 的新手,您应该考虑使用DirectX Tool Kit for DX11 / DX12中包含的用于 DirectXMath的SimpleMath包装器类型。

于 2020-03-12T04:17:35.983 回答