gpt4 book ai didi

opengl - 如何使用 glDrawElementsBaseVertex 从 VBO 网格中选择单个三角形?

转载 作者:行者123 更新时间:2023-12-04 05:10:51 25 4
gpt4 key购买 nike

所以我有一个简单的立方体“网格”:

6 个立方体面是 12 个三角形,因此 36 个“顶点”组织为 36 个索引,重复使用 8 个唯一顶点位置、6 个唯一顶点法线和 4 个唯一顶点-texcoords。

此索引网格存储在 VBO/IBO 对中,可能在其之前或之后有其他网格,因此此处建议使用 base-vertex。

现在我可以像这样在一次绘制调用中完全正确地渲染整个立方体:

gl.DrawElementsBaseVertex(
gl.TRIANGLES, gl.Sizei(36), gl.UNSIGNED_INT,
gl.PtrOffset(nil, uintptr(myMeshIndexBufOffset)),
gl.Int(myMeshIndexBufBaseIndex))

但是,现在我只想绘制“前 4 个三角形”(也就是“第一个”2 个立方体面)—— 使用 4 个绘制调用而不是 1 个(因为纹理绑定(bind)可能发生在两者之间)我真的不知道如何正确指定 count 和 basevertex 参数。

那么对于单个三角形,我只需要假设我需要指定计数 3。对于 12 个三角形,我必须使用 36 才能成功渲染完整的立方体,因此单个三角形的 3 是有意义的。然后它从元素数组中选择 3 个“索引条目”(这里定义为每个条目三个 uint32)。正确的?

但是我无法弄清楚——无论是通过逻辑推理还是通过实验——现在如何在此处指定基顶点。具体来说,我需要将自己的偏移量添加到已知的“立方体网格基础索引”中。如果我要在一个循环中分别使用 glDrawElementsBaseVertex() 所有单独的 12 个三角形:
for i := 0; i < 12; i++ {
gl.DrawElementsBaseVertex(
gl.TRIANGLES, gl.Sizei(3), gl.UNSIGNED_INT,
gl.PtrOffset(nil, uintptr(myMeshIndexBufOffset)),
(i * fooBar) + gl.Int(myMeshIndexBufBaseIndex))
}

那么...有没有人知道上面的 fooBar 到底应该代表什么?

这很烦人:真的,理论上我很确定我确实理解了 glDrawElementsBaseVertex specification非常完整,但在实践中没有任何产生正确单独渲染的选择单个三角形。

最佳答案

明白了...我突然意识到基础顶点已添加到索引 值(value) 从元素数组缓冲区中取出后,而不是作为偏移量添加到 位置 从中读取元素数组缓冲区...哎哟。所以似乎我必须抵消 indices 参数而不是 basevertex 参数,并且似乎我现在得到了想要的结果。

关于opengl - 如何使用 glDrawElementsBaseVertex 从 VBO 网格中选择单个三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14940077/

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