WEB开发网
开发学院软件开发VC OpenGL入门介绍 阅读

OpenGL入门介绍

 2008-02-26 20:27:15 来源:WEB开发网   
核心提示:4.1 图形操作描述在Windows 95下窗口程序必须首先处理设备描述表(Device Contexts,DC),OpenGL入门介绍(2),DC包括许多如何在窗口上显示图形的信息,既指定画笔和刷子的颜色,但在其它平台也许支持PFD_MAIN_PLANE或PFD_MAIN_UNDERLAYPLANE;接下来bRese

4.1 图形操作描述

在Windows 95下窗口程序必须首先处理设备描述表(Device Contexts,DC),DC包括许多如何在窗口上显示图形的信息,既指定画笔和刷子的颜色,设置绘图模式、调色板、映射模式以及其它图形属性。同样,OpenGL for Windows95的程序也必须使用DC,这与其它Windows 95程序类似。但是,OpenGL for Windows 95必须处理特殊的DC图形操作描述表,这是DC中专为OpenGL使用的一种。一个OpenGL应用图形操作描述表内有OpenGL与Windows 95窗口系统相关的各种信息。一个OpenGL应用首先必须创建一个图形操作描述表,然后再启动它,最后在所定义的窗口内按常规方式调用OpenGL函数绘制图形。

一个图形操作描述表不同于其它DC,它们调用每个GDI函数都需要一个句柄,而图形操作描述表方式下只需一个句柄就可以任意调用OpenGL函数。也就是说,只要当前启用了某个图形操作描述表,那么在未删除图形操作描述表之前可以调用任何OpenGL函数,进行各种操作。

4.2 像素格式

在创建一个图形操作表之前,首先必须设置像素格式。像素格式含有设备绘图界面的属性,这些属性包括绘图界面是用RGBA模式还是颜色表模式,像素缓存是用单缓存还是双缓存,以及颜色位数、深度缓存和模板缓存所用的位数,还有其它一些属性信息。

4.3 像素格式结构

每个OpenGL显示设备都支持一种指定的像素格式。一般用一个名为PIXELFORMATDESCRIPTOR的结构来表示某个特殊的像素格式,这个结构包含26个属性信息。Win32定义PIXELFORMATDESCRIPTOR如下所示:

  typedef struct tagPIXELFORMATDESCRIPTOR
   {
     WORD nSize;
     WORD nVersion;
     DWORD dwFlags;
     BYTE iPixelType;
     BYTE cColorBits;
     BYTE cRedBits;
     BYTE cRedShift;
     BYTE cGreenBits;
     BYTE cGreenShift;
     BYTE cBlueBits;
     BYTE cBlueShift;
     BYTE cAlphaBits;
     BYTE cAlphaShift;
     BYTE cAccumBits;
     BYTE cAccumRedBits;
     BYTE cAccumGreenBits;
     BYTE cAccumBlueBits;
     BYTE cAccumAlphaBits;
     BYTE cDepthBits;
     BYTE cStencilBits;
     BYTE cAuxBuffers;
     BYTE iLayerType;
     BYTE bReserved;
     DWORD dwLayerMask;
     DWORD dwVisibleMask;
     DWORD dwDamageMask;
   } PIXELFORMATDESCRIPTOR;

4.4 初始化PIXELFORMATDESCRIPTOR结构

PIXELFORMATDESCRIPTOR中每个变量值的具体含义和设置可以参考有关资料,下面举出一个PIXELFORMATDESCRIPTOR初始化例子来简要说明相关变量的意义。定义PIXELFORMATDESCRIPTOR结构的pfd如下:

  PIXELFORMATDESCRIPTOR pfd = {
     sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
     1,
     PFD_DRAW_TO_WINDOW |      // support window
     PFD_SUPPORT_OPENGL |      // support OpenGL
     PFD_DOUBLEBUFFER,        // double buffered
     PFD_TYPE_RGBA,         // RGBA type
     24,               // 24-bit color depth
     0, 0, 0, 0, 0, 0,        // color bits ignored
     0,               // no alpha buffer
     0,               // shift bit ignored
     0,               // no accumulation buff
     0, 0, 0, 0,           // accum bits ignored
     32,               // 32-bit z-buffer
     0,               // no stencil buffer
     0,               // no auxiliary buffer
     PFD_MAIN_PLANE,         // main layer
     0,               // reserved
     0, 0, 0             // layer masks ignored
   };

在这个结构里,前两个变量的含义十分明显。第三个变量dwFlags的值是PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,表明应用程序使用OpenGL函数来绘制窗口,第四个表明当前采用RGBA颜色模式,第五个采用24位真彩色,既1.67千万种颜色,如果是256色系统则自动实现颜色抖动;因为没有使用alpha缓存和累计缓存,所以从变量cAlphaBits到cAccumAlphaBits都设置为0;深度缓存设置为32位,这个缓存能解决三维场景的消隐问题;变量cAuxBuffers设置为0,在Windows 95下不支持辅助缓存;Windows 95下针对OpenGL变量ilayerType只能设置为PFD_MAIN_PLANE,但在其它平台也许支持PFD_MAIN_PLANE或PFD_MAIN_UNDERLAYPLANE;接下来bReserved变量只能设为0,而最后三个变量Windows 95都不支持,故全设置为0。

Tags:OpenGL 入门 介绍

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接