有没有什么好方法可以转储XMMATRIX和XMVECTOR?
XMMATRIX mx = XMMatrixScaling(...) * XMMatrixTranslation(...);
DumpMatrix(mx); // printf the 4x4 matrix member
我希望DumpMatrix
喜欢这个功能。
我查了DirectMath.h
。并找到了
typedef __m128 XMVECTOR;
如何从__m128中提取(x, y, z, w)
?
答案 0 :(得分:4)
DirectX Math库设计不允许直接访问XMMATRIX
和XMVECTOR
成员。可能是因为它们将值存储在特殊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反之亦然:写信给XMVECTOR
和XMMATRIX
。
有关详细信息,请参阅DirectXMath Programming Reference。
快乐的编码!
答案 1 :(得分:0)
我无法评论答案,但我相信XMMATRIX的正确代码是:
XMMATRIX mtxView;
XMFLOAT4X4 fView;
XMStoreFloat4x4(&fView, mtxView);
float fView_11 = fView._11;
以便您可以使用新创建的XMFLOAT4X4
访问矩阵成员值