使用DX缩放对象

Scale an object using DX

本文关键字:对象 缩放 DX 使用      更新时间:2023-10-16

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

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

i ->在循环中定义

它们不缩放对象。这很奇怪,因为如果我在一个更新网格矩阵的地方使用相同的代码,它们会工作,但这不是我需要的,因为在这个地方缩放所有的对象,所以我需要在这里使用for可以定义缩放只针对某个对象。

我很感激你的帮助!

您没有缩放矩阵数组。你用相同的矩阵[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);

顺便说一句,D3DXMath是古老的,其余的D3DX9/D3DX10是每个MSDN弃用。

看看DirectXMath和DirectXMath的SimpleMath包装器

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

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

世界矩阵包含顶点位置的信息,你必须改变世界矩阵每个你想要平移,旋转,调整大小的物体。通常情况下,每个网格都围绕原点和世界矩阵移动/旋转/缩放到你想看到网格的位置:)