2013-06-22 2 views
0

Есть ли какой-либо хороший способ сбросить XMMATRIX и XMVECTOR?Как сбросить значение члена XMMATRIX?

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

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

Я хочу DumpMatrix подобный функция.

Я проверил DirectMath.h. И нашел

typedef __m128 XMVECTOR; 

Как извлечь (x, y, z, w) из __m128?

ответ

3

Дизайн библиотеки 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.

Счастливое кодирование!

+0

Спасибо. Я новичок в 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; 

, так что вы можете получить доступ к значениям членов матрицы с помощью вновь созданного XMFLOAT4X4

+0

Вы правы, было несколько опечаток. Я исправил свой ответ. Спасибо. – Drop