我一直在关注计算机图形学课程几周,考试即将开始,但我已经陷入了索引缓冲的主题。
我知道顶点缓冲区存储网格的所有顶点。现在假设我们想制作一个立方体。这意味着构造它需要8个顶点。每个顶点由3个坐标(x,y,z)组成,因此顶点缓冲区将占用3 x 8 = 24个单位的空间。
我读过index-buffers存储顶点的索引。所以我们立方体的顶点索引是1到8.这意味着1个三角形占用3个单位的空间。
困扰我的一个问题是:我们的索引缓冲区会占用多少单位空间?
我认为一个立方体有6个面。每个面由2个三角形组成。这意味着有12个三角形,因此索引缓冲区将占用3 x 12 = 36个单位的空间。 (我用这个网站得出了这个结论:https://msdn.microsoft.com/en-us/library/windows/desktop/bb147325(v=vs.85).aspx)。 但是,我的答案纸声称它是32。
通常情况下,我不会在StackOverflow上发帖,只是问我的老师,但是他目前正在度假,并且在考试结束后才会回来。从而, 任何人都可以向我解释索引缓冲区的大小是如何规范的? (假设它是OpenGL中使用的索引缓冲区,如果这很重要的话)。
答案 0 :(得分:4)
然而,如果您使用的是GL_TRIANGLES
,则此方法适用,即每个三角形的位置与下一个三角形无关。
您可以使用GL_TRIANGLE_STRIP
并使用 6 绘制调用为 4 索引指定每个面部,但这会使您的尺寸 4 * 6 = 24 。这是一个浪费的绘制调用,24!= 32.另外,你将不得不使用一些索引缓冲区偏移绘制调用,这对绘制一个立方体来说是愚蠢的。
您可以使用GL_TRIANGLE_STRIP
和degenerate triangle strip method来减少您需要的索引数量。
但这不是32.糟糕。
如果您真的想要将该索引缓冲区打包,您可以使用2个三角形粉丝(通过GL_TRIANGLE_FAN
)和一些花哨的绘制调用将其降低到 16 < / strong>指数。每个风扇从相对的角落开始,并围绕其相邻的面。
唉,这也不等于32。
那么,这个eldritch 32 来自哪里?
32 只是没有意义。