0

我正在使用OpenGL在Qt中编写关卡设计工具(有关示例,请参见 Valve 的 Hammer,因为我主要为此设计源游戏)并且目前已经编写了一些类来表示 3D 对象(顶点、边、面)。我计划实现一个“对象”类,它将三者联系在一起,跟踪它自己的顶点等。

在阅读了http://open.gl上的渲染多边形之后,我有几个关于渲染内容的最有效方式的问题。请记住,这是一个关卡编辑器,所以我预计需要渲染大量具有任意形状和顶点/面数量的对象。

编辑:更新为不那么广泛。

  • 什么时候是创建 VBO 的最佳点?Qt OpenGL 示例在初始化视口时创建了一个 VBO,但我希望为每个视口创建关闭是低效的。
  • 关于提交的答案,为几何创建一个 VBO,为网格模型创建另一个 VBO 等是否明智?如果/当 VBO 溢出时会发生什么?
4

1 回答 1

0

VBO 应在需要时重新/初始化。将 VBO 视为内存池。因此,您不会为每个对象分配一个 VBO,而是将相似的对象组合成一个 VBO。当您在一个 VBO 中用完空间时,您会分配另一个 VBO。

今天的 GPU 已针对渲染索引三角形进行了优化。所以 GL_TRIANGLES 在 90% 的情况下就足够了。

坦率地说,现代 OpenGL 实现完全忽略了缓冲区对象访问模式。如此多的程序确实错误地使用了该参数,因此分析使用模式并调整驱动程序行为变得更加有效。但是,使用正确的模式仍然是一个好主意。在您的情况下,它是 GL_STATIC_DRAW。

于 2013-08-10T21:02:21.140 回答