gpt4 book ai didi

OpenGL 缓冲区 - 跨步与紧密封装

转载 作者:行者123 更新时间:2023-12-02 03:58:41 27 4
gpt4 key购买 nike

对于每个属性使用跨步顶点缓冲区与紧密打包缓冲区有何优缺点?我的意思是例如:

步幅:xyzrgb xyzrgb xyzrgb

紧:xyzxyzxyz rgbrgbrgb

乍一看,使用步幅时您似乎可以轻松更改大小,但是当您使用 glBufferData() 重新分配顶点缓冲区时,顶点缓冲区的内容将被删除。

对我来说,似乎最好使用紧密模型,因为位置、颜色和纹理坐标可能来自本地内存中的不同数组,并且没有跨步缓冲区数据函数;您必须在上传之前将所有数组复制到交错缓冲区中,或者对每个顶点每个属性使用一个 glBufferSubData() (我猜这是个糟糕的主意)。

使用交错缓冲区(跨步)似乎是常见的做法。这是为什么?我在这里缺少什么吗?

最佳答案

我认为交错缓冲区很常见,因为它更容易创建(涉及更少的缓冲区,更直观)并且据说更快(因为内存访问模式或类似的东西),紧密包装的最大优点是能够仅更新您需要更新的数据,从而加快更新速度。大多数 OpenGL 教程通过绘制静态网格物体来教授 VBO,静态网格物体不需要更新,因此可以从交错数据中受益。

一般意见似乎是:尽可能交错,需要时拆分。

参见: How does interleaved vertex submission help performance?

并且:Performance gain using interleaved attribute arrays in OpenGL4.0

另请参阅: http://www.opengl.org/wiki/Vertex_Specification_Best_Practices

直接说明:

“交错属性对渲染性能有多大帮助尚不清楚。需要分析数据。由于对齐需要,交错顶点数据可能比非交错占用更多空间。”

关于OpenGL 缓冲区 - 跨步与紧密封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17660360/

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