您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 园林工程 > opengl翻译(第二章)
第二章OpenGL功能2.1OpenGL基础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。用来描述位置,法线和纹理坐标的最大数量级至少为322;描述颜色的最大数量级至少为102,其他的浮点描述表示级至少为322;000xx对于任意有限数据x,xxx11。10.000xxx。(偶尔进一步的要求将被指定)大多数单精度浮点格式自动测试系统满足这些要求。特殊的Inf和-Inf编译过大无法被表示;NaN编译“notanumber”来自于未被定义的算术操作例如00。在浮点运算中这是允许的,但不是必需的。任何一个可以表示的浮点值都可以被当做需要浮点数据的命令被输入。提供一个不是浮点值的结果是未定义的,但是不能导致GL的中断。在IEEE运算中,提供一个负零或者非规格数给GL命令可导致可想而知的结果,提供NaN或者无限未指定结果。一些计算是需要区分的。在一些情况下(包括一些向量法线的暗含要求),对0的计算将产生一个不确定的结果,但必须不导致GL的中断。2.1.216位浮点数16位浮点数有一个标志位(S),五个说明位(E),和10个尾数(M)。一个十六位浮点数的值V有以下数据决定NaNInfVSMESMSS,)1(),1(2)1(,2)1(,0.0)1(10102152140,310,313100,00,0MEMEEMEME如果浮点数被当做一个整体的16位无符号字解释:1024mod102432768mod3276865536modNMESNN任何一个可表示的16位浮点值都可以合法的作为16位浮点数据传送给GL命令来输入。所提供的值是不是一个浮点数(如Inf或NaN)的这样一个命令的结果是不确定的,但不能导致GL中断,提供一个不确定的值或者负零给GL会导致超出预测的结果。2.1.3无符号11位浮点数无符号11位浮点数没有符号位,有5个说明位(E),和六个尾位(M)。11位浮点数的V值取决于下式:0,310,31310)1(20,020,0,0.064156414MENaNMEInfEMEMEVMEM如果浮点数被当做十一位无符号数64mod64NMEN当一个浮点数被转换成一个无符号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值由下式决定:0,310,31310)1(20,020,0,0.064153214MENaNMEInfEMEMEVMEM如果浮点数作为一个无符号10位数,32mod32NMEN当一个浮点数被转换成一个无符号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将被如下定义:12bcf(2.1)有符号定点整形数据应在区间[-1;1]。从有符号定点数c转变成相应的浮点数f有两种方式:121bcf(2.2)在这种情况下,全系列的代表使用,以致12b对应-1.0和12b对应1.0。例如,如果b=8,然后整形数在-128对应-1.0并且127对应1.0。请注意,这是不可能准确地表达这种表示0。总体而言,这种表示是用于GL正常化签署命令,如顶点属性值,固定点参数。二者选其一的,变化可以采用一下方式:0.1,max121bcf(2.3)在这种情况下,只有区间]12,12[11bb被用来表示定点数区间[-1,1]。例如,如果b=8,整形数-127对应-1.0并且127对应1.0。请注意,而零可以准确地表达这种表示,一个值(例如例子中的-128)在能被表示的范围外,再用之前必须被剪切。总体而言,这种表示被用于有符号规范化定点纹理或者帧缓冲数值。在被有符号规范定点数修改的任意地方,如下等式将被用来指定。从一个浮点值转换F到相应的无符号标准化固定点值C被定义为第一次剪切F的范围[0,1],然后计算。).12('bff(2.4)f’是再转换为无符号二进制整数到底在b位。从浮点数f转化成有符号规范化定点数c有两种方法,每一个都应从在[-1;1]内的f开始。21)12('bff(2.5)总体而言,这种转变被用于预订浮点情况(参见第6章)和返回整形。二者选其一,转变可能被用于).12('bff(2.6)总体而言,这种转变被用于指定的有符号规范化定点纹理或帧缓冲数。转变之后,f’是一个签名,然后转换为二进制补码到底在b位二进制整数。在被有符号规范定点数修改的任意地方,如下等式将被用来指定。2.2GL状态GL保持可观的状态。这份文件列举了每一个状态变量,并介绍了如何可以改变每个变量。为了达到讨论的目的,我们按照变量的功能对他们进行了比较武断的分类。虽然我们讨论了GL在帧缓存上执行的操作,但是帧缓存并不是GL情况的一部分。我们要区分两种风格的情况。第一种风格的情况,叫做GL服务情况,属于GL服务。主要的GL情况都在这个领域内。第二种风格的情况,叫做客户情况,属于GL客户;除非另有特殊指明,所有状态在本文件中提到的都是GL服务状态;GL客户情况是一个特殊定义。每一个GL背景实例意味着一个完整的GL服务器的状态设置;每个从客户端连接到服务器意味着两者的GL客户端的
本文标题:opengl翻译(第二章)
链接地址:https://www.777doc.com/doc-2884717 .html