美文网首页js css htmlOpenGL
OpenGL系列之四:绘制四边形

OpenGL系列之四:绘制四边形

作者: itfitness | 来源:发表于2022-11-24 09:51 被阅读0次

    目录

    相关文章

    OpenGL系列之一:OpenGL第一个程序
    OpenGL系列之二:绘制三角形
    OpenGL系列之三:三角形顶点增加颜色

    实现效果

    实现代码

    这里是以之前的第三个程序(OpenGL系列之三:三角形顶点增加颜色)为基础。
    这里我们还是只修改CCOpenGLRender.cpp中的Java_com_itfitness_opengldemo_GLRender_ndkPaintGL函数,我们调整绘制点的坐标,然后再增加一个点,另外我们也要调整glDrawArrays函数的mode参数为GL_TRIANGLE_STRIP,具体如下:

    extern "C"
    JNIEXPORT void JNICALL
    Java_com_itfitness_opengldemo_GLRender_ndkPaintGL(JNIEnv *env, jobject thiz) {
        //清空颜色缓冲区或深度缓冲区
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
    
        //定义三角型的点
        CCFloat7 vertexTriangle[] = {
                {0.7,-0.7,0,1.0,0.0,0.0,1.0},
                {0.7,0.7,0,0.0,1.0,0.0,1.0},
                {-0.7,-0.7,0,0.0,0.0,1.0,1.0},
                {-0.7,0.7,0,1.0,0.0,1.0,1.0},
        };
    
        //启动一组顶点坐标
        glEnableClientState(GL_VERTEX_ARRAY);
        //启动颜色顶点
        glEnableClientState(GL_COLOR_ARRAY);
    
        // 指定绘制的定点数组
        // 第一个参数:绘制几个点(这里其实就是CCFloat7中的前三个点x,y,z)
        // 第二个参数:类型为float
        // 第三个参数:第一个点到第二个点之间的步长(也就是结构体的长度)
        // 第四个参数:绘制数据的地址
        glVertexPointer(3,GL_FLOAT,sizeof(CCFloat7),vertexTriangle);
        //颜色的
        glColorPointer(4,GL_FLOAT,sizeof(CCFloat7),&vertexTriangle[0].r);
    
        //绘制上面指定的数组
        // 第一个参数:从哪个开始
        // 第二个参数:绘制几个点
        glDrawArrays(GL_TRIANGLE_STRIP,0,4);
    
        //关闭一组顶点坐标
        glDisableClientState(GL_VERTEX_ARRAY);
        //关闭颜色顶点
        glDisableClientState(GL_COLOR_ARRAY);
    }
    

    补充说明

    关于glDrawArrays中mode的参数,我们之前绘制三角形使用的是GL_TRIANGLES,这次我们使用的是GL_TRIANGLE_STRIP,其实还有一个GL_TRIANGLE_FAN可以使用,这三个mode的区别如下:
    GL_TRIANGLES:每三个点绘制一个三角形,不共享点
    GL_TRIANGLE_STRIP:假如有四个顶点,那么第2和第3个顶点将被作为共享顶点
    GL_TRIANGLE_FAN:假如有四个顶点,那么第一个顶点始终作为共享顶点,第二个顶点也会做一次共享顶点

    相关文章

      网友评论

        本文标题:OpenGL系列之四:绘制四边形

        本文链接:https://www.haomeiwen.com/subject/dzgtfdtx.html