Дизайн библиотеки 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.
Счастливое кодирование!
Спасибо. Я новичок в Win32 и DirectX. Архитектура D3D11 очень интересна. – user2170124
Чтобы немного расширить эту функцию, вы также можете использовать функции 'XMVectorGet' для доступа к значениям XMMATRIX:' XMMATRIX m = XMMatrixIdentity(); float r2c2 = XMVectorGetZ (m.r [2]); '(с использованием индексов на основе 0). Я считаю, что 'XMMATRIX' обеспечивает публичный доступ к своим 4-строчным векторам только для этой цели. –