gpt4 book ai didi

c++ - OpenGL glBegin 与顶点缓冲区数组 VBO

转载 作者:行者123 更新时间:2023-11-28 00:55:05 26 4
gpt4 key购买 nike

我想制作一个 OpenGL 游戏,但现在意识到我在学校学到的东西 -> 直接通过 glBegin/glEnd 绘制对象 -> 是老式的和糟糕的。在互联网上阅读我发现顶点缓冲区对象和 GLSL 是 3d 编程的“正确”方法。

1) 我应该使用 OpenGL 的 glDrawArrays 还是 glDrawElements?

2) 对于有很多实体/地面/对象的游戏,渲染函数必须是很多 glDrawArrays():

foreach(entity in entities):
glDrawArrays(entitiy->arrayFromMesh()) //Where we get an array of the mesh vertex points

或者只有一个 glDrawArrays() 封装了每个实体:

glDrawArrays(map->arrayFromAllMeshes())

3)现在是否每个图形层(例如 DirectX)都标准化了顶点缓冲区对象?

最佳答案

1) Should I use OpenGL's glDrawArrays or glDrawElements?

这取决于您的源数据是什么样子的。 glDrawArrays 没有那么复杂,因为您只需要绘制顶点流,但是 glDrawElements 在您有许多顶点并由多个三角形共享的情况下很有用.如果您只是绘制 Sprite ,那么 glDrawArrays 可能是最简单的,但是 glDrawElements 对于您想节省缓冲空间的巨大复杂网格非常有用。

2) For a game with many entities/grounds/objects, must the render function be many glDrawArrays() or only one glDrawArrays() that encapsulates every entity:

同样,这在某种程度上是可选的,但请注意,您不能在调用 drawarrays 的过程中更改程序状态。所以这意味着需要不同状态(不同的纹理、不同的着色器、不同的混合设置)的任何两个对象必须有一个单独的绘制调用。然而,有时将尽可能多的相似事物分组到一个绘图调用中可能对性能有帮助。

3) Does every graphics layer (such as DirectX) now standardize Vertex Buffer Objects?

DirectX 确实有类似的概念,是的。

关于c++ - OpenGL glBegin 与顶点缓冲区数组 VBO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11908289/

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