从零开始OpenGL ES(三) 绘制四边形

顺序01_OpenGL 专栏收录该内容
7 篇文章 0 订阅

原理

现在要实现用OpenGLES 实现四边形. 一个四边形是可以由两个三角形构成 那么我画两个相连的三角形来实现一个四边形.

image

如图

有个规定.:图形环绕方向必须一致,要么全是顺时针 要么全是逆时针

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
    };

四边形

image

使用 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].

套用公式

  • 用于确定顶点的顺序
  1. 先确定两个点 形成一条边 . 比如上图中(v1,v2) 那么坐标就是 (-1,0)(0,-1) 方向是逆时针
  2. 大于等于第3个顶点才套用公式,第三个顶点 是奇数 那么 n == 3 ,现在v3可以是
    (1,0),也可以是(0,1),如果是(0,1)是v3,套用公式 点相减 (3-2,3-1,3),那么实际上就是
    (1,2,3) 也就是v1,v2,v3 这三个点的顺序
  3. 接下来绘制第四个顶点了,此时(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

  • 0
    点赞
  • 1
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值