- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenGL for Windows NT及其程序设计论文.doc
OpenGL for Windows NT及其程序设计论文
.freel 90以上、16MB RAM、520MB以上硬盘容量的PC机以及一台43cm以上的大屏幕监视器和一块OpenGL三维图形加速卡组成的系统,.freelitted Light)、环境光(AmbientLight)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。
(5)纹理映射(Texure Mapping) 利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。
(6)位图显示和图像增强 图像功能除了基本的拷贝和像素读写外,还提供了融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图像效果处理。
(7)双缓存(Double Buffering)动画 双缓存即前台缓存和后台缓存,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。
此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。
二、OpenGL for ask;
}
PIXELFORMATDESCRIPTOR,
*PPIXELFORMATDESCRIPTOR,
FAR *LPPIXELFORMATDESCRIPTOR;
(2)初始化PIXELFORMATDESCRIPTOR结构
PIXELFORMATDESCRIPTOR中每个变量值的具体含义和设置可以参
考有关资料,下面举出一个PIXELFORMATDESCRIPTOR初始化例子来简要
说明相关变量的意义。定义PIXELFORMATDESCRIPTOR结构的pfd如下:
PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTOR),//结构尺寸
l, //结构版本
PFD-DRAAIN-PLANE,//主层类型
0,//保留结构数
0,0,0,//不支持结构数
};
在这个结构里,前两个变量的含义十分明显。第三个变量dAlphaBits都设置为0;深度缓存设置为32位,这个缓存能解决三维场景的消隐问题;变量cAuxBuffers设置为0,在ATDESCRIPTOR结构的地址。如果调用失败则返回0;否则返回像素格式索引号。
第三行调用SetPixelFormat()设置像素格式,三个参数分别是设备描述表的句柄、像素格式索引号和PIXELFORMATDESCRIPTOR结构的地址。如果调用成功则返回TURE;否则返回FALSE。3.创建图形操作描述表
正如前所述,必须创建图形操作描述表并启用它后,才能调用OpenGL函数在窗口内进行各种图形操作。一般说来,利用MFC中增补的管理图形操作描述表方法来编程比较方便。下面举一例:
int CopenglVieber
PFD-DRAAIN-PLANE, //main layer type
0, //reserved
0,0,0 //unsupported
};
CClientDC clientDC(this);
int pixelFormat=ChoosePixelFormat(clientDC.m-hDC, pfd);
BOOL result=SetPixelFormat(clientDC.m-hDC,pixelFormat, p
fd);
m-hRC=-hRC);
return 0;
}
void COpenglVieent();
ASSERT-VAILD(pDoc);
//TODO: add dra-hDC,m-hDC);
Dra-hDC,NULL);
}
void COpenglVieessage handler code here
-hRC);
}
在程序中,响应-CREATE消息的函数OnCreate()仅仅只创建一个临时的DC,当函数返回时,它自动删除。因此,在这里不可能启用图形操作描述表。当应用程序的窗口内容得到更新后,MFC就调用OnDraakeCurrent()有效。然后,再调用自己用OpenGL写的绘图函数DrayOpenGL(),则程序就可进行任意的OpenGL图形操作了。当绘图结束后,再调用一次akeCurrent(),但第二个参数设为NULL,意思是启用图形操作描述表无效,关闭图形操作描述表。最后,当应用程序结束时,MFC就调用OnDestroy()函数来响应
-DESTROY消息,其中只需调用-PAINT消息,所以在程序的末尾没有删除DC。
以上介绍的是OpenGL for Windows NT的基本程序框架,有兴趣的读者不妨试一试。OpenGL具有很大的发
文档评论(0)