我一直以非常基本的方式使用OpenGL为各种2D图形项目绘制纹理四边形。我一直在使用glBegin()
和glEnd()
绘制构成每个纹理四边形的两个三角形,但我知道也可以使用顶点数组绘制形状。
然而,我发现的教程似乎面向三维图形并涉及加载着色器等。我需要做的(至少现在)是绘制纹理四边形,所以这看起来有点矫枉过正。
首先,在2d中使用顶点数组有多大优势?如果有优势,最简单的使用方法是什么?
答案 0 :(得分:0)
在2d中使用顶点数组有多大优势?
在性能方面,优势很大。顶点数组大大减少了API调用的数量。这会提高渲染性能。
缺点是整体上更复杂。
如果有优势,最简单的使用方法是什么?
顶点数组可用于许多不同形式的渲染。对于基本的直接渲染,它通常采用以下结构:
//initializing
glGenBuffer
glBindBuffer
glBufferData
//Rendering
glBindBuffer
glVertexAttribPointer
glDrawArrays
网上有很多教程。
答案 1 :(得分:0)
glBegin()
/ glEnd()
方法通常称为"立即模式"。顶点阵列比立即模式更有效,特别是当它们存储在缓冲区中时(VBO =顶点缓冲区对象)。只要您的绘图涉及非常少的顶点,这可能不是什么大问题,但在您处理具有大量顶点的几何体时变得至关重要。
数组比立即模式更有效的主要原因是:
还有另一个方面。在大多数OpenGL版本中,立即模式不再可用:
仍然使用立即模式的唯一方法是使用旧的OpenGL版本,或使用保留已弃用功能的兼容性配置文件。对于普通顶点数组也是如此,在这些较新的版本中只支持VBO中的数组。
固定功能管道同样弃用,因此在所有这些较新的OpenGL版本中都需要编写自己的着色器。
其中一些肯定会在开始时增加复杂性。它确实需要更多代码来启动和运行简单的示例。但是一旦你跨过了最初的障碍,你就会获得很大的灵活性,而且大部分功能实际上变得更容易使用和理解。
另一种方法是使用更高级别的工具包。图形工具包和游戏引擎有很多选项。