三、部分代码示例
这里只展示部分代码 , 完整代码可以到 博客源码快照 中查看 , 已上传 CSDN 资源 , 关注即可下载 ;
初始化 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); // 矩阵环境初始化 , 主要是投影矩阵和模型矩阵 // ( 选中投影矩阵 ) 设置矩阵模式 , 告知 GPU 当前要操作的矩阵是投影矩阵 glMatrixMode(GL_PROJECTION); // ( 给投影矩阵设置值 ) 向投影矩阵设置参数 // 参数一 : 50.0f 是摄像机的视口角度 // 参数二 : 800.0f / 600.0f 是窗口的宽高比 // 参数三 : 0.1f , 可视的最近的距离 // 参数四 : 1000.0f , 可视的最远距离 gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f); // 上述设置好了摄像机的参数 , 具体的摄像机能看什么东西 , 就需要模型视图矩阵设置 // ( 选中模型矩阵 ) glMatrixMode(GL_MODELVIEW); // ( 设置模型矩阵值 ) , 这里设置的是单位矩阵 glLoadIdentity();
OpenGL 绘制相关代码 :
// 渲染场景 // 清除缓冲区 , // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区 // 红色背景 glClear(GL_COLOR_BUFFER_BIT); // 设置当前的绘制颜色 , 4 个 unsigned byte // 每个颜色的分量占一个字节 // 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度 // 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置绘制点的大小 20 像素 glPointSize(20.0f); // 绘制点时, 会将从 glBegin 到 glEnd 之间的所有的点都绘制出来 // 可以调用 glVertex3f 方法设置多个点 // 绘制点开始 glBegin(GL_POINTS); // 设置绘制点的位置 glVertex3f(0.0f, 0.0f, -0.5f); // 绘制点结束 glEnd(); // 将后缓冲区绘制到前台 SwapBuffers(dc);
四、运行效果展示
设置的清除缓冲区背景颜色是红色 , 因此整体背景显示的是红色 ,
// 设置清除缓冲区背景颜色 // glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) // 对应的参数是 红色 , 绿色 , 蓝色 , 透明度 // 这里设置的是红色 glClearColor(1.0, 0.0, 0.0, 1.0);
设置的 当前绘制颜色 是白色 , 设置当前绘制点的大小 20 像素 , 绘制的效果就是一个 20 像素的点 ;
// 设置当前的绘制颜色 , 4 个 unsigned byte // 每个颜色的分量占一个字节 // 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度 // 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置绘制点的大小 20 像素 glPointSize(20.0f);
五、相关资源
GitHub 地址 : https://github.com/han1202012/OpenGL
博客源码快照 : https://download.csdn.net/download/han1202012/14505038