-1

在我的代码中,我试图在我的世界矩阵上运行两个(目前,可能在未来更多)矩阵转换。像这样:

D3DXMatrixRotationY(&worldMatrix, rotation);
D3DXMatrixTranslation(&worldMatrix, 0.0f, -1.0f, 0.0f);

其中旋转是一个不断变化的浮点数,worldMatrix 是一个 D3DXMATRIX。我的问题是只有转换语句中的最后一行代码有效。所以在上面的代码中,worldMatrix 会被翻译,但不会被旋转。但是如果我切换两个语句的顺序,worldMatrix 将被旋转,但不会被翻译。但是,我玩弄了它,这段代码工作得很好:

D3DXMatrixRotationY(&worldMatrix, rotation);
D3DXMATRIX temp = worldMatrix;
D3DXMatrixTranslation(&worldMatrix, 0.0f, -1.0f, 0.0f);
worldMatrix *= temp;

在此之后,worldMatrix 被平移和旋转。如果我只使用变量而不包括临时矩阵,为什么它不起作用?谢谢!!

4

1 回答 1

1

D3DXMatrixTranslation将输出参数作为第一个参数。创建的矩阵被写入该矩阵,覆盖该矩阵中已经存在的元素。矩阵不会自动乘以该调用。
您的新代码很好;你也可以这样写:

D3DXMatrix rot;
D3DXMatrix trans;
D3DXMatrixRotationY(&rot, rotation);
D3DXMatrixTranslation(&trans, 0.0f, -1.0f, 0.0f);
D3DXMatrix world = rot * trans;
于 2013-11-08T08:20:35.657 回答