OpenGLES demo - 4. GL中的三角形

原创文章,转载请注明连接 http://blog.csdn.net/hoytgm/article/details/32977479

第二个demo的时候我们画了一个三角形,三角形是OpenGLES,OpenGL和Direct3D中最基本的元素。在Direct3D中一个三角形也被称作为primitive,也就是一个图形元。确实,在图形学的世界中,不管你看到任何东西,最后都是由一个一个的三角形构成的。了解的朋友也许会问线,一般来说,即使开发者画的是一条线,在显卡的驱动或者是硬件的的实现上也是由两个三角形构成,这样的话,如果开发者需要画一条宽的线,那么很简单了,扩大构成这条线的三角形就可以了。


在图形学中,一般会用到三种画三角形的方式,triangles,triangle strip和triangle fan。这三种方式对应到OpenGLES中就是GL_TRIANGLES, GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN。


Triangles是指三角形列表,每三个点构成一个三角形。如果开发者想画两个三角形的话,那么就需要提供6个顶点。因为Triangles方式没有共享点的问题,每个三角形都由独立的三个点构成。因此要画的三角形个数和顶点的关系为 triangles * 3 = vertices。

我们以第二章的代码为基础,如果我们需要画一个矩形,那么需要提供6个顶点,同时将glDrawArrays的最后一个参数由3改为6。

    float vertices[] =
    {
        -0.5f, -0.5f, 0.5f, 1.0f,
        0.5f, -0.5f, 0.5f, 1.0f,
        -0.5f, 0.5f, 0.5f, 1.0f,
        
        0.5f, -0.5f, 0.5f, 1.0f,
        -0.5f, 0.5f, 0.5f, 1.0f,
        0.5f, 0.5f, 0.5f, 1.0f,
    };

    glDrawArrays(GL_TRIANGLES, 0, 6);

Triangle strip是三角形带,第一个三角形由前三个顶点构成,第二个三角形的三个顶点由一个新的顶点和第一个三角形的后两个顶点构成。同理,后面的三角形都按第二个三角形的规则构成。比如我们有5个顶点,分别按顺序编号为1,2,3,4,5,那么第一个三角形由1,2,3构成,第二个三角形由2,3,4构成,第三个三角形由3,4,5构成,如下图所示


放到代码里面,我们如果需要画一个矩形,则只需要4个顶点,同时将glDrawArrays的最后一个参数改为4。

    float vertices[] =
    {
        -0.5f, -0.5f, 0.5f, 1.0f,
        0.5f, -0.5f, 0.5f, 1.0f,
        -0.5f, 0.5f, 0.5f, 1.0f,
        0.5f, 0.5f, 0.5f, 1.0f,
    };

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

Triangle fan是三角扇形,第一个三角形由三个顶点构成,第二个三角形由第一个三角形的第一个顶点和最后一个顶点外加一个新的顶点构成。以后的三角形,都需要第一个三角形的第一个顶点,同时保留最近的一个顶点,然后再加上一个新的顶点。还是1,2,3,4,5个顶点,第一个三角形由1,2,3构成,第二个三角形由1,3,4构成,第三个三角形则由1,4,5构成,如图


代码中,我们画一个矩形仍然需要4个顶点,只不过顺序需要变一下

    float vertices[] =
    {
        0.5f, -0.5f, 0.5f, 1.0f,
        -0.5f, -0.5f, 0.5f, 1.0f,
        -0.5f, 0.5f, 0.5f, 1.0f,
        0.5f, 0.5f, 0.5f, 1.0f,
    };

    glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

代码已上传,资源地址 http://download.csdn.net/detail/hoytgm/7546293,欢迎大家交流~~~

展开阅读全文

没有更多推荐了,返回首页