【问题标题】:OpenGL and Game EntitiesOpenGL 和游戏实体
【发布时间】:2013-08-20 04:45:38
【问题描述】:

我一直在循环一个游戏实体列表并调用一个虚拟渲染 fn,它使用:glBegin/glEnd。最近我了解到 Vertex-Buffer-Arrays 是要走的路(尤其是对于 ios/Android)。

  • 当我在世界中创建一个新实体时,我只需要将实体的 VAO 绑定到 VBO,设置它的 VAO id。因此,如果我有 N 个实体,我就有 N 个 VAO/VBO?
  • 在渲染函数上我不需要重新绑定任何东西,只调用“glDrawArray/Element”?
  • 我可以在渲染 fn 中同时使用 glBegin/glEnd 样式的 OpenGL 和 VAO/VBO 吗?
  • 看来 OpenGL 讨厌 OOP,但我需要 OOP 来进行游戏编程……我该如何解决这个悖论?

【问题讨论】:

  • “我该如何解决这个悖论?”它没有。从技术上讲,GL 对象 ID(纹理 ID 等)是对象,对它们进行操作的函数是它们的方法。语法不同,但想法几乎相同。

标签: c++ opengl vbo


【解决方案1】:

因此,如果我有 N 个实体,我就有 N 个 VAO/VBO?

在体面的游戏引擎中,如果您有数千个具有相同几何形状的对象(例如,废弃的子弹壳或其他东西),那么只有一个几何/网格的实例(VAO/VBO/其他)加载到游戏引擎中。该对象使用的对象和网格是两个不同的东西。多个对象可以使用同一个网格实例。

我可以在渲染 fn 中同时使用 glBegin/glEnd 样式的 OpenGL 以及 VAO/VBO 吗?

是的,尽管有些人坚持认为,由于 OpenGL 3/4 可用,您应该避免使用 glBegin/glEnd 和类似的旧式函数。不过,这取决于你。

看来OpenGL讨厌OOP,但我需要OOP来进行游戏编程……我该如何解决这个悖论?

它没有。从技术上讲,OpenGL 使用的整数 ID 是对象,对它们进行操作的函数是这些对象的方法。无论如何,将这些整数 id 包装到结构/类中并不难。

另一方面,您必须使用 OOP。 (观点)如今,“OOP”经常被过度使用。如果您可以使用简单的结构/数组来解决您的问题,并且代码将是可读/易于维护的,那么没有理由发疯并为所有内容设计完整的对象层次结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-11
    • 2012-05-21
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多