Нет оператора = Соответствует операнду - DX11
Я пытаюсь умножить два набора значений вместе в 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 ответ
Первая проблема, которую я вижу:
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;
Я не уверен, что вы пытаетесь сделать здесь, но, вероятно, это не так.
Второй вопрос:
Rotation = XMMatrixRotationAxis(rotaxis, -rot);
XMMatrixRotationAxis
возвращает XMMATRIX
который вы пытаетесь присвоить XMVECTOR
который не работает.
Вы должны пересмотреть свое использование. Если Rotation
должен быть кватернионом (который вписывается в XMVECTOR
) тогда нужно использовать XMQuaternion*
функции вместо XMMatrix*
,
Я бы порекомендовал использовать объявление типа в стиле C++ вместо того, чтобы помещать их все наверх. Намного легче читать и следовать типам.
Обратите внимание: если вы новичок в DirectXMath, вам следует взглянуть на оболочку SimpleMath в наборе инструментов DirectX для DX11 / DX12.