4.2 引入Triangle Fans(Introducing Triangle Fans)
在新的顶点结构中,中心处将会有一个顶点坐标,这样的话绘制矩形就必须采用四个三角形而不是两个了。我们把新的中心点放置在点(0,0)处。现在打开AirHockeyRenderer.java,并将三角形顶点坐标更新为如下:
//AirHockey2/src/com/airhockey/android/AirHockeyRenderer.java
// Triangle Fan
0, 0,
-0.5f, -0.5f,
0.5f, -0.5f,
0.5f, 0.5f,
-0.5f, 0.5f,
-0.5f, -0.5f,
看到这里,可能你想要问的第一个问题会是,为什么我们仅仅定义了六个顶点坐标?难道我们不是需要对每个三角形定义3个顶点吗?没错,确实是这样,一个三角形需要三个顶点,但是有时候我们可以在多个三角形之间复用一些相同的顶点。现在我们再来看看新定义的顶点结构,为了便于说明每个顶点都有一个独立的编号:
每一条边的两个顶点都在两个三角形之间得到复用,中心顶点在所有的三角形之间得到复用。如果我们需要输入很多相同的顶点,那将会很烦人,所以我们可以告诉OpenGL复用这些重复的点。我们可以在绘制三角形的时候给OpenGL传递triangle fan命令来做到这一点,triangle fan形式绘制可以按如下图进行描述:
triangle fan形式的绘制开始于中心点,并使用接下来的两个顶点绘制第一个三角形,然后后面的每一个顶点将会绘制另外一个三角形,就这样围绕着中心点展开绘制三角形。为了形成一个闭环,我们只需要在定义顶点的时候在顶点数组的最后重复定义顶点数组的第二个顶点坐标即可。
现在需要更新绘制命令,以便OpenGL知道将会使用triangle fan进行绘制,在 onDrawFrame()中按照如下代码更新glDrawArrays():
//AirHockey2/src/com/airhockey/android/AirHockeyRenderer.java
glDrawArrays(GL_TRIANGLE_FAN, 0, 6);
这样的话OpenGL就会以triangle fan的形式进行三角形的绘制,现在运行程序将会得到如下的结果:
现在我们已经以triangle fan的形式重新定义了一个球台桌面,下一节我们将对每个顶点加入代表颜色的第二个属性。