OpenGL系列之五:绘制点和线

目录

相关文章

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系列之五:绘制点和线)