Opengl ES系列学习--glDrawElements API使用

本文详细介绍了OpenGL ES中的glDrawElements API,包括其使用方法和区别于glDrawArrays的地方。glDrawElements利用索引来绘制图形,通常与GL_ELEMENT_ARRAY_BUFFER结合使用,提高效率。文章通过实例演示了API的使用,并展示了不同颜色数组长度对绘制结果的影响,揭示了颜色插值的原理。
摘要由CSDN通过智能技术生成

     本节我们来看一下glDrawElements API的使用,对应的代码是OpenGL\learn\src\main\java\com\opengl\learn\GlDrawElementsRender.java文件。

     所有实例均有提供源码,下载地址:Opengl ES Source Code

     API中文说明:GLES2.0中文API-glDrawElements

     和上一节类似,glDrawElements也是Opengl提供的绘制API。我们最常用的绘制三角形,第一个参数就是GL_TRIANGLES、GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN,这三种绘制的顺序上一节已经详细介绍过了,大家如果还有疑问,请回头翻看:Opengl ES系列学习--glDrawArrays API使用

     那么我们具体来看一下,glDrawElements是有什么不同呢?它和我们之前介绍的绘制方式不一样,是使用索引来绘制的,一般都是结合GL_ELEMENT_ARRAY_BUFFER一起完成绘制的。索引是什么意思呢?比如上节我们调用glDrawArrays API以GL_TRIANGLES方式完成那个五边形的绘制,那么一共五个三角形,总共需要15个顶点,如果需要的三角形更多,我们定义顶点数据就麻烦了,看一下我们上节定义的数组。

    private final float[] mVerticesTriangles =
            {
                    0.0f, 0.0f, 0.0f, // v0
                    0.0f, 0.5f, 0.0f, // v1
                    -0.5f, 0.0f, 0.0f, // v2

                    0.0f, 0.0f, 0.0f, // v0
                    -0.5f, 0.0f, 0.0f, // v2
                    -0.5f, -0.5f, 0.0f,  // v3

                    0.0f, 0.0f, 0.0f, // v0
                    -0.5f, -0.5f, 0.0f,  // v3
                    0.5f, -0.5f, 0.0f,  // v4

                    0.0f, 0.0f, 0.0f, // v0
                    0.5f, -0.5f, 0.0f,  // v4
                    0.5f, 0.0f, 0.0f,  // v5

                    0.0f, 0.0f, 0.0f, // v0
                    0.5f, 0.0f, 0.0f,  // v5
                    0.0f, 0.5f, 0.0f // v1
            };

     然而实际存在的顶点只有五个,那么我们可以给它们标号,然后直接使用标号就可以了(012)、(023)、(034)、(045)、(051);另一点,我们之前的绘制方式是每次都传实际的顶点数组给着色器程序的,那样效率也较低,而我们可以提前申请一些缓冲区,每个缓冲区都有对应的标号,先把顶点数据填充到缓存区中,绘制的时候只需要传递缓冲区的标号就可以了,这样才是更高效的作法。

     那么先来看一下如何使用该API,实例程序如下:

glDrawElements(GL_TRIANGLES, mIndicesData.length, GL_UNSIGNED_SHORT, 0);

     第一个参数就是使用什么样的方式绘制三角形,和上节的glDrawArrays作用相同,第二个参数指定要绘制的个数,这里是指尖索引顶点的个数,第三个参数是索引数据的类型,因为我们的索引数据使用short,所以这里就传GL_UNSIGNED_SHORT,最后一个是offset,我们是从头开始绘制的,所以偏移量为0。

     我们最后绘制的实际效果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红-旺永福

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值