原理
现在要实现用OpenGLES 实现四边形. 一个四边形是可以由两个三角形构成 那么我画两个相连的三角形来实现一个四边形.
如图
有个规定.:图形环绕方向必须一致,要么全是顺时针 要么全是逆时针
1、GL_TRIANGLES:
v1, v2, v3,
v3, v2, v4,
对应的数组
private final float[] vertexData={
-1f,0f,
0f,-1f,
0f,1f,
0f,1f,
0f,-1f,
1f,0f
};
需要修改一个地方, 因为一个三角形是三个顶点,两个三角形就是六个顶点
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
//改成
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 6);
分析: 只分析右半边的三角形
要渲染右边的三角形
v3 的坐标 x ,y 为 (0,1)
v2 的坐标 x, y 为 (0,-1)
v4 的坐标 x, y 为 (1,0)
可以 做出v3,v2,v4的点
private final float[] vertexData={
0f,1f,
0f,-1f,
1f,0f
};
四边形
使用 GL_TRIANGLE_STRIP 属性
有了这个属性的话可以复用点
这个方法
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
GL_TRIANGLE_STRIP //三角形条带
偶数:n-1, n-2, n
奇数:n-2, n-1, n
构建当前三角形的顶点的连接顺序依赖于要和前面已经出现过的2个顶点组成三角形的当前顶点的序号的奇偶性(如果从0开始):
如果当前顶点是奇数:
组成三角形的顶点排列顺序:T = [n-1 n-2 n].
如果当前顶点是偶数:
组成三角形的顶点排列顺序:T = [n-2 n-1 n].
套用公式
- 用于确定顶点的顺序
- 先确定两个点 形成一条边 . 比如上图中(v1,v2) 那么坐标就是 (-1,0)(0,-1) 方向是逆时针
- 大于等于第3个顶点才套用公式,第三个顶点 是奇数 那么 n == 3 ,现在v3可以是
(1,0),也可以是(0,1),如果是(0,1)是v3,套用公式 点相减 (3-2,3-1,3),那么实际上就是
(1,2,3) 也就是v1,v2,v3 这三个点的顺序 - 接下来绘制第四个顶点了,此时(n==4)是偶数,根据公式得出(4-1,4-2,4)即:(v3,v2,v4)
3.1、当v3的坐标是(0,1)的时候v4就只能是(1,0)了,那么(v3,v2,v4)是逆时针并且和第一个三角形共用一条边(v2,v3)满足条件
3.2、当v3的坐标是(1,0)时,v4坐标是(0,1),此时(v3,v2,v4)是顺时针不满足条件
这样就确定了坐标点的顺序v1,v2,v3,v4
其实平行四边形就是四个点 那么改造数组
private final float[] vertexData={
-1f,0f,
0f,-1f,
0f,1f,
1f,0f
};
然后修改glDrawArrays 的属性
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
因为是四个顶点所以改成4
后面两个参数 0 是起始 (从第几个点起始) 4 是数量
最后的效果和上面一致
相关代码
https://github.com/liudao01/OpenGLDemo/tree/master
什么东西都是光看不行,需要自己实际操作.以文本形式输出才能真正掌握住.
引用:
https://blog.csdn.net/ywl5320/article/details/81161147