如何转储XMMATRIX成员值?

时间:2013-06-22 09:58:30

标签: directx directxmath

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

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

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

我希望DumpMatrix喜欢这个功能。

我查了DirectMath.h。并找到了

typedef __m128 XMVECTOR;

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

2 个答案:

答案 0 :(得分:4)

DirectX Math库设计不允许直接访问XMMATRIXXMVECTOR成员。可能是因为它们将值存储在特殊SIMD data types

要阅读XMVECTOR的组件,您可以使用XMVectorGet* acces functions,例如:

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

XMStore* functions将其存储到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;

还有Load functions反之亦然:写信给XMVECTORXMMATRIX

有关详细信息,请参阅DirectXMath Programming Reference

快乐的编码!

答案 1 :(得分:0)

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

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

以便您可以使用新创建的XMFLOAT4X4

访问矩阵成员值