网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
用Visual C++ 5实现OpenGL编程
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
窗口的像素格式。像素格式决定窗口着所显示的图形在内存中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在下面将有对这些参数的设置。我们先在CGLSample1View的类中添加一个保护型的成员函数BOOL SetWindowPixel-Format(HDC hDC)(用鼠标右键添加),并编辑其中的代码,见程序1。

  BOOL CGLSample1View::SetWindowPixelFormat(HDC hDC)

  {

   PIXELFORMATDESCRIPTOR pixelDesc;

  pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);

   pixelDesc.nVersion = 1;

   pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW |

   PFD_DRAW_TO_BITMAP |

   PFD_SUPPORT_OpenGL |

   PFD_SUPPORT_GDI |

   PFD_STEREO_DONTCARE;

   pixelDesc.iPixelType = PFD_TYPE_RGBA;

   pixelDesc.cColorBits = 32;

   pixelDesc.cRedBits = 8;

   pixelDesc.cRedShift = 16;

   pixelDesc.cGreenBits = 8;

   pixelDesc.cGreenShift = 8;

   pixelDesc.cBlueBits = 8;

   pixelDesc.cBlueShift = 0;

   pixelDesc.cAlphaBits = 0;

   pixelDesc.cAlphaShift = 0;

   pixelDesc.cAccumBits = 64;

   pixelDesc.cAccumRedBits = 16;

   pixelDesc.cAccumGreenBits = 16;

   pixelDesc.cAccumBlueBits = 16;

   pixelDesc.cAccumAlphaBits = 0;

   pixelDesc.cDepthBits = 32;

   pixelDesc.cStencilBits = 8;

   pixelDesc.cAuxBuffers = 0;

   pixelDesc.iLayerType = PFD_MAIN_PLANE;

   pixelDesc.bReserved = 0;

   pixelDesc.dwLayerMask = 0;

   pixelDesc.dwVisibleMask = 0;

   pixelDesc.dwDamageMask = 0;

  

   m_GLPixelIndex = ChoosePixelFormat( hDC, &pixelDesc);

   if (m_GLPixelIndex==0) // Let''s choose a default index.

   { m_GLPixelIndex = 1;

   if (DescribePixelFormat(hDC, m_GLPixelIndex,

   sizeof(PIXELFORMATDESCRIPTOR), &pixelDesc)==0)

   { return FALSE;

   }

   }

   if (SetPixelFormat( hDC, m_GLPixelIndex, &pixelDesc)==FALSE)

   { return FALSE;

   }

   return TRUE;

  }

  接着用鼠标右键在CGLSample1View中添加保护型的成员变量:

  int m_GLPixelIndex;

  4、用ClassWizard添加WM_CREATE的消息处理函数OnCreate

  添加OnCreate函数后如程序1所示。

  至此,OpenGL工程的基本框架就建好了。但如果你现在运行此工程,则它与一般的MFC程序看起来没有什么两样。

  5、代码解释

  现在我们可以看一看Describe-PixelFormat提供有哪几种像素格式,并对代码进行一些解释:

  PIXELFORMATDESCRIPTOR包括了定义像素格式的全部信息。

   DWFlags定义了与像素格式兼容的设备和接口。

  通常的OpenGL发行版本并不包括所有的标志(flag)。wFlags能接收以下标志:

  PFD_DRAW_TO_WINDOW 使之能在窗口或者其他设备窗口画图;

  PFD_DRAW_TO_BITMAP 使之能在内存中的位图画图;

  PFD_SUPPORT_GDI 使之能调用GDI函数(注:如果指定了PFD_DOUBLEBUFFER,这个选项将无效);

  PFD_SUPPORT_OpenGL 使之能调用OpenGL函数;

  PFD_GENERIC_FORMAT 假如这种象素格式由Windows GDI函数库或由第三方硬件设备驱动程序支持,则需指定这一项;

  PFD_NEED_PALETTE 告诉缓冲区是否需要调色板,本程序假设颜色是使用24或 32位色,并且不会覆盖调色板;

  PFD_NEED_SYSTEM_PALETTE 这个标志指明缓冲区是否把系统调色板当作它自身调色板的一部分;

  PFD_DOUBLEBUFFER 指明使用了双缓冲区(注:GDI不能在使用了双缓冲区的窗口中画图);

  PFD_STERE
  • 下一篇资讯: 屏幕抓图程序DIY
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号