OpenGL和游戏实体

时间:2013-08-20 04:45:38

标签: c++ opengl vbo

我一直在循环游戏实体列表并调用一个使用:glBegin / glEnd的虚拟Render fn。最近我了解到Vertex-Buffer-Arrays是最佳选择(特别是对于ios / Android)。

  • 当我在世界中创建一个新实体时,我只需将实体的VAO绑定到VBO,设置其VAO ID。因此,如果我有N个实体,我有N VAO / VBO?
  • 在渲染函数上我不需要重新绑定任何东西,只调用“glDrawArray / Element”?
  • 我可以在渲染fn中使用glBegin / glEnd风格的OpenGL以及VAO / VBO吗?
  • 似乎OpenGL讨厌OOP,但我需要OOP进行游戏编程......我该如何解决这个矛盾呢?

1 个答案:

答案 0 :(得分:7)

  

因此,如果我有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”经常被滥用。如果你可以使用简单的结构/数组解决你的问题,并且代码可读/易于维护,那么就没有理由为所有事情设计完整的对象层次结构。