gpt4 book ai didi

c++ - 在 OpenGL 中,如何指定步长的索引?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:28 24 4
gpt4 key购买 nike

要在 OpenGL 中绘制,您需要指定一个顶点数组,然后指定将顶点数组连接在一起的索引,以形成合理的图元顺序。你可以用 glDrawElements 做到这一点。要指定顶点,您可以使用 glVertexPointer,您可以在其中指定一个参数“stride”——数组中连续元素之间的间隙(即,如果您将一个顶点存储在包含其他数据的结构中,您将跨过其他数据).

这很好,但现在我正在使用 Assimp ,它在面结构中指定其索引。

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 假设 indices 是一个连续的数组。有没有办法在 OpenGL 中做到这一点?

最佳答案

抱歉,OpenGL 中不支持您正在寻找的内容。然而,由于您应该将 Assimp 加载的数据复制到 VBO 中,包括顶点数据和元素数组,您可以在该步骤中进行任何必要的重新排列。

顺便说一句:步长告诉元素开始之间的偏移量,而不是元素结束到下一个元素开始之间的偏移量。

关于c++ - 在 OpenGL 中,如何指定步长的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com