2013-06-22 4 views
0

XMMATRIX 및 XMVECTOR를 덤프하는 좋은 방법이 있습니까?XMMATRIX 멤버 값을 덤프하는 방법은 무엇입니까?

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

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

내가 원하는 기능은 DumpMatrix입니다.

DirectMath.h을 확인했습니다. 그리고 찾았습니다

typedef __m128 XMVECTOR; 

__m128에서 (x, y, z, w)을 추출하는 방법은 무엇입니까?

답변

3

DirectX 수학 라이브러리 디자인에서는 XMMATRIXXMVECTOR 멤버에 직접 액세스 할 수 없습니다. 특수 값 SIMD data types에 값을 저장하기 때문에 가능합니다.

예를 들어, 당신은 XMVectorGet* acces functions 사용할 수있는 XMVECTOR의 구성 요소를 읽으려면 :

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을 참조하십시오.

해피 코딩!

+0

감사합니다 새로 만든 XMFLOAT4X4를 사용하여 행렬 멤버 값에 액세스 할 수 있는지 확인하십시오. 나는 Win32와 DirectX에 새로 온 사람이다. D3D11의 아키텍처는 매우 흥미 롭습니다. – user2170124

+1

이 부분을 조금 확장하면'XMVectorGet' 함수를 사용하여'XMMATRIX' 값에 접근 할 수 있습니다 :'XMMATRIX m = XMMatrixIdentity(); float r2c2 = XMVectorGetZ (m.r [2]);'(0 기준 표식 사용). XMMATRIX는이 목적을 위해 4 행 벡터에 대한 공개 액세스를 제공합니다. –

0

나는 대답을 말씀 드릴 수 없습니다,하지만 난 XMMATRIX에 대한 올바른 코드가 생각 :

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

을 그래서 당신은

+0

정확합니다. 몇 가지 오타가있었습니다. 나는 대답을 고쳤다. 고맙습니다. – Drop