OpenGL for Windows NT及其程序设计

上传人:公**** 文档编号:510576653 上传时间:2024-02-15 格式:DOC 页数:10 大小:25KB
返回 下载 相关 举报
OpenGL for Windows NT及其程序设计_第1页
第1页 / 共10页
OpenGL for Windows NT及其程序设计_第2页
第2页 / 共10页
OpenGL for Windows NT及其程序设计_第3页
第3页 / 共10页
OpenGL for Windows NT及其程序设计_第4页
第4页 / 共10页
OpenGL for Windows NT及其程序设计_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《OpenGL for Windows NT及其程序设计》由会员分享,可在线阅读,更多相关《OpenGL for Windows NT及其程序设计(10页珍藏版)》请在金锄头文库上搜索。

1、OpenGL for Windows NT及其程序设计pengl是在sgi、irsft、de、ib和intel等多家世界著名计算机公司的倡导下,基于sgi的gl标准,制定的一个通用共享的开放式三维图形标准。前几年,pengl虽然是开放式的标准,但是只能在具有unix操作系统的各种昂贵的工作站之间通用;尽管工作站上的pengl性能优越、编程方便、生成图形精巧逼真,但是只有少数人能体会其中乐趣,而令大多数p机用户望尘莫及。随着计算机技术的开展,工作站与p机的性能日趋接近。irsft公司首先将pengl图形库链接到indsnt中,目前又将pengl动态库挂到最新inds95上,这样,广阔p机用户就可

2、充分享受pengl的乐趣了。更令人快乐的是,目前国内外出现了专门对pengl进展硬件加速的三维图形加速卡。这样,普通用户只要拥有一台pentiu90以上、16bra、520b以上硬盘容量的p机以及一台43以上的大屏幕监视器和一块pengl三维图形加速卡组成的系统,就能与图形工作站相媲美,但价格却廉价数十倍。本文作者一直从事计算机图形应用开发工作。原来是在sgi工作站上利用pengl开发图形程序,后来又首先在国内第一块三维图形加速卡ag-3d上基于indsnt的visual+2.0环境下继续进展开发。在开发过程中,同一pengl程序几乎不用修改就能在两个平台间来回移植,效果甚好。一、pengl特

