-2

我试图在 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);
4

1 回答 1

0

我看到的第一个问题是:

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应该是四元数(适合 a XMVECTOR),那么您需要使用XMQuaternion*函数而不是XMMatrix*.

我建议使用 C++ 风格的类型声明,而不是将它们全部放在顶部。阅读和遵循这些类型要容易得多。

请注意,如果您是 DirectXMath 的新手,您应该查看DirectX Tool Kit for DX11 / DX12中的SimpleMath包装器。

于 2018-10-22T19:08:27.360 回答