1

好吧,这是一个很难的问题。我正在一个顶点数组中创建一个立方体和一个金字塔。我的问题是只旋转金字塔顶点而不是立方体顶点,但我不知道任何可以旋转某些顶点的函数。如果我尝试旋转顶点,我会旋转金字塔和立方体。

4

2 回答 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 回答