XMVECTOR в DirectX - PullRequest
       23

XMVECTOR в DirectX

0 голосов
/ 12 марта 2020

Извините за тупой вопрос .... но почему это не работает? Чтобы показать проблему, я написал этот простой код:

#include <windows.h> 
#include <DirectXMath.h>
#include <DirectXPackedVector.h>
#include <iostream>
using namespace std;
using namespace DirectX;
using namespace DirectX::PackedVector;

int main()
{
XMVECTOR c = XMVECTORSet(3.0f, 3.0f, 3.0f, 3.0f);

return 0;
}

VS отвечает «ошибка C3861:« XMVECTORSet »: идентификатор не найден»

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Существует несколько способов инициализации векторизованной константы для 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 .

1 голос
/ 12 марта 2020

Вы должны использовать XMVectorSet вместо XMVECTORSet (эта функция не существует)

Определение функции на msdn

...