八、设置清除缓冲区背景颜色
调用 glClearColor 方法 , 设置清除缓冲区背景颜色 , 传入的四个参数 红色 , 绿色 , 蓝色 , 透明度 值 , 取值范围 0 ~ 1 ;
设置了该清除缓冲区背景颜色后 , 调用 glClear 方法 , 即可擦除当前的颜色缓冲区 , 显示当前的颜色 ;
// 设置清除缓冲区背景颜色 // glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) // 对应的参数是 红色 , 绿色 , 蓝色 , 透明度 // 这里设置的是红色 glClearColor(1.0, 0.0, 0.0, 1.0);
九、OpenGL 上下文初始化操作代码示例
// 创建 OpenGL 的渲染上下文 // 获取窗口设备 dc = GetDC(hWnd); // 颜色描述符, 像素格式描述符 , 选取 OpenGL 渲染的像素格式 PIXELFORMATDESCRIPTOR pfd; // 将 PIXELFORMATDESCRIPTOR 结构体清空 memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); // 填充结构体 // 设置版本号 pfd.nVersion = 1; // 结构体大小 pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); // 颜色缓冲区 32 位 pfd.cColorBits = 32; // 深度缓冲区 24 位 pfd.cDepthBits = 24; pfd.cStencilBits = 8; // 颜色格式 pfd.iPixelType = PFD_TYPE_RGBA; pfd.iLayerType = PFD_MAIN_PLANE; // 分别设置 绘制到桌面窗口 , OpenGL 支持 , 双缓冲 标志位 // 双缓冲区可以让画面更流畅 pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; // 选择像素格式 , 如果返回 -1 , 说明选择像素格式失败 , 一般情况下该选择是成功的 int pixelFormat = ChoosePixelFormat(dc, &pfd); // 设置像素格式 SetPixelFormat(dc, pixelFormat, &pfd); // 创建 OpenGL 上下文对象 , 注意该操作必须在设置完像素格式后进行操作 HGLRC rc = wglCreateContext(dc); // 设置 OpenGL 上下文对象 , 将 rc 和 dc 作为当前的渲染设备 wglMakeCurrent(dc, rc); // 设置清除缓冲区背景颜色 // glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) // 对应的参数是 红色 , 绿色 , 蓝色 , 透明度 // 这里设置的是红色 glClearColor(1.0, 0.0, 0.0, 1.0);
十、渲染场景
在显示窗口后的 消息循环 中 , 执行渲染相关操作 , 该操作调用频繁 , 基本每秒调用几十次 ;
调用 glClear(GL_COLOR_BUFFER_BIT) , 擦除颜色缓冲区 ,
调用 SwapBuffers 绘制 OpenGL 图像 ;
// 主消息循环: while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } // 渲染场景 // 清除缓冲区 , // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区 // 红色背景 glClear(GL_COLOR_BUFFER_BIT); // 将后缓冲区绘制到前台 SwapBuffers(dc); }
展示效果 :
十一、相关资源
GitHub 地址 : https://github.com/han1202012/OpenGL
博客源码快照 : https://download.csdn.net/download/han1202012/14504132