主题:  openGL到底是显卡的什么技术?

loveadv

职务:普通成员
等级:3
金币:1.0
发贴:669
注册:2001/10/7 14:56:57
#12002/3/10 17:18:01
openGL到底是显卡的什么技术?



eShaka

职务:版主
等级:6
金币:15.0
发贴:5019
注册:2001/6/13 18:13:53
#22002/3/10 18:29:00
OpenGL成为目前三维图形开发标准
2001-10-8 22:06:38 hy 阅读89次
在计算机发展初期,人们就开始从事计算机图形的开发。直到计算机硬软件和计算机图

形学高度发达的九十年代,人们发现复杂的数据以视觉的形式表现时是最易理解的,因而三

维图形得以迅猛发展,于是各种三维图形工具软件包相继推出,如PHIGS、PEX、RenderMan

等。这些三维图形工具软件包有些侧重于使用方便,有些侧重于渲染效果或与应用软件的连

接,但没有一种三维工具软件包在交互式三维图形建模能力、外部设备管理以及编程方便程

度上能够OpenGL相比拟。OpenGL经过对GL的进一步发展,实现二维和三维的高级图形技术,

在性能上表现得异常优越,它包括建模、变换、光线处理、色彩处理、动画以及更先进的能

力,如纹理影射、物体运动模糊等。OpenGL的这些能力为实现逼真的三维渲染效果、建立交

互的三维景观提供了优秀的软件工具。OpenGL在硬件、窗口、操作系统方面是相互独立的。

许多计算机公司已经把OpenGL集成到各种窗口和操作系统中,其中操作系统包括UNIX、

Windows NT、DOS等,窗口系统有X窗口、Windows等。为了实现一个完整功能的图形处理系

统,设计一个与OpenGL相关的系统结构为:其最底层是图形硬件,第二层为操作系统,第三

层为窗口系统,第四层为OpenGL,第五层为应用软件。OpenGL是网络透明的,在客户—服务

器(Client-Server)体系结构中,OpenGL允许本地和远程绘图。所以在网络系统中,OpenGL

在X窗口、Windows或其它窗口系统下都可以以一个独立的图形窗口出现。

OpenGL作为一个性能优越的图形应用程序设计界面(API)而适合于广泛的计算环境,从

个人计算机到工作站和超级计算机,OpenGL都能实现高性能的三维图形功能。由于许多在计

算机界具有领导地位的计算机公司纷纷采用OpenGL作为三维图形应用程序设计界面,OpenGL

应用程序具有广泛的移植性。因此,OpenGL已成为目前的三维图形开发标准,是从事三维图

形开发工作的技术人员所必须掌握的开发工具。 (hxg)



eShaka

职务:版主
等级:6
金币:15.0
发贴:5019
注册:2001/6/13 18:13:53
#32002/3/10 18:29:20
OpenGL 基本程序结构
2001-10-8 22:00:51 阅读48次
用OpenGL编写的程序结构类似于用其他语言编写的程序。实际上,OpenGL是一个丰富

的三维图形函数库,编写OpenGL程序并非难事,只需在基本C语言中调用这些函数,用法同

Turbo C、Microsoft C等类似,但也有许多不同之处。

本书所有的程序都是在Windows NT的Microsoft Visual C++ 2.0 集成环境下编译连接

的,其中有部分头文件和函数是为这个环境所用的,如头文件"glos.h"。此外,为便于各类

读者同时快速入门,在短时间内掌握OpenGL编程的基本方法和技巧,书中例子尽量采用标准

ANSI C调用OpenGL函数来编写,而且所有例程都只采用OpenGL附带的辅助库中的窗口系统。

此外,这样也便于程序在各平台间移植,尤其往工作站UNIX操作系统移植时,也只需改动头

文件等很少很少的部分。



下面列出一个简单的OpenGL程序simple.c:



例 2-1 OpenGL简单例程 simple.c



#include

#include

#include "glos.h"



void main(void)

{

auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);

auxInitPosition(0,0,500,500);

auxInitWindow("simple");



glClearColor(0.0,0.0,0.0,0.0);

glClear(GL_COLOR_BUFFER_BIT);



glColor3f(1.0,0.0,0.0);

glRectf(-0.5,-0.5,0.5,0.5);



glFlush();

_sleep(1000);



}





这个程序运行结果是在屏幕窗口内画一个红色的方块。下面具体分析整个程序结构:

首先,在程序最开始处是OpenGL头文件:。前一个是gl库的

头文件,后一个是辅助库的头文件。此外,在以后的几章中还将说明OpenGL的另外两个头文

件,一个是实用库的头文件,另一个是X窗口扩充库的头文件(这个

常用在工作站上)。接下来是主函数main()的定义:

一般的程序结构是先定义一个窗口,



auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);

auxInitPosition(0,0,500,500);

auxInitWindow("simple");



auxInitDisplayMode(AUX_SINGLE|AUX_RGBA)设置窗口显示模式为RGBA方式,即彩色方

式,并且图形缓存为单缓存(SINGLE BUFFER)。auxInitPosition(0,0,500,500)定义窗口的

初始位置,前两个参数(0,0)为窗口的左上角点的屏幕坐标,后两个参数(500,500)为窗口的

宽度和高度。auxInitWindow("simple")是窗口初始化,字符参数是窗口名称。



然后是窗口内清屏,



glClearColor(0.0,0.0,0.0,0.0);

glClear(GL_COLOR_BUFFER_BIT);



第一句将窗口清为黑色,第二句将颜色缓冲区清为glClearColor(0.0,0.0,0.0,0.0)命

令所设置的颜色,即同窗口背景颜色一致。



再接着是在窗口内画一个物体,



glColor3f(1.0,0.0,0.0);

glRectf(-0.5,-0.5,0.5,0.5);



很明显,第一句设置物体颜色,函数中前三个参数分别为R、G、B值,最后一个参数是

Alpha值,范围都从0至1;第二句绘制一个二维矩形。

注意,OpenGL是针对三维图形而言,因此用作OpenGL编程绘制物体必须意识到任何一

个物体都是三维的,具有空间性,而显示于屏幕上的物体都是三维物体在二维平面上的投影。

从表面上看,上述程序代码很简单,实际上已经用到了缺省的投影形式(正射投影)。

再看glFlush()函数,表示强制绘图完成。

最后一句_sleep(1000),参数单位为毫秒,整句意思是保持现有状况一秒钟,然后结束

程序运行。这个函数是VC的库函数。

总之,OpenGL程序基本结构为定义窗口、清理窗口、绘制物体、结束运行。



eShaka

职务:版主
等级:6
金币:15.0
发贴:5019
注册:2001/6/13 18:13:53
#42002/3/10 18:29:47
OpenGL基本功能
2001-10-8 22:04:57 阅读50次
OpenGL能够对整个三维模型进行渲染着色,从而绘制出与客观世界十分类似的三维景

象。另外OpenGL还可以进行三维交互、动作模拟等。具体的功能主要有以下这些内容。

(1)模型绘制

OpenGL能够绘制点、线和多边形。应用这些基本的形体,可以构造出几乎所有的三维

模型。OpenGL通常用模型的多边形的顶点来描述三维模型。如何通过多边形及其顶点来描述

三维模型,本书的基础篇和提高篇中有详细的介绍。

(2)模型观察

在建立了三维景物模型后,就需要用OpenGL描述如何观察所建立的三维模型。观察三

维模型是通过一系列的坐标变换进行的。模型的坐标变换在使观察者能够在视点位置观察与

视点相适应的三维模型景观。在整个三维模型的观察过程中,投影变换的类型决定观察三维

模型的观察方式,不同的投影变换得到的三维模型的景象也是不同的。最后的视窗变换则对

模型的景象进行裁剪缩放,即决定整个三维模型在屏幕上的图象。

(3)颜色模式的指定

OpenGL应用了一些专门的函数来指定三维模型的颜色。程序开发者可以选择二个颜色模

式,即RGBA模式和颜色表模式。在RGBA模式中,颜色直接由RGB值来指定;在颜色表模式

中,颜色值则由颜色表中的一个颜色索引值来指定。开发者还可以选择平面着色和光滑着色

二种着色方式对整个三维景观进行着色。

(4)光照应用

用OpenGL绘制的三维模型必须加上光照才能更加与客观物体相似。OpenGL提供了管理

四种光(辐射光、环境光、镜面光和漫反射光)的方法,另外还可以指定模型表面的反射特性。

(5)图象效果增强

OpenGL提供了一系列的增强三维景观的图象效果的函数,这些函数通过反走样、混合和

雾化来增强图象的效果。反走样用于改善图象中线段图形的锯齿而更平滑,混合用于处理模

型的半透明效果,雾使得影像从视点到远处逐渐褪色,更接近于真实。

(6)位图和图象处理

OpenGL还提供了专门对位图和图象进行操作的函数。

(7)纹理映射

三维景物因缺少景物的具体细节而显得不够真实,为了更加逼真地表现三维景物,OpenGL

提供了纹理映射的功能。OpenGL提供的一系列纹理映射函数使得开发者可以十分方便地把真

实图象贴到景物的多边形上,从而可以在视窗内绘制逼真的三维景观。

(8)实时动画

为了获得平滑的动画效果,需要先在内存中生成下一幅图象,然后把已经生成的图象从内

存拷贝到屏幕上,这就是OpenGL的双存技术(double buffer)。OpenGL提供了双缓存技术的

一系列函数。

(9)交互技术

目前有许多图形应用需要人机交互,OpenGL提供了方便的三维图形人机交互接口,用户

可以选择修改三维景观中的物体。 (hxg)



eShaka

职务:版主
等级:6
金币:15.0
发贴:5019
注册:2001/6/13 18:13:53
#52002/3/10 18:31:05
1.1、OpenGL使人们进入三维图形世界
  我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体。我们又生活在一个充满信息的世界中,能否尽快地理解并运用这些信息将直接影响事业的成败,所以我们需要用一种最直接的形式来表示这些信息。
  最近几年计算机图形学的发展使得三维表现技术得以形成,这些三维表现技术使我们能够再现三维世界中的物体,能够用三维形体来表示复杂的信息,这种技术就是可视化(Visualization)技术。可视化技术使人能够在三维图形世界中直接对具有形体的信息进行操作,和计算机直接交流。这种技术已经把人和机器的力量以一种直觉而自然的方式加以统一,这种革命性的变化无疑将极大地提高人们的工作效率。可视化技术赋予人们一种仿真的、三维的并且具有实时交互的能力,这样人们可以在三维图形世界中用以前不可想象的手段来获取信息或发挥自己创造性的思维。机械工程师可以从二维平面图中得以解放直接进入三维世界,从而很快得到自己设计的三维机械零件模型。医生可以从病人的三维扫描图象分析病人的病灶。军事指挥员可以面对用三维图形技术生成的战场地形,指挥具有真实感的三维飞机、军舰、坦克向目标开进并分析战斗方案的效果。
  更令人惊奇的是目前正在发展的虚拟现实技术,它能使人们进入一个三维的、多媒体的虚拟世界,人们可以游历远古时代的城堡,也可以遨游浩翰的太空。所有这些都依赖于计算机图形学、计算机可视化技术的发展。人们对计算机可视化技术的研究已经历了一个很长的历程,而且形成了许多可视化工具,其中SGI公司推出的GL三维图形库表现突出,易于使用而且功能强大。利用GL开发出来的三维应用软件颇受许多专业技术人员的喜爱,这些三维应用 软件已涉及建筑、产品设计、医学、地球科学、流体力学等领域。随着计算机技术的继续发展,GL已经进一步发展成为OpenGL,OpenGL已被认为是高性能图形和交互式视景处理的标准,目前包括ATT公司UNIX软件实验室、IBM公司、DEC公司、SUN公司、HP公司、Microsoft公司和SGI公司在内的几家在计算机市场占领导地位的大公司都采用了OpenGL图形标准。
  值得一提的是,由于Microsoft公司在Windows NT中提供OpenGL图形标准,OpenGL将在微机中广泛应用,尤其是OpenGL三维图形加速卡和微机图形工作站的推出,人们可以在微机上实现三维图形应用,如CAD设计、仿真模拟、三维游戏等,从而更有机会、更方便地使用OpenGL及其应用软件来建立自己的三维图形世界。

