具有Windows编程经验的人都知道,在Windows下用GDI作图必须通过设备上下文(DeviceContext,简写DC)调用相应的函数。用OpenGL作图也是类似,OpenGL函数是通过"渲染上下文"(RenderingContext,简写RC)完成三维图形的绘制。Windows下的窗口和设备上下文支持"位图格式"(PIXELFORMAT)属性,和RC有着位图结构上的一致。只要在创建RC时与一个DC建立联系(RC也只能通过已经建立了位图格式的DC来创建),OpenGL的函数就可以通过RC对应的DC画到相应的显示设备上。

一、搭建OpenGL渲染环境(创建RC)

1.步骤(创建RC的步骤)

  1. 获取一个DC
  2. 选定并设置DC的像素格式
  3. 创建渲染环境(创建RC)
  4. 使渲染环境生效(设置RC)

2.代码

//选定像素格式
    HDC dc = GetDC(hwnd);      //获取当前窗口的设备目录
    PIXELFORMATDESCRIPTOR pfd; //PIXELFORMATDESCRIPTOR 结构描述绘图图面的像素格式。
    memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
    pfd.nVersion = 1;          //指定此数据结构的版本。 此值应设置为 1。
    pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); //指定此数据结构的大小。
    pfd.cColorBits = 32;       //指定每个颜色缓冲区中的颜色位平面数。
    pfd.cDepthBits = 24;       //指定深度 (z 轴) 缓冲区的深度。
    pfd.cStencilBits = 8;      //指定模具缓冲区的深度。
    pfd.iPixelType = PFD_TYPE_RGBA; //指定像素数据的类型。
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;     //用于指定像素缓冲区的属性:缓冲区可以绘制到窗口或设备图面,支持 OpenGL 绘图,缓冲区是双缓冲的
    int pixelFormat = ChoosePixelFormat(dc, &pfd);
    //设置像素格式
    SetPixelFormat(dc, pixelFormat, &pfd);
    //创建渲染环境
    HGLRC rc = wglCreateContext(dc);
    //使渲染环境生效
    wglMakeCurrent(dc, rc);

二、相关知识

1.链接库

#pragma comment(lib, "opengl32.lib")

表示链接opengl32.lib这个库。和在工程设置里写上链入opengl32.lib的效果一样(两种方式等价,或说一个隐式一个显式调用)。 链接器首先在当前工作目录中搜索,然后在 LIB 环境变量指定的路径中搜索。

2.常用头文件

  • <GL/gl.h>:OpenGL所使用的函数和常量声明。
  • <GL/glu.h>:GLU(OpenGL实用库)所使用的函数和常量声明。GLU库属于OpenGL标准的一部分。
  • <GL/glext.h>:扩展头文件。因为微软公司对OpenGL的支持不太积极,VC系列编译器虽然有<GL /gl.h>这个头文件,但是里面只有OpenGL 1.1版本中所规定的内容,而没有OpenGL 1.2及其以后版本。对当前的计算机配置而言,几乎都支持OpenGL 1.4版本,更高的则到1.5, 2.0, 2.1,而VC无法直接使用这些功能。为了解决这一问题,就有了<GL/glext.h>头文件。这个头文件提供了高版本OpenGL所需要 的各种常数声明以及函数指针声明。



ios opengl渲染 opengl渲染怎么设置_头文件