此问题在此处已有答案:
Rendering meshes with multiple indices(2个答案)
Why does OpenGL not support multiple index buffering?(1个答案)
16天前关闭。
我在OpenGL中渲染3D模型时遇到问题-问题是我无法通过单索引缓冲区实现渲染
(我的意思是渲染:按顶点索引的顶点、按法线索引的法线、按纹理坐标索引的纹理坐标)
因此,目前我的程序不使用索引渲染,因为glDrawElements -意味着对于VertexArrayObject中的所有VertexBufferObject,将使用一个ElementBufferObject进行渲染(实际上,创建了一个索引缓冲区,但它始终等于0、1、2、3、4...)
尽管这种方法有效,但与使用多个索引缓冲区相比,它会占用大量的视频卡内存
我已经附上了一张图片,上面有所需的结果和问题所在的图片
第一次
问题-如何确保在绘制模型时使用不同的索引?
我尝试了很多方法,但都没有得到想要的结果😥
1条答案
按热度按时间t5zmwmid1#
你有三个选择。
1.将所有3个数组展平,并使用glDrawArrays。这是通常最简单的选项...
1.通过散列现有索引来生成一组新的索引。
1.最后一个选项是在着色器中使用着色器存储缓冲区来实现这一点。基本思想是将顶点/法线/uv数组加载到着色器存储缓冲区中,并将索引集加载到传统的逐顶点参数中。
在着色器中,您可以直接对这些数组进行索引。(自从我使用glsl以来已经有一段时间了,所以这更多的是一个一般性的提示,而不是可行的代码)。
我以前使用过这种方法,但不知道性能影响是什么/是否会影响 (我认为选项2是性能最好的tbh)