要在 OpenGL 中绘图,您需要指定一个顶点数组,然后指定将顶点数组连接在一起的索引,从而形成一个有意义的图元顺序。您可以使用 glDrawElements 做到这一点。要指定顶点,您可以使用 glVertexPointer,您可以在其中指定参数“stride” - 数组中连续元素之间的间隙(即,如果您将顶点存储在包含其他数据的结构中,则跨步跳过其他数据)。
这很好,但现在我使用的是Assimp,它在 face 结构中指定了它的索引。
struct aiFace {
unsigned int* indices;
unsigned int numIndices;
}
据推测,这是为了支持具有不同尺寸面的网格(具有三角形和四边形的网格)。Assimp 非常好,可以选择对所有网格进行三角剖分,因此我可以保证所有面都是相同的图元。
因此,我真正想要的是能够跨越我的索引,例如:
gl/*...uh...*/ElementPointer(
3,
GL_UNSIGNED_INT,
sizeof(unsigned int) /* skip past the num_indices field*/,
&faces[0]);
但我不知道该怎么做。glDrawElements 假设索引是一个连续的数组。有没有办法在 OpenGL 中做到这一点?