使用DX缩放对象

时间:2015-10-12 07:46:28

标签: c++ directx direct3d

我尝试使用此代码缩放矩阵:

        D3DXMATRIX & rMatrix = m_Matrices[i];
        D3DXMatrixScaling(&rMatrix, 2.0f, 2.0f, 2.0f);

i - >在循环中定义

他们没有缩放对象。这是一个奇怪的原因,如果我在更新网格矩阵世界的地方使用相同的代码但是我不需要在这个地方缩放所有对象,所以我需要在这里用来定义仅针对特定对象进行缩放。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您没有缩放矩阵数组。您使用相同的矩阵[2 0 0 0 | 0 2 0 0 | 0 0 2 0 | 0 0 0 1]覆盖它们。您需要将原始矩阵与D3DXMatrixScaling返回的缩放矩阵相乘以将它们连接起来。类似的东西:

D3DXMATRIX scaleMatrix;
D3DXMatrixScaling(&scaleMatrix, 2.0f, 2.0f, 2.0f);
for( i = 0; i < /*...*/ )
    D3DXMatrixMultiply(&m_Matrices[i], &m_Matrices[i], scaleMatrix);

BTW,D3DXMath和D3DX9 / D3DX10的其余部分一样古老,每MSDN弃用。

查看DirectXMathSimpleMath DirectXMath包装器。

答案 1 :(得分:0)

我很难理解你的问题。如果我没有回答你的问题,请告诉我!

所以你必须分开你的渲染功能。你必须两次计算你的世界矩阵。一个对象需要缩放,在计算没有缩放的世界矩阵之后。

世界矩阵包含有关椎体位置的信息,您必须更改每个要翻译,旋转,重新调整大小的对象的世界矩阵。 Normaly每个网格都围绕着原点和世界矩阵移动/旋转/缩放到你想要看到网格的位置:)