我很好奇 glDrawElements 如何使用它的索引。假设我有由 GL_TRIANGLES 绘制的索引数组 {1, 2, 3, 4, 5, 6}。我的问题是,它是通过索引“123”、“456”还是 4 个三角形“123”、“234”、“345”、“456”形成 2 个三角形。我正在导入 .obj 模型,数据已按应有的方式加载,但渲染却一团糟。
问问题
913 次
2 回答
5
如果你使用GL_TRIANGLES
它将是123, 456
. 如果你使用GL_TRIANGLE_STRIPS
它将是123, 234, 345, 456
.
于 2012-02-09T17:02:03.207 回答
4
在GL_TRIANGLES
模式下,每个三角形需要 3 个顶点,因此它会一次拉出 3 个索引(因此,它将绘制索引为 1、2、3 和 4、5、6 的两个三角形)。
当然,如果您有邻接或绘制三角形带,则适用不同的数字。
此外,由于您提到您正在导入 OBJ 文件,请注意在 OBJ 文件中的顶点和纹理坐标和/或法线上可能存在不同的索引。
这不是一个错误,而是一个功能。这在 OBJ 中是允许的,许多导出器在表面为平滑着色(即两个面共享法线)时会这样做以节省空间。
您必须构造一个唯一顶点列表,每个顶点都有自己的法线、texcoord 等,并为这些顶点使用索引。
于 2012-02-09T17:02:46.030 回答