在OpenGL中使用顶点数组的最简单方法是什么(对于2D图形)?它甚至是必要的吗?

时间:2015-05-07 16:51:58

标签: c++ opengl 2d

我一直以非常基本的方式使用OpenGL为各种2D图形项目绘制纹理四边形。我一直在使用glBegin()glEnd()绘制构成每个纹理四边形的两个三角形,但我知道也可以使用顶点数组绘制形状。

然而,我发现的教程似乎面向三维图形并涉及加载着色器等。我需要做的(至少现在)是绘制纹理四边形,所以这看起来有点矫枉过正。

首先,在2d中使用顶点数组有多大优势?如果有优势,最简单的使用方法是什么?

2 个答案:

答案 0 :(得分:0)

  

在2d中使用顶点数组有多大优势?

在性能方面,优势很大。顶点数组大大减少了API调用的数量。这会提高渲染性能。

缺点是整体上更复杂。

  

如果有优势,最简单的使用方法是什么?

顶点数组可用于许多不同形式的渲染。对于基本的直接渲染,它通常采用以下结构:

//initializing
glGenBuffer
glBindBuffer
glBufferData

//Rendering
glBindBuffer
glVertexAttribPointer
glDrawArrays

网上有很多教程。

答案 1 :(得分:0)

glBegin() / glEnd()方法通常称为"立即模式"。顶点阵列比立即模式更有效,特别是当它们存储在缓冲区中时(VBO =顶点缓冲区对象)。只要您的绘图涉及非常少的顶点,这可能不是什么大问题,但在您处理具有大量顶点的几何体时变得至关重要。

数组比立即模式更有效的主要原因是:

  • 它们需要少得多的OpenGL API调用,因为您通过单个调用指定整个数组,而不是为每个顶点调用。当你有数百万个顶点时,这就会增加。
  • 数据可以指定一次,然后在每个帧中重复使用,只要它不会改变。结合VBO,顶点数据也可以存储在GPU可以非常有效地访问的内存中。

还有另一个方面。在大多数OpenGL版本中,立即模式不再可用:

  • OpenGL ES从未在移动设备上使用过。
  • 从2008年发布的3.0版本开始,桌面OpenGL已被标记为已弃用。
  • 在3.2版本中引入的核心配置文件中不可用。

仍然使用立即模式的唯一方法是使用旧的OpenGL版本,或使用保留已弃用功能的兼容性配置文件。对于普通顶点数组也是如此,在这些较新的版本中只支持VBO中的数组。

固定功能管道同样弃用,因此在所有这些较新的OpenGL版本中都需要编写自己的着色器。

其中一些肯定会在开始时增加复杂性。它确实需要更多代码来启动和运行简单的示例。但是一旦你跨过了最初的障碍,你就会获得很大的灵活性,而且大部分功能实际上变得更容易使用和理解。

另一种方法是使用更高级别的工具包。图形工具包和游戏引擎有很多选项。