繁体   English   中英

OpenGL glBegin与顶点缓冲区阵列VBO

[英]OpenGL glBegin vs Vertex Buffer Arrays VBO

我想制作一个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)我应该使用OpenGL的glDrawArrays还是glDrawElements?

这取决于您的源数据的外观。 glDrawArrays稍微复杂些,因为您只需要绘制顶点流,但是glDrawElements在您有多个三角形共享的顶点的情况下很有用。 如果仅绘制精灵,则glDrawArrays可能是最简单的,但是glDrawElements对于想要节省缓冲区空间的大型复杂网格很有用。

2)对于具有许多实体/地面/对象的游戏,渲染函数必须为许多glDrawArrays()或仅一个封装每个实体的glDrawArrays():

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM