Y
YB_unique
Unregistered / Unconfirmed
GUEST, unregistred user!
1993年一家名为SGI的公司推出了OpenGL,谁能想到几年以后它已经成为了事实的三维图形开发工业标准。作为一个
图形应用程序设计界面(API)它以高性能的交互式三维图形建模能力和易于编程开发,得到了Microsoft、IBM、DEC、
Sun、HP等大公司的认同。OpenGL已经成为一种标准,是从事三维图形开发工作的必要工具。也因此彻底改变了过去只能
依赖于价格昂贵的图形工作站及复杂的三维图形软件从事三维图形计算机应用的历史。目前,OpenGL由独立非赢利组织
ARB管理。它在WINDOWS中以动态链接库的形式存在,Win95以后的版本都自带有微软公司实现的OpenGL。瞧瞧系统目录下
不是有个“opengl32.dll”来着。
OpenGL是独立于操作系统的开放式的三维图形标准。实际上是一种图形与硬件的接口,它包括了几百个图形函数,
利用这些函数可以建立三维模型和三维实时交互。与其他图形软件程序设计接口不同的是OpenGL提供了非常清晰的图形
函数。利用这些图形函数,用户不但可以直接使用自己的数据,而且可以利用其他的数据源。OpenGL也是网络透明的,
它的运行机制是客户/服务器机制,由客户 (OpenGL的应用程序)向服务器(OpenGL的内核)发送OpenGL命令请求,服务
器则解释执行这些命令。一般客户和服务器运行于同一台计算机上。在 Windows平台上,OpenGL图形库被封装在
opengl32.dll中。通过调用opengl32.dll处理用户程序对OpenGL函数的调用,然后再调用winsrv.dll使OpenGL命令再
次得到处理并直接传给系统的其他设备驱动接口,最后把处理的图形指令传递给视频显示驱动程序。
OpenGL提供了两种颜色模式:RGBA模式和颜色索引模式。在RGBA模式下所有颜色的定义用RGB三个值来表示,有时
也加上Alpha值即透明度。RGB三个分量值的范围都在0和1之间,它们在最终颜色中所占的比例与它们的值成正比。如:
(1,1,0)表示黄色,(0,0,1)表示蓝色。颜色索引模式下每个象素的颜色是用颜色索引表中的某个颜色索引值表示
(类似于从调色板中选取颜色)。由于三维图形处理中要求颜色灵活,而且在阴影,光照,雾化,融合等效果处理中
RGBA 的效果要比颜色索引模式好,所以,在编程时大多采用RGBA模式。OpenGL还提供了双缓存来绘制图像。即在显示
前台缓存中的图像同时,后台缓存绘制第二幅图像。当后台绘制完成后,后台缓存中的图像就显示出来,此时原来的
前台缓存开始绘制第三幅图像,如此循环往复,以增加图像的输出速度。
OpenGL的光源大体分为三种:环境光即来自于周围环境没有固定方向的光。漫射光来自同一个方向照射到物体表
面时在物体的各个方向上均匀发散。镜面光来自于同一方向也沿同一个方向反射。全局环境光是一种特殊的环境光,
它不来自于某种特定光源,通常做为场景的自然光源。
OpenGL中光源设定之Delphi示例如下:
glLightfv(GL_LIGHT1, GL_AMBIENT, @LightAmb); //设置环境光源
glLightfv(GL_LIGHT1, GL_DIFFUSE, @LightDif); //设置漫射光源
glLightfv(GL_LIGHT1, GL_POSITION,@LightPos); //设置光源位置
glEnable(GL_LIGHT1); // 使用Light1
glEnable(GL_LIGHTING); // 打开光照
GL_DIFFUSE 光源为漫射光光源
GL_AMBIENT 光源为环境光光源
GL_SPECULAR 光源为镜面光光源
怎么样?看起来是不是觉得很简单清晰呢?没想象中的那么无厘头吧!^_^
在OpenGL中,通过材料对光的三原色(红绿蓝)的反射率大小来定义材料的颜色。材料的颜色分为环境色,漫反射
色和镜面反射色,由此决定该材料对应不同的光呈现出不同的反射率。由于人所看到物体的颜色是光源发出的光经物
体反射后进入眼睛的颜色。所以,物体的颜色是光源的环境光,漫反射光和镜面反射光与材料的环境色,漫反射色和
镜面反射色的综合。例如:OpenGL的光源色是(LR,LG,LB),材质色为(MR,MG,MB),那么,在忽略其他反射效果的
情况下,最终进入眼睛的颜色是(LR*MR,LG*MG,LB*MB)。
由于我们是三维绘图,所以采用不同的视点和观察范围,就会产生不同的观察效果。而计算机只能显示二维图形,
所以在表示真实世界中的三维图形时,需将三维视景转换成二维视景。这是产生三维立体效果的关键。OpenGL提供了
两种将3D图形转换成2D图形的方式。正投影(Orthographic Projection)和透视投影(Perspective Projection)。其
中,正投影指投影后物体的大小与视点的远近无关,通常用于CAD设计;而透视投影则符合人的心理习惯,离视点近
的物体大,离视点远的物体小,通常用于游戏制作。此外,在OpenGL中还要定义投影范围,只有在该范围中的物体才
会被投射到计算机屏幕上,投影范围外的物体将被裁减掉。
目前创建三维图像API的标准主要有Microsoft的Direct3D、SGI的OpenGL、Intel的3DR、Apple的QuickDraw-
3DRave、Autodesk的Heidi、Argonaut的Brender和Render Morphics的Reality。其中影响最大的是前两家。Direct3D
和OpenGL的技术各有千秋,相比而言,OpenGL的历史更长一些,也更成熟一些。客观地说,目前在3D图形开发上
OpenGL还是要更胜一筹。但是微软怎会就此罢手呢?2001年7月27日,其公布了最新研制的DirectX 9的部分内幕消
息,据称DirectX 9将是一个全新的.dll文件,这将是一次很值得期盼的升级。它将引进剪裁平面(Scissor Planes)
技术,这并不是专门为游戏而引进的,而是给较复杂的应用程序使用,它将对需要硬件支持的像素矩形修剪,这就是
其名称的意义,把物体放在视野中,然后裁掉看不到的部分。这对于开启多重窗口和剪辑视频而言有很大的帮助。
而这一特性在OpenGL中必须要有某种程度的精确性和硬件支持才能发挥得很好。OpenGL的剪裁和模版印刷功能通常
需要停止对部分屏幕画面的写入动作。
但不管怎么而言,现在OpenGL还是一面屹立不倒的大旗,其版本也在不断升级完善当中。最新的版本为OpenGL
1.3,而在Delphi下通过转换的文件是可以支持OpenGL 1.2的。
下面是Delphi下开发OpenGL的一些利器和必须的装备。大家先去好好看看吧!
http://www.lischke-online.de/Graphics.html#GraphicEx
下载GLScene和OpenGL 1.2 个人以为是Delphi下最好的!
http://www.jet3d.com/download.htm 许多3D开发的好东西!
http://www.multimania.com/netsach/glaux.html BCB下的glaux!
图形应用程序设计界面(API)它以高性能的交互式三维图形建模能力和易于编程开发,得到了Microsoft、IBM、DEC、
Sun、HP等大公司的认同。OpenGL已经成为一种标准,是从事三维图形开发工作的必要工具。也因此彻底改变了过去只能
依赖于价格昂贵的图形工作站及复杂的三维图形软件从事三维图形计算机应用的历史。目前,OpenGL由独立非赢利组织
ARB管理。它在WINDOWS中以动态链接库的形式存在,Win95以后的版本都自带有微软公司实现的OpenGL。瞧瞧系统目录下
不是有个“opengl32.dll”来着。
OpenGL是独立于操作系统的开放式的三维图形标准。实际上是一种图形与硬件的接口,它包括了几百个图形函数,
利用这些函数可以建立三维模型和三维实时交互。与其他图形软件程序设计接口不同的是OpenGL提供了非常清晰的图形
函数。利用这些图形函数,用户不但可以直接使用自己的数据,而且可以利用其他的数据源。OpenGL也是网络透明的,
它的运行机制是客户/服务器机制,由客户 (OpenGL的应用程序)向服务器(OpenGL的内核)发送OpenGL命令请求,服务
器则解释执行这些命令。一般客户和服务器运行于同一台计算机上。在 Windows平台上,OpenGL图形库被封装在
opengl32.dll中。通过调用opengl32.dll处理用户程序对OpenGL函数的调用,然后再调用winsrv.dll使OpenGL命令再
次得到处理并直接传给系统的其他设备驱动接口,最后把处理的图形指令传递给视频显示驱动程序。
OpenGL提供了两种颜色模式:RGBA模式和颜色索引模式。在RGBA模式下所有颜色的定义用RGB三个值来表示,有时
也加上Alpha值即透明度。RGB三个分量值的范围都在0和1之间,它们在最终颜色中所占的比例与它们的值成正比。如:
(1,1,0)表示黄色,(0,0,1)表示蓝色。颜色索引模式下每个象素的颜色是用颜色索引表中的某个颜色索引值表示
(类似于从调色板中选取颜色)。由于三维图形处理中要求颜色灵活,而且在阴影,光照,雾化,融合等效果处理中
RGBA 的效果要比颜色索引模式好,所以,在编程时大多采用RGBA模式。OpenGL还提供了双缓存来绘制图像。即在显示
前台缓存中的图像同时,后台缓存绘制第二幅图像。当后台绘制完成后,后台缓存中的图像就显示出来,此时原来的
前台缓存开始绘制第三幅图像,如此循环往复,以增加图像的输出速度。
OpenGL的光源大体分为三种:环境光即来自于周围环境没有固定方向的光。漫射光来自同一个方向照射到物体表
面时在物体的各个方向上均匀发散。镜面光来自于同一方向也沿同一个方向反射。全局环境光是一种特殊的环境光,
它不来自于某种特定光源,通常做为场景的自然光源。
OpenGL中光源设定之Delphi示例如下:
glLightfv(GL_LIGHT1, GL_AMBIENT, @LightAmb); //设置环境光源
glLightfv(GL_LIGHT1, GL_DIFFUSE, @LightDif); //设置漫射光源
glLightfv(GL_LIGHT1, GL_POSITION,@LightPos); //设置光源位置
glEnable(GL_LIGHT1); // 使用Light1
glEnable(GL_LIGHTING); // 打开光照
GL_DIFFUSE 光源为漫射光光源
GL_AMBIENT 光源为环境光光源
GL_SPECULAR 光源为镜面光光源
怎么样?看起来是不是觉得很简单清晰呢?没想象中的那么无厘头吧!^_^
在OpenGL中,通过材料对光的三原色(红绿蓝)的反射率大小来定义材料的颜色。材料的颜色分为环境色,漫反射
色和镜面反射色,由此决定该材料对应不同的光呈现出不同的反射率。由于人所看到物体的颜色是光源发出的光经物
体反射后进入眼睛的颜色。所以,物体的颜色是光源的环境光,漫反射光和镜面反射光与材料的环境色,漫反射色和
镜面反射色的综合。例如:OpenGL的光源色是(LR,LG,LB),材质色为(MR,MG,MB),那么,在忽略其他反射效果的
情况下,最终进入眼睛的颜色是(LR*MR,LG*MG,LB*MB)。
由于我们是三维绘图,所以采用不同的视点和观察范围,就会产生不同的观察效果。而计算机只能显示二维图形,
所以在表示真实世界中的三维图形时,需将三维视景转换成二维视景。这是产生三维立体效果的关键。OpenGL提供了
两种将3D图形转换成2D图形的方式。正投影(Orthographic Projection)和透视投影(Perspective Projection)。其
中,正投影指投影后物体的大小与视点的远近无关,通常用于CAD设计;而透视投影则符合人的心理习惯,离视点近
的物体大,离视点远的物体小,通常用于游戏制作。此外,在OpenGL中还要定义投影范围,只有在该范围中的物体才
会被投射到计算机屏幕上,投影范围外的物体将被裁减掉。
目前创建三维图像API的标准主要有Microsoft的Direct3D、SGI的OpenGL、Intel的3DR、Apple的QuickDraw-
3DRave、Autodesk的Heidi、Argonaut的Brender和Render Morphics的Reality。其中影响最大的是前两家。Direct3D
和OpenGL的技术各有千秋,相比而言,OpenGL的历史更长一些,也更成熟一些。客观地说,目前在3D图形开发上
OpenGL还是要更胜一筹。但是微软怎会就此罢手呢?2001年7月27日,其公布了最新研制的DirectX 9的部分内幕消
息,据称DirectX 9将是一个全新的.dll文件,这将是一次很值得期盼的升级。它将引进剪裁平面(Scissor Planes)
技术,这并不是专门为游戏而引进的,而是给较复杂的应用程序使用,它将对需要硬件支持的像素矩形修剪,这就是
其名称的意义,把物体放在视野中,然后裁掉看不到的部分。这对于开启多重窗口和剪辑视频而言有很大的帮助。
而这一特性在OpenGL中必须要有某种程度的精确性和硬件支持才能发挥得很好。OpenGL的剪裁和模版印刷功能通常
需要停止对部分屏幕画面的写入动作。
但不管怎么而言,现在OpenGL还是一面屹立不倒的大旗,其版本也在不断升级完善当中。最新的版本为OpenGL
1.3,而在Delphi下通过转换的文件是可以支持OpenGL 1.2的。
下面是Delphi下开发OpenGL的一些利器和必须的装备。大家先去好好看看吧!
http://www.lischke-online.de/Graphics.html#GraphicEx
下载GLScene和OpenGL 1.2 个人以为是Delphi下最好的!
http://www.jet3d.com/download.htm 许多3D开发的好东西!
http://www.multimania.com/netsach/glaux.html BCB下的glaux!