0

有什么好方法可以转储 XMMATRIX 和 XMVECTOR 吗?

XMMATRIX mx = XMMatrixScaling(...) * XMMatrixTranslation(...);

DumpMatrix(mx); // printf the 4x4 matrix member

我想要DumpMatrix喜欢的功能。

我检查了DirectMath.h。并发现

typedef __m128 XMVECTOR;

如何(x, y, z, w)从 __m128 中提取?

4

2 回答 2

4

DirectX 数学库设计不允许直接访问XMMATRIXXMVECTOR成员。这很可能是因为它们将值存储在特殊的SIMD 数据类型中。

要读取 an 的组件,XMVECTOR您可以使用XMVectorGet*访问函数,例如:

XMVECTOR V;
float x = XMVectorGetX(V);
float w;
XMVectorGetWPtr(&w, V);

或将其存储到 a中的XMStore*函数XMFLOAT4,它具有可直接访问的标量成员:

XMVECTOR vPosition;
XMFLOAT4 fPosition;
XMStoreFloat4(&fPosition, vPosition);
float x = fPosition.x;

XMMATRIX您可以存储到XMFLOAT4X4

XMMATRIX mtxView;
XMFLOAT4X4 fView;
XMStoreFloat4x4(&fView, mtxView);
float fView_11 = fView._11;

也有相反的加载函数:写入XMVECTORXMMATRIX

有关详细信息,请参阅DirectXMath 编程参考

快乐编码!

于 2013-06-22T20:46:36.033 回答
0

我无法评论答案,但我相信 XMMATRIX 的正确代码是:

XMMATRIX mtxView;
XMFLOAT4X4 fView;
XMStoreFloat4x4(&fView, mtxView);
float fView_11 = fView._11;

这样您就可以使用新创建的 XMFLOAT4X4 访问矩阵成员值

于 2016-05-28T13:41:06.440 回答