Функция XMMatrixInverse
в DirectXMath использует правило Крамера для вычисления обратного значения. Большая часть кода вычисляет сопряженный , и последний шаг - умножение на обратную величину определителя. Поэтому функция также должна вычислять определитель .
Таким образом, функция может возвращать этот определитель, если у вас есть для него другое использование. Как отмечено в комментариях к вашему вопросу, pDeterminant
был обязательным параметром out в xboxmath / XNAMath до 2.04,
XMMATRIX XMMatrixInverse(_Out_ XMVECTOR* pDeterminant, CXMMATRIX M);
но я сделал его необязательным в DirectXMath, как указано в аннотации SAL :
XMMATRIX XM_CALLCONV XMMatrixInverse(_Out_opt_ XMVECTOR* pDeterminant, _In_ FXMMATRIX M);
Так что вы можете сделать:
XMMATRIX mat = …
// Don't care about the determinant
XMMATRIX imat = XMMatrixInverse(nullptr, mat);
// Want the determinant
XMVECTOR d;
XMMATRIX imat = XMMatrixInverse(&d, mat);
XNAMath 2.04 был выпуском только для Интернета, предназначенным для более точного соответствия с некоторыми изменениями, внесенными мной в DirectXMath, чтобы помочь с переходом с Xbox 360 и устаревшего DirectX SDK . Смотрите это сообщение в блоге .
Поскольку вы новичок в DirectX, вам следует взглянуть на Набор инструментов DirectX для DX11 / DX12 и SimpleMath в частности, оболочка для DirectXMath.