好吧,这是一个很难的问题。我正在一个顶点数组中创建一个立方体和一个金字塔。我的问题是只旋转金字塔顶点而不是立方体顶点,但我不知道任何可以旋转某些顶点的函数。如果我尝试旋转顶点,我会旋转金字塔和立方体。
问问题
1011 次
2 回答
2
任何一个
- 将立方体和金字塔放在不同的顶点数组中,并使用不同的变换来渲染每个数组
或者
- 在顶点着色器中应用旋转,并传入一些辅助的每个顶点信息,让顶点着色器决定是否应将每个顶点视为立方体或金字塔的一部分(即在每种情况下应用不同的变换)。这有点像使用“混合权重”进行“顶点混合”;除非您只对二进制情况感兴趣。
于 2010-09-24T20:37:00.840 回答
1
首先想到 - 确保金字塔和立方体的顶点在数组中占据单独的非重叠范围。旋转金字塔顶点时,只告诉 DirectX 数组的那个范围(使用基指针和范围的大小而不是整个数组)。
现在将检查 DirectX API...
编辑
确认的。关键功能是...
D3DXVECTOR4 * D3DXVec4TransformArray(D3DXVECTOR4 * pOut,
UINT OutStride,
CONST D3DXVECTOR4* pV,
UINT VStride,
CONST D3DXMATRIX* pM,
UINT n
);
在 C++ 中,数组的子范围在许多方面本身就是一个数组,或者更确切地说,它主要是一块内存,内部没有指示其边界在哪里。所以你只需传入一个不同的pV
和一个不同n
的来表示你想要应用变换的子范围,就函数而言,就是整个数组。您可能需要单独复制未转换的部分 - 我希望这是 memcpy 的工作。
步幅值通常只是向量的大小加上任何对齐填充,但也有可能对此“撒谎”,并转换例如数组中的每三个向量。
于 2010-09-24T20:36:50.210 回答