OpenGL ES glClear 函数

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 特效

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 转场

零基础 OpenGL ES 学习路线推荐 :  OpenGL ES 学习目录 >> OpenGL ES 函数

零基础 OpenGL ES 学习路线推荐 :  OpenGL ES 学习目录 >> OpenGL ES GPUImage 使用

零基础 OpenGL ES 学习路线推荐 :  OpenGL ES 学习目录 >> OpenGL ES GLSL 编程


一.glClear 函数简介

OpenGL ES 是一种用于在移动设备上进行图形渲染的 API。其中,glClear 函数是一个非常重要的函数,它可以清除屏幕上的颜色、深度和模板缓冲区。函数原型如下所示:

/*******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES glClear 函数
//@Time:2023/03/11 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/*******************************************************************************************/

/*
*描述:清除屏幕上的颜色、深度和模板缓冲区
*参数:
*    [in] mask:GL_COLOR_BUFFER_BIT、GL_DEPTH_BUFFER_BIT、GL_STENCIL_BUFFER_BIT
*
*返回值:无
*/
void glClear(GLbitfield mask);

其中,参数 mask 用于指定要清除的缓冲区,可以是以下值的按位或组合:

  • GL_COLOR_BUFFER_BIT:清除颜色缓冲区
  • GL_DEPTH_BUFFER_BIT:清除深度缓冲区
  • GL_STENCIL_BUFFER_BIT:清除模板缓冲区


二.glClear 函数代码演示

下面是一个简单的使用示例,演示如何清除颜色缓冲区和深度缓冲区:

/*******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES glClear 函数
//@Time:2023/03/11 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/*******************************************************************************************/

#include <GLES2/gl2.h>

...

// 在绘制前清除缓冲区
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// 绘制代码
...

上面的代码中,我们首先使用 glClearColor 函数设置清除颜色为黑色,然后使用 glClear 函数清除颜色缓冲区和深度缓冲区。最后进行绘制操作。


三.glClear 函数注意事项

  • 1.在每一帧绘制前都需要调用 glClear 清除缓冲区,否则可能会有之前绘制留下的残留。
  • 2.当清除深度缓冲区时,需要先开启深度测试(glEnable(GL_DEPTH_TEST))。
  • 3.当同时清除颜色缓冲区和模板缓冲区时,需要先开启模板测试(glEnable(GL_STENCIL_TEST))

四.glClear 函数完整案例代码

下面是一个完整的 OpenGL ES 2.0 程序,其中包括了 glClear 函数的使用。

/*******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES glClear 函数
//@Time:2023/03/11 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/*******************************************************************************************/

#include <GLES2/gl2.h>
#include <EGL/egl.h>
#include <cstdio>

#define WINDOW_W 640
#define WINDOW_H 480

int main()
{
    // 初始化EGL
    EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
    EGLint major, minor;
    eglInitialize(display, &major, &minor);

    // 配置EGL属性
    EGLint config_attribs[] = {
        EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
        EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
        EGL_NONE
    };

    // 选择EGL配置
    EGLint num_configs;
    EGLConfig config;
    eglChooseConfig(display, config_attribs, &config, 1, &num_configs);

    // 创建EGL上下文
    EGLint context_attribs[] = {
        EGL_CONTEXT_CLIENT_VERSION, 2,
        EGL_NONE
    };
    EGLContext context = eglCreateContext(display, config, EGL_NO_CONTEXT, context_attribs);

    // 创建EGL窗口
    EGLSurface surface;
    EGLint surface_attribs[] = {
        EGL_NONE
    };
    NativeWindowType window = 0; // 这里使用0作为窗口句柄,需要根据实际情况调整
    surface = eglCreateWindowSurface(display, config, window, surface_attribs);

    // 设置当前上下文和绘制表面
    eglMakeCurrent(display, surface, surface, context);

    // 设置视口
    glViewport(0, 0, WINDOW_W, WINDOW_H);

    // 清除缓冲区
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // 绘制三角形
    const GLfloat vertices[] = {
        0.0f, 0.5f, 0.0f,
        -0.5f, -0.5f, 0.0f,
        0.5f, -0.5f, 0.0f,
    };
    GLuint vertex_buffer;
    glGenBuffers(1, &vertex_buffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);

    glDrawArrays(GL_TRIANGLES, 0, 3);

    // 交换缓冲区,显示画面
    eglSwapBuffers(display, surface);

    // 清理资源
    glDeleteBuffers(1, &vertex_buffer);
    eglDestroySurface(display, surface);
    eglDestroyContext(display, context);
    eglTerminate(display);

    return 0;
}

上述代码中,我们在绘制前使用 glClearColor 函数设置清除颜色为黑色,然后使用 glClear 函数清除颜色缓冲区和深度缓冲区。然后进行绘制操作,并最终使用 eglSwapBuffers 交换缓冲区,显示画面。


五.glClear 函数使用案例

1.IOS Object-C 版本

IOS Object-C 图像 lookup 色彩调整:源码下载

图片[1]-OpenGL ES glClear 函数-猿说编程

2.Windows OpenGL ES 版本

Windows OpenGL ES 图像 lookup 色彩调整:源码下载

图片[2]-OpenGL ES glClear 函数-猿说编程

3.Windows OpenGL 版本

Windows OpenGL 图像 lookup 色彩调整:源码下载

图片[3]-OpenGL ES glClear 函数-猿说编程

4.MAC QT OpenGL 版本

MAC QT OpenGL 图像 lookup 色彩调整:源码下载

图片[4]-OpenGL ES glClear 函数-猿说编程


ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容