1.2、OpenGL提供直观的三维图形开发环境
  OpenGL实际上是一种图形与硬件的接口。它包括了120个图形函数,开发者可以用这些函数来建立三维模型和进行三维实时交互。与其他图形程序设计接口不同,OpenGL提供了十分清晰明了的图形函数,因此初学的程序设计员也能利用OpenGL的图形处理能力和1670万种色彩的调色板很快地设计出三维图形以及三维交互软件。
  OpenGL强有力的图形函数不要求开发者把三维物体模型的数据写成固定的数据格式,这样开发者不但可以直接使用自己的数据,而且可以利用其他不同格式的数据源。这种灵活性极大地节省了开发者的时间,提高了软件开发效益。
  长期以来,从事三维图形开发的技术人员都不得不在自己的程序中编写矩阵变换、外部设备访问等函数,这样为调制这些与自己的软件开发目标关系并不十分密切的函数费脑筋,而OpenGL正是提供一种直观的编程环境,它提供的一系列函数大大地简化了三维图形程序。例如:

OpenGL提供一系列的三维图形单元供开发者调用。

OpenGL提供一系列的图形变换函数。
OpenGL提供一系列的外部设备访问函数,使开发者可以方便地访问鼠标、键盘、空间球、数据手套等这种直观的三维图形开发环境体现了OpenGL的技术优势,这也是许多三维图形开发者热衷于OpenGL的缘由所在。

1.3、OpenGL成为目前三维图形开发标准
  OpenGL成为目前三维图形开发标准在计算机发展初期,人们就开始从事计算机图形的开发。直到计算机硬软件和计算机图形学高度发达的九十年代,人们发现复杂的数据以视觉的形式表现时是最易理解的,因而三维图形得以迅猛发展,于是各种三维图形工具软件包相继推出,如PHIGS、PEX、RenderMan等。这些三维图形工具软件包有些侧重于使用方便,有些侧重于渲染效果或与应用软件的连接,但没有一种三维工具软件包在交互式三维图形建模能力、外部设备管理以及编程方便程度上能够OpenGL相比拟。
  OpenGL经过对GL的进一步发展,实现二维和三维的高级图形技术,在性能上表现得异常优越,它包括建模、变换、光线处理、色彩处理、动画以及更先进的能力,如纹理影射、物体运动模糊等。OpenGL的这些能力为实现逼真的三维渲染效果、建立交互的三维景观提供了优秀的软件工具。OpenGL在硬件、窗口、操作系统方面是相互独立的。
  许多计算机公司已经把OpenGL集成到各种窗口和操作系统中,其中操作系统包括UNIX、Windows NT、DOS等,窗口系统有X窗口、Windows等。为了实现一个完整功能的图形处理系统,设计一个与OpenGL相关的系统结构为:其最底层是图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,第五层为应用软件。
  OpenGL是网络透明的,在客户 — 服务器(Client-Server)体系结构中,OpenGL允许本地和远程绘图。所以在网络系统中,OpenGL在X窗口、Windows或其它窗口系统下都可以以一个独立的图形窗口出现。OpenGL作为一个性能优越的图形应用程序设计界面(API)而适合于广泛的计算环境,从个人计算机到工作站和超级计算机,OpenGL都能实现高性能的三维图形功能。由于许多在计算机界具有领导地位的计算机公司纷纷采用OpenGL作为三维图形应用程序设计界面,OpenGL应用程序具有广泛的移植性。因此,OpenGL已成为目前的三维图形开发标准,是从事三维图形开发工作的技术人员所必须掌握的开发工具。



eShaka

职务:版主
等级:6
金币:15.0
发贴:5019
注册:2001/6/13 18:13:53
#62002/3/10 18:31:58