【发布时间】:2012-08-08 03:31:22
【问题描述】:
我想制作一个 OpenGL 游戏,但现在意识到我在学校学到的东西 -> 直接通过 glBegin/glEnd 绘制对象 -> 是老派而且很糟糕。在互联网上阅读我看到 Vertex Buffer Objects 和 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)都标准化了顶点缓冲区对象?
【问题讨论】:
-
从技术上讲,它并不“坏”——只是老派。虽然我所有的数据都是用 glDrawArrays/glDrawElements 绘制的,但如果我只需要测试一些东西,我不想去生成 VBO 并将数据映射到其中的编程开销——只需使用即时模式进行小型测试。
-
@IanMallett:这取决于你对坏的定义。它已经过时了,它已被弃用,甚至不受 opengl ES、WebGL 或任何体面的核心配置文件上下文的支持。
-
OpenGL ES 1.1 支持它(就像 OpenGL 2 一样),而 WebGL 甚至不支持 anything 的客户端数组。不过我同意,在现代代码中应该避免使用它,因为它已被弃用。