OpenGL简介1
- 格式:pdf
- 大小:142.79 KB
- 文档页数:3
C# 实例OpenGL是图形硬件的一个软件接口,是一种快速、高质量的3D图形软件。
它提供了近120个绘制点、线点多边形等3D图形的命令,可以完成绘制物体、变换、光照处理、着色、反走样、融合、雾化、位图和图像、纹理映射、动画等基本操作,通过把这一系列基本操作进行组合,可以构造更复杂的3D物体和描绘丰富多彩、千变万化的客观世界。
C#是以运行库为基础的一种编程语言,它几乎集中了所有关于软件开发和软件工程研究的最新成果,如面向对象、类型安全等,并被寄希望成为微软发布的用于企业编写基于COM+和视窗系统的程序语言中的最好的一种[2]。
与C++相比,C#的语法更加简洁,调试更加容易,且应用程序开发更加快速。
把C#和OpenGL结合起来开发3D应用程序和软件,将显著提高开发效率。
在C#中,程序间的依赖项通过符号而不是文本来控制,因而不使用头文件,而且opengl32.dll以及opengl32.lib等文件也不能像在C++中那样进行部署和引用,所以,无法直接使用OpenGL所提供的图形库。
在C#中通过调用OpenGL 动态链接库文件:csgl.dll和csgl.native.dll实现OpenGL所提供的强大的图形功能。
这2个文件可以从网页上获取。
csgl.dll中定义了4个名称空间,即CsGL,CsGL.OpenGL,CsGL.Pointers,CsGL.Util,其中,CsGL.OpenGL定义的4个类OpenGL、GL、GLU、GLUT中封装了几乎所有的OpenGL函数、用户库函数、辅助库函数和实用库函数及常量;类OpenGLControl中定义了OpenGL场景绘制函数,如场景的初始化、场景的绘制函数等;类OpenGLContext中定义了OpenGL环境控制命令,如像素格式、调色板的创建等命令。
CsGL.Util定义了键盘、鼠标事件及异常处理等。
为了能够使用这2个文件,先将这2个文件拷贝到系统文件夹%systemroot%╲system32中,然后在项目的属性页对话框中将"引用路径"设置为系统文件夹%systemroot%╲system32,这样C#就可以找到运行/调试应用程序所需要的库文件。
图形学和API| 图形学、 图 学 API和OpenGL | 学习API的方法y y正向学习 反向学习第二章 OpenGL编程| 2.1 | 2.2 | 2.3OpenGL简介 一个简单OpenGL程序例子 三维图形绘制2 1 OpenGL简介 2.1SGI 与 GL| SiliconGraphics (SGI) 通过硬件实现流水线体 过 件实 流水线体 系,改良了图形工作站 (1982) | 应用程序通过一个称为GL的库与系统通讯 | 借助于GL,可以非常简单地设计出三维交互图 形应用程序5OpenGL| GL的成功导致了 的成功导致 OpenGL的出现 的 (1992),这是 这一个与平台无关的API:yy y y y开放的三维图形软件包,它独立于窗口系统和操作系 统,以它为基础开发的应用程序可以十分方便地在各 种平台间移植 与Visual C++紧密接口,易于使用 与硬件非常贴近 从而可以充分发挥其功能 与硬件非常贴近,从而可以充分发挥其功能 着重在于渲染(rendering) 没有提供窗 和输入接 没有提供窗口和输入接口,从而避免依赖于具体的窗 从而避免依赖于具体的窗 口系统6OpenGL 库| OpenGL O GLy y y核心库 实用库 (GLU)Windows: OpenGL32 大多数unix/linux i /li 系统 GL 系统: 利用OpenGL O GL核心库提供一些功能,从而避免重复编 核心库提供 些功能 从而避免重复编 写代码 X window 系统:GLX Windows: WGL Macintosh:AGL7| OpenGL| 与窗口系统的连接y y yGLUT| OpenGLy|实用 实用工具库 库 (GLUT)提供所有窗口系统的共同功能打开窗口 | 从鼠标和键盘获取输入 | 菜单 | 时间驱动y代码可以在平台间移植,但是GLUT缺乏在特定平台 上优秀工具包所具有的功能|滚动条 /resources/libraries/glut/8y官方地址|软件组织应用程序OpenGL Motif widget or similarGLUT GLU GLGLX, AGL or WGLX, Win32, Mac O/S 图形软硬件9OpenGL 函数| 基本图元函数 基本图 数y点 Points, 线段 Line Segments, 多边形 Polygons等| 属性函数 | 视图函数 | 变换函数 | 输入函数(GLUT) | 控制函数(GLUT) | 查询函数10OpenGL 状态| OpenGL是一个状态机( 个状态机 state machine) | OpenGL 函数具有两种类型y生成基本形状如果形状可见,则得到输出 | 对顶点的处理和图元的表现由状态控制|y改变状态,或返回状态信息变换函数 | 属性函数|11面向对象方面的缺陷| OpenGL不是面向对象的,因此逻辑上的一 面向 象的 此 辑上的个函数却对应着多个OpenGL函数:glVertex3f glVertex2i glVertex3dv| 内在存储模式是相同的 式 | 容易在C++中创建重载函数,但效率却成为主要问题。
使用OpenGL进行三维游戏引擎开发与性能优化OpenGL是一种跨平台的图形库,广泛应用于三维游戏开发中。
本文将介绍如何利用OpenGL进行三维游戏引擎开发,并探讨如何优化性能,提升游戏体验。
一、OpenGL简介OpenGL是一种用于渲染2D和3D矢量图形的跨平台图形库。
它提供了一系列的API,可以让开发者利用GPU进行图形渲染,实现高性能的图形效果。
在三维游戏开发中,OpenGL被广泛应用于渲染场景、模型、光照等方面。
二、三维游戏引擎开发1. 游戏引擎架构在开发三维游戏引擎时,通常会采用组件化的架构。
引擎包括渲染引擎、物理引擎、音频引擎等多个模块,各模块相互独立但又相互协作,共同构建出一个完整的游戏引擎。
2. 场景渲染利用OpenGL进行场景渲染是三维游戏引擎开发的核心部分。
通过构建场景图、加载模型、设置光照等操作,可以实现逼真的三维场景呈现。
3. 用户交互用户交互是游戏引擎中至关重要的一环。
通过捕捉用户输入事件,实现玩家与游戏世界的交互,提升游戏的可玩性和趣味性。
4. 物理模拟物理引擎是实现真实物理效果的关键。
利用OpenGL进行碰撞检测、重力模拟等操作,可以让游戏中的物体表现出真实世界的物理特性。
三、性能优化技巧1. 批处理在渲染大量物体时,尽量减少状态切换次数,将相邻物体合并成一个批次进行渲染,可以显著提升性能。
2. 纹理压缩使用纹理压缩技术可以减小纹理占用内存大小,降低GPU负担,提高渲染效率。
3. GPU剔除利用OpenGL提供的剔除技术,可以在渲染前排除掉不可见的物体,减少不必要的渲染计算,提升帧率。
4. 着色器优化合理设计着色器程序结构,避免过多分支和循环语句,优化着色器代码可以提高渲染效率。
四、案例分析:《夺宝奇兵》游戏开发以《夺宝奇兵》为例,该游戏采用了基于OpenGL的三维引擎进行开发。
通过对场景进行精细化设计、优化纹理资源、合理设置光照效果等手段,成功打造了一个高品质的三维冒险游戏。
OpenGL简介(),Open Graphics Library,开放图形库,是跨语⾔、跨平台的3D图形编程接⼝。
OpenGL使⽤客户端 - 服务器架构设计,应⽤程序为客户端,图形硬件设备为服务器。
客户端负责提交OpenGL命令,服务器执⾏这些命令并渲染出图像。
OpenGL是⼀个状态机,每个状态都有⼀个默认值。
开发者可以设置这些状态,然后让它们⼀直⽣效,直到再次修改它们。
例如:当前颜⾊就是⼀个状态变量,可以把其设置成红⾊,那么在此之后绘制的所有物体都会使⽤这种颜⾊,直到再次把当前颜⾊设置为其他颜⾊。
OpenGL的API可通过软件模拟实现,⾼效实现依赖于显⽰设备⼚商提供的硬件加速。
注:开源()是⼀个纯软件模拟实现的图形API,其代码兼容于OpenGL。
OpenGL规范⽬前由⾮盈利组织()的架构评审委员会(Architecture Review Board,ARB)维护。
ARB主要由操作系统⼚商(Apple Computer、Microsoft【2003.3已退出】等)、图形硬件⼚商(3Dlabs、SGI、NVIDIA、ATI Technologies、Intel等)、技术公司(Mozilla、Google等)和国际3D组织组成。
OpenGL是⼀个不断进化的API,在OpenGL1.2.1版本引⼊扩展(extension)的概念。
OpenGL新版本会定期由Khronos Group发布。
①增加新的扩展API(引⼊新函数和新常量)来增加新功能②放松或取消现有扩展API的限制来增强功能⼀个扩展由两部分组成:包含扩展函数原型的头⽂件和⼚商的设备驱动实现ARB扩展:标准扩展。
由架构评审委员ARB批准发布。
第⼀个ARB扩展是GL_ARB_multitexture(注:在OpenGL1.3中加⼊)。
所有ARB 扩展可从查询。
GL_ARB_multitexture扩展中新增了包含glActiveTextureARB、glClientActiveTextureARB、glMultiTexCoord*ARB函数,共34个。
基于OpenGL的三维游戏引擎设计与实现在当今数字游戏行业蓬勃发展的背景下,三维游戏引擎作为游戏开发的核心技术之一,扮演着至关重要的角色。
基于OpenGL的三维游戏引擎设计与实现是一个复杂而又具有挑战性的任务,需要开发者具备扎实的编程基础、对图形学原理的深刻理解以及对游戏引擎架构的把握能力。
本文将深入探讨基于OpenGL的三维游戏引擎的设计与实现过程,带领读者一窥游戏引擎开发的奥秘。
一、OpenGL简介OpenGL(Open Graphics Library)是一种跨平台的图形编程接口,广泛应用于计算机图形领域。
作为一种开放标准,OpenGL提供了丰富的图形渲染功能,为开发者提供了强大的工具来实现各种视觉效果。
在三维游戏开发中,OpenGL扮演着至关重要的角色,为游戏引擎提供了底层的图形渲染支持。
二、三维游戏引擎架构设计1. 游戏循环在设计三维游戏引擎时,首先需要考虑的是游戏循环(Game Loop)。
游戏循环是指游戏引擎不断更新游戏状态并渲染画面的过程,通常包括事件处理、物理模拟、逻辑更新和渲染等步骤。
一个高效稳定的游戏循环是保证游戏流畅性和性能的关键。
2. 场景管理场景管理是指如何管理游戏中的场景、对象和资源。
在三维游戏中,场景管理器负责加载、卸载场景、管理场景中的对象以及处理碰撞检测等任务。
合理设计场景管理系统可以提高游戏开发效率和资源利用率。
3. 图形渲染图形渲染是三维游戏引擎最核心的部分之一。
通过OpenGL提供的图形渲染功能,开发者可以实现各种视觉效果,包括光照、阴影、纹理映射等。
合理利用OpenGL API可以提高渲染效率和画面质量。
4. 用户交互用户交互是指玩家与游戏之间的互动过程。
在三维游戏中,用户交互包括键盘鼠标输入、触摸屏输入等方式。
设计友好直观的用户交互系统可以提升玩家体验和游戏可玩性。
三、基于OpenGL的三维游戏引擎实现1. 硬件加速利用OpenGL进行三维图形渲染时,可以充分利用硬件加速功能来提高渲染效率。
OpenGL、OpenGL ES、OpenVG、GLX、EGL简介今天研究了一些和图形处理相关的技术,其中遇到了一些让人费解的缩写,晚上我抽空整理了如下,希望对大家有点帮助。
(1)OpenGL、OpenGL ES、OpenVG:OpenGL是行业领域中最为广泛接纳的2D/3D图形API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
OpenGL是独立于视窗操作系统或其它操作系统的,亦是网络透明的。
OpenGL帮助程序员实现在PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
OpenGL ES是免授权费的,跨平台的,功能完善的2D和3D图形应用程序接口API,它针对多种嵌入式系统专门设计。
它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。
OpenGL ES包含浮点运算和定点运算系统描述以及EGL 针对便携设备的本地视窗系统规范。
OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。
OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程3D图形算法。
说白了,就是OpenGL的子集、可以应用于ES上。
OpenVG是针对诸如Flash和SVG的矢量图形算法库提供底层硬件加速界面的免授权费、跨平台应用程序接口API。
OpenVG现仍处于发展阶段,其初始目标主要面向需要高质量矢量图形算法加速技术的便携手持设备,用以在小屏幕设备上实现动人心弦的用户界面和文本显示效果,并支持硬件加速以在极低的处理器功率级别下实现流畅的交互性能。
(2)GLX、EGL:GLX是OpenGL Extension to the X Window System的缩写。
它作为x的扩展,是x协议和X server的一部分,已经包含在X server的代码中了。
GLX提供了x window system使用的OpenGL接口,允许通过x调用OpenGL库。
基于OpenGL的三维动画效果设计与实现OpenGL是一种跨平台的图形库,广泛应用于计算机图形学、游戏开发和虚拟现实等领域。
在OpenGL的基础上,可以实现各种精美的三维动画效果,如逼真的光影效果、自然的物理模拟和华丽的特效等。
本文将介绍如何基于OpenGL实现三维动画效果。
一、OpenGL简介OpenGL(Open Graphics Library)是一种跨平台的图形库,可以用于开发高性能的3D图形应用程序。
它提供了一套标准的API,程序员可以使用OpenGL库里的函数来绘制各种图形,包括点、线、三角形等。
OpenGL的主要优点是跨平台,程序可以在不同的操作系统和硬件上运行,并且不需要对程序做太多的修改。
二、OpenGL开发环境在开始OpenGL开发之前,需要配置正确的开发环境。
OpenGL的开发环境包括编程语言、OpenGL库、窗口系统和OpenGL的开发工具等。
编程语言:OpenGL支持多种编程语言,如C/C++、Java、Python等。
其中,C/C++是最常用的开发语言,因为它可以直接调用OpenGL的函数库。
OpenGL库:OpenGL库是开发OpenGL程序时必须的工具,它包含了OpenGL 的所有函数和常量。
窗口系统:OpenGL需要一个可视化的窗口系统,用来显示图形界面。
常用的窗口系统有Windows、Linux和MacOS等。
开发工具:开发OpenGL程序需要使用各种IDE和编辑器,如Visual Studio、CodeBlocks和Eclipse等。
三、实现三维动画效果的基础知识1.三维坐标系OpenGL使用右手坐标系表示三维坐标系,其中x轴向右,y轴向上,z轴向外。
2.矩阵变换OpenGL可以通过矩阵变换来实现图形的移动、旋转、缩放等操作。
常用的变换矩阵包括平移矩阵、旋转矩阵和缩放矩阵。
3.光照模型光照模型是OpenGL中重要的概念之一,它用来计算光源对物体的影响。
其中,主要包括光源的位置、光线的颜色和强度等因素。
opengl面试题OpenGL(Open Graphics Library)是一种跨平台的图形程序接口,被广泛应用于计算机图形学、游戏开发和虚拟现实等领域。
在面试中,对于应聘者来说,熟悉和掌握OpenGL相关知识是非常重要的。
本文将针对OpenGL面试题,从基础知识到高级概念进行详细讲解。
一、OpenGL基础知识1. 什么是OpenGL?OpenGL是一种开放的、跨平台的图形程序接口,由一系列函数库组成,用于渲染2D和3D图形。
它提供了丰富的绘图函数和状态管理函数,可以用于创建和操控渲染管线,实现图形的绘制、变换、光照等操作。
2. OpenGL的版本有哪些?它们之间有何区别?OpenGL的版本包括OpenGL 1.0、OpenGL 2.0、OpenGL 3.0、OpenGL 4.0等。
每个版本都有自己特定的功能和特性,新版本通常会引入更强大的功能和更高效的实现方式。
主要的区别在于对硬件和图形特性的支持程度上有所不同。
3. 什么是渲染管线?渲染管线是OpenGL中的一个重要概念,它描述了图形的处理过程。
渲染管线包括几个阶段,如顶点处理、光栅化、片段处理等。
每个阶段都有特定的功能和输入输出。
熟悉渲染管线的工作原理是理解OpenGL的关键。
4. 什么是顶点缓冲对象(VBO)?顶点缓冲对象是OpenGL中用于存储顶点数据的缓冲区。
通过创建和绑定VBO,可以将顶点数据传输到显存中,从而提高渲染效率。
VBO可以存储顶点的位置、颜色、纹理坐标等信息。
二、OpenGL高级概念1. 什么是着色器(Shader)?着色器是OpenGL中用于控制图形渲染过程的程序。
着色器分为顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)。
顶点着色器用于处理顶点相关计算,如位置变换、法线变换等;片段着色器用于处理每个像素的光照、纹理采样等操作。
2. 什么是纹理(Texture)?纹理是二维图像的映射,可以应用到模型的表面上。
基于OpenGL的3D游戏引擎开发与着色器优化近年来,随着计算机图形学和游戏行业的快速发展,基于OpenGL 的3D游戏引擎开发成为了热门话题。
在这个领域,着色器优化是一个至关重要的环节,它直接影响着游戏画面的质量和性能。
本文将深入探讨基于OpenGL的3D游戏引擎开发过程中的关键技术和着色器优化方法。
1. OpenGL简介OpenGL(Open Graphics Library)是一种跨平台的图形编程接口,广泛应用于计算机图形学、虚拟现实、模拟等领域。
作为一种开放标准,OpenGL提供了丰富的函数库,可以方便地进行2D和3D图形渲染。
2. 3D游戏引擎开发流程2.1 游戏引擎架构设计在进行3D游戏引擎开发之前,首先需要设计游戏引擎的架构。
一个良好的架构设计可以提高开发效率和代码可维护性。
常见的游戏引擎架构包括组件实体系统(Entity-Component-System,ECS)、MVC (Model-View-Controller)等。
2.2 场景管理与资源加载场景管理是游戏引擎中非常重要的一部分,它涉及到场景的创建、销毁、切换等操作。
同时,资源加载也是游戏引擎中必不可少的环节,包括模型、纹理、音频等资源的加载和管理。
2.3 物理引擎集成物理引擎可以模拟真实世界中的物理规律,为游戏增加真实感和趣味性。
在3D游戏引擎开发中,集成物理引擎是一个常见的需求,例如Bullet、PhysX等。
2.4 用户交互与输入处理用户交互是游戏引擎中至关重要的一环,包括鼠标、键盘、手柄等输入设备的处理。
良好的用户交互设计可以提升游戏体验。
3. 着色器优化技术3.1 顶点着色器优化顶点着色器是OpenGL中一个非常重要的阶段,它负责对顶点进行变换和投影操作。
在进行顶点着色器优化时,可以考虑减少不必要的计算、合并顶点数据等方式来提高性能。
3.2 片元着色器优化片元着色器是决定最终像素颜色的关键环节,在进行片元着色器优化时,可以考虑减少纹理采样次数、使用延迟渲染等技术来提高渲染效率。
opengl颜色混合算法【原创版】目录1.OpenGL 简介2.颜色混合算法的概念3.OpenGL 中的颜色混合函数4.颜色混合的实际应用5.结论正文1.OpenGL 简介OpenGL(Open Graphics Library)是一个跨平台的图形编程接口,用于渲染 2D 和 3D 图形。
它被广泛应用于游戏开发、模拟、科学可视化等领域。
OpenGL 提供了丰富的功能,如绘制线条、三角形、多边形、纹理贴图、光照和阴影等,可以实现各种复杂的图像效果。
2.颜色混合算法的概念颜色混合是指将两种或多种颜色按照一定的比例进行组合,生成一种新的颜色。
在计算机图形学中,颜色混合常用于实现透明度不为 1 的物体的重叠效果,使得重叠区域的颜色呈现出混合后的效果。
颜色混合算法可以用于实现多种视觉效果,如半透明物体、颜色过渡、阴影等。
3.OpenGL 中的颜色混合函数OpenGL 中提供了颜色混合函数 glBlendFunc,用于实现颜色混合效果。
glBlendFunc 接收两个参数,分别是源颜色和目标颜色。
源颜色表示当前正在绘制的颜色,目标颜色表示之前已经绘制过的颜色。
通过glBlendFunc 函数,可以设置颜色混合的方式,如加权平均、乘法等。
具体而言,glBlendFunc 函数的函数原型如下:```void glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);```其中,GL_SRC_ALPHA 表示源颜色的 alpha 通道,GL_ONE_MINUS_SRC_ALPHA 表示目标颜色的 alpha 通道的补值。
通过设置这两个参数,可以实现不同类型的颜色混合效果。
4.颜色混合的实际应用颜色混合在 OpenGL 中应用广泛,例如实现半透明物体、颜色过渡、阴影等效果。
以下以半透明物体为例,介绍颜色混合的应用:假设需要绘制一个半透明的红色玻璃,我们可以先绘制红色的玻璃,再绘制后面的绿色物体。
第1章OpenGL简介
O p e n G L是图形硬件的一个软件接口。
它的主要作用是将二维或三维的对象绘入一个帧缓冲区中。
对象被描述为一系列的顶点(用来定义几何对象)或像素(用来定义图像)。
O p e n G L对数据进行几个步骤的处理从而将其转换成像素,这些像素将在帧缓冲区中形成最终需要的图形。
本章将全面地介绍O p e n G L的工作原理,包括以下两个主要部分:
•O p e n G L基础主要解释基本的O p e n G L概念,例如什么是几何图元以及O p e n G L如何实行客户端-服务器端的执行模式。
• 基本O p e n G L操作通过一个高层的模块图来说明O p e n G L在帧缓冲区中处理数据并生成相应图像的过程。
1.1 OpenGL基础
本节主要解释一些O p e n G L固有的命令。
1.1.1 OpenGL图元及命令
O p e n G L通过几个可选模式来绘制“图元”—点、线段或多边形。
你可以对各种模式独立进行控制;也就是说,一个模式的设置并不影响其他模式的设置(尽管模式间的相互作用将影响帧缓冲区中的最后结果)。
O p e n G L的程序通过调用函数来指定图元、设置模式并描述其他操作。
在O p e n G L中,图元由单个或多个顶点组来定义。
一个顶点可以是一个点、一条线的端点或一个多边形的角。
数据(由顶点坐标、颜色、法线、纹理坐标和边界标志所组成)与顶点是相对应的,并且每个顶点和与它相关的数据独立,按照次序,采用同样的方法进行操作。
这里仅有一种情况例外,那就是当一组顶点必须被“剪切”从而使得某一特定的图元刚好在某一指定的区域内,则顶点数据可能会被修改并产生新的顶点。
其剪切的类型由该组顶点所代表的图元决定。
虽然有些命令在生效前可能会有一段不确定的延时,但是O p e n G L的所有命令都是依照其被接收的次序来执行的。
也就是说,每个图元在被绘制完成之前,其后面的命令将不会有效。
同时,这也意味着使用状态查询命令时它所返回的数据将只包含所有以前发布并已执行完毕的O p e n G L命令。
1.1.2 OpenGL是一种过程语言
O p e n G L从根本上说是一种过程语言而非描述性的语言:O p e n G L提供了直接控制二维和三维几何体的基本操作。
它包含了转换矩阵、光照方程系数、反走样方法和像素校正算子的描述。
然而,O p e n G L并不能直接描述或建模复杂的几何对象。
你所发布的O p e n G L命令指定了怎样产生一个特定的结果(即接下来所应该采取的操作)而不是指定确切的结果。
正是这种过程特性使我们能够了解O p e n G L是如何工作的—只有明白了它的操作顺序才能对如何使用它有更深的理解。
1.1.3 OpenGL 的执行模式
O p e n G L 使用了一种客户端-服务器端的模式来解释命令。
应用程序(客户端)所发布的命令将通过O p e n G L (服务器端)来编译和处理。
服务器的操作既可以同客户端在同一台计算机上进行,又可以分别属于不同的机器。
因此,从这个意义上讲,O p e n G L 是网络透明的。
一个服务器可以维护数个G L 上下文,每个上下文被封装在一个G L 状态里。
服务器可以同时包含几个G L 上下文,每个上下文都被封装在一个G L 状态里。
每个客户端都可以连接到这些上下文中的任何一个。
所需要的网络协议可以是扩充过的已有协议(如X Wi n d o w 系统)或是一个完全独立的协议。
O p e n G L 并没有提供命令用来获取用户的输入。
窗口系统分配给帧缓冲区的资源将最终控制O p e n G L 命令对帧缓冲区的影响。
窗口系统将决定O p e n G L 帧缓冲区的哪些部分可在给定的时间内被访问并将这些部分的结构传送给O p e n G L 。
因此O p e n G L 中不存在配置帧缓冲区及初始化O p e n G L 的命令。
帧缓冲区的配置是在O p e n G L 外,由与其相关联的窗口系统来完成的,而O p e n G L 的初始化则是当窗口系统为O p e n G L 绘图分配一个窗口时完成的。
(G L X —O p e n G L 界面的X 扩展,提供了这些功能。
有关细节请参阅 2 . 4节“对X 窗口系统的O p e n G L 扩展”。
)
1.2 基本OpenGL 操作
图1 -1是抽象的高层的模块图,它展示了O p e n G L 处理数据的过程。
如图所示,命令由左边进入,然后经过了一个可被看作处理流程的处理过程。
其中有一些命令指定了所要绘制的几何对象,而另一些命令则用于控制不同阶段中对象的处理方法。
图1-1 OpenGL 数据处理过程
命令
当命令进入流程时,你可以选用两种方法对它们进行处理:一种是通过流程立即执行这些命令;另一种是将其中一些命令组织到一个“显示列表”,过一段时间再执行它们。
流程中的“求值器”阶段通过将输入值赋给多项式命令提供了一种非常有效的方法来生成几何曲线和曲面的近似值。
接下来的“各顶点操作及图元集”阶段主要是处理O p e n G L的几何图元—点、线段和多边形。
所有这些图元均由顶点来描述。
顶点可以被转换和照亮。
接下来图元被剪切到视口,为下一阶段做好了准备。
“光栅化”生成了一系列的帧缓冲区地址以及相应的用于描述点、线段或多边形的二维值。
这些生成的“片断”将被送到最后一个阶段—“各片断的操作”,这一阶段是数据以像素形式存入“帧缓冲区”之前的最后操作。
这些操作包括根据帧缓冲区中原有的深度值(用于深度缓存操作)与输入值而有条件地更新帧缓冲区的操作,还包括对输入的像素颜色与已存储的颜色所进行的融合操作,对像素值所进行的屏蔽操作及其他的逻辑操作。
数据是以像素形式而非顶点形式输入的。
这些数据可以用来描述一个用于纹理映射的图像,它将跳过第一阶段(如前面所述),而通过“像素操作”阶段作为像素来处理。
这一阶段的处理将导致两种结果:其一是被存入“纹理存储器”,以备光栅化阶段所用;其二是直接被光栅化。
后者所形成的片断将被存入帧缓冲区,就好象它们是由几何数据生成的一样。
一个O p e n G L应用程序可以获得O p e n G L状态的所有元素,其中包括纹理存储器的内容,甚至还包括帧缓冲区的内容。