文章目录
接着上篇,我们接下来将通过OpenGL ES实现一个简单的几何图形显示,在本次学习过程中我们将会了解到OpenGL的坐标系、顶点、着色器、OpenGL程序以及OpenGL开发过程中的调试相关知识。
考虑到篇幅可能会过长,所以本次的内容我将会分为两篇编写,本篇我们首先了解OpenGL ES的坐标系,顶点和着色器。而在下一篇我们将会就本篇的顶点,着色器编译及关联并绘制出我们第一个图形。
OpenGL中的坐标系
OpenGL如何将定义的坐标映射到屏幕上的实际物理坐标是一个复杂的问题,随着对OpenGL更深入的了解,我们将会逐渐了解更多内容。
目前,我们只需要知道无论是x还是y坐标,OpenGL 都会把屏幕会映射到[-1,1]的范围内。对应关系为屏幕左侧对应x轴的-1,屏幕右侧对应x轴的+1,屏幕底部对应y轴的-1,屏幕顶部对应y轴的+1。不论屏幕的实际形状和大小如何,OpenGL都会使用相同的坐标范围进行映射。要在屏幕上显示任何内容,都需要在这个标准化的坐标范围内进行绘制。
定义矩形结构
在通过OpenGL画图形之前,我们需要告知OpenGL要画什么。在这里我们要画的第一个图形是二维的矩形。所以我们开发的第一步就是以OpenGL能理解的形式定义一个矩形结构。在OpenGL里,所有东西的结构都是从一个顶点开始的。
1. 顶点介绍
所谓的顶点即一个代表几何对象拐角的点。顶点具有多个附加属性,其中最重要的是位置属性。位置属性决定了顶点在空间中的具体定位。
2. OpenGL中的基本图形
在OpenGL只能绘制点、直线和三角形。三角形是最基本的几何图形,因其结构稳定而被广泛应用于构建复杂对象和纹理的场景。
三角形是构建复杂图形的基础。点和支线可以用于某些效果,但是只有三角形才能用来构建拥有复杂的对象和纹理的场景。在OpenGL里我们把单独的点放在一个组里构建出三角形,再告诉OpenGL如何连接这些点。
我们想要构建的所有东西都要用点、直线和三角形定义。如果想要构建更复杂的图形,例如拱形,那么我们就需要用足够的点拟合这样的曲线。
虽然我们本篇是要画一个矩形,但实际上,矩形可以被看作是由两个三角形组成的。这意味着需要使用点来构建三角形,并将这些三角形组合起来形成矩形的形状。
3. 在代码中定义矩形
一个矩形有4个拐角,因此需要4个顶点来定义其形状。每个顶点都需要一个位置,这个位置在二维空间中由两个坐标(通常是x和y坐标)确定。
接下来让我们写一些代码来存储这些顶点,顶点是二维坐标系中的点,每个顶点需要用两个浮点数来标记其位置,一个表示x轴的位置,另一个表示y轴的位置。
因为一个顶点有两个分量,因此让我们定义了一个常量来记录这个事实。
private val POSITION_COMPONENT_COUNT = 2
private var rectangleVertices = floatArrayOf(
-0.5f , -0.5f,
0.5f , 0.5f,
-0.5f , 0.5f,
-0.5f , -0.5f,
0.5f , -0.5f,
0.5f , 0.5f
)
在这里使用了浮点数的顺序列表来定义顶点数据,这种数组通常被称为顶点属性(attribute