美文网首页OpenGL
OpenGL系列之五:绘制点和线

OpenGL系列之五:绘制点和线

作者: itfitness | 来源:发表于2022-11-26 08:29 被阅读0次

    目录

    相关文章

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

    实现效果

    实现步骤

    1.定义点结构体

    在CCGLPrimitivesDef.h中定义结构体

    struct CCFloat3{
        float x;
        float y;
        float z;
    };
    

    完整如下:

    #ifndef OPENGLDEMO_CCGLPRIMITIVESDEF_H
    #define OPENGLDEMO_CCGLPRIMITIVESDEF_H
    
    struct CCFloat7{
        float x;
        float y;
        float z;
        float r;
        float g;
        float b;
        float a;
    };
    
    struct CCFloat3{
        float x;
        float y;
        float z;
    };
    
    #endif //OPENGLDEMO_CCGLPRIMITIVESDEF_H
    
    2.开始绘制

    这里是以之前的第四个程序(OpenGL系列之四:绘制四边形
    )为基础,我们还是只修改CCOpenGLRender.cpp中的Java_com_itfitness_opengldemo_GLRender_ndkPaintGL函数,修改后如下:

    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();
    
        //定义三角型的点
        CCFloat3 vertexPoints[] = {
                {0.7,-0.7,0},
                {0.7,0.7,0},
                {-0.7,0.7,0},
                {-0.7,-0.7,0},
        };
        //设置颜色
        glColor4f(0.0,1.0,0.0,1.0);
        //启动一组顶点坐标
        glEnableClientState(GL_VERTEX_ARRAY);
        // 指定绘制的定点数组
        // 第一个参数:绘制几个点(这里其实就是CCFloat7中的前三个点x,y,z)
        // 第二个参数:类型为float
        // 第三个参数:第一个点到第二个点之间的步长(也就是结构体的长度)
        // 第四个参数:绘制数据的地址
        glVertexPointer(3,GL_FLOAT,sizeof(CCFloat3),vertexPoints);
        //设置线条宽度
        glLineWidth(10);
        //线条平滑
        glEnable(GL_LINE_SMOOTH);
        //最高质量让线条平滑
        glHint(GL_LINE_SMOOTH_HINT,GL_NICEST);
        //绘制线条
        glDrawArrays(GL_LINE_LOOP,0,4);
    
    
        //点平滑
        glEnable(GL_POINT_SMOOTH);
        //最高质量让点平滑
        glHint(GL_POINT_SMOOTH_HINT,GL_NICEST);
        //设置点的大小
        glPointSize(50);
        //绘制点
        glDrawArrays(GL_POINTS,0,4);
        //关闭一组顶点坐标
        glDisableClientState(GL_VERTEX_ARRAY);
    }
    

    补充说明

    绘制线的时候线条的宽度只能为0~10之间,大于10按照10来处理,另外如果开启了线条的平滑绘制的话,线条的宽度会变细,下面是不开启平滑的点和线的效果:

    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();
    
        //定义三角型的点
        CCFloat3 vertexPoints[] = {
                {0.7,-0.7,0},
                {0.7,0.7,0},
                {-0.7,0.7,0},
                {-0.7,-0.7,0},
        };
        //设置颜色
        glColor4f(0.0,1.0,0.0,1.0);
        //启动一组顶点坐标
        glEnableClientState(GL_VERTEX_ARRAY);
        // 指定绘制的定点数组
        // 第一个参数:绘制几个点(这里其实就是CCFloat7中的前三个点x,y,z)
        // 第二个参数:类型为float
        // 第三个参数:第一个点到第二个点之间的步长(也就是结构体的长度)
        // 第四个参数:绘制数据的地址
        glVertexPointer(3,GL_FLOAT,sizeof(CCFloat3),vertexPoints);
        //设置线条宽度
        glLineWidth(10);
    //    //线条平滑
    //    glEnable(GL_LINE_SMOOTH);
    //    //最高质量让线条平滑
    //    glHint(GL_LINE_SMOOTH_HINT,GL_NICEST);
        //绘制线条
        glDrawArrays(GL_LINE_LOOP,0,4);
    
    
    //    //点平滑
    //    glEnable(GL_POINT_SMOOTH);
    //    //最高质量让点平滑
    //    glHint(GL_POINT_SMOOTH_HINT,GL_NICEST);
        //设置点的大小
        glPointSize(50);
        //绘制点
        glDrawArrays(GL_POINTS,0,4);
        //关闭一组顶点坐标
        glDisableClientState(GL_VERTEX_ARRAY);
    }
    

    相关文章

      网友评论

        本文标题:OpenGL系列之五:绘制点和线

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