已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章OpenGL 功能2.1 OpenGL 基础 OpenGL(以后简称“GL”)只与渲染帧缓冲有关(并读取这些帧缓冲中有价值的存储信息)。 有没有其他外围设备的支持,有时与图形硬件有关,如鼠标,键盘。 程序员必须依靠其他机制,以获取用户输入。GL的绘制图元受到一系列可选择的模式和着色数方案。每个图元是一个点,线段或多边形。每种模式都可能改为独立;一个设置不会影响其他人的设置(尽管一些模型可能会相互作用从而决定帧缓冲的最终结果)模型被固定,基元被具体化,其他的GL操作通过在函数或者程序中传输命令来实现。基础图形被一个或多个顶点组所定义,顶点被定义为一个点,一个边界的端点或者一个多边形两条边的焦点。数据例如位置坐标,颜色,法线,纹理坐标等等。他们都与顶点有关,并且每一个顶点都会被按照同样的方法按顺序独立处理。唯一的例外是如果顶点组被剪裁因此使得基础图形被装在一个特殊的区域;通过这种方法顶点数据将被修改并且新的顶点将被创立。该类型的剪辑依赖于顶点数组所代表的类型。机器会按命令被接收的顺序对他们进行处理,尽管命令在被接收的过程中中会有延迟。这意味着一个基本图形在任何一个与之并行的图形影响到帧缓冲之前就会被完全绘制出来。这同样意味着这也意味着,查询和像素回读操作与所有情况保持一致完成执行此前援引GL的命令,除非另有明确规定。总体上来说,在任何随后的命令能够产生任何这样的结果之前,之前的GL模型或者是帧缓冲上的GL命令的结果必须被完成。在GL中,数据被绑定在传输中。这意味着数据通过命令的接收来被诠释。即使命令需要指向数据,这些数据在通讯建立的时候将被诠释,并且随后对这些数据的改动将无法影响到GL(除非同样的指针被用于随后的命令)。GL提供可以控制包括3D和2D制图的基础操作命令。这包括应用程序定义的材质参数规格详细列表变换,光照,纹理和着色操作,以及内置的功能,例如抗锯齿和纹理过滤。他并没有提供一种可以描述复杂几何图像的方法。另一种描述这种情况的方法是说GL提供了机制来描述复杂几何结构是如何被提供的而不是描述这个复杂图形本身。对于GL的命令解释模型,客户端服务器.这些由客户传达的命令将被GL(服务器)解释和处理。服务器可能会或可能无法在同一计算机作为客户端。在这个意义上说,GL是“网络透明的。”一个服务器可以维持许多种GL语境,每一个语境都被当前的GL状态所封装。客户可以选择连接到任何这些语境之一。当程序没有连接到一个语境时,发送GL命令将导致无效的状态。GL的交互类与两帧缓存:视窗提供系统和应用程序建立。在任何时候至多有一个窗口系统提供的帧缓存,被称为默认帧缓冲。应用程序创建的帧缓存,简称为帧缓冲对象,可能会产生应有的作用。这两种类型的帧缓冲的区别主要是配置和管理它们的状态界面。在默认帧缓冲下,窗口系统将控制GL命令的最终效果,分配帧缓冲资源,决定默认帧缓冲的位置,GL命令可能会在任意时间进入,并向GL传达这些位置是如何构建的。因此没有GL命令来初始化或配置默认帧缓冲。同样的,连接在物理显示设备(包括通过这种技术转化个人帧缓冲的伽马值校正)上的帧缓冲的显示也不会被GL定义地址。分配和配置帧缓冲的默认配置在GL外进行并连接窗口系统,利用参考API 在第1.7.2节详细介绍。GL环境的配置和初始化同样要用到这些辅助API。GL环境可以和不同的默认帧缓冲相连接,并且在履行这个连接的过程中,一些环境状态将被决定。这可能会用到一个不包括默认帧缓冲的GL环境,这将导致帧缓冲对象在整个渲染过程中被执行。这对应用程序执行离层渲染是有利的。GL被设计为一个拥有强大制图能力,从而可以实现一系列绘图的平台。为了适应这种变化,我们指定理想的行为,而不是为某些GL操作的实际行为。与理想的偏差是允许的。我们也可以指定一个可以近似于理想化的行为。这使得GL的行为变化被允许,意味着即使在相同的输入呈现相同的运行时帧缓冲的配置,两个不同的GL可能无法实现同意像素对像素。 最后,命令名称,连接,典型GL前缀(gl,GL_,GL特别是在C中)都是为了减少名字的冲突。为了简明,这些前缀将在文件中被省略。2.1.1 浮点计算 在运算过程中,GL必须执行一系列的浮点运算。在某些时候,这些运算的结果或精度会被限制;由OpenGL着色语言规范的着色操作,并且在某些时候会被具体指定的顶点,纹理或者帧缓存数据形式所限制。否则,这种浮点数表示,以及如何对它们进行操作的细节,将不被具体指明。我们的需求十分简单,那就是浮点部分必须有足够的位数并且它的说明文件必须足以容纳个人浮点操作结果的105分之1。用来描述位置,法线和纹理坐标的最大数量级至少为;描述颜色的最大数量级至少为,其他的浮点描述表示级至少为; 对于任意有限数据x,。(偶尔进一步的要求将被指定)大多数单精度浮点格式自动测试系统满足这些要求。特殊的Inf和-Inf编译过大无法被表示;NaN编译“not a number”来自于未被定义的算术操作例如。在浮点运算中这是允许的,但不是必需的。任何一个可以表示的浮点值都可以被当做需要浮点数据的命令被输入。提供一个不是浮点值的结果D dush dn jngd f din gsh zdng csh xtng mnz zhxi yoqi.字典是未定义的,但是不能导致GL的中断。在IEEE运算中,提供一个负零或者非规格数给GL命令可导致可想而知的结果,提供NaN或者无限未指定结果。一些计算是需要区分的。在一些情况下(包括一些向量法线的暗含要求),对0的计算将产生一个不确定的结果,但必须不导致GL的中断。2.1.2 16位浮点数16位浮点数有一个标志位(S),五个说明位(E),和10个尾数(M)。一个十六位浮点数的值V有以下数据决定 如果浮点数被当做一个整体的16位无符号字解释:任何一个可表示的16位浮点值都可以合法的作为16位浮点数据传送给GL命令来输入。所提供的值是不是一个浮点数(如Inf或NaN)的这样一个命令的结果是不确定的,但不能导致GL中断,提供一个不确定的值或者负零给GL会导致超出预测的结果。2.1.3 无符号11位浮点数无符号11位浮点数没有符号位,有5个说明位(E),和六个尾位(M)。11位浮点数的V值取决于下式:Zhdu yu yg chungku xtng tgng de zhng huncnZi rnh shhou, bi chng wi mrn zhng hunchng.如果浮点数被当做十一位无符号数当一个浮点数被转换成一个无符号11位浮点表示时,有限的值均调整至最接近的可表示的有限值。最少的准度下,目标总是被指向零。这意味着负值将被转化成0。同样的,定义正值超过65024(11位无符号数允许定义的最大值)将被转化成65024。另外:负无穷将被0取代;正无穷则保持原状;正负NaN都会被正的NaN代替。任何一个可表示的无符号11位浮点数都可以作为可接受的11位浮点数据传送给GL命令。所提供的结果值不是一个浮点数(如Inf或NaN)的这样的命令是不确定的,但绝不能导致Gl中断或终止。提供一非规范化数至GL必须产生可预见的结果。2.1.4 无符号10位浮点数无符号浮点数没有符号位,有5位说明位(E),5个尾位(M)。10位无符号浮点数V值由下式决定:如果浮点数作为一个无符号10位数,当一个浮点数被转换成一个无符号10位浮点表示时,有限的值均调整至最接近的可表示的有限值。最少的准度下,目标总是被指向零。这意味着负值将被转化成0。同样的,定义正值超过64512(10位无符号数允许定义的最大值)将被转化成65024。另外:负无穷将被0取代;正无穷则保持原状;正负NaN都会被正的NaN代替。任何一个可表示的无符号10位浮点数都可以作为可接受的10位浮点数据传送给GL命令。所提供的结果值不是一个浮点数(如Inf或NaN)的这样的命令是不确定的,但绝不能导致Gl中断或终止。提供一非规范化数至GL必须产生可预见的结果。2.1.5 定点数据变换当一般的顶点特征,像素颜色或者深度成分被作为一个整体表示的时候,他们通常(不是全部)会被作为标准。当修改成或者被修改成浮点数时,标准的整体参数将被视为具体指定。这些数据不是无符号数就是有符号数。在剩余的部分中,b表示定点数整体表示的位宽度。当整数是在表2.2中定义的类型之一。b是那种类型中所需的最小位宽度。当整体是纹理或者帧缓冲颜色或深度部分时(参看3.8。3),b是的位数分配给在该纹理或渲染的内部格式的组成部分。当整体是帧缓冲颜色或深度成分(参看第四章)时,b是的位数在分配帧缓冲的组成部分。对于帧缓冲和帧缓冲A部分,如果缓冲没有保存在帧缓冲A部分中,或者只有A的一位在缓冲时,b至少要是2。有符号和无符号定点表示都被认为是b位2进制整体和各自2进制无符号整体。有符号定点表示可被视为有两种方式,正如接下来讨论的。所有下面描述的转换进行定义,即使执行的整数数据类型超过了最小要求范围。从归一固定点转换为浮点无符号规范整形数据应在区间0;1。从无符号规范化定点数c转变成相应的浮点数v将被如下定义: (2.1)有符号定点整形数据应在区间-1;1。从有符号定点数c转变成相应的浮点数f有两种方式: (2.2)在这种情况下,全系列的代表使用,以致对应-1.0和对应1.0。例如,如果b=8,然后整形数在-128对应-1.0并且127对应1.0。请注意,这是不可能准确地表达这种表示0。总体而言,这种表示是用于GL正常化签署命令,如顶点属性值,固定点参数。二者选其一的,变化可以采用一下方式: (2.3)在这种情况下,只有区间被用来表示定点数区间-1,1。例如,如果b=8,整形数-127对应-1.0并且127对应1.0。请注意,而零可以准确地表达这种表示,一个值(例如例子中的-128)在能被表示的范围外,再用之前必须被剪切。总体而言,这种表示被用于有符号规范化定点纹理或者帧缓冲数值。在被有符号规范定点数修改的任意地方,如下等式将被用来指定。从一个浮点值转换F到相应的无符号标准化固定点值C被定义为第一次剪切F的范围0,1,然后计算。 (2.4)f是再转换为无符号二进制整数到底在b位。从浮点数f转化成有符号规范化定点数c有两种方法,每一个都应从在-1;1内的f开始。 (2.5)总体而言,这种转变被用于预订浮点情况(参见第6章)和返回整形。二者选其一,转变可能被用于 (2.6)总体而言,这种转变被用于指定的有符号规范化定点纹理或帧缓冲数。转变之后,f是一个签名,然后转换为二进制补码到底在b位二进制整数。在被有符号规范定点数修改的任意地方,如下等式将被用来指定。2.2 GL状态GL保持可观的状态。这份文件列举了每一个状态变量,并介绍了如何可以改变每个变量。为了达到讨论的目的,我们按照变量的功能对他们进行了比较武断的分类。虽然我们讨论了GL在帧缓存上执行的操作,但是帧缓存并不是GL情况的一部分。我们要区分两种风格的情况。第一种风格的情况,叫做GL服务情况,属于GL服务。主要的GL情况都在这个领域内。第二种风格的情况,叫做客户情况,属于GL客户;除非另有特殊指明,所有状态在本文件中提到的都是GL服务状态;GL客户情况是一个特殊定义。每一个GL背景实例意味着一个完整的GL服务器的状态设置;每个从客户端连接到服务器意味着两者的GL客户端的状态和GL服务器状态集。虽然一个是GL的实施可能是硬件依赖性,这种讨论于特定的硬件上一个GL实现独立。只在绘图硬件的情况严格符合GL情况时,我们才关心它。2.2.1 共享对象情况对一个背景组分享确定的情况是可能的。通过窗口系统可以开启背景分享,详细内容参看1.7.2。这些API用于创建和管理工作的情况,不在这里进一步讨论。更多有关分享目标的细节讨论在附录D。除本附录中定义,背景状态中的所有状态只特定于该情况下。2.3 gl命令语法GL命令功能或程序。许多组的命令按同样的流程被执行,但是不同在于被执行的程序如何支持他们。为了方便的解释这种变换,我们采用标记法来描述命令和他们的变化。GL命令形成于,以来实际的命令,详细描述命令的顺序的名称。如果现在,一个数字表示所指示的类型所需的长度(值的数目)。接下来,一个字符串组成一个描述符的类型从表2.1显示具体尺寸和参数值的数据类型。最后v字符,如果存在,表明该命令需要一个指向数组(矢量)值而不是单个参数系列。下面举两个例子:void Uniform4f( int location, float v0, float v1,float v2, float v3 );andvoid GetFloatv( enum value, float *data );说明符对应的GL符bbytesshortiinti64int64ffloatddoubleububyteusushortuiuintUi64uint64表2.1:命令后缀类型描述参数对应于GL类型。请参阅表四的GL类型的定义2.2。这些例子显示了这些命令的ANSI C声明。在一般情况下,命令声明的形式。rtype Namef_1234gf_ b s i i64 f d ub us ui ui64gf_vg( args , T arg1 , : : : , T argN , args );rtype是函数的返回类型。大括号(FG)的附上型系列描述(见表2.1),其中一个被选中。表示没有类型说明符。括号中的参数(参数和参数)可能会或可能不会是当前的。在n个参数arg1的通过argN有T型,相当于类型描述一文表2.1(如果没有字母,然后参数类型是明确给出)。如果最后一个特征值不是v,值就会被1,2,3或4赋值(若果这里没有数字,参数的数量将被固定),如果最后一个特征值是v,那么只有参数1是当前值并且它是指定的N值系列的类型。例如:void Uniformf1234gfifg( int location, T value );数字的8个说明void Uniform1i( int location, int value );void Uniform1f( int location, float value );void Uniform2i( int location, int v0, int v1 );void Uniform2f( int location, float v0, float v1 );void Uniform3i( int location, int v0, int v1, int v2 );void Uniform3f( int location, float v1, float v2,float v2 );void Uniform4i( int location, int v0, int v1, int v2,int v3 );void Uniform4f( int location, float v0, float v1,float v2, float v3 );参数的类型是固定的(即不是由一个在命令后缀表示)GL所的数据类型之一总结在表2.2,或其中的一个指针类型。2.4 基本GL操作图2.1为GL示意图。命令从左侧进入GL。有些命令指定要绘制的几何对象,控制对象是如何处理的各个阶段。命令通过处理管道有效地传送。第一阶段工作由几何图元的顶点描述:点,线段和多边形。这些图形的顶点可能会被改变或照亮,在下一阶段,它可以选择性地被使用,几何遮挡,来产生新的图形。最后的结果基元是为下一阶段准备一个观景量,光栅。光栅化产生的帧缓冲的地址和值系列用一个点,线段或多边形二维的描述。每个这样产生的片段被输送到下一个阶段,执行特殊行动碎片才最终改变了帧缓冲。这些操作包括到帧缓冲条件的基础上更新传入和先前储存(对效果的深度缓冲)的深度值,传入的遮掩片段与色彩混合储存的色彩,以及对价值观掩蔽片段和其他逻辑运算。最后,这个值会被从帧缓冲返回或者从一个帧缓冲拷贝到另一个帧缓冲区域。这些变化会伴随着一些编码和解码。这些命令只是描述GL的工具,而不是GL如何被执行的结构规则,并且我们只是把他们作为一种组织GL值操作的方法。目标例如曲面可能会在他们被变换之前被改变。GL Type最小位宽描述boolean1Booleanbyte8Signed twos complement binary integerubyte8Unsigned binary integerchar8Characters making up stringsshort16Signed twos complement binary integerushort16Unsigned binary integerint32Signed twos complement binary integeruint32Unsigned binary integerint6464Signed twos complement binary integeruint6464Unsigned binary integersizei32Non-negative binary integer sizeenum32Enumerated binary integer valueintptrptrbitsSigned
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多囊卵巢治疗科普
- 宫颈癌放疗康复护理措施培训
- 团队意识培训课程
- 2025年检验类之临床医学检验技术中级考前冲刺模拟试卷A卷含答案
- 2020-2025年初级经济师之初级经济师人力资源管理通关试题库(有答案)
- 2020-2025年教师资格之中学教育学教育心理学通关题库(附带答案)
- 2025咖啡厅装饰装修合同
- 2025智能工厂设备维护与管理指导技术服务合同书
- 2025关于跨境合作的合同模板
- 国家开放大学《供应链管理》形考1-4
- QGDW11008-2013低压计量箱技术规范
- 信访举报接待管理制度
- 2025年宁夏电力投资集团有限公司招聘笔试参考题库含答案解析
- 环卫公司物资管理制度
- EPC总承包管理实施方案
- 一年级拼音试题
- 中医理疗师职业发展与前景
- 设施设备故障应急预案
- 2025年度福建省职业院校技能大赛-物联网应用与服务赛项-中职组考试题库-含答案
- 教学事故认定与处理办法
- 湖南省衡阳市衡阳县实验中学2024-2025学年九年级上学期期中考试化学试卷(含答案)
评论
0/150
提交评论