Нет оператора = Соответствует операнду - DX11 - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь умножить два набора значений вместе в DX11.

void Update()
{
    rot += 0.0005f;
    if (rot > 6.26f)
        rot = 0.0f;

    cube1 = XMMatrixIdentity();

    XMVECTOR rotaxis = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);
    Rotation = (rotaxis, rot);
    Translation = XMMatrixTranslation(0.0f, 0.0f, 4.0f);

    cube1 = Translation * Rotation;
    cube2 = XMMatrixIdentity();

    Rotation = XMMatrixRotationAxis(rotaxis, -rot);
    Scale = XMMatrixScaling(1.3f, 1.3f, 1.3f);

    cube2 = Rotation * Scale;

Но я продолжаю получать ошибку;

[code]No operator "=" matches these operands
operand types are: DirectX::XMVECTOR = DirectX::XMMATRIX[/code]

Из того, что я прочитал, они могутне умножить вместе, но я не могу найти обходной путь.

Фрагменты кода.

Предварительные объявления

const int Width = 300;
const int Height = 300;

XMMATRIX WVP;
XMMATRIX cube1;
XMMATRIX cube2;
XMMATRIX camView;
XMMATRIX camProjection;

XMVECTOR camPosition;
XMVECTOR camTarget;
XMVECTOR camUp;

XMVECTOR Rotation;
XMVECTOR Scale;
XMVECTOR Translation;
float rot = 0.1f;

Настройка камеры / проекции в конце функции InitDevice ().

camPosition = XMVectorSet(0.0f, 3.0f, -8.0f, 0.0f);
camTarget = XMVectorSet(0.0f, 0.0f, 0.0f, 0.0f);
camUp = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);
camView = XMMatrixLookAtLH(camPosition, camTarget, camUp);
camProjection = XMMatrixPerspectiveFovLH(0.4f*3.14f, Width / Height, 1.0f, 1000.0f);

1 Ответ

0 голосов
/ 22 октября 2018

Проблема first , которую я вижу:

XMVECTOR rotaxis = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);
Rotation = (rotaxis, rot); <<--- You are missing the name of a function here!
Translation = XMMatrixTranslation(0.0f, 0.0f, 4.0f);

Поскольку там нет имени функции, поэтому вы на самом деле используете оператор запятую .По сути, это то же самое, что:

Rotation = rotaxis = rot;

Я не уверен, что вы пытаетесь сделать здесь, но, вероятно, дело не в этом.

Проблема second :

Rotation = XMMatrixRotationAxis(rotaxis, -rot);

XMMatrixRotationAxis возвращает XMMATRIX, который вы пытаетесь присвоить XMVECTOR, который не работает.

Вам необходимо проверить свое использование.Если Rotation должен быть кватернионом (который вписывается в XMVECTOR), то вам нужно использовать XMQuaternion* функции вместо XMMatrix*.

Я бы рекомендовал использовать объявление типа в стиле C ++вместо того, чтобы поместить их всех наверх.Намного легче читать и следовать типам.

Обратите внимание, если вы новичок в DirectXMath, вам следует взглянуть на оболочку SimpleMath в DirectX ToolКомплект для DX11 / DX12 .

...