【发布时间】:2011-12-09 12:50:19
【问题描述】:
每当我们使用索引数组通过 glDraw*Elements* 渲染纹理多边形时,我们可以提供一个顶点数组和一个纹理坐标数组。那么索引数组中的每一个索引都是指顶点数组中某个位置的一个顶点和纹理数组中同一位置对应的纹理坐标。现在,例如,如果几个单独的图元(如 QUADS)共享一个顶点,但该顶点需要不同的纹理坐标,则我们必须在数组中复制该顶点的次数,因为我们有不同的纹理坐标。因此,如果纹理坐标数组可以与索引数组中的位置关联起来会方便得多。这样就不需要重复顶点来将一个特定的顶点与不同的纹理坐标相关联。
这可能吗?如果是,使用什么语法?
【问题讨论】:
-
如何检查歧义?具有不同 uv 坐标的顶点是不同的顶点。
-
不会出现歧义,因为索引数组中的不同位置会自动创建“不同”的顶点。这样就可以将整个 3D 顶点地图上传到顶点数组中,并使用空间中的这些离散点将任何东西绘制到其中,而无需更新实际的顶点数据。
-
我一直在想:你需要一个和你的索引数组一样大的 uv 数组。否则,您的 uv 数组将与您的顶点数组一样长。大多数时候,我会假设顶点数组比索引数组短。但是是的,我会给你这样做的权利,但它似乎很可能不在 opengl 中。
-
关键是,如果离散顶点经常被几个图元使用,那么只有一个更长的索引数组比拥有更长的索引和顶点数组要好得多。我真的希望这在 OpenGL 中是可能的。让我们拭目以待,看看大师们怎么说! =)
-
但是如果你要使用这种方法,你需要一个更长的 uv-array 对吧?假设您的索引数组是 1,1,1,1,1,1,1,0。然后,您需要为每个条目单独设置 uv 坐标,而不仅仅是 0 和 1。
标签: opengl indexing textures vertex