2

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

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

以下面的编号为例:

具有 UV 值的立方体

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

那么解决方案是什么?

4

1 回答 1

4

如果单个顶点具有多个 UV 坐标,则这是不可能的。

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

顺便说一句,无论他使用的是 OpenGL 还是 DirectX,每个人都会这样做。对于一个立方体来说,这可能看起来浪费了很多内存,但在实践中——对于现实世界的模型——顶点重复的数量并没有那么高。

之后,您可以通过一次调用 DrawIndexedprimitive 来绘制立方体。

于 2010-03-01T13:05:31.783 回答