假设我们要渲染一个立方体。要绘制几何体,我们只需要8个顶点。如果我们需要映射纹理,我们需要24个顶点,即我们必须提交冗余顶点吗?
感谢名单
答案 0 :(得分:1)
由于这些顶点具有不同的属性,因此它们不相同。所以,是的,一些数据可能是多余的,但不是全部。通常在面之间共享顶点时可以使用索引几何,但在这种情况下,它们并不真正共享。
OpenGL提供顶点数组功能,可用于将顶点数据位分离为独立的块。假设您可以在一个连续的数组中使用坐标,在另一个数组中使用颜色,在第三个中使用纹理坐标。顶点数据不必交错。请参阅glVertexPointer
,glColorPointer
,glTexCoordPointer
等
使用顶点数组可以通过共享一些顶点数据来节省一些内存,但这需要进行许多绘制调用,对于这个简单的立方体情况而言,这是不值得的。 This article可能非常有用,请查看。
答案 1 :(得分:1)
我为iPhone here提供了索引的纹理多维数据集的代码,如果您想要查看此操作的示例。即使你不在iPhone上,也可能有助于说明索引如何减少像这样的对象的几何尺寸。代码的OpenGL ES部分应该很好地转换到其他平台。
指数可以阻止冗余几何体的上传(其大小可能是移动GPU的限制因素),而iOS设备中的GPU则针对索引三角形条带进行了优化。当使用索引缩小几何体的大小时,我观察到了一些显着的性能提升。