在windows 95 nt 下 用opengl 编 程

在windows 95 nt 下 用opengl 编 程

ID:21700824

大小:32.92 KB

页数:14页

时间:2018-10-24

在windows 95 nt 下 用opengl 编 程_第1页
在windows 95 nt 下 用opengl 编 程_第2页
在windows 95 nt 下 用opengl 编 程_第3页
在windows 95 nt 下 用opengl 编 程_第4页
在windows 95 nt 下 用opengl 编 程_第5页
资源描述:

《在windows 95 nt 下 用opengl 编 程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在windows95nt下用opengl编程科学计算可视化,计算机动画和虚拟现实是现在计算机图形学的三个热点。而这三个热点的核心都是三维真实感图形的绘制。由于opengl(opengraphicslibrary)具有跨平台性、简便、高效、功能完善,目前已经成为了三维图形制作方法中事实上的工业标准。自从windowsnt3.51在微机平台上支持opengl以后,现在微软公司在windows95osr2、windowsnt4.0中连续性的提供opengl开发环境。visualc++从4.2版本以后已经完全支持opengl api,使三维世界的“平民化”已成为必然。win

2、dows操作系统对opengl的支持具有windows编程经验的人都知道,在windows下用gdi作图必须通过设备上下文(devicecontext简写dc)调用相应的函数;用opengl作图也是类似,opengl函数是通过“渲染上下文”(renderingcontext简写rc)完成三维图形的绘制。windows下的窗口和设备上下文支持“位图格式”(pixelformat)属性,和rc有着位图结构上的一致。只要在创建rc时与一个dc建立联系(rc也只能通过已经建立了位图格式的dc来创建),opengl的函数就可以通过rc对应的dc画到相应的显示设备上。这里还有以

3、下需要注意的方面:1.一个线程只能拥有一个渲染上下文(rc),也就是说,用户如果在一个线程内对不同设备作图,只能通过更换与rc对应的dc来完成,而rc在线程中保持不变。(当然,删除旧的rc后再创建新的是可以的)与此对应,一个rc也只能属于一个线程,不能被不同线程同时共享。2.设定dc位图格式等于设定了相应的窗口的位图格式,并且dc和窗口的位图格式一旦确定就不能再改变。这一点只能期望以后的windows版本改进了。3.一个rc虽然可以更换dc,在任何时刻只能利用一个dc(这个dc称为rc的当前dc),但由于一个窗口可以让多个dc作图从而可以让多个线程利用多个rc在该窗

4、口上执行opengl操作。4.现在的windows下的opengl版本对opengl和gdi在同一个dc上作图有一定的限制。当使用双缓存用opengl产生动画时,不能使用gdi函数向该dc作图。5.不建议用ansi c在windows下编写opengl程序。这样的程序虽然具有跨平台的可移植性(比如很多sgi的例子程序),但是它们不能利用windows操作系统的很多特性,实用价值不大。用vc来编写opengl程序经过上面的分析,用vc来调用opengl作图的方法就很显然了。步骤如下:1.先设置显示设备dc的位图格式(pixelformat)属性。这通过填充一个pixe

5、lformatdescriptor的结构来完成(关于pixelformatdescriptor中各项数据的意义,请参照vc的帮助信息),该结构决定了opengl作图的物理设备的属性,比如该结构中的数据项dwflags中pfd_doublebuffer位如果没有设置(置1),通过该设备的dc上作图的opengl命令就不可能使用双缓冲来做动画。有一些位图格式(pixelformat)是dc支持的,而有一些dc就不支持了。所以程序必须先用choosepixelformat来选择dc所支持的与指定位图格式最接近的位图格式,然后用setpixelformat设置dc的位图格式

6、。2.利用刚才的设备dc建立渲染上下文rc(wglcreatecontext),使得rc与dc建立联系(wglmakecurrent)。3.调用opengl函数作图。由于线程与rc一一对应,opengl函数的参数中都不指明本线程rc的句柄(handle)4.作图完毕以后,先通过置当前线程的rc为null(::wglmakecurrent(null,null);),断开当前线程和该渲染上下文的联系,由此断开与dc的联系。此时rc句柄的有效性在微软自己的文档中也没有讲清楚,所以在后面删除rc的时候要先判断以下rc句柄的有效性(if(m_hrc)::wgldeleteco

7、ntext(m_hrc);)。再根据情况释放(releasedc)或者删除(deletedc)dc所附程序说明所附的程序用mfc完成了一个简单的opengl作图,用opengl的辅助库画了一个有光照的实心圆球。opengl本身的函数这里就不解释了,仅对用mfc编opengl时需要注意的内容做一个简要的说明:1.一旦设定了一个dc的位图格式,该dc所联系的窗口的位图格式随之设定。该窗口若含有子窗口或者有兄弟窗口,这些兄弟/子窗口的位图格式没有设成与对应rc一致的格式,opengl在它们上面作图就容易出错。故而opengl作图的窗口必须具有ws_clipchildr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。