转载自http://tonmly.blog.163.com/blog/static/17471285620116272197507/
你需要明白OpenGL如何绘制并决定我们看到的东西。
相对于 OpenGL 来说 OpenGL ES 一个很大的缺点就是除了三角形以外没有别的图元类型。我们没有其它多边形,所以我们想要创建的所有的对象都必须由三角形构成。我引用一个 blog 的帖子来说明这个问题: IPhone developer ,同时也推荐他的这些文章 OpenGL ES series.
这里有更多的关于三角形的东西你需要知道。在 OpenGL 中,有一个概念叫做弯曲( winding ),意思是 vertices 绘制时的顺序。与现实世界中的对象不同, OpenGL 中的多边形一般没有两个面。他们只有一个面,一般是正面,一个三角形只有当其正面面对观察者的时候才可以被看到。可以配置 OpenGL 将一个多边形作为两面的,但是默认情况下三角形只有一个可见的面。知道了那边是多边形的正面以后, OpenGL 就可以少做一半的计算量。如果设置两面都可视,则需要多的计算。
虽然有时候一个多边形会独立地显示,但是你或许不是非常需要它的背面显示,经常一个三角形是一个更大的对象的一部分,多边形的一面将在这个物体的内部,所以永远也不会被看到。这个没有被显示的一面被称作背面, OpenGl 通过绘制的顺序来确定那个面是正面哪个是背面。顶点按照逆时针绘制的是正面(默认是这样,但是可以被改变)。因为 OpenGL 能很容易地确定哪些三角形对用户是可视的,它就可以通过使用 Backface Culling 来避免为那些不显示在前面的多边形做无用功。
![OpenGL - tonmyWu - tonmyWu](http://img.ph.126.net/kguzW0hVsj61lcIrVwGoYg==/2483453719534949255.jpg)
在上面的示意图中,左边青绿色的的三角形是背面,将不会被绘制,因为它相对于观察者来说是顺时针的。而在右边的这个三角形是正面,将会被绘制,因为绘制顶点的顺序相对于观察者来说是逆时针的。
GL_TRIANGLES
- 这个参数意味着OpenGL 使用三个顶点来组成图形
所以,在开始的三个顶点,将用顶点1,顶点2,顶点3来组成一个三角形。完成后,在用下一组的三个顶点来组成三角形,直到数组结束。
GL_TRIANGLE_STRIP
- OpenGL 的使用将最开始的两个顶点出发,然后遍历每个顶点,这些顶点将使用前2个顶点一起组成一个三角形。
GL_TRIANGLE_FAN
- 在跳过开始的2个顶点,然后遍历每个顶点,让OpenGL 将这些顶点于它们前一个,以及数组的第一个顶点一起组成一个三角形。
也就是说,同样是0,1,2,3这4个顶点。
在STRIP 状态下是,0,1,2;1,2,3这2个三角形。
在FAN 状态下是,2,1,0;3,2,0这2个三角形。
glLoadIdentity() 只是一个覆盖(重置)函数,它只是基本重置所有的条件(重置所有状态)。
着色
如何通知矩形绘制从一个颜色到下一个?OpenGL 使用了着色。这里有两个着色模型可以在
OpenGL 使用:GL_FLAT&GL_SMOOTH。GL_SMOOTH 是默认的渲染。
做一个总结:GL_SMOOTH 是一个平滑着色,这就意味着当你开始填充一个矩形的时候,O
penGL 将使用在我们squareColours[] 数组里的默认颜色去定义在squareVertices[] 数组里
的每个顶点。使用插值中每个像素的面积之间的点,顺利改变颜色之间的四点。换句话说,
这将是我们出现彩色的矩形。
GL_FLAT 是使用物体的的最后一个顶点的颜色去填充整个图元。形