Существует несколько способов инициализации векторизованной константы для DirectXMath. XMVectorSet
лучше всего, когда параметры являются переменными с плавающей точкой, а не литеральными значениями.
XMVECTOR c = XMVectorSet( 3.f, 3.f, 3.f, .3f );
В случае литеральной константы лучше использовать:
const XMVECTORF32 c = { 3.f, 3.f, 3.f, 3.f };
clang попросит вас записать его как: const XMVECTORF32 c = { { { 3.f, 3.f, 3.f, 3f.f } } };
, если у вас включено -Wmissing-braces
.
Другие опции (опять же, не самые лучшие для литеральных значений, но лучше для переменных):
XMVECTOR c = XMVectorReplicate( 3.f );
float x = 3.f;
XMVECTOR c = XMVectorReplicatePtr(&x);
const XMVECTORF32 t = { 1.f, 2.f, 3.f, 4.f };
XMVECTOR c = XMVectorSplatZ(t);
Руководство программиста DirectXMath является кратким чтением и охватывает множество случаев использования.
Если вы новичок в DirectXMath, вам следует рассмотреть возможность использования типов оболочки SimpleMath для DirectXMath, включенного в Набор инструментов DirectX для DX11 / DX12 .