在我的代码中,我试图在我的世界矩阵上运行两个(目前,可能更多的未来)矩阵变换。 像这样:
D3DXMatrixRotationY(&worldMatrix, rotation);
D3DXMatrixTranslation(&worldMatrix, 0.0f, -1.0f, 0.0f);
其中rotation是一个不断变化的float,而worldMatrix是一个D3DXMATRIX。我的问题是只有转换语句中的最后一行代码才有效。因此,在上面的代码中,worldMatrix将被翻译,但不会被轮换。但是,如果我切换两个语句的顺序,worldMatrix将被轮换,但不会被翻译。但是,我玩了它,这段代码运行得很好:
D3DXMatrixRotationY(&worldMatrix, rotation);
D3DXMATRIX temp = worldMatrix;
D3DXMatrixTranslation(&worldMatrix, 0.0f, -1.0f, 0.0f);
worldMatrix *= temp;
在此之后,worldMatrix被翻译并旋转。如果我只使用变量并且不包含临时矩阵,为什么它不起作用?谢谢!!
答案 0 :(得分:1)
D3DXMatrixTranslation
将输出参数作为第一个参数。创建的矩阵被写入该矩阵,覆盖该矩阵中已存在的元素。矩阵不会自动乘以该调用。
你的新代码很好;你也可以这样写:
D3DXMatrix rot;
D3DXMatrix trans;
D3DXMatrixRotationY(&rot, rotation);
D3DXMatrixTranslation(&trans, 0.0f, -1.0f, 0.0f);
D3DXMatrix world = rot * trans;