3、点及功能pengl是一个开放的三维图形软件包,它独立于窗口系统和操作系统,能非常方便地在各平台间移植。pengl具有七大功能。(1)建模pengl图形库除了提供根本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(如球、锥、多面体、茶壶等)以及复杂曲线和曲面(如bezier、nurbs等曲线或曲面)绘制函数。(2)变换pengl图形库的变换包括根本变换和投影变换。根本变换有平移、旋转、变比和镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。(3)颜色形式设置pengl颜色形式有两种,即rgba形式和颜色索引(lrindex)。(4)光照和材质设置pengl光有辐射光(ei

4、ttedlight)、环境光(abientlight)、漫反射光(diffuselight)和镜面光(speularlight)。材质是用光反射率来表示。场景(sene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。(5)纹理映射(texureapping)利用pengl纹理映射功能可以非常逼真地表达物体外表细节。(6)位图显示和图像增强图像功能除了根本的拷贝和像素读写外,还提供了交融(blending)、反走样(antialiasing)和雾(fg)的特殊图像效果处理。(7)双缓存(dublebuffering)动画双缓存即前台缓存和后台缓存,简而言之,

5、后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。此外,利用pengl还能实现深度暗示(depthue)、运动模糊(tinblur)等特殊效果。二、penglfrindsnt图形库pengl图形库一共有100多个函数。其中核心函数有115个,它们是最根本的函数,其前缀是gl;pengl实用库(penglutilitylibrary,glu)的函数功能更高一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等,共有43个,前缀为glu;pengl辅助库(penglauxiliarylibrary,glaux)的函数是一些特殊的函数,包括简单的窗口管理、输入事件处理、某些复杂三维物体绘

6、制等函数,共有31个,前缀为aux。此外,还有六个gl函数非常重要,专用于pengl和indsnt窗口系统的连接,其前缀为gl,主要用于创立和选择图形操作描绘表(renderingntexts)以及在窗口内任一位置显示字符位图。这些功能是indsnt对pengl的唯一补充,见表1所示。表1管理图形操作描绘表的gl函数另外,还有五个in32函数用来处理像素格式(pixelfrats)和双缓存。由于它们是对in32系统的扩展,因此不能应用在其他pengl平台上,见表2所示。表2管理像素格式in32函数三、penglfrindsnt程序设计penglfrindsnt的程序设计与penglfrunix

7、的程序设计有一点小区别,关键就在于如何将pengl与不同操作系统下的窗口系统连接起来。假如调用pengl辅助库窗口管理函数,那么不用考虑这些问题。下面将主要介绍在indsnt下pengl的程序设计关键。1.图形操作描绘表在indsnt下窗口程序必须首先处理设备描绘表(devientexts,d),d包含许多如何在窗口上显示图形的信息,即指定画笔和刷子的颜色,设置绘图形式、调色板、映射形式以及其他图形属性。同样,penglfrindsnt的程序也必须使用d,这与其他inds程序类似。但是,penglfrindsnt必须处理特殊的d图形操作描绘表,这是d中专为pengl使用的一种。一个pengl应

8、用图形操作描绘表内有pengl与indsnt窗口系统相关的各种信息。一个pengl应用首先必须创立一个图形操作描绘表,然后再启动它,最后在所定义的窗口内按常规方式调用pengl函数绘制图形。一个图形操作描绘表不同于其他d,它们调用每个gdi函数都需要一个句柄,而图形操作描绘表方式下只需一个句柄就可任意调用pengl函数。也就是说,只要当前启用了某个图形操作描绘表,那么在未删除图形操作描绘表之前可以调用任何pengl函数,进展各种操作。2.像素格式在创立一个图形操作描绘表之前,首先必须设置像素格式。像素格式含有设备绘图界面的属性,这些属性包括绘图界面是用rgba形式还是颜色表形式,像系缓存是用单

9、缓存还是双缓存,以及颜色位数、深度缓存和模板缓存所用的位数,还有其他一些属性信息。(1)像素格式构造每个pengl显示设备都支持一种指定的像素格式号。一般用一个名为pixelfratdesriptr的构造来表示某个特殊的像素格式,这个构造包含26个属性信息。in32定义的pixelfratdesriptr如下所示:typedefstruttagpixelfratdesriptrrdnsize;rdnversin;drddflags;byteipixeltype;bytelrbits;byteredbits;byteredshift;bytegreenbits;bytegreenshift;by

10、tebluebits;byteblueshift;bytealphabits;bytealphashift;byteaubits;byteauredbits;byteaugreenbits;byteaubluebits;byteaualphabits;bytedepthbits;bytestenilbits;byteauxbuffers;byteilayertype;bytebreserved;drddlayerask;drddvisibleask;drdddaageask;pixelfratdesriptr,*ppixelfratdesriptr,far*lppixelfratdesript

11、r;(2)初始化pixelfratdesriptr构造pixelfratdesriptr中每个变量值的详细含义和设置可以参考有关资料,下面举出一个pixelfratdesriptr初始化例子来简要说明相关变量的意义。定义pixelfratdesriptr构造的pfd如下:pixelfratdesriptrpfd=sizef(pixelfratdesriptr),/构造尺寸l,/构造版本pfd-dra-t-inds|pfd-supprt-pengl,/特性标志pfd-type-rgba,/rgba形式24,/24位颜色0,0,0,0,0,0,/不涉及这些属性0,0,0,0,0,0,0,/没有al

12、pha缓存和累积缓存32,/32位深度缓存0,0,/没有模板缓存和辅助缓存pfd-ain-plane,/主层类型0,/保存构造数0,0,0,/不支持构造数;在这个构造里,前两个变量的含义十清楚显。第三个变量dflags的值是pfd-dra-t-inds|pfd-supprt-pengl,说明应用程序使用pengl函数来绘制窗口,第四个说明当前采用rgba颜色形式,第五个采用24位真彩色,即1.67千万种颜色,假如是256色系统那么自动实现颜色抖动;因为没有使用alpha缓存和累积缓存,所以从变量alphabits到aualphabits都设置为0;深度缓存设置为32位,这个缓存能解决三维场景的

13、消隐问题;变量auxbuffers设置为0,在indsnt下不支持辅助缓存;indsnt下针对pengl变量ilayertype只能设置为pfd-ain-plane,但其他平台也许支持pfd-verlay-plane或pfd-underlay-plane;接下来breserved变量只能设为0,而最后三个变量indsnt都不支持,故全设置成0。(3)设置像素格式当初始化pixelfratdesriptr构造后,就要设置像素格式。下面几段从v+2.0的f程序中摘出的代码就是设置像素格式的方式。代码如下:lientdlientd(this);intpixelfrat=hsepixelfrat(li

14、entd.-hd,pfd);blresult=setpixelfrat(lientd.-hd,pixelfrat,pfd);第一行语句说明得到一个应用窗口客户区的设置描绘表。第二行调用hsepixelfrat()选择一个像素格式,并将像素格式索引号返回给pixelfrat变量;函数中第一个参数是选择像素格式的设置描绘表的句柄,第二个参数是pixelfratdesriptr构造的地址。假如调用失败那么返回0;否那么返回像素格式索引号。第三行调用setpixelfrat()设置像素格式,三个参数分别是设备描绘表的句柄、像素格式索引号和pixelfratdesriptr构造的地址。假如调用成功那么返

15、回ture;否那么返回false。3.创立图形操作描绘表正如前所述,必须创立图形操作描绘表并启用它后,才能调用pengl函数在窗口内进展各种图形操作。一般说来,利用f中增补的管理图形操作描绘表方法来编程比拟方便。下面举一例:intpenglvie:nreate(lpreatestrutlpreatestrut)if(vie:nreate(lpreatestrut)=-1)return-1;/td:addyurspeializedreatindeherepixelfratdesriptrpfd=sizef(pixelfratdesriptir),/struturesizel,/strutureversinnuberpfd-dra-t-inds|pfd-supprt-pengl,/prpertyflags

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号