Direct3D:使用单个DrawIndexedPrimitives调用绘制纹理多维数据集。可能?

时间:2010-03-01 12:28:34

标签: 3d direct3d textures texture-mapping

我正在尝试使用8个顶点和一个DrawIndexedPrimitives调用绘制纹理立方体。这甚至可能吗?

我遇到了UV坐标问题。我发现不可能提出适用于立方体所有面的合适UV值。

以下面的编号为例:

Cube with UV Values

对于顶点A,UV设置为(0,0)。对于与A对角相对的所有顶点(在共享A作为顶点的所有三个面上),我将UV设置为(1,1)。现在,没有A作为顶点的三个面最终具有两个顶点,每个顶点具有UV值(1,1)。我的理解是,情况并非如此。

那么解决方案是什么?

1 个答案:

答案 0 :(得分:4)

如果单个顶点有多个UV坐标,则无法实现。

要解决此问题,请复制顶点位置并为每个副本指定唯一的UV坐标。在最坏的情况下,这会将立方体的顶点数增加到24(每边四个)。

不管他是使用OpenGL还是DirectX,这都是每个人都做的事。对于一个立方体来说,这可能看起来像浪费很多内存,但在实践中 - 使用真实世界的模型 - 顶点重复的数量并不高。

之后,您只需调用DrawIndexedprimitive即可绘制多维数据集。