У меня есть код DirectX C++, который использует xnamath.h
. Я хотел бы перейти на "новенькое" DirectXMath
, поэтому я изменил:binary '-': 'DirectX :: XMVECTOR' не определяет этот оператор или преобразование (переход с xnamath на DirectXMath не так прост)
#include <xnamath.h>
в
#include <DirectXMath.h>
Я также добавил DirectX
пространство имен, например:
DirectX::XMFLOAT3 vector;
Я был готовые к неприятностям, и вот они приходят!
Во время компиляции я получил ошибку:
error C2676: binary '-' : 'DirectX::XMVECTOR' does not define this operator
or a conversion to a type acceptable to the predefined operator
Для линии, которая работала отлично для xnamth.h
:
DirectX::XMVECTOR RayDir = CursorObjectSpace - RayOrigin;
Я не знаю, как это исправить. Я не думаю, что operator-
больше не поддерживается, , но что может вызвать эту ошибку и как ее исправить??
Вот более сложный исходный код:
DirectX::XMVECTOR RayOrigin = DirectX::XMVectorSet(cPos.getX(), cPos.getY(), cPos.getZ(), 0.0f);
POINT mouse;
GetCursorPos(&mouse);
DirectX::XMVECTOR CursorScreenSpace = DirectX::XMVectorSet(mouse.x, mouse.y, 0.0f, 0.0f);
RECT windowRect;
GetWindowRect(*hwnd, &windowRect);
DirectX::XMVECTOR CursorObjectSpace = XMVector3Unproject(CursorScreenSpace, windowRect.left, windowRect.top, screenSize.getX(), screenSize.getY(), 0.0f, 1.0f, XMLoadFloat4x4(&activeCamera->getProjection()), XMLoadFloat4x4(&activeCamera->getView()), DirectX::XMMatrixIdentity());
DirectX::XMVECTOR RayDir = CursorObjectSpace - RayOrigin;
Я работаю на Windows 7 x64, целевой проект x32 отладки и она работала хорошо для xnamath.h
до сих пор.
Рабочее решение будет:
DirectX::XMVECTOR RayDir = DirectX::XMVectorSet(//write more, do less..
DirectX::XMVectorGetX(CursorObjectSpace) - DirectX::XMVectorGetX(RayOrigin),
DirectX::XMVectorGetY(CursorObjectSpace) - DirectX::XMVectorGetY(RayOrigin),
DirectX::XMVectorGetZ(CursorObjectSpace) - DirectX::XMVectorGetZ(RayOrigin),
DirectX::XMVectorGetW(CursorObjectSpace) - DirectX::XMVectorGetW(RayOrigin)
); //oh my God, I'm so creepy solution
Но Су жутким по сравнению с предыдущим, работая на xnamath
:
XMVECTOR RayDir = CursorObjectSpace - RayOrigin;
Я действительно не верю, что это единственный способ, и я не могу просто использовать operator-
, как указано выше.
У меня также есть то же самое для operator/
.
Вы уверены, что и '' CursorObjectSpace' и RayOrigin' имеют тип 'DirectX :: XMVECTOR'? – ciamej
Я на 100% уверен, я также разместил сложный код, где вы можете увидеть объявление как 'CursorObjectSpace', так и' RayOrigin'. – PolGraphic
Возможно, вам будет разумно использовать ['SimpleMath'] (http://blogs.msdn.com/b/shawnhar/archive/2013/01/08/simplemath-a-simplified-wrapper-for-directxmath.aspx) вместо этого , это намного проще. –