OpenGL顶点和缓冲区

问题描述:

我一直在开发一个应用程序,我从txt文件中读取了几个点,我需要创建一个线图来显示点。OpenGL顶点和缓冲区

我正在使用glDrawElements,具有点数组和另一个索引数组。我需要显示以下内容:

  • x和y轴
  • 可能改变轴颜色
  • 夫妇缓冲区来分颜色

至今,我的方法是如下:

  • 我创建一个VBO
  • 与2个顶点ARRA y对象,一个存储轴的信息,另一个为图
  • 并且我有一对缓冲区,用于多行和相应索引
  • 每行的颜色与点的颜色相同{{XYZW},{RGBA}}。

我是否需要真正创建两个不同的顶点数组,或者我可以使用一个单独的轴和图形与相应的缓冲区。我的观点是,我们什么时候知道应该创建不同的顶点数组(glGenVertexArrays)来存储要绘制的东西?

正如您所希望注意的那样,您必须在处理顶点数组对象时启用glEnableVertexAttribArray属性数组。尽管您可以为每个属性绑定不同的缓冲区,但您无法绑定“每次绘制调用”或类似的不同属性。这意味着VAO指向的所有内容都必须存储相同的属性。当然,您可以忽略VAO提供的某些属性,但这可能会导致效率低下,并且这可能不是一个好的做法。

这也意味着,每个具有相同VAO绑定的绘制调用使用相同的属性。我认为这是确定你是否需要一个新的VAO的最好方法,首先确定你是否需要一组不同的属性。然后,您可以通过指向索引缓冲区内某个其他位置的一组索引来轻松确定要绘制的对象的哪一部分。在一个更加面向对象的场景(比如一个游戏中,你有不同的网格),最实际的方法是简单地为每个网格创建一个或多个VAO。这使您可以为每个网格具有不同类型的缓冲区(静态,动态或流)。你甚至可以有几个大缓冲区(每个缓冲区或类似的1到8 MB),并有多个使用相同缓冲区的VAO。我经常这样做,以避免频繁的内存分配。

我只给你们两个选择:

  • 新VAO对场景中的每一个新的属性集
  • 新VAO为每个不同的对象的

这取决于类型你有最方便的场景,但在大多数情况下,你可能不会发现性能上的巨大差异。当然有些情况下你的表现会稍微好一点,但你应该自己弄清楚。

考虑到你的问题,我可以看到两个选项。你没有说你是否要经常更新顶点。如果您经常更改图形并更新顶点,我会给这些轴设置自己的VAO,因为它们永远都不会改变,因此,他们可以使用静态缓冲区,而图形本身可以使用动态缓冲区或流缓冲区。但是如果坐标轴是整个图形的一部分,这意味着图形本身不会经常更新,为方便起见,您可以将它们全部放在一个单独的VAO中。

记住这些只是建议,你应该选择什么最适合你的框架和/或有最好的表现或简单哪一个是最方便的。

希望这有所帮助。