CN101714258B - 图形处理系统 - Google Patents
图形处理系统 Download PDFInfo
- Publication number
- CN101714258B CN101714258B CN200910179092.3A CN200910179092A CN101714258B CN 101714258 B CN101714258 B CN 101714258B CN 200910179092 A CN200910179092 A CN 200910179092A CN 101714258 B CN101714258 B CN 101714258B
- Authority
- CN
- China
- Prior art keywords
- texture
- curve
- value
- threshold
- sampling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/203—Drawing of straight lines or curves
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/001—Texturing; Colouring; Generation of texture or colour
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
Abstract
本发明的名称为图形处理系统,通过将曲线80之内的质素设置成大于曲线80的预定阈值的值,并且将曲线80之外的质素设置成小于曲线80的阈值的值(反过来也是一样),在图形纹理中表示平滑曲线。通过以下步骤将两个平滑曲线80和81的这类表示装入单个图形纹理(相同质素空间)82:赋予各曲线80、81不同的阈值,设置质素值以使得它们相对各曲线的阈值适当取值,并且确保两个曲线的阈值轮廓的位置在纹理中实际上没有相互重叠。
Description
技术领域
本发明涉及图形处理系统,具体来说,涉及图形处理系统中的平滑形状、如平滑曲线的渲染。
背景技术
具体参照三维图形的处理来描述本发明,但是本领域的技术人员会理解,它同样也可适用于二维图形的处理。
本领域已知,通常通过首先将待显示的场景分为多个相似基本成分(所谓的“图元(primitive)”)以便允许3D图形处理操作更易于执行,来执行3D图形处理。这些“图元”一般采取简单多边形、如三角形的形式。
待显示的场景的图元通常由图形处理系统的应用程序接口使用从需要显示图形的应用程序(例如游戏)所接收的图形绘制指令(请求)来生成。
各图元在这个阶段通常由顶点集合来定义并且表示为顶点集合。图元的各顶点与其关联了表示顶点的数据集合(例如位置、颜色、纹理和其它属性数据)。然后,例如当光栅化(rasterize)和渲染顶点(顶点与其相关的图元)供显示时,使用这种数据。
一旦场景的图元及其顶点已经生成和定义,它们可由图形处理系统来处理,以便例如在输出显示装置、如屏幕或打印机上显示该场景。
这个过程基本上包括确定覆盖待处理的场景区域的取样点阵列的哪些取样点由图元来覆盖,然后确定各取样点应当具有的外观(例如在其颜色等方面)以表示在那个取样点的图元。这些过程通常分别称作光栅化和着色(shading)。
光栅化过程确定应当用于图元的样本位置(即,将要用于表示待显示的场景中的图元的样本点的(x,y)位置)。这通常使用图元的顶点的位置来进行。
着色过程则得出在样本点显示图元所需的数据,例如红、绿和蓝(RGB)色值以及“α”(透明度)值(即,对各样本点“着色(shaded)”)。如本领域已知,这可包括应用纹理、混合样本点数据值等。
(在3D图形文献中,术语“光栅化”有时用于表示到样本位置的图元转换和着色两者。但是,本文中的“光栅化”仅用于表示将图元数据转换成取样点地址。)
通常通过将取样点“表示”为对其执行图形处理操作(例如着色)、通常称作“片元(fragments)”的离散图形实体来执行这些过程。各取样点实际上由用于对所述的取样点处的图元着色的片元来表示。片元可表示(与其关联了)单个取样点或多个取样点。“片元”是经过着色过程(着色管线(shading pipeline))的图形实体。
(因此,“片元”实际上是(与其关联了)内插到图元的给定屏幕空间样本点的图元数据集合或者图元点。它还可包括需要对所述的样本点(片元位置)处的图元着色的按图元(per-primitive)数据和其它状态数据。各图形片元可合理地被认为实际上相当于在被处理时的场景的“像素”)。
各图形“片元”可对应于最终输出显示中的单个像素(像元)(因为当像素是最终显示中的奇点时,在图形处理器对其进行操作(渲染)的“片元”与显示的像素之间可存在一对一映射)。但是,情况可能是,在片元与显示像素之间不存在一一对应,例如在显示最终图像之前对渲染图像执行后处理的特定形式、如按比例缩小的情况下。
在图形处理系统中,能够有效准确地渲染平滑形状、具体来说是平滑曲线定义的(具有平滑形状作为其边缘或边界)形状供显示越来越合乎需要。一般来说,从图形处理的观点来看,具有连续的边缘或边界曲线并且其中曲线的一阶导数是逐段连续的形状可被认为是平 滑形状(平滑曲线所定义的形状)(并且为了本发明和申请的目的,被认为是平滑形状以及相应地被认为是平滑曲线)。图形处理中的这类平滑曲线的示例是贝塞尔曲线、样条曲线和弧形。
例如,近年来,越来越常见的是在计算机图形中利用所谓的“矢量图形”。
矢量图形基于使用个别定义的几何对象、如一个或多个线段,例如在定位点连接在一起以形成路径的直线或曲线(例如二次方(贝塞尔)曲线、椭圆弧、三次(贝塞尔)曲线)。
矢量图形对象/路径通常在所说的“用户空间”中被定义和操控。但是,为了在视频显示器或打印机上显示矢量图形对象/路径,例如,用户空间定义的矢量图形必须转换成适合基于像素的显示的格式,即,转换成基于图元和取样点的形式。当执行这种转换时,可能难以保留矢量图形对象的任何平滑曲线或形状,因为对象实际上必须光栅化成用于显示该对象的取样位置和像素。
一种已知的用于渲染平滑形状供显示的技术是将形状细分(sub-divide)为大量小线性部分以便进行渲染过程。但是,例如在CPU时间和渲染带宽方面,这具有高性能成本。
另一种已知的用于渲染平滑曲线的技术是使用隐式曲线,即,评估用于确定给定取样点是在曲线之内还是之外的隐式方程。但是,并非所有平滑形状均可转换成这种隐式形式,并且这种技术在任何情况下都需要专用渲染硬件或者超高精度片元着色器(shader)硬件用于评估隐式曲线。
因此,本申请人认为,仍然存在用于渲染平滑曲线和平滑曲线所定义的形状的改进技术和系统的范围。
发明内容
根据本发明的第一方面,提供一种图形处理系统中渲染平滑曲线所定义的形状的方法,该方法包括:
通过针对图元内的取样位置对纹理中的纹理值进行取样,将表示与定义形状的曲线对应的曲线的图形纹理应用于待渲染图元;以及
使用取样纹理值来确定取样位置应当看作在曲线的哪一侧;其中:
通过将图形纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值,来配置图形纹理以表示两个平滑曲线。
根据本发明的第二方面,提供一种用于图形处理系统中渲染平滑曲线所定义的形状的设备,该设备包括:
用于存储各表示两个或更多平滑曲线的一个或多个图形纹理的部件,通过将图形纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值,来配置每个这种图形纹理以表示至少两个平滑曲线;
用于执行以下步骤的部件:通过针对图元内的取样位置对纹理中的纹理值进行取样,将表示两个或更多平滑曲线的所存储图形纹理应用于待渲染图元;以及
用于使用取样纹理值来确定取样位置应当看作在纹理表示的曲线之一的哪一侧的部件。
本申请人已经认识到,通过将图形纹理配置成使得纹理表示的曲线一侧的所有纹理位置将返回小于特定阈值的取样纹理值,而曲线另一侧的所有纹理位置将返回大于该阈值的取样纹理值,则对该纹理取样时,取样纹理值可用于确定取样点是位于曲线之内还是之外(即, 取决于取样纹理值是大于还是小于(或者反过来)曲线的纹理阈值)。
因此,在本发明中,平滑曲线表示为纹理,并且平滑曲线所定义(即,实际上使平滑曲线作为其边缘或边界)的形状则通过将该纹理应用于适当的图元来渲染。通过对纹理中的纹理值进行取样并且使用取样值确定各取样点是在曲线的哪一侧,来绘制形状供显示。这允许图形处理系统有效地确定任何给定点应当看作是在曲线(因而形状)之内还是之外。
通过在纹理中表示平滑曲线,然后将它应用于图元以便按照这种方式绘制形状(曲线),本发明提供一种可用于使用低成本的现有已知纹理映射(texture mapping)系统和硬件来渲染平滑形状(和平滑曲线)。因此,如下面进一步论述,本发明使得能够仅使用“普通”纹理映射更有效地渲染平滑形状(和曲线)。本发明相应地促进在更低成本、如固定功能的图形硬件以及在未修改和传统的现有固定功能图形硬件上更有效地渲染平滑形状(和曲线),并且可避免例如使用当前用于平滑曲线渲染的细分技术和/或专用硬件的需要。
本申请人还认识到,当按照这种方式在纹理中表示平滑曲线时,有可能通过将纹理和曲线的阈值适当地配置成表示相同纹理空间中多于一个曲线(使用相同质素(texel)),即,将多于一个曲线“装入”纹理。具体来说,如下面进一步论述,本发明能够并且确实有效地在单个纹理中层叠地(on top of each other)存储多个平滑曲线描述(使用相同质素)。
这则允许给定的单个纹理用于表示一个以上平滑曲线,由此允许例如表示给定的一组平滑曲线需要更少和/或更小的纹理,并且促进更有效的纹理缓存和使用纹理时降低的功耗。
此外,这可无需使用纹理压缩方法(它可能不一定对于每一种数据始终合乎需要或者适合)来实现。
此外,下面进一步论述,例如与使用直接多级编码(它不会保持与本发明相同的值精度量)相比,本发明可允许多个曲线描述装入纹 理中,同时仍然保留较高的个别平滑曲线描述的值精度量(如果它将单独在纹理中表示)。
取样纹理值优选地用于通过将取样纹理值与曲线的阈值进行比较,来确定取样位置在曲线的哪一侧。这种比较可以是大于(“>”)或者大于或等于(“>=”)比较(或小于(“<”)或者小于或等于(“<=”)比较。在一个优选实施例中,使用大于或等于(或者小于或等于)测试,因为已经发现它在使用本发明时与典型图形处理器所执行的舍入更好地配合。
因此,根据本发明的第三方面,提供一种图形处理系统中渲染平滑曲线所定义的形状的方法,该方法包括:
通过针对图元内的取样位置对纹理值进行取样,将表示与定义形状的曲线对应的曲线的图形纹理应用于待渲染图元,通过将纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值,来配置纹理以表示两个平滑曲线;以及
将图元的所取样的取样点的取样纹理值与被渲染曲线的所选纹理阈值进行比较,以便确定图元的所取样的取样点应当看作在曲线的哪一侧。
根据本发明的第四方面,提供一种用于图形处理系统中渲染平滑曲线所定义的形状的设备,该设备包括:
用于存储各表示两个或更多平滑曲线的一个或多个图形纹理的部件,通过将图形纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值, 而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值,来配置每个纹理以表示至少两个平滑曲线;
执行以下步骤的部件:通过针对图元内的取样位置对所存储纹理的纹理值进行取样,将表示至少两个平滑曲线的所存储纹理应用于待渲染图元,以便渲染与平滑曲线之一对应的曲线所定义的形状供显示;以及
用于执行以下步骤的部件:将图元的所取样的取样点的取样纹理值与纹理表示的曲线之一的纹理阈值进行比较,以便确定图元的取样点应当看作在那个曲线的哪一侧。
类似地,根据本发明的第五方面,提供一种渲染平滑曲线所定义的形状供显示的方法,该方法包括:
生成覆盖其中将要显示形状的场景区域的一个或多个图元;
光栅化图元以生成一个或多个图形片元,每个所生成的片元表示图元所覆盖的取样点;
通过对于各分片对纹理中的对应位置进行取样以确定取样纹理值,将表示与定义形状的平滑曲线对应的平滑曲线的图形纹理应用于所生成的片元,通过将纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值,来配置纹理以表示两个平滑曲线;
将片元的取样纹理值与对应于定义待渲染形状的曲线的曲线的纹理阈值进行比较;以及
根据比较将片元和/或该片元所表示的取样位置看作是在曲线之内或之外。
根据本发明的第六方面,提供一种用于渲染平滑曲线所定义的形状供显示的设备,该设备包括:
用于生成覆盖其中将要显示形状的场景区域的一个或多个图元的部件;
用于光栅化图元以生成零个或多个图形片元的部件,每个所生成的片元表示图元所覆盖的取样点;
用于执行以下步骤的部件:通过对于各分片对纹理中的对应位置进行取样以确定取样纹理值,将表示与定义形状的平滑曲线对应的平滑曲线的图形纹理应用于所生成的片元,通过将纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值,来配置纹理以表示至少两个平滑曲线;
用于将片元的取样纹理值与对应于定义待渲染形状的曲线的曲线的纹理阈值进行比较的部件;以及
用于根据比较将片元和/或该片元所表示的取样位置看作是在曲线之内或之外的部件。
本发明的这些方面能够并且优选地在适当时确实包括本文所述的本发明的优选和可选特征的任何一个或多个或者全部。因此,例如,比较测试优选地是大于或等于(或者小于或等于)测试。
这里还应当注意,如本领域已知,有可能使覆盖其中将要显示形状的场景区域的图元光栅化到零片元,即有效地表示形状在被显示时不会在场景中看到。在这种情况下,不存在纹理将要应用到其中的片元。但是,图元通常光栅化到一个或多个片元(到至少一个片元),并且在这种情况下纹理则将如上所述应用于那些片元。
关于取样位置在曲线的哪一侧的确定(例如比较测试)的结果优选地用于控制那个取样位置的将来处理。优选地,确定的结果实际上用于适当地保持取样位置或者从关于平滑形状(曲线)的进一步处理 丢弃取样位置。优选地,如果测试表明取样位置在曲线之内,则图元中的对应位置相应地着色(shaded)(例如上色(coloured)),但是如果它在曲线之外,则图元中的位置不着色,以便具有所述的平滑形状所需的属性(例如,优选地从形状的进一步处理丢弃)。
因此,在一个优选实施例中,本发明包括用于按照关于取样位置在曲线的哪一侧的确定的结果(比较测试的结果)对取样位置着色的步骤或部件。
因此,例如,优选地,确定是在曲线之内的点优选地具有对其施加的特定颜色和/或外观,并且确定是在曲线之外的点允许具有(并且具有)对其施加的不同颜色(例如由场景中的另外某个对象或形状确定的颜色)。
换言之,所述或每个取样位置优选地至少部分按照已经确定它在曲线的哪一侧来着色(上色)。
着色例如可在与应用纹理的遍(pass)相同的处理遍中执行,或者纹理测试的结果可被存储(例如存储在模板缓冲器(stencil buffer)中),而着色则在以后的遍中执行。在一个优选实施例中,着色在下一遍中执行,因为这在需要组合平滑曲线和正多边形(它们可相互相交和重叠)时有帮助。
在一个优选实施例中,每个片元存在单个纹理查找,并且由于比较测试而丢弃(或者不丢弃)片元。
如上所述,本发明中使用的纹理应当以上述方式表示至少两个平滑曲线。给定纹理可能仅表示两个平滑曲线,但以优选方式,纹理可表示多于两个平滑曲线(以及在一个优选实施例中,纹理的一个或多个表示多于两个平滑曲线)。因此,一般来说,各纹理可表示两个或更多平滑曲线。(这里还应当注意,本发明并不排除也存储和使用仅表示单个平滑曲线或者以不同方式配置的某些纹理,只是表示将存在至少一个纹理以本发明的方式表示并且可用于渲染两个(或两个以上)平滑曲线。)
在纹理表示多于两个平滑曲线的情况下,则应当对于第三(以及任何后续曲线)类似地来配置,即,使得“第三”曲线具有与该纹理还表示的第一和第二曲线的第一和第二阈值不同的第三阈值,并且使得对纹理表示的第三曲线一侧的所有纹理位置进行取样将返回小于第三阈值的取样纹理值,而第三曲线另一侧的所有纹理位置将返回大于第三阈值的取样纹理值(对于任何后续(第四、第五等)曲线依此类推)。
因此,一般来说,要求在于,纹理表示至少两个平滑曲线,并且纹理表示的各曲线将具有与纹理表示的曲线的阈值不同的曲线“阈值”,以及纹理将配置成使得对纹理表示的相应曲线一侧的所有纹理位置进行取样将返回小于那个曲线的阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于那个曲线的阈值的取样纹理值。
本发明中用于表示平滑曲线(以及用于渲染平滑形状)的纹理可根据需要来构成和配置。如上所述,各平滑曲线应当在纹理中表示,使得对纹理中的给定位置的纹理值进行取样允许系统确定纹理中的那个位置在曲线的哪一侧。
在一个优选实施例中,如本领域已知,纹理配置为质素值阵列,各质素(纹理位置)具有与其关联的纹理图中那个位置的对应纹理值。构成纹理的质素的质素值在这个布置中应当相应地经过选择和设置,使得当对纹理中的纹理位置进行取样时,取样纹理值可适当地指示纹理位置在纹理表示的各曲线的哪一侧。
本发明还扩展到表示曲线的纹理的构造以及纹理本身。例如,也许是纹理将单独和/或预先生成(和存储),然后例如提供给图形处理器使用。本发明扩展到这些活动,以及扩展到当实际渲染平滑形状(和曲线)时使用纹理。
因此,根据本发明的第七方面,提供一种生成图形处理系统中用于渲染平滑曲线所定义的形状的纹理的方法,该方法包括:
通过以下步骤来生成包括用于表示至少两个平滑曲线的纹理质 素阵列的图形纹理图:
设置纹理的质素值,使得取自位于纹理要表示的第一平滑曲线在纹理中出现时其一侧的纹理图中的位置的纹理样本将返回小于第一纹理阈值的纹理值,而使得取自位于纹理中的那个平滑曲线另一侧的位置的纹理样本将返回大于第一纹理阈值的纹理值,并且使得取自位于纹理要表示的第二平滑曲线在纹理中出现时其一侧的纹理图中的位置的纹理样本将返回小于不同的第二纹理阈值的纹理值,而使得取自位于纹理中的那个平滑第二曲线另一侧的位置的纹理样本将返回大于第二纹理阈值的纹理值。
根据本发明的第八方面,提供一种用于生成图形处理系统中用于渲染平滑曲线所定义的形状的纹理的设备,该设备包括:
用于生成包括用于表示两个平滑曲线的纹理质素阵列的图形纹理图的部件,包括:
用于执行以下步骤的部件:设置纹理的质素值,使得取自位于纹理要表示的第一平滑曲线在纹理中出现时其一侧的纹理图中的位置的纹理样本将返回小于第一纹理阈值的纹理值,而使得取自位于纹理中的那个平滑曲线另一侧的位置的纹理样本将返回大于第一纹理阈值的纹理值,并且使得取自位于纹理要表示的第二平滑曲线在纹理中出现时其一侧的纹理图中的位置的纹理样本将返回小于不同的第二纹理阈值的纹理值,而使得取自位于纹理中的那个第二平滑曲线另一侧的位置的纹理样本将返回大于第二纹理阈值的纹理值。
根据本发明的第九方面,提供一种在图形处理系统中用于渲染平滑曲线所定义的形状的图形纹理图,该纹理图包括:
纹理质素阵列,其中:
设置纹理的质素值,使得取自位于纹理要表示的第一平滑曲线在纹理中出现时其一侧的纹理图中的位置的纹理样本将返回小于第一纹理阈值的纹理值,而使得取自位于纹理中的那个平滑曲线另一侧的位置的纹理样本将返回大于第一纹理阈值的纹理值,并且使得取自位 于纹理要表示的第二平滑曲线在纹理中出现时其一侧的纹理图中的位置的纹理样本将返回小于不同的第二纹理阈值的纹理值,而使得取自位于纹理中的那个第二平滑曲线另一侧的位置的纹理样本将返回大于第二纹理阈值的纹理值。
本领域的技术人员会理解,本发明的所有这些方面和实施例能够并且优选地在适当时确实包括本文所述的优选特征的任何一个或多个或者全部。例如,优选地存储所生成的纹理图供将来使用。
如上所述,在本发明的这些方面和实施例中,表示曲线的纹理图经过配置,使得纹理表示的给定曲线任一侧的取样纹理点将提供大于或小于那个曲线的阈值的取样纹理值。这意味着,当对纹理取样时,取样纹理值可用于确定取样点是在曲线之内还是之外(取样纹理值是大于还是小于(或者反过来)曲线的纹理阈值)。
这里应当注意,本发明的所有方面和实施例的目标及意图是确保纹理中的给定曲线一侧的所有纹理位置将返回小于那个曲线的所选阈值的取样纹理值,反过来也是一样,以便允许纹理位置所在的曲线一侧易于确定。
但是,情况也许是,取样纹理位置将返回等于给定曲线的所选阈值的值。实际上,纹理中通常存在将返回等于曲线的阈值的取样纹理值的纹理位置的线条。
取样时返回曲线的阈值的这些纹理位置相应地形成纹理中的轮廓线(在被取样时),在轮廓线上,那个轮廓上的任何点的取样纹理值将等于曲线的纹理阈值。纹理中的这个轮廓(在被取样时)因此将有效地表示并且因此能有效地被认为表示由纹理指示时(对纹理取样时)的曲线的线条(由于对曲线阈值轮廓上的纹理位置进行取样将返回曲线的阈值,因此这种位置可看作曲线在纹理中出现时实际上位于其“上”而不是曲线一侧或另一侧)。
相应优选地,尽可能将纹理配置成使得与曲线的阈值集对应的纹理中的轮廓接近地匹配并且接近地表示、优选地尽可能接近表示纹理 要表示的那个平滑曲线的线条(因此实际上平滑形状的边缘),因为这则应当意味着纹理在被取样时将会更准确地反映那个曲线(和形状)。这优选地对于纹理要表示的各曲线进行。
虽然有可能将具有给定曲线的阈值的轮廓“上”(即,被取样时返回曲线的阈值)的样本纹理位置看作特殊情况(例如区分渲染时的曲线的线条),但在一个优选实施例中没有这样做,而只是优选地按照被采用的比较测试(例如是其中曲线阈值的轮廓“上”的点将看作与大于阈值的点相同的“大于或等于”测试还是其中曲线阈值的轮廓“上”的点将看作与小于阈值的点相同的“大于”测试,等等)来处理等于阈值的任何纹理样本。
相应地还应当注意,虽然一般会希望将纹理配置成使得纹理中的某个、优选地每个曲线的阈值轮廓(线)上的位置将接近地匹配、优选地尽可能接近地匹配纹理要表示的曲线的线条,但是不需要特意将纹理的取样配置成使得阈值轮廓上的点将看作或识别为特殊情况。而是优选地,只是进行测试以便查看取样位置应当看作是在曲线之内还是之外。
如上所述,纹理表示的多个曲线的每个具有用于对照确定纹理位置在曲线的哪一侧进行测试的不同阈值。因此,如果纹理表示两个曲线,则将存在两个不同的阈值,如果它表示三个曲线,则将存在三个不同的阈值,依此类推。
纹理的质素值应当设置成使得它们在被取样时将返回对于那个纹理位置指示在纹理中表示(represented in the texture)时的各曲线的适当一侧的值。因此,质素应当具有相对于在纹理中表示时的各曲线的阈值适当设置的值。
例如,如果纹理中的质素的位置位于在纹理中表示的所有曲线之内(或者反过来),则那个质素应当具有低于(或高于)纹理要表示的所有曲线的阈值的值。
但是,其纹理位置在在纹理中表示时的一个曲线之内但在纹理中 表示时的另一个曲线之外的质素应当具有高于曲线之一的阈值但低于另一个曲线的阈值的值(即,曲线的阈值之间的值),依此类推。
本申请人已经认识到,实际上,虽然优选的是沿着和围绕在纹理中出现时的给定曲线的线条(实际上围绕纹理中的曲线的阈值轮廓)准确地设置质素的值(使得对纹理取样时可准确地指示曲线的位置),但是,离该曲线的路径较远的质素(例如与其阈值轮廓距离多于两个质素)的值对于所述的曲线不太关键,因为那些位置应当完全在曲线之内或者之外,只要在那些位置的质素值适当地高于或低于曲线的阈值,它们的精确值不应当不利地影响纹理中的那个曲线位置的精确度。
例如,这意味着,在离给定曲线的路径(因而阈值轮廓)较远的质素可使其值根据表示不同曲线、具有不同阈值的要求来设置,而没有不利地影响纹理中的第一曲线的表示。(实际上,从以上所述会理解,不同曲线的阈值应当是可使用例如全部小于(或大于)第一曲线的阈值的质素值来指示的值(因为质素全部位于第一曲线的一侧或另一侧,因而它们的值必须反映那种情况)。)
本申请人已经认识到,因此,其效果在于,离纹理中的给定曲线的路径(和阈值)轮廓较远的质素有效地、自由地(free)对用于指示另一个曲线的位置(阈值轮廓)的附加信息进行编码,由此允许多个曲线比较准确地在相同纹理(在相同的纹理空间,使用相同的质素)中表示。
相应地会理解,按照这些原理,本发明的纹理的一个优选构造是使第一曲线具有在纹理中表示的第一阈值,而第二曲线具有低于第一曲线的阈值的第二阈值,其位置在纹理中在与表示第一曲线的路径的纹理位置间隔开并且在纹理中由小于第一曲线的阈值的取样纹理值指示的第一曲线的路径一侧的纹理位置处表示(即,使得第二曲线的阈值轮廓在纹理中在与表示第一曲线的阈值轮廓的纹理位置间隔开并且在纹理中由小于第一曲线的阈值的取样纹理值指示的第一曲线 的路径一侧的纹理位置处出现)。
类似地,如果纹理对第三曲线进行编码(表示),则第三曲线优选地具有小于第一和第二曲线的阈值的第三阈值,并且其路径优选地在纹理中在与表示第一和第二曲线的路径的纹理位置间隔开并且在纹理中由小于第一和第二曲线的阈值的取样纹理值指示的第一和第二曲线的路径一侧的纹理位置处表示(即,使得第三曲线的阈值轮廓在纹理中在与表示第一和第二曲线的阈值轮廓的纹理位置间隔开并且在纹理中由小于第一和第二曲线的阈值的取样纹理值指示的第一和第二曲线的路径一侧处的纹理位置出现),依此类推。
为了更充分利用上述观测和可能性,相应地特别优选的是,实际上指示纹理中的曲线的路径的位置的质素(实际上并且优选的是指示纹理被取样时的曲线的阈值轮廓的那些质素,即,优选的是位于纹理中的每个曲线的阈值轮廓上和/或与纹理中的阈值轮廓的位置直接相邻的质素)在纹理中没有相互重叠(间隔开)。
换言之,特别优选的是使不同的质素集合指示纹理要表示的每个不同曲线的阈值轮廓。(本质上,优选的是曲线的阈值轮廓在纹理中没有相互重叠)。
这则允许指示待适配(tailor)的给定曲线的路径的质素更专门用于指示该曲线路径的位置的目的。
因此,在一个特别优选实施例中,纹理经过配置,使得对于纹理表示的各曲线,在纹理中表示时的那个曲线的路径的位置在纹理中没有与纹理表示(当它们在纹理中表示时)的其它曲线的任一个的路径在物理上重叠。
类似地,最优选地,纹理经过配置,使得对于纹理表示的各曲线,被取样时将指示在纹理中表示时的曲线的阈值轮廓的位置的质素(的位置)在纹理中没有与被取样时将指示纹理表示(当它们在纹理中表示时)的其它曲线中任一个的阈值轮廓的位置的质素在物理上重叠。
下面进一步论述,将指示被取样时在纹理中的曲线的阈值轮廓的 位置(因而优选地不应当在纹理中重叠)的特定质素例如取决于在使用中要如何对纹理进行取样,但是它们可以例如并且在一个优选实施例中确实包括位于在纹理中出现时的轮廓上和/或与其直接相邻的质素。
例如,在纹理滤波、如双线性滤波要被用于使用中的纹理进行取样的情况下,被取样时将指示纹理中的那个轮廓的位置的质素的纹理中的阈值轮廓周围的“过渡”区域大于没有使用滤波的情况(因为在那种情况下,只存在将指示形状的边缘的质素的单线)。
在一个特别优选实施例中,在这方面没有重叠的质素至少包括并且在一个优选实施例中仅包括构成跨越或跨接曲线(在纹理中出现时)的路径(和优选地阈值轮廓)的每对直接相邻质素的质素(即,在质素之间(并且没有截取(intercept)另一个质素)绘制的直线对其将被在纹理中出现时的曲线的路径相交的每对直接相邻质素)。下面进一步论述,在使用中使用双线性滤波对纹理取样的情况下,这是特别优选的。
如上所述,用于纹理要表示的各曲线的阈值应当相互不同。这使得能够允许在纹理被取样时区别不同曲线。
此外,本申请人已经认识到,下面进一步论述,优选的是使用将指示纹理中的给定曲线的阈值轮廓(路径)的位置的质素的质素值范围(因为这应当例如允许纹理中的轮廓位置的更佳的精确度)。
相应特别优选的是,用于指代(denote)纹理中的各曲线的阈值轮廓的质素值的范围没有相互重叠(即,用于将指示纹理中的给定曲线的阈值轮廓的位置(如上所述)的质素的质素值没有与用于将指示纹理要表示的其它曲线的位置的质素的质素值重叠)。
类似地,相应优选的是,纹理要表示的各曲线的阈值相互间隔开,优选地尽可能远,使得有可能允许质素值的最大范围用于各曲线的阈值轮廓,而要用于一个曲线的质素值没有与用于另一个曲线的质素值重叠。由此看来,对于纹理的可用质素值的给定整体范围,曲线阈值 优选地在那个范围之内以及之上(within and across)等间距地间隔开,例如,如果要表示两个曲线,则在范围的1/3和2/3,如果要表示3个曲线,则在范围的1/4、1/2和3/4,依此类推。
鉴于上述考虑因素,本发明中使用的纹理的一个特别优选配置是当从纹理的一侧移动到另一侧时使纹理要表示的曲线以间隔开的方式依次逐渐定位,并且当从一个曲线到下一个曲线、从纹理的一侧移动到另一侧时使曲线的阈值逐渐增加(或减小)(优选地在质素值的整个可用范围按照相等步长)。
只要满足上述原理,则分配给纹理的质素的值可通过任何适当且预期的方式来设置和配置。例如,可使用任何预期的质素值的范围和曲线纹理阈值。
质素值应当使用多于1位来指代。这将允许使用纹理中的质素值的更细颗粒分辨率。因此,在一个优选实施例中,使用质素值的灰度。优选地使用8位或16位值。可使用定点或浮点纹理(质素值)。
在一个特别优选实施例中,可用于纹理中的质素值限制于0至1的整体范围([0,1])。
在这种情况下,在纹理要表示两个曲线的情况下,优选地,一个曲线的阈值(至少对于定点纹理)设置成1/3,而另一个曲线的阈值设置成2/3。这尽可能地在可用质素值的范围内间隔开曲线的阈值,并且对于用于对具有1/3的阈值的曲线进行编码的质素值提供例如范围[0,2/3](因为0是可用范围的基底,而2/3是下一个曲线“向上”的阈值),而对于用于对具有2/3的阈值的曲线进行编码的质素值提供范围[1/3,1]。
类似地,如果纹理要表示三个曲线,则优选地使用分别提供编码范围[0,0.5]、[0.25,0.75]、[0.5,1]的曲线阈值0.25、0.5和0.75(至少对于定点纹理),依此类推。
这里应当注意,在浮点纹理的情况下,在浮点格式具有m位尾数和e位指数的情况下,则通过以1.5×2n来设置纹理中的各曲线的阈 值(其中n是正或负整数,并且具有取决于用于这些数字的位数的范围;例如,对于IEEE浮点格式数字,n将从-2e-1+2到2e-1-1(因此对于32位数字为-126...0...127,而对于16位浮点数字为-30...0...31),高达2e-2个曲线可存储在纹理中,其中各具有可用于各曲线的质素范围的大约m位分辨率(在如上所述指代阈值轮廓的质素还优选地在纹理中没有在物理上重叠的条件下)。换言之,对于浮点纹理,优选地,各曲线的阈值设置成某个或每个给定(不同的)指数范围中的中点值。这则允许全尾数精度用于用来定义各曲线的阈值轮廓的质素值。
可允许质素值延续到其它范围,并且在需要时可使用其它阈值。
本申请人已经认识到,对于给定纹理样本从纹理图返回到那个纹理的值取决于所使用的纹理查找(取样)过程,例如取决于对纹理取样时是否应用任何形式的滤波或内插。例如,对于相同的质素阵列,与只是获取与取样位置最接近质素的值的纹理查找相比,使用双线性滤波的纹理取样过程可返回给定取样位置的不同质素值。
此外,本申请人已经认识到,这可在构造表示本发明中使用的平滑曲线的纹理时用于提供更好地渲染结果。具体来说,本申请人已经认识到,如果表示平滑曲线的纹理中的质素值对于使用纹理时所使用的纹理取样过程(滤波)经过适配或优化,则可对于给定纹理分辨率实现平滑形状(曲线)的更准确渲染。
(应当注意,始终有可能通过简单地增加纹理的分辨率,来增加曲线渲染的精度。但是,那可能不一定始终是可能或合乎需要的。纹理对于要使用的纹理取样技术的适配提供增加渲染精度的备选方式,而无需增加纹理分辨率和/或对于存储器使用中的给定增加,可提供有效纹理分辨率的更大增加)。
因此,在一个特别优选实施例中,表示平滑曲线的纹理的质素值的一些或全部按照(或者根据)在用于渲染平滑曲线时应用于纹理的纹理取样过程来设置或选择。因此,例如,在使用中对纹理取样时将要使用双线性滤波的情况下,对于纹理所存储的质素值优选地选择成 使得当双线性滤波用于对纹理中的给定位置进行取样时,将适当纹理值返回(以指示该点是在曲线之内还是之外)。
换言之,表示平滑曲线的纹理优选地对于要使用的纹理取样(内插)技术经过适配。这将在纹理滤波(取样)之后改进渲染结果。
因此,根据本发明的第十方面,提供一种图形处理系统中渲染平滑曲线所定义的形状的方法,该方法包括:
通过使用为其配置纹理的特定纹理滤波过程针对图元内的取样位置对纹理值进行取样,将表示与定义形状的曲线对应的曲线的图形纹理应用于待渲染图元,通过将图形纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值,以及纹理的质素值还设置成使得纹理在使用特定所选纹理滤波过程对纹理取样时将最准确地表示各平滑曲线,来配置图形纹理以表示两个平滑曲线;以及
在这样做时,将图元的所取样的取样点的取样纹理值与纹理表示的与定义形状的曲线对应的曲线之一的纹理阈值进行比较,以便确定图元的所取样的取样点应当看作在那个曲线的哪一侧。
根据本发明的第十一方面,提供一种用于图形处理系统中渲染平滑曲线所定义的形状的设备,该设备包括:
用于存储各表示两个或更多平滑曲线的一个或多个图形纹理的部件,通过将图形纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值;以及纹理的质素值还设置成使得纹理在使用特定所选纹理滤波过 程被取样时将最准确地表示平滑曲线,来配置图形纹理以表示两个或更多平滑曲线;
用于执行以下步骤的部件:通过使用为其配置纹理的特定纹理滤波过程针对图元内的取样位置对纹理值进行取样,将表示两个或更多平滑曲线的所存储纹理应用于待渲染图元;以及
用于执行以下步骤的部件:将图元的所取样的取样点的取样纹理值与纹理表示的与定义待渲染形状的曲线对应的曲线之一的纹理阈值进行比较,以便确定图元的取样点应当看作在那个曲线的哪一侧。
类似地,根据本发明的第十二方面,提供一种渲染平滑曲线所定义的形状供显示的方法,该方法包括:
生成覆盖其中将要显示形状的场景区域的一个或多个图元;
光栅化图元以生成一个或多个图形片元,每个片元表示图元或图元之一所覆盖的取样点;
通过以下步骤将表示至少两个平滑曲线的图形纹理应用于片元,通过将图形纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值,以及纹理的质素值还设置成使得纹理在使用特定所选纹理滤波过程对纹理取样时将最准确地表示平滑曲线,来配置图形纹理以表示两个平滑曲线:
对于各片元,
使用为其配置纹理的特定纹理滤波过程对纹理中的对应位置进行取样,以便确定取样纹理值;
将片元的取样纹理值与纹理表示的与定义待渲染形状的曲线对应的曲线之一的纹理阈值进行比较;以及
根据比较将片元和/或该片元所表示的取样位置看作是在曲线之 内或之外。
根据本发明的第十三方面,提供一种用于渲染平滑曲线所定义的形状供显示的设备,该设备包括:
用于生成覆盖其中将要显示形状的场景区域的一个或多个图元的部件;
用于光栅化图元以生成零个或多个图形片元的部件,每个所生成的片元表示图元或图元之一所覆盖的取样点;
用于执行以下步骤的部件:通过对于各片元,使用为其配置纹理的特定纹理滤波过程对纹理中的对应位置进行取样以确定取样纹理值,将表示至少两个平滑曲线的图形纹理应用于所生成的片元,通过将图形纹理配置成使得纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第一阈值的取样纹理值,并且使得纹理表示的第二曲线一侧的所有纹理位置将返回小于第二不同阈值的取样纹理值,而那个曲线另一侧的所有纹理位置将返回大于第二阈值的取样纹理值,以及每个纹理的质素值还设置成使得纹理在使用特定所选纹理滤波过程对纹理取样时将最准确地表示平滑曲线,来配置图形纹理以表示两个平滑曲线;
用于将片元的取样纹理值与纹理表示的与定义待渲染形状的曲线对应的曲线的纹理阈值进行比较的部件;以及
用于根据比较将片元和/或该片元所表示的取样位置看作是在曲线之内或之外的部件。
本发明的这些方面能够并且优选地在适当时确实包括本文所述的本发明的优选和可选特征的任何一个或多个或者全部。因此,例如,比较测试优选地是大于或等于(或者小于或等于)测试。类似地,比较的结果优选地被存储并且在下一个处理遍中用于控制片元和/或取样位置的着色(使得片元和/或取样位置有效地相应保持在形状(曲线)之内或之外或者被丢弃)。
类似地,在本发明的这些方面的一个优选实施例中,每个片元存在单个纹理查找,并且由于比较测试而丢弃(或者不丢弃)片元。
对应地,根据本发明的第十四方面,提供一种生成图形处理系统中用于渲染平滑曲线所定义的形状的纹理的方法,该方法包括:
通过以下步骤来生成包括用于表示至少两个平滑曲线的纹理质素阵列的图形纹理图:
根据预计在对纹理取样时使用的特定纹理滤波过程来选择将要用于纹理的一些或全部质素的质素值;以及
设置纹理的质素值,使得:
使用特定纹理滤波过程取自纹理图中位于纹理要表示的第一平滑曲线一侧的位置的纹理样本将返回小于第一纹理阈值的纹理值,而使得使用特定纹理滤波过程取自位于那个平滑曲线另一侧的位置的纹理样本将返回大于第一纹理阈值的纹理值;以及使得:
使用特定纹理滤波过程取自纹理图中位于纹理要表示的第二平滑曲线一侧的位置的纹理样本将返回小于第二不同纹理阈值的纹理值,而使得使用特定纹理滤波过程取自位于那个平滑曲线另一侧的位置的纹理样本将返回大于第二纹理阈值的纹理值。
根据本发明的第十五方面,提供一种用于生成图形处理系统中用于渲染平滑曲线所定义的形状的纹理的设备,该设备包括:
用于生成包括用于表示至少两个平滑曲线的纹理质素阵列的图形纹理图的部件,包括:
用于根据预计在对纹理取样时使用的特定纹理滤波过程来选择要用于纹理的部分或全部质素的质素值的部件;以及
用于设置纹理的质素值的部件:
使得使用特定纹理滤波过程取自纹理图中位于纹理要表示的第一平滑曲线一侧的位置的纹理样本将返回小于第一纹理阈值的纹理值,而使得使用特定纹理滤波过程取自位于那个平滑曲线另一侧的位置的纹理样本将返回大于第一纹理阈值的纹理值;以及
使得使用特定纹理滤波过程取自纹理图中位于纹理要表示的第二平滑曲线一侧的位置的纹理样本将返回小于第二不同纹理阈值的纹理值,而使得使用特定纹理滤波过程取自位于那个平滑曲线另一侧的位置的纹理样本将返回大于第二纹理阈值的纹理值。
根据本发明的第十六方面,提供一种在图形处理系统中用于渲染平滑曲线所定义的形状的图形纹理图,该纹理图包括:
纹理质素阵列,其中:
质素值设置成使得:
取自纹理图中位于纹理表示的第一平滑曲线一侧的位置的纹理样本将返回小于第一纹理阈值的纹理值,而使得取自位于那个平滑曲线另一侧的位置的纹理样本将返回大于第一纹理阈值的纹理值;以及使得:
取自纹理图中位于纹理表示的第二平滑曲线一侧的位置的纹理样本将返回小于第二不同纹理阈值的纹理值,而使得取自位于那个平滑曲线另一侧的位置的纹理样本将返回大于第二纹理阈值的纹理值,以及其中:
纹理的部分或全部质素的质素值还设置成使得纹理在使用特定所选纹理滤波过程对纹理取样时最准确地表示平滑曲线。
本领域的技术人员会理解,本发明的所有这些方面和实施例能够并且优选地在适当时确实包括本文所述的优选特征的任何一个或多个或者全部。
在本发明的这些方面和实施例中,纹理可配置与任何预期的纹理滤波过程配合使用。最优选地,特定所选纹理滤波过程是内插过程,即内插位于质素之间的位置的纹理值的滤波过程。一般来说,有可能将纹理中的质素值适配为匹配任何纹理内插(滤波)技术,对于此技术,在任何给定取样位置的内插加权和坐标(co-ordinate)对于特定质素是可预测的。因此,一般来说,可使用任何各向同性内插过程。因此,例如,纹理可能并且在一个优选实施例中经适配(优化)与三线 性滤波配合使用。这则允许例如表示平滑曲线的纹理以mipmap的形式来提供。
在一个特别优选实施例中,对于使用双线性滤波的取样来适配(优化)表示平滑曲线的纹理。双线性滤波是同样存在于“低成本”固定功能图形硬件中的常用纹理取样技术,因此使本发明适合与双线性滤波配合使用增强了它对图形处理器以及特别是对较低成本图形处理硬件的适用性。
因此,在一个特别优选实施例中,表示平滑曲线的纹理图中存储的质素值根据双线性滤波将用于对纹理取样来选择(即,使得当双线性滤波用于对纹理中的位置进行取样时,返回适当的纹理值)。类似地,优选地当用于渲染平滑形状时使用双线性滤波技术对纹理进行取样。
当某种形式的内插或滤波功能、如双线性滤波用于对纹理取样并且纹理的质素具有大于1的位分辨率(即,各质素具有表示其值可用的多个位)、如8位或16位质素值时,那则允许质素值的更细颗粒分辨率,以及当与对应纹理滤波过程组合时例如可允许返回的取样位置值更接近地匹配曲线的真实路径。
这里还应当注意,在使用某种形式的滤波或内插过程对纹理进行取样的情况下,虽然特定曲线的给定一侧的质素值将始终大于(或者分别小于)曲线的阈值,但在纹理中的曲线的阈值轮廓周围,可以是下列情况:更接近那个轮廓的质素将具有比在曲线同一侧但离曲线的阈值轮廓更远的质素更高(或者分别更低)的值。
这是因为,为了使预期的纹理值在使用滤波过程、如双线性滤波对曲线的线条周围的纹理位置进行取样时被返回,可需要曲线的给定一侧的质素具有它们的曲线侧的变化值。实际上,一般对给定曲线的阈值轮廓周围的质素值的范围可存在某种变化,即使质素值在与曲线的阈值轮廓的较大距离处可以是相同的。
因此,在一个特别优选实施例中,纹理经过构成,使得各曲线的 阈值轮廓附近的质素值在某个值的范围上变化,但是与曲线的阈值轮廓较大距离的给定曲线的给定一侧的质素各具有相同的质素值。质素值在其中变化的曲线的阈值轮廓周围的范围的宽度例如将取决于在对纹理取样时所应用的滤波核(filter kernel)的大小。优选地,例如在双线性滤波的情况下,质素值对于(每个)曲线的阈值轮廓的每一侧的高达两个或者高达四个质素的距离变化。
最优选地,与给定曲线的阈值轮廓较大距离(直至达到(接近)那个方向上的纹理中的下一个曲线的阈值轮廓(如果存在的话))的所有质素在那个曲线的一侧设置成大于该曲线的阈值的给定值(但小于那个方向的下一个曲线的阈值(如果存在的话)),并且那个曲线另一侧的与那个曲线较大距离(同样直至达到那个方向的下一个曲线(如果存在的话))的所有质素设置成小于该曲线的阈值的给定值(但大于那个方向的下一个曲线的阈值(如果存在的话))。
类似地,优选的是,接近曲线的阈值轮廓并且在由小于曲线的阈值的纹理值指代的曲线一侧的质素能够并且确实具有甚至低于曲线的那一侧的离曲线的阈值轮廓较远的质素的质素值,反过来也是一样。
纹理(用于纹理的质素值的部分或全部)可对要使用的纹理取样过程经过优化或适配,并且使得对于那个取样过程以任何预期和适当的方式最准确地表示曲线。
优选地,设置(计算)纹理中的值,以便使采用所述纹理取样过程进行取样之后的(局部)误差之和为最小。因此,在双线性滤波的情况下,例如,优选地设置纹理中使用的值,以便使双线性滤波之后的(局部)误差之和为最小,而不是例如必要地旨在具有质素中心的正确值。
在一个特别优选实施例中,通过得出可用于表示取样过程的成本函数,然后使用一个或多个优化算法、如模拟退火使那个成本函数为最小,来确定和选择(设置)要使用的质素值。
优选地,通过使表示位于纹理中时(每个)曲线的位置与当使用特 定纹理取样过程对纹理的质素进行取样时的所述(每个)曲线的所示位置之间的相应误差的成本函数为最小,来确定用于纹理的质素值集合。
优选地通过建立包括质素值作为变量的成本函数,然后尝试使那个成本函数为最小,并且相应地选择质素值,来执行质素值的优化。优选地,相对于纹理要单独表示的各曲线来得出和应用成本函数。
在一个特别优选实施例中,通过考虑纹理中的质素之间的所述的曲线的路径(建立用于得出要使用的质素值的成本函数),然后设法优化部分或全部质素的值以便(尽可能地)返回在曲线的路径位于质素之间的点处的曲线的纹理阈值(因为这则应当确保纹理中的阈值轮廓尽可能地匹配纹理中的曲线的路径(线条)(通过纹理的质素阵列)),来确定用于纹理要表示的给定曲线的质素值的部分或全部。
在一个特别优选的这种实施例中,特别是在表示曲线的纹理将对于双线性滤波经过优化的情况下,通过考虑相应的相邻质素对之间(纹理中)的曲线的路径(建立用于得出要使用的质素值的成本函数),然后设法优化该对中质素的值以便返回在曲线与连接质素对的线条相交的点处的纹理阈值,来确定要使用的质素值的部分或全部。
因此,在一个特别优选实施例中,通过将纹理要表示(通过质素阵列)的曲线的路径(线条)分解为曲线的路径(线条)与连接相应质素中心的线条的一系列相交,然后设法调整相应质素值以便在曲线与连接相应两个质素中心的线条的相交点产生预期曲线阈值,来生成成本函数。
这优选地对于曲线的每个适当相应的质素对重复进行,并且曲线的所有质素对的总体成本函数(优化)确定为各质素对的个别成本函数之和。
因此,在一个特别优选实施例中,使用作为相对于所述的曲线的每个相关质素对(优选地,跨接纹理中曲线的路径(线条)(在实践中,实际上为纹理中的阈值轮廓)(因为那个轮廓预计匹配曲线的路径)的 每个(并且仅每个)质素对)所确定的局部成本函数之和的全局成本函数,然后使用全局优化方法尝试找到使全局(总体)误差(它在这个布置中是局部(个别质素对的)误差之和)为最小的配置,来确定要用于纹理要表示的给定曲线的纹理的质素值的部分或全部。
这优选地对于纹理要表示的各曲线进行。
在这些布置中(以及一般来说),每个相应质素对的局部成本函数(两个质素值的调整)优选地看作是一系列相互联系的优化问题。
对于每个质素对的成本函数(优化),优选地,某个或目标(成本考虑因素)是使连接质素对(在其之间)的线条上的曲线的实际交叉(相交)点与对质素值取样时指示的交叉点之间的差异为最小。(理想地,对质素值取样应当指示曲线的真正交叉点,但是这可能不一定始终是可能的,因此目标是使这个误差为最小。)
优选地通过在成本函数中包括实际交叉点位置与质素值所指示的位置之间的误差来考虑这个因素。
也优选的是,使成本函数配置成使得它产生的质素值将使用(对于在所述的纹理中表示的特定曲线)可用的质素值的尽可能大的、优选地整体范围(例如灰度)(例如[0,2/3])。这将帮助确保曲线的阈值轮廓采用较高分辨率来定义。
这优选地、特别是在上述布置中通过将成本函数设置成使得所考虑的质素对的质素值的差将反映曲线相对连接所述的质素对的线条形成的角度来实现。例如,如果曲线与两个质素之间的线条垂直,则理想地,质素值之间的差应当等于质素值的整体可用(容许)范围(例如“2/3”)。另一方面,如果曲线与两个质素之间的线条平行,则质素值的差应当为“0”(零)。
在一个优选实施例中,成本函数使用曲线与两个质素间的线条之间的角的正弦作为说明并且设法实现这个方面的因子。
又优选的是,使成本函数配置成将较小加权应用于其中曲线与质素对之间的线条几乎平行的边缘,因为在这种情况下,对质素值进行 取样时的任何“误差”不会趋向于同样多地使曲线的位置失真。这优选地通过将与曲线和质素间的线条之间的角度的正弦的平方相关的因子包含在成本函数中以便适当地对得出的“成本”值加权来进行。
这个成本函数优选地相对每个适当的相应质素对来得出和应用,并且以这种形式所定义的每个相应质素值对的成本函数对于所考虑(测试)的所有质素对进行求和,以便给出曲线的总体或“全局”成本函数,然后使用优化算法使它为最小,以便得出用于所述的曲线的质素值(找到用于各质素对的最佳质素值)。可使用任何适当的优化过程,但模拟退火是优选的。
这个过程(优选地)对于纹理要表示的各曲线重复进行,使得适当优化各曲线的质素值。
然后,所确定的质素值优选地作为表示平滑曲线的图形纹理来存储。
优选地,关于某个(每个)曲线(和相应地质素值集合)的成本函数仅相对于对纹理取样时将会影响曲线的路径(阈值轮廓)的位置的指示的那些质素(质素对)(例如并且优选地,跨越(span)或跨接(straddle)阈值轮廓的位置(即曲线的路径经过其中)的相应的(直接)相邻质素对)来评估。这是因为(离阈值轮廓较远的)其它质素当纹理被取样时(例如并且具体来说,如果双线性滤波用于对纹理取样)不应当影响那个轮廓的确定的所指示位置,因此可根据其位置简单地相应设置成高于或低于曲线的阈值的值。
(类似地,如果用于指示纹理中的各曲线的路径(阈值轮廓)的质素没有重叠(如上所述),则可单独优化各曲线,因为被优化的各质素仅参与指示其曲线(轮廓)的位置,因此优化那个曲线(其阈值轮廓)不应当影响用于指示其它曲线(其阈值轮廓)的质素。
因此,在一个特别优选实施例中,成本函数用于(仅)确定接近曲线的阈值轮廓的质素的质素值,优选地(仅)对于与曲线的阈值轮廓相邻的质素,最优选地(仅)对于跨越或跨接曲线的阈值轮廓的直接相邻 质素对,其中剩余质素(即离曲线的线条(阈值轮廓)较远的质素)只是分别设置成高于或低于曲线的阈值的值(而不是使用成本函数来得出用于那些质素的值)。
类似地,在一个优选实施例中,如上所述,纹理中的给定曲线的路径实际上分解为跨接曲线的相应质素对之间的曲线的一系列相交,其中各对的两个质素值的调整被看作一系列互相联系的优化问题,其中与曲线较远的任何质素适当地设置成高于或低于曲线的所选阈值的值。
类似地,特别优选的是,纹理对于特定纹理取样(滤波)过程的优化或适配(基于预计纹理取样过程的质素值的设置)仅相对于纹理被取样时将会影响阈值轮廓的位置的指示的那些质素(例如并且优选地,跨越或跨接那个轮廓的位置(即轮廓经过其中)的相应的(直接)相邻质素对)来执行。如上所述,这是因为其它质素(离阈值轮廓较远)当纹理被取样时不应当影响那个轮廓的确定的所指示位置,因此可根据其位置简单地相应设置成高于或低于曲线的阈值的值。
因此,在一个特别优选实施例中,只有部分但并非全部质素值根据要使用的纹理取样过程具体设置。最优选地,只有接近曲线的阈值轮廓的质素的质素值,优选地(仅)对于与曲线的阈值轮廓相邻的质素,最优选地(仅)对于跨越或跨接曲线的阈值轮廓的直接相邻质素对,才根据要使用的纹理取样过程具体设置(在至少使用双线性滤波对纹理取样的情况下;其它类型的滤波可能要求设置其它质素),其中剩余质素(即离曲线的线条(阈值轮廓)较远的质素)只是分别设置成高于或低于曲线的阈值的值,如上所述。
一旦以本发明的方式表示两个或更多平滑曲线的纹理已经创建,则它可以并且优选地存储供将来使用,以便渲染曲线(曲线所定义的形状(具有曲线作为其边缘(边界)))。
本发明的纹理的实际用于渲染它表示的平滑曲线所定义的形状可使用例如任何适当的图形纹理映射过程来进行。
如上所述,在一个特别优选实施例中,通过首先生成覆盖其中要出现形状的场景区域的图元,然后将纹理应用于图元,并且相应地对图元着色,使用纹理来渲染平滑形状供显示。
例如可通过定义覆盖其中要出现待绘制形状的场景区域的边界框,根据需要来生成图元。
当生成图像时可能需要确保所生成的图元仅对纹理的预期(和适当)区域进行取样。(下面进一步论述,在相同纹理中表示多组多个曲线的情况下,情况尤其是这样。)这可在必要时根据需要来实现。在一个优选实施例中,生成覆盖待渲染的输入曲线(形状)的控制点的凸包的图元以便设法确保这个方面。(必要时,例如在两个端点之一不是凸包的一部分的情况下,输入曲线(形状)可分为两个,以便确保两个端点之间的线条是凸包的一部分。)
然后,所生成的图元被光栅化成取样点并且生成片元,以及通过对与图元取样点(和/或片元)位置对应的纹理中的位置进行取样,将表示曲线的纹理应用于图元的各取样点(和/或片元),这是本领域已知的。(如上所述,优选地使用适当纹理滤波过程、例如并且优选地双线性滤波来对纹理取样。)
然后将取样纹理值与所述的曲线(即纹理要表示的待绘制曲线的特定曲线)的阈值集进行比较,并且相应地保持或丢弃对应取样位置和/或片元。
这种“比较和丢弃”可通过任何预期和适当方式对于所述的图形处理系统来执行。
例如,在具有可编程片元着色器硬件的图形处理系统中,可以并且优选地使用比较和条件丢弃例程,其中条件丢弃测试设置成所述的曲线的阈值(例如:if(gl_FragColor.a<threshold)discard)。
通过具有固定功能硬件的图形处理系统,α测试可以并且优选地用于比较取样纹理值并且丢弃曲线之外的取样点。例如,α测试的比较α值可设置成曲线的阈值,以便丢弃超出曲线之外的取样点和/或 片元。
将α测试用于此目的时,如果α测试必须对照整个绘制调用(draw call)的固定比较值、如0.5来执行(情况通常会是这样,这是本领域已知的),则为了对照所述的曲线的实际阈值(它可能不等于对于绘制调用的α测试所设置的值)适当地进行测试,偏置或偏移可以并且优选地加入取样纹理值(和/或从其中减去),以便允许α测试不会对照曲线的阈值来测试取样值但对照对于绘制调用所设置的α值对它们进行测试的事实。
因此,必要时,优选地调整取样纹理值,以便允许以下事实:不会将它们与所述的曲线的实际阈值进行比较(即,以便实际上将取样纹理值“移动”与曲线的阈值必须移动的相同的量,以便将它设置成用于α测试(对于绘制调用设置(例如0.5))的α值。
例如,对于阈值为1/3但其中α测试设置成0.5的曲线,在各取样纹理值输入到α测试之前,应当被加上(0.5-(1.0/3.0)),以适当偏置(偏移)取样纹理值以便与0.5的绘制调用α值而不是1/3的曲线阈值进行比较。
在一个特别优选实施例中,待绘制的给定形状(曲线)分为两个或更多单独形状(曲线),然后单独渲染形状(曲线)的每个不同部分(例如使用不同的曲线表示纹理或者相同曲线纹理的不同部分)。
在一个优选实施例中,进行这个步骤以便在一个或多个奇异点处将具有奇异点的曲线(包含尖端的曲线)所定义的形状分割,从而在曲线(几何形状)的奇异点的每侧单独绘制形状(曲线)的部分。这种布置可消除对于使曲线中的奇异点正好位于纹理中的纹理栅格线上的需要(如下所述)。
(也有可能的是,在由纹理表示的曲线具有一个或多个奇异点的情况下,将纹理配置成使得曲线中的奇异点正好位于连接纹理的质素中心的栅格线上(并且在一个优选实施例中进行这个操作)。这将确保奇异点的不连续导数位于质素“栅格”上,因此可消除在“奇异点” 处分割曲线的需要。)
还可能希望将很大的形状分为较小形状用于渲染过程,例如帮助减少渲染伪像(artefact)的数量。
类似地,自相交形状、如其中具有环形的曲线所定义的形状可分为没有自相交的两个(或更多)形状,然后单独绘制,以便促进将本发明的技术用于这类形状。
在一个特别优选实施例中,各表示多个不同曲线和/或给定曲线的多个不同部分的多个不同纹理被生成和存储。然后,为了绘制任何给定形状(曲线),最适合那个形状(曲线)的纹理可被识别和选择,并且用于渲染该形状(曲线)。通过表示纹理中的曲线的适当范围,则应当能够渲染几乎任何任意弯曲形状。
实际上,本申请人已经认识到,在实践中希望绘制的即使不是全部也是大部分曲线段将落入几个曲线族之一,因此有可能表示希望使用较少纹理来绘制的即使不是全部也是大部分曲线。
在一个优选实施例中,多组多个不同曲线(这样的每个组以本发明的方式表示两个或更多曲线)存储在同一个纹理图中。这例如可通过以下步骤来进行:空间分离纹理中的曲线集合,然后对所述的曲线集合的纹理中的适当区域进行取样。
在要使用本发明的情况下,则优选地,表示平滑曲线的纹理预先生成,然后例如并且优选地连同图形处理系统将使用的其它(静态)纹理图一起适当存储供图形处理系统使用。给定应用则可要求当所述的平滑曲线(所述的平滑曲线所定义的形状)要绘制时应用该纹理。
在本发明中,纹理中表示的平滑形状和平滑曲线可包括任何适当和预期的这类形状和曲线。如上所述,在一个特别优选实施例中,各平滑曲线是连续的并且对于其曲线(曲线的路径)的一阶导数是分段连续的曲线。优选地,作为补充或替代,它是贝塞尔曲线、样条曲线和/或弧形。
类似地,本发明可适用(并且应用到)的平滑曲线所定义的形状可 以是具有适当平滑曲线作为其边缘或边界的任何形状。因此,在本发明中,纹理中表示(并且使用纹理来渲染)的平滑形状能够并且优选地确实包括具有连续的曲线作为其边缘(边界)的任何形状并且其曲线(曲线的路径)的一阶导数分段连续。优选地,定义形状(定义形状的边缘)的曲线是贝塞尔曲线、样条曲线和/或弧形。
本申请人还认识到,某些曲线族内的所有曲线可使用仿射变换来变换到预定义的单个或基础基准曲线、本文中称作“典范曲线(canonical curve)”的至少一部分。例如,在二次曲线的情况下,任何给定二次曲线可使用仿射变换来变换到基础二次曲线y=x2,它相应地是可用于二次曲线的“典范”曲线。
因此,这允许与单曲线、即典范曲线有关的信息用于确定与可定义图形处理系统接收供渲染的平滑曲线的多个平滑曲线有关的信息。换言之,例如不是必须得出或存储涉及可定义可由图形处理系统接收供渲染的平滑形状的每个单独平滑曲线的数据,仅需要得出或存储与典范曲线有关的数据。然后,这个数据可用于渲染属于“典范曲线”表示的平滑曲线族(集合)的单独平滑曲线的每个所定义的形状。
因此,在一个特别优选实施例中,表示多个基准或“典范”曲线的纹理被生成和使用。
本领域的技术人员会理解,例如,如果定义待绘制形状的曲线没有完全匹配在纹理中表示时曲线的取向,则定义待渲染形状的给定输入平滑曲线可能不会完全匹配在纹理中表示和存储时的对应平滑曲线的剖面(profile)。例如,输入形状、因而曲线可相对在纹理中表示时的曲线旋转或缩放。在这些情况下,纹理中记录的曲线将需要适当地映射到待显示的形状(曲线),以便它在显示器上出现时正确绘制输入形状(曲线)。
这种变换可优选地包括使用仿射变换将纹理与待绘制形状(曲线)匹配。因此,在一个优选实施例中,本发明包括变换纹理,使得它可在应用纹理之前映射到待绘制形状(曲线)。
在纹理中表示曲线时将曲线映射到待绘制形状(曲线)的过程可通过任何适当和预期方式来执行。在一个优选实施例中,将纹理中记录的曲线映射到待显示图像的过程通过以下步骤来进行:计算定义待绘制的输入曲线(定义待绘制形状的曲线)的控制点的纹理坐标,然后对曲线线性内插纹理坐标(例如使用图形处理器的内插硬件)。
在控制点处的纹理坐标可根据需要来确定,并且在需要时不同的方法可用于不同类型的曲线。
例如,在二次曲线的情况下,各输入曲线应当正好是纹理中存储的曲线的仿射变换形式。通过每次使用整个曲线,固定纹理坐标可用于每个控制点,并且必要的变换通过将表面空间(surface space)中的控制点与(纹理空间中的)纹理坐标组对隐式定义。
对于三次曲线,曲线优选地首先分类为蛇形、环形、尖端、“无穷尖端”(即带有具有无穷远拐点的尖端的曲线)、退化或抛物曲线。抛物曲线是二次曲线,并且优选地同样处理。退化曲线优选地通过将它分为一个或多个线条来处理。
对于其它曲线,优选地计算曲线的拐点(inf10和inf11)。然后,如果所存储曲线配置成使得其拐点始终在-1和1,则可计算从[inf10..inf11]->[-1..1]的线性变换。这样,输入曲线的起始和结束点(0和1)的参数位置可变换到它们在纹理空间中的位置。纹理需要覆盖的典范纹理空间中的参数范围这时为已知。
对于环形曲线和蛇形曲线,则搜索所存储纹理以找到覆盖所需参数范围的纹理(例如最大程度放大纹理)。(这对于尖端和无穷尖端曲线不是必要的。)
(拐点在-1和1的)所存储曲线则优选地重新缩放以便将拐点映射到输入曲线的拐点inf10和inf11。然后,这种变换优选地应用于所存储曲线的控制点,以便给出适当变换的控制点位置,然后能够并且优选地将它们用作输入曲线的对应控制点的纹理坐标。
在多组曲线在空间上装入纹理的情况下,可需要将变换应用于纹 理坐标,以便对纹理的正确(空间)子集进行取样。这优选地通过以下步骤来进行:计算将“输入”框变换到覆盖所存储纹理的预期部分的“框”(即,变换[0..1]x[0..1]->[u_1..u_2]x[v_1..v_2])所需的缩放和平移,然后将确定的变换应用于已经计算的纹理坐标,好像曲线覆盖整个纹理那样。
从以上所述会理解,在本发明的一个优选实施例中,图形处理系统将接收平滑曲线所定义的输入形状(即,使平滑曲线作为其边缘(边界))以便进行渲染供显示。然后,图形处理系统识别表示与定义待渲染形状的曲线对应的曲线的纹理,得出将纹理中表示和定义的曲线与定义待渲染形状的曲线进行匹配所需的任何必要的映射或变换,然后使用任何得出的必要变换或映射,使用表示与定义待渲染形状的曲线对应的曲线的纹理以本发明的方式渲染该形状。
从以上所述会理解,本发明可有效地绘制使纹理中定义的平滑曲线作为其边缘或边界的形状(因为曲线一侧的点以不同于曲线另一侧的点的方式来绘制)。因此,本发明可有效地用于渲染使相关曲线作为其边缘或边界和/或使相关曲线作为其轮廓或边界的形状(即,使得曲线的不同侧的点应当以不同方式来绘制)。
实际上,本发明可用于识别定义(表示)形状的边缘的曲线任一侧的点,由此允许有效地绘制形状。因此,用于本发明的纹理可看作表示定义待渲染形状的边缘或轮廓的曲线。
因此,本发明可用于渲染具有连续的边缘或轮廓曲线的(平滑)形状并且其中边缘或轮廓曲线的一阶导数分段连续的(即,本发明可用于渲染的平滑曲线所定义的形状)。
(在需要时,本发明的纹理和技术当然也可用于实际上绘制曲线本身,因为它们也可定义曲线本身。)
在一个特别优选实施例中,本发明的各种功能在生成和输出被写入用于显示装置的帧缓冲器的数据的单个图形处理平台上执行。
本发明可适用于任何形式或配置的渲染器,例如具有“管线”布 置的渲染器(在那种情况下,渲染器将采取渲染管线形式)。在一个优选实施例中,它适用于硬件图形渲染管线。本发明的各种功能和元件等可根据需要例如并且优选地通过适当的功能单元、处理逻辑、处理器、微处理器布置等来实现。
本发明可适用于所有形式的渲染,例如立即模式渲染(immediatemode rendering)、延迟模式渲染、基于拼贴(tile)的渲染等。在一个优选实施例中,它用于以及用来延迟模式渲染和基于拼贴的渲染器(renderer)。
从以上所述会理解,本发明不是排他地、但特别适合于3D图形处理器和处理装置,并且相应地扩展到包括根据本文所述的本发明的方面的任何一个或多个的设备或者按照其进行操作的3D图形处理器和3D图形处理平台。在执行上述特定功能所需的任何硬件的条件下,此类3D图形处理器另外可包括3D图形处理器包括的常用功能单元的任何一个或多个或者全部。
本发明类似地扩展到2D图形处理器和2D图形处理。
虽然以上具体参照纹理用于表示平滑曲线和平滑形状以便进行渲染来描述了本发明,但是本申请人已经认识到,本发明的原理可用于装(pack)具有“轮廓”区域并且可更有效地表示为二维数据结构中的“平滑形状”的其它形式的数据。
本发明相应地扩展到将本发明的原理用于存储和使用与表示平滑曲线供图形渲染的数据不同的数据。
因此,根据本发明的另一方面,提供一种生成用于存储与两个或更多曲线的位置相关的信息的二维数据结构的方法,该方法包括:
通过以下步骤来生成包括用于表示两个或更多曲线的位置的二维区域内的所选取样位置阵列的值集合的二维数据结构:
设置阵列中的取样位置的值,使得取自位于数据结构要表示的第一曲线在数据结构中出现时其一侧的数据结构表示的区域中的位置的样本将返回小于第一阈值的取样值,而使得取自位于数据结构中的 那个曲线另一侧的位置的样本将返回大于第一阈值的取样值,并且使得取自位于数据结构要表示的第二曲线在数据结构中出现时其一侧的数据结构中的位置的样本将返回小于不同的第二阈值的取样值,而使得取自位于数据结构中的那个第二曲线另一侧的位置的样本将返回大于第二阈值的取样值。
类似地,根据本发明的另一方面,提供一种用于生成用于存储与两个或更多曲线的位置相关的信息的二维数据结构的设备,该设备包括:
用于通过以下步骤来生成包括用于表示两个或更多曲线的位置的二维区域内的所选取样位置阵列的值集合的二维数据结构的部件:
设置阵列中的取样位置的值,使得取自位于数据结构要表示的第一曲线在数据结构中出现时其一侧的数据结构表示的区域中的位置的样本将返回小于第一阈值的取样值,而使得取自位于数据结构中的那个曲线另一侧的位置的样本将返回大于第一阈值的取样值,并且使得取自位于数据结构要表示的第二曲线在数据结构中出现时其一侧的数据结构中的位置的样本将返回小于不同的第二阈值的取样值,而使得取自位于数据结构中的那个第二曲线另一侧的位置的样本将返回大于第二阈值的取样值。
根据本发明的又一方面,提供一种用于存储与两个或更多曲线的位置相关的信息的二维数据结构,包括:
二维区域内的所选取样位置阵列的值集合,其中:
阵列中的取样位置的值设置成使得取自位于数据结构要表示的第一曲线在数据结构中出现时其一侧的数据结构表示的区域中的位置的样本将返回小于第一阈值的取样值,而使得取自位于数据结构中的那个曲线另一侧的位置的样本将返回大于第一阈值的取样值,并且使得取自位于数据结构要表示的第二曲线在数据结构中出现时其一侧的数据结构中的位置的样本将返回小于不同的第二阈值的取样值,而使得取自位于数据结构中的那个第二曲线另一侧的位置的样本将 返回大于第二阈值的取样值。
本领域的技术人员会理解,本发明的所有这些方面和实施例能够并且优选地在适当时确实包括本文所述的本发明的优选可选特征的任何一个或多个或者全部。因此,例如,数据值优选地适配待使用的特定数据取样方案。类似地,曲线优选地布置在数据结构中,使得它们在数据结构中的位置没有重叠,并且优选地是以上所述形式的(平滑)曲线。数据结构优选地是图形纹理。
本领域的技术人员还会理解,本发明的所有所述方面和实施例能够并且优选地在适当时确实包括本文所述的优选和可选特征的任何一个或多个或者全部。
根据本发明的方法可至少部分使用软件、如计算机程序来实现。因此将会看到,从其它方面来看时,本发明提供在安装到数据处理部件时特别适合执行本文所述的方法的计算机软件、包括当程序单元运行于数据处理部件时用于执行本文所述方法的计算机软件代码部分的计算机程序单元以及包括当程序运行于数据处理系统时适合执行本文所述的某一方法或这些方法的所有步骤的代码部件的计算机程序。数据处理器可以是微处理器系统、可编程FPGA(现场可编程门阵列)等。
本发明还扩展到包括这种软件的计算机软件载体,其中软件在用于操作图形处理器、渲染器或者包括数据处理部件的微处理器系统时,结合所述数据处理部件使所述处理器、渲染器或系统执行本发明的方法的步骤。这种计算机软件载体可以是例如ROM芯片、CD ROM或磁盘等物理存储介质,或者可以是例如通过线路的电子信号、光信号或者例如到卫星的无线电信号等等。
还应理解,并非本发明的方法的所有步骤都需要通过计算机软件来执行,因此,从另一个广义方面来看,本发明提供计算机软件,并且这种软件安装在计算机软件载体上,用于执行本文所述的方法的步骤的至少一个。
本发明可相应地适当体现为与计算机系统配合使用的计算机程序产品。这种实现可包括固定在实体介质,诸如例如磁盘、CD-ROM、ROM或硬盘等计算机可读介质上或者经由调制解调器或其它接口装置、通过包括但不限于光或模拟通信线路的实体介质或者使用包括但不限于微波、红外线或其它传输技术的无线技术以无形方式传送到计算机系统的一系列计算机可读指令。计算机可读指令系列实施本文先前所述的功能性的全部或部分。
本领域的技术人员会理解,这类计算机可读指令可通过与许多计算机架构或操作系统配合使用的许多编程语言来编写。此外,这类指令可使用当前或将来的包括但不限于半导体、磁或光的任何存储器技术来存储,或者使用当前或将来的包括但不限于光、红外线或微波的任何通信技术来传送。考虑这种计算机程序产品可作为附有印刷或电子文档的可移动介质来分发,例如收缩包装软件(shrink-wrappedsoftware),使用计算机系统预加载在例如系统ROM或固定磁盘上,或者通过例如因特网或万维网等网络从服务器或电子公告板分发。
附图说明
现在仅作为实例、参照附图来描述本发明的多个优选实施例,附图包括:
图1示意示出在本发明中使用的纹理中的平滑曲线的表示;
图2示意示出用于图1的平滑曲线的质素值的推导的一个实施例;
图3示意示出表示单个纹理图中的多个平滑曲线的纹理的存储;
图4示意示出图1的纹理中的曲线的轮廓区域的放大部分;
图5示意示出例如图1所示的纹理对图形图元的应用;
图6示意示出本发明的一个实施例中供显示的平滑曲线的渲染;
图7示意示出本发明的一个实施例中包含图形纹理中的尖端的曲线的表示;
图8a示意示出根据本发明将两个平滑曲线装入单个纹理;以及
图8b示意示出纹理值在图8a所示的纹理上如何改变。
具体实施方式
如上所述,本发明的基本前提是在纹理中表示平滑曲线,使得对曲线一侧的纹理进行取样将给出小于特定阈值的取样纹理值,而对曲线另一侧的纹理进行取样将给出大于特定阈值的取样纹理值。
为了便于说明,首先相对于单个平滑曲线来描述这个原理以及如何生成纹理的原理,然后描述根据本发明将两个或更多这类平滑曲线装入单个纹理。
图1示出用于表示平滑曲线1的这种纹理的布置。
图1a)以较低分辨率示出总体纹理,并且基本上说明使曲线1每侧的纹理位置设置成并且返回不同的纹理值的原理。图1b)示出在纹理中出现时曲线1的线条周围的图1a)的纹理的放大视图,并且具体示出在纹理中出现时的曲线1附近纹理值如何改变。
如图1所示,曲线1之内的质素设置成大于“0.5”的值(值“1”在图1中示为白色),而曲线1之外的质素设置成小于“0.5”的值(值“0”在图1中示为黑色)。因此,当查找纹理中的取样位置时,对于取样位置所返回的纹理值可用于确定取样位置是否在曲线1之内。实际上,曲线1的阈值可认为是0.5。
(大家会理解,图1所示的纹理同样可用于绘制“反向”或反曲线或形状,使得“黑色”看作在曲线“之内”,而“白色”看作在曲线之外。实际上,在一个优选实施例中,配置图形系统以便能够进行这个操作。这例如可通过以下步骤来进行:从曲线的阈值的两倍减去取样纹理值(即,通过取2×阈值(它在本例中给出1.0)-取样文件值(sampled_texture_value)),然后将那个值与阈值(它实际上”翻转(flip)”了纹理的含义)进行比较。)
图1所示的纹理是8位纹理(即,使用8位来表示各质素值)。各 质素具有与其关联的单值(因此纹理可方便地是单道纹理(singlechannel texture))。
在这种布置中,允许纹理中的质素具有落入范围(包含)0至1的值,并且曲线轮廓的阈值设置成0.5。其它布置当然也是可能的。
图4示意示出图1所示的纹理中存储的曲线1的曲线轮廓区域26的放大部分24。可以看到,轮廓26周围的质素值改变到曲线轮廓的任一侧,包括离曲线的轮廓26较近、具有比高于曲线的阈值的值表示的曲线一侧上的离曲线轮廓26更远的质素28更高(更淡)的值的一些质素27,反过来也是一样。下面进一步论述,这样以便确保当曲线经过双线性取样时,返回预期纹理值。
如上所述,在本发明中,将通过图1所示的布置的方式的两个或更多平滑曲线的表示装入单个纹理(即,使用相同的质素集合来表示)。
本申请人具体认识到,虽然围绕和沿着纹理中要表示的给定曲线的路径或线条的质素的准确值对于纹理被取样时正确地指示曲线的位置会是重要的,但是离曲线的路径较远、即完全在曲线之内或之外的质素的值不是那么重要,只要那些质素的值全部高于曲线的阈值(例如曲线之外或者反过来)或者全部低于那个阈值(例如在曲线之内或者反过来)。这意味着,只要满足这些要求,则离曲线较远的质素可使其值改变,以便提供附加信息,例如具体来说是用于指示纹理中的另一个曲线的路径(线条)的位置的信息。
图8a说明这种情况,并且示出装入单个纹理(相同质素空间)82的两个平滑曲线80、81的表示。
图8a中使用的不同阴影(shades)表示纹理内不同的质素值。纹理82的准许质素值的范围是0至1。
如图8a所示,纹理中表示的第一曲线80具有第一较低阈值,即当前实施例中的1/3,而第二曲线81具有较高阈值,即当前实施例中的2/3。
这意味着,其中还有可能使用质素值的范围来指代曲线81的路径的位置,而没有使那些质素值减小到低于曲线80的阈值(它在对纹理取样以便绘制曲线80时则可产生错误读数),反过来也是一样。(实际上,质素值的范围可用于指代各曲线80、81的路径,只要那些质素值没有减小到另一个曲线的阈值的错误一侧。)
图8a说明这种情况,并且示出质素值沿图8a所示线条a-a从左至右的进展。
如图8b所示,在当前实施例中被认为在两个平滑曲线之外的区域83中的质素值设置成小于两个曲线80、81的阈值的值(即,实际上低于较小阈值曲线80的阈值1/3)。
在围绕曲线80的线条的“过渡”区域84中,质素值围绕曲线80的阈值1/3改变,以便当纹理被取样时更准确地指示曲线80的位置。但是,如图8b所示,这些质素值在任何点都没有超过曲线81的阈值2/3(以便避免为了绘制曲线81而对值取样时的错误读数)。
这意味着,实际上,如图8a和8b所示,可用于指代曲线80的线条的质素值的范围是0至2/3。这是可用的全质素值范围0-1的三分之二,因此,实际上,0.6位的精度由于纹理中存在第二曲线81而损失。但是,另一方面,定义两个曲线所需的质素的数量减少(因为如果两个曲线要在不同的纹理图中定义,则需要两倍的质素)。
则存在位于两个曲线80、81之间、即当前实施例中第一曲线80之内但在第二曲线81之外的区域85。在这种情况下,这个区域内的质素值设置成两个曲线的阈值之间的值,使得那些质素在被取样时适当地指示它们相对两个曲线的位置。
然后到达将用于指示纹理中的曲线81的路径的“过渡”区域86。此外,在这个区域中,质素值同样在值的某个范围上改变,以便当纹理被取样时更准确地指示曲线81的线条的位置。但是,这个区域86中的变化质素值同样限制成使得它们没有减小到低于曲线80的阈值。因此,实际上,区域86中可用于指示曲线81的线条的位置的质 素值的范围是3/1至1,如图8b所示。
最后,到达当前实施例中被认为在两个曲线80和81之内的区域87。在这种情况下,那个区域中的质素值只是设置成高于曲线80的阈值和曲线81的阈值,以便当纹理被取样时适当地指示那些位置在各曲线之内。
曲线80、81也装入纹理82,其方式是,如图8a所示,在纹理中出现时曲线80、81的线条(路径)周围的质素没有相互重叠。这又帮助避免一个曲线的表示影响另一个曲线的取样。
从图8a和图8b可看到,在当前实施例中,两个曲线80和81通过以下步骤存储在相同纹理空间中:赋予各曲线不同的阈值,设置质素值以使得它们相对各曲线的阈值适当取值,并且确保两个曲线的线条的位置在纹理中实际上没有相互重叠。具体来说,只要质素值不会不适当地与曲线的阈值交叉,有可能部分地将曲线层叠地放入纹理,并且实际上定义曲线的线条(路径)的质素没有相互重叠。
虽然图8a和图8b所示的布置在纹理中存储两个曲线80、81,但是当然有可能以相似方式在纹理中存储多于两个曲线,并且使用例如不同范围的质素值和不同的曲线阈值。
还有可能使用浮点格式纹理而不是定点纹理。实际上,在其中浮点格式具有m位尾数和e位指数的浮点纹理的情况下,通过将各曲线的阈值设置成1.5×2n,则高达2e-2个曲线可在纹理中层叠地存储,各具有大约m位分辨率(在也满足指代(围绕)纹理中的曲线的线条的质素的任何不重叠要求的条件下)。(换言之,通过在使用浮点纹理时将阈值设置成指数范围的中值,可保持用于指代各曲线的线条的全尾数精度。)
下面进一步论述,对于使用双线性滤波的取样来优化用于当前实施例的纹理。
(本领域已知,双线性滤波是一种根据分配给纹理图的质素的值用于纹理图中的位置的内插值的方式。它可看作是对取样位置的四个 最接近质素的凸组合,其中系数从重心坐标得出:
bilinear(s,t)=(1-s)(1-t)texeli,j+s(1-t)
texeli+1,j+(1-s)t texeli,j+1+s t texeli+1,j+1
其中,(s,t)是所述的取样位置的坐标,以及texeli,j等是对那个位置的四个最接近质素。)
如上所述,本申请人已经认识到,通过对于使用双线性滤波的取样来优化表示曲线的纹理,在纹理被使用时的取样过程能够并且将会产生所述的曲线的更好表示。
与双线性滤波配合使用的纹理的优化在本实施例中通过以下步骤来执行:对于纹理要表示的各曲线建立包括实际上指代纹理中的曲线的轮廓的位置的质素的质素值作为变量的成本函数,然后尝试使那个成本函数为最小并且相应地选择质素值。
在当前实施例中,这个成本函数通过以下步骤来生成:将特定曲线的路径(线条)分解为曲线的路径与连接相应质素中心的线条的一系列相交,然后设法调整相应质素值以便在曲线与连接相应两个质素中心的线条的相交点产生预期曲线阈值。
图2说明这种情况,并且示出质素11的示范栅格,平滑曲线10经过其中。如果考虑质素12、13,则理想地,它们相应的质素值应当设置成使得如果纹理在曲线10与连接质素12、13的线条15相交的点14经过双线性取样,则取样纹理值应当完全等于曲线的纹理阈值(可以是例如1/3)。
但是,各质素可参与其值需要对于所述的曲线以这种方式进行优化的一个以上质素对,因此它可能不一定始终能够将质素值设置成相对于任何给定质素对会产生预期结果的准确值。
因此,用于指代曲线的路径的质素的质素值通过以下步骤来确定:使用作为相对于每个相关质素对所确定的局部成本函数之和的全局成本函数(实际上,跨接所述的曲线的路径(线条)的各质素对(实际上,这也是跨接纹理中具有曲线的阈值的轮廓的各质素对)),然后使 用全局优化方法来设法找到使(所述的曲线的)全局(总体)误差为最小的配置,以便设法找到要使用的最佳质素值。
每个相应质素对的局部成本函数(两个质素值的调整)在当前实施例中看作是如下一系列互相联系的优化问题。
首先,如上所述,一个目标是使连接质素对的线条15上的曲线的实际交叉点14与质素值所确定的交叉点(即,其中对质素12、13的值双线性取样将给出等于所定义曲线阈值(在本例中为1/3)的取样值的线条15上的点)之间的差异为最小。通过在成本函数中包括实际交叉点位置与质素值所指示的位置之间的误差来考虑这个因素。
其次,成本函数配置成使得质素值中所产生的差将反映曲线10与连接质素对的线条15交叉的角θ。这样以便设法确保,如果曲线10与线条15垂直,则质素值12、13之间的差是它可以是的最大值(假定可用于所述的曲线的值的范围)(在本例中为2/3),以及如果曲线10与线条15差不多平行,则质素值12、13之间的差应当接近0(零)。这帮助确保质素可被分配(使用)整个范围的可用质素值(本例中为0至2/3),由此定义具有较高分辨率的曲线。
在当前实施例中,这通过使用曲线10与连接质素的线条15之间的角θ作为成本函数中的因子来实现。
最后,不太重要的是在曲线与质素之间的线条15差不多平行的情况下准确定位曲线10的交叉点14(因为纹理被取样时的交叉点中的任何误差在这种情况下不太有害)。在当前实施例中,通过使用与交叉角θ的正弦的平方相关的因子在成本函数中对边缘进行加权,来允许这种情况。
然后,对于所考虑的所有质素值对,将用于以这种形式所定义的每个相应的质素值对的成本函数求和,以便给出所述的曲线的“全局”或总体成本函数。
这在当前实施例中产生如下形式的成本函数:
其中:
w1和w2是可选择并且根据需要改变的加权值,例如迭代地测试变化的优化;
i是对其测试成本函数的质素对;
N是对其将成本函数进行评估和求和的质素对的总数;
θi是对于第i个质素对的曲线的交叉角;
texelia和texelib是第i个质素对的质素的相应质素值;
wantedcrosspointi是连接第i对质素的线条上真正曲线交叉的点;以及
bilinearcrosspointi是连接第i对质素的线条上采用给定质素值的双线性滤波的结果返回所定义的曲线阈值(在本例中为0.5)的点,因此是:
这个等式通过对于bilinearcrosspointi求解阈值=bilinear(bilinearcrosspointi,0)来得出。
实际上,在这个成本函数中,因子:
|wantedcrosspointi-bilinearcrosspointi|
表示当质素值被取样时所确定的曲线的交叉点与曲线的所需交叉点(wanted crossing point)之间的差的绝对值;
因子:
|texelib-texelia|-sin θi
确保使用全范围的可用质素值(防止解将所有所分配质素值落到(collapse to)阈值(本例中为0.5));以及
因于:
sin2 θi
使曲线与质素之间的线条差不多平行的情况下边缘在成本函数中具有较小加权(反过来也是一样)。
然后使这个成本函数为最小,以便找到用于将指示纹理中的曲线的轮廓的位置的各质素对的最佳质素值texelia、texelib(实际上,当前实施例中跨接(跨越)轮廓的质素对)。在当前实施例中,这使用模拟退火来进行,但是如果需要可使用其它优化算法。然后,所确定的质素值存储在表示平滑曲线的图形纹理中。
然后,这对于纹理要表示的各平滑曲线重复进行,使得为了使用双线性滤波的取样而适当优化将指示纹理中的各曲线的阈值轮廓的质素的质素值。
在当前实施例中,由于纹理中的各曲线的路径(阈值轮廓区域)没有重叠,所以任何给定质素不能参与指示纹理中多于一个曲线的位置(阈值轮廓)。这意味着,纹理中任何给定曲线的位置(阈值轮廓)的优化不会影响将指示纹理中任何其它曲线的位置(阈值轮廓)的任何质素。因此,各曲线可独立优化。
这里还应当注意,可能需要缩放和偏置优化的结果(得出的质素值),以便确保那些值在用于表示给定曲线的所需最小和最大质素值范围之内。在当前实施例中,这在必要时进行。
在当前实施例中,这个过程对于多组不同的平滑曲线和/或给定平滑曲线的部分重复进行,以便构建各表示多个不同平滑曲线的一组纹理图。
在当前实施例中,在纹理中表示的平滑曲线包括连续的并且其一阶导数分段连续的曲线。它们可以是例如贝塞尔曲线、样条曲线和/或弧形。
表示一个或多个基准或“典范”曲线的纹理也被生成和使用。(如上所述,“典范曲线”是给定曲线族内的所有曲线可使用仿射变换来 变换成的基准或基础曲线。)
在当前实施例中,通过空间分离纹理中的不同组曲线,纹理图可用于存储多组多个不同平滑曲线和/或平滑曲线的部分的纹理表示。
图3示出在表示单曲线的纹理的情况下的这个方面,并且示出单个总体纹理23中存储的多个平滑曲线20、21、22等。通过对纹理23的适当区域进行取样,可绘制其中表示的平滑曲线。在纹理的各段20、21、22等通过本发明的方式表示多个曲线的情况下,可使用相同的布置。
将表示不同组平滑曲线的纹理作为相同纹理图的不同部分存储允许许多组曲线存储在单个纹理中,并且可减少例如使用本发明时渲染平滑曲线所需的纹理变化数量。
实际上,本申请人已经发现,在实践中可需要在图形处理中绘制的即使并非全部也是大部分平滑曲线段可通过较少的曲线族来表示,使得较容易实现使用较少纹理来表示所有那些预期曲线。
一旦表示平滑曲线组的纹理集合已经通过这种方式生成并且存储供图形处理系统使用,则纹理可用于绘制平滑曲线所定义的形状(即,使对应于平滑曲线的曲线作为其边缘(边界)的形状)。这基本上通过以下步骤来进行:生成覆盖其中要绘制形状的场景(显示)区域的图元,然后将适当纹理应用到图元以绘制该形状。
当纹理应用于图元时,针对图元内的取样点来对纹理值进行取样,并且取样纹理值用于在曲线之内(即,实际上,在曲线所定义的形状的边缘或边界之内)(如果取样纹理值小于曲线的阈值,或者反过来)时有条件地绘制(着色)样本位置或者在曲线(形状)之外(如果取样纹理值大于或等于曲线的阈值或者反过来)时丢弃样本位置。
图5说明这种情况,并且示意示出表示曲线50的纹理对图元51的应用。在这种情况下,图元51的较淡上色区域52绘制为处于曲线50之内。
现在更详细地描述用于在当前实施例中使用纹理来渲染形状的 过程的一个优选实施例。
首先,图形处理系统识别渲染“平滑”形状的需要。然后以正常方式生成覆盖其中要显示形状的屏幕区域的图元。在当前实施例中,生成覆盖定义待绘制形状的边缘的曲线的控制点的凸包的三角形。
然后以正常方式将这些图元光栅化成片元,这些片元传递给着色管线进行着色。(可能发生的是,如果光栅化图元没有生成任何片元(因为图元实际上没有覆盖在将被显示时的场景的任何取样点),则该过程可在此停止,因为这意味着,形状在将被显示的场景中实际上不会看到。)
然后,通过本领域已知的从表示图元覆盖的场景中的取样点的位置的平滑曲线的纹理取纹理样本,将与定义要绘制的形状的边缘的平滑曲线对应的纹理图(或者纹理图的部分)应用于图元。在当前实施例中,每个片元进行单个纹理查找。(其它布置当然也是可能的。)
然后将各取样纹理值与对于所述的曲线所定义的纹理阈值进行比较,以及取决于比较结果样本位置则在处于曲线(因而形状)之内时被绘制(渲染)或者在处于曲线之外时被丢弃。使用双线性滤波(具有双线性滤波使能)来获取纹理样本,因为在这个实施例中,如上所述,纹理图适配使用双线性滤波的取样。
取样纹理值和曲线阈值的比较可在具有可编程片元着色器硬件的图形处理系统中使用比较和条件丢弃例程来执行,例如其中条件丢弃测试设置成所述的曲线的阈值(例如:if(gl_FragColor.a<threshold)discard)。
在固定功能图形硬件中,取样纹理值和曲线阈值的比较可使用图形“α测试”来执行,其中α测试的比较α值设置成曲线阈值(在本例中例如1/3),以便丢弃处于曲线之外的取样点和/或片元。
将α测试用于此目的时,如果α测试必须对照整个绘制调用的固定比较值、如0.5来执行(情况通常会是这样,这是本领域已知的),则为了对照所述的曲线的实际阈值(它可能不等于对于绘制调用的α 测试所设置的值)适当地进行测试,偏置或偏移加入取样纹理值或者从其中减去,以便允许α测试不会对照曲线的阈值来测试取样值但对照对于绘制调用所设置的α值对它们进行测试的事实。
换言之,在当前实施例中,在使用α测试的情况下,必要时,调整取样纹理值,以便允许以下事实:不会将它们与所述的曲线的实际阈值进行比较(情况将会是那样),以便实际上将取样纹理值“移动”与曲线的阈值必须移动的相同的量,以便将它设置成用于α测试的α值(即,对于绘制调用设置的α值)。
例如,对于阈值为1/3但其中α测试设置成0.5的曲线,各取样纹理值在它输入到α测试之前应当被加上(0.5-(1.0/3.0)),以便适当偏置(偏移)取样纹理值以便与0.5的绘制调用α值而不是1/3的曲线阈值进行比较。
在当前实施例中,大于或等于(>=)测试用于比较和丢弃测试。这个测试的结果则存储在模板缓冲器中,并且当应用着色时在以后的处理遍中用于绘制曲线。(当然同样有可能在与曲线测试的相同遍中进行着色。)
本领域的技术人员会理解,可存在其中要绘制的形状(定义形状的边缘的曲线)没有完全匹配存储于纹理中时(stored in a texture)的曲线。这种情况下,待绘制的形状(曲线)必须映射到在存储于纹理中时的曲线,使得然后可适当应用(取样)表示曲线的纹理。类似地,被渲染的图像内的取样位置必须映射到表示曲线的纹理内的适当取样位置,同样使得可正确绘制形状(曲线)。
在当前实施例中,将纹理中记录的曲线映射到待显示图像的过程通过以下步骤来进行:计算定义待绘制的输入形状的曲线的控制点的纹理坐标,然后使用图形处理器的内插硬件对曲线线性内插纹理坐标。
在二次曲线的情况下,各输入曲线应当正好是纹理中存储的曲线的仿射变换形式。因此,在当前实施例中,每次使用整个曲线,使得 固定纹理坐标可用于每个控制点,并且必要的变换通过将表面空间中的控制点与(纹理空间中的)纹理坐标组对来隐式定义。
对于三次曲线,曲线优选地首先分类为蛇形、环形、尖端、“无穷尖端”(即带有具有无穷远拐点的尖端的曲线)、退化或抛物曲线。抛物曲线是二次曲线,并且同样处理。退化曲线通过将它分为一个或多个线条来处理。
对于其它曲线,计算曲线的拐点(inf10和inf11)。所存储曲线(纹理)配置成使得其拐点始终在-1和1,因此可计算从[inf10..inf11]->[-1..1]的线性变换。这样,输入曲线的起始和结束点(0和1)的参数位置可变换到它们在纹理空间中的位置。纹理需要覆盖的典范纹理空间中的参数范围这时为已知。
对于环形曲线和蛇形曲线,则搜索所存储纹理以找到覆盖所需参数范围的纹理(例如最大程度放大纹理)。(这对于尖端和无穷尖端曲线不是必要的。)
(拐点在-1和1的)所选的所存储曲线(纹理)则重新缩放以便将拐点映射到输入曲线的拐点inf10和inf11。然后,这种变换应用于所存储曲线的控制点,以便给出适当变换的控制点位置,然后将它们用作输入曲线的对应控制点的纹理坐标。
在多组曲线在空间上装入纹理的情况下,可需要将变换应用于纹理坐标,以便对纹理的正确空间子集(区域)进行取样。这在当前实施例中通过以下步骤来进行:计算变换框[0..1]x[0..1]->[u_1..u_2]x[v_1..v_2])所需的缩放和平移,然后将变换应用于已经计算的纹理坐标,好像曲线覆盖整个纹理那样。
图6说明这些过程,并且示意示出定义待绘制形状的曲线通过分类、纹理搜索、纹理坐标计算和渲染级的移动。
如图6所示,定义待绘制形状70的给定输入平滑曲线首先在步骤a)分类。在这个示例中,分类将曲线识别为“蛇形曲线”。
然后,系统搜索表示蛇形曲线的所存储纹理71,以便找到最接 近地匹配输入曲线70的所存储蛇形曲线(步骤b))。这种搜索应当识别(并且返回)那个曲线所在的纹理坐标(那个曲线所在的纹理的区域)和曲线的阈值。
一旦进行这种操作,将输入曲线70映射到纹理71中的所存储曲线所需要的纹理坐标计算和图元生成如图6的步骤c)所示来执行。
最后,如图6的步骤d)所示,输入曲线使用所选纹理来渲染。
在当前实施例中,还有可能将待绘制的给定输入曲线(形状)分为独立段,各段则单独绘制(例如使用不同的纹理或者相同纹理的不同部分)。这可对于贝塞尔曲线例如使用Casteljau的算法来进行。需要时当然可使用其它适当的算法。
在当前实施例中,待绘制形状(曲线)的这种分割在绘制极大形状时进行,从而将它们分为较小形状以便减少渲染伪像。类似地,自相交形状、如其中具有环形的曲线所定义的形状分为没有自相交的两个(或更多)形状,然后单独绘制(渲染)这些形状。
还进行待绘制曲线(形状)的这种分割以便在奇异点分割具有奇异点(尖端)的曲线,从而避免曲线中的奇异点引起渲染误差。
(用于改进曲线中的奇异点的处理的一个备选机制是确保,当曲线在纹理中表示时,所有奇异点都处于连接质素的水平和垂直线的栅格上。图7说明这种情况,并且示出在纹理63中表示的尖端曲线60,使得尖端的奇异点61位于连接质素的中心64的栅格线62上。)
如上所述并且从以上所述会理解,通过本发明的方式来渲染平滑曲线的效果是绘制使曲线作为其边缘或边界的形状(因为曲线一侧的点以不同于曲线另一侧的点的方式来绘制)。例如,从图8可看到,用于本发明的纹理可看作表示使所述的曲线作为其边缘或边界或轮廓的形状。
因此,当前实施例和本发明可有效地考虑用于渲染使相关曲线作为其边缘或边界和/或使相关曲线作为其轮廓或边界的形状(即,使得曲线的不同侧的点应当以不同方式来绘制)。
虽然以上具体参照纹理用于表示多个平滑曲线和平滑形状以便在图形处理系统中进行渲染来描述当前实施例,但是本申请人已经认识到,也有可能使用本发明的原理在相似的数据结构中以相似方式来存储可采取曲线、轮廓线和平滑形状的形式表示的其它数据。
从以上所述可看到,本发明至少在其优选实施例中提供用于有效地渲染使平滑曲线作为其边缘(边界)的形状的方法和系统,它其中还可用于低成本固定功能3D图形硬件和未修改现有硬件图形加速器。例如,这允许更新的曲线渲染API和应用使用较低成本和/或固定功能图形硬件进行硬件加速。
因此,本发明可以仅使用“基本”图形硬件来实现。例如与用于渲染平滑曲线的现有细分方式相比,它还使用显著更小的CPU时间和渲染带宽因而较小的功率。
这至少在本发明的优选实施例中通过以下步骤来实现:将平滑曲线表示为图形纹理,然后使用图形纹理映射来渲染曲线所定义的形状。
此外,本发明通过以下步骤来提供用于进行这种操作的特别有效机制:将多个基于纹理的平滑曲线描述装入单个纹理图(使用单个质素集合),由此其中还提高将曲线存储在纹理中的方式的效率。因此,多个曲线表示装入单个二维纹理,由此节省纹理空间和纹理带宽。
这至少在本发明的优选实施例中通过以下步骤来实现:将多个曲线的表示布置在纹理中,其中各曲线具有用于指示曲线之内或之外的不同阈值水平,并且优选地确保指示各曲线的线条的质素在纹理中没有相互重叠。
Claims (12)
1.一种图形处理系统中渲染平滑曲线所定义的形状的方法,所述方法包括:
通过针对图元内的取样位置对纹理值进行取样,将表示与定义所述形状的曲线对应的曲线的图形纹理应用于待渲染的图元,通过将纹理配置成使得所述纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而所述第一曲线另一侧的所有纹理位置将返回大于所述第一阈值的取样纹理值,并且使得所述纹理表示的第二曲线一侧的所有纹理位置将返回小于与所述第一阈值不同的第二阈值的取样纹理值,而所述第二曲线另一侧的所有纹理位置将返回大于所述第二阈值的取样纹理值,来配置所述纹理以表示两个平滑曲线;
将所述图元的所取样的取样点的所述取样纹理值与对应于定义待渲染的所述形状的所述曲线的曲线的所述所选纹理阈值进行比较,以便确定所述图元的所取样的取样点应当看作在所述曲线的哪一侧;以及
按照所述取样点应当看作在所述曲线的哪一侧的确定结果对所述图元的所述取样点进行着色。
2.一种生成图形处理系统中用于渲染平滑曲线所定义的形状的纹理的方法,所述方法包括:
通过以下步骤来生成包括用于表示至少两个平滑曲线的纹理质素阵列的图形纹理图:
设置所述纹理的质素值,使得取自位于所述纹理要表示的第一平滑曲线在所述纹理中出现时其一侧的所述纹理图中的位置的纹理样本将返回小于第一纹理阈值的纹理值,而使得取自位于所述纹理中的所述第一平滑曲线另一侧的位置的纹理样本将返回大于所述第一纹理阈值的纹理值,并且使得取自位于所述纹理要表示的第二平滑曲线在所述纹理中出现时其一侧的所述纹理图中的位置的纹理样本将返回小于与所述第一纹理阈值不同的第二纹理阈值的纹理值,而使得取自位于所述纹理中的第二平滑曲线另一侧的位置的纹理样本将返回大于所述第二纹理阈值的纹理值。
3.如权利要求1或2所述的方法,其中,所述纹理表示多于两个平滑曲线。
4.如权利要求1或2所述的方法,其中,不同的质素集合用于指示所述纹理表示的每个不同曲线的阈值轮廓。
5.如权利要求1或2所述的方法,其中,所述纹理表示的各曲线的所述阈值在可用于所述纹理的质素值的总体范围之内以及之上等间距分隔开。
6.如以上权利要求1或2所述的方法,其中,对于采用特定纹理取样过程的取样来适配表示所述平滑曲线的所述纹理的质素值的一些或全部。
7.一种图形处理系统中渲染平滑曲线所定义的形状的装置,所述装置包括:
用于通过针对图元内的取样位置对纹理值进行取样,将表示与定义所述形状的曲线对应的曲线的图形纹理应用于待渲染的图元的部件,其中通过将纹理配置成使得所述纹理表示的第一曲线一侧的所有纹理位置将返回小于第一阈值的取样纹理值,而所述第一曲线另一侧的所有纹理位置将返回大于所述第一阈值的取样纹理值,并且使得所述纹理表示的第二曲线一侧的所有纹理位置将返回小于与所述第一阈值不同的第二阈值的取样纹理值,而所述第二曲线另一侧的所有纹理位置将返回大于所述第二阈值的取样纹理值,来配置所述纹理以表示两个平滑曲线;
用于将所述图元的所取样的取样点的所述取样纹理值与对应于定义待渲染的所述形状的所述曲线的曲线的所述所选纹理阈值进行比较,以便确定所述图元的所取样的取样点应当看作在所述曲线的哪一侧的部件;以及
用于按照所述取样点应当看作在所述曲线的哪一侧的确定结果对所述图元的所述取样点进行着色的部件。
8.一种生成图形处理系统中用于渲染平滑曲线所定义的形状的纹理的装置,所述装置包括:
用于生成包括用于表示至少两个平滑曲线的纹理质素阵列的图形纹理图的部件,其包括:
用于设置所述纹理的质素值的部件,使得取自位于所述纹理要表示的第一平滑曲线在所述纹理中出现时其一侧的所述纹理图中的位置的纹理样本将返回小于第一纹理阈值的纹理值,而使得取自位于所述纹理中的所述第一平滑曲线另一侧的位置的纹理样本将返回大于所述第一纹理阈值的纹理值,并且使得取自位于所述纹理要表示的第二平滑曲线在所述纹理中出现时其一侧的所述纹理图中的位置的纹理样本将返回小于与所述第一纹理阈值不同的第二纹理阈值的纹理值,而使得取自位于所述纹理中的所述第二平滑曲线另一侧的位置的纹理样本将返回大于所述第二纹理阈值的纹理值。
9.如权利要求7或8所述的装置,其中,所述纹理表示多于两个平滑曲线。
10.如权利要求7或8所述的装置,其中,不同的质素集合用于指示所述纹理表示的每个不同曲线的阈值轮廓。
11.如权利要求7或8所述的装置,其中,所述纹理表示的各曲线的所述阈值在可用于所述纹理的质素值的总体范围之内以及之上等间距分隔开。
12.如权利要求7或8所述的装置,其中,对于采用特定纹理取样过程的取样来适配表示所述平滑曲线的所述纹理的所述质素值的一些或全部。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB0818280.0 | 2008-10-06 | ||
GBGB0818280.0A GB0818280D0 (en) | 2008-10-06 | 2008-10-06 | Graphics processing systems |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101714258A CN101714258A (zh) | 2010-05-26 |
CN101714258B true CN101714258B (zh) | 2015-05-20 |
Family
ID=40042355
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910179092.3A Expired - Fee Related CN101714258B (zh) | 2008-10-06 | 2009-09-30 | 图形处理系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8477148B2 (zh) |
JP (1) | JP5512217B2 (zh) |
CN (1) | CN101714258B (zh) |
GB (2) | GB0818280D0 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8115967B2 (en) * | 2006-11-28 | 2012-02-14 | Silverbrook Research Pty Ltd | Localized signal data preservation within signal bandwidth |
GB0818277D0 (en) * | 2008-10-06 | 2008-11-12 | Advanced Risc Mach Ltd | Graphics processing system |
US8938093B2 (en) * | 2009-04-21 | 2015-01-20 | International Business Machines Corporation | Addition of immersive interaction capabilities to otherwise unmodified 3D graphics applications |
US20110285736A1 (en) | 2010-05-21 | 2011-11-24 | Kilgard Mark J | Decomposing cubic bèzier segments for tessellation-free stencil filling |
CN105488841B (zh) * | 2015-12-28 | 2018-02-23 | 北京像素软件科技股份有限公司 | 一种公告板的渲染方法和装置 |
CN109240572B (zh) * | 2018-07-20 | 2021-01-05 | 华为技术有限公司 | 一种获取图片的方法、对图片进行处理的方法及装置 |
CN109242929B (zh) * | 2018-08-16 | 2023-03-10 | 东软集团股份有限公司 | 路径坐标图形的转换方法、装置、存储介质和设备 |
CN109949389A (zh) * | 2019-03-27 | 2019-06-28 | 百度在线网络技术(北京)有限公司 | 一种路口绘制方法、装置、服务器和存储介质 |
US11893667B2 (en) * | 2022-03-31 | 2024-02-06 | Think Silicon Research and Technology Single Member S.A. | Techniques for rendering vector graphics using precomputed textures |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046888A (zh) * | 2006-03-30 | 2007-10-03 | 株式会社东芝 | 渲染装置和方法,以及形状数据生成装置和方法 |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4855934A (en) | 1986-10-03 | 1989-08-08 | Evans & Sutherland Computer Corporation | System for texturing computer graphics images |
JP2919712B2 (ja) * | 1993-06-30 | 1999-07-19 | キヤノン株式会社 | 文字発生方法および装置 |
US5381521A (en) | 1993-05-14 | 1995-01-10 | Microsoft Corporation | System and method of rendering curves |
EP0763930B1 (en) | 1995-09-15 | 2002-10-16 | Agfa-Gevaert | Method for calculating color gamuts |
JP3181877B2 (ja) * | 1998-04-14 | 2001-07-03 | 株式会社島精機製作所 | 3次元画像作成装置 |
WO2000077085A1 (en) | 1999-06-11 | 2000-12-21 | Sydney Hyman | Image making medium |
US6552725B1 (en) * | 2000-04-11 | 2003-04-22 | Corel Corporation | Heuristic method for adaptive subdivision of coons patches for rendering |
US6707452B1 (en) * | 2000-07-19 | 2004-03-16 | Pixar | Method and apparatus for surface approximation without cracks |
US6894695B2 (en) | 2001-04-27 | 2005-05-17 | National Semiconductor Corporation | Apparatus and method for acceleration of 2D vector graphics using 3D graphics hardware |
US6792205B2 (en) * | 2002-04-17 | 2004-09-14 | Mitsubishi Electric Research Laboratories, Inc. | Method for generating a textured range image |
US7158677B2 (en) * | 2002-08-20 | 2007-01-02 | National Instruments Corporation | Matching of discrete curves under affine transforms |
US6982724B2 (en) * | 2003-03-25 | 2006-01-03 | Mitsubishi Electric Research Labs, Inc. | Method for antialiasing an object represented as a two-dimensional distance field in object-order |
US6917369B2 (en) * | 2003-03-25 | 2005-07-12 | Mitsubishi Electric Research Labs, Inc. | Method and apparatus for rendering cell-based distance fields using texture mapping |
US20060017955A1 (en) | 2003-03-31 | 2006-01-26 | Sharp Laboratories Of America, Inc. | Selective graphic instance rendering |
US7764287B2 (en) | 2003-07-07 | 2010-07-27 | Arcsoft, Inc. | Graphic engine for approximating a quadratic bezier curve in a resource-constrained device |
JP4476733B2 (ja) * | 2004-07-30 | 2010-06-09 | 株式会社東芝 | パターン評価方法、プログラムおよびパターン評価装置 |
US7239319B2 (en) | 2004-08-27 | 2007-07-03 | Microsoft Corporation | Rendering outline fonts |
US7555163B2 (en) * | 2004-12-16 | 2009-06-30 | Sony Corporation | Systems and methods for representing signed distance functions |
JP4255449B2 (ja) * | 2005-03-01 | 2009-04-15 | 株式会社ソニー・コンピュータエンタテインメント | 描画処理装置、テクスチャ処理装置、およびテセレーション方法 |
US7405733B2 (en) | 2005-03-24 | 2008-07-29 | Autodesk Canada Co. | Spline drawing in a computer-implemented graphics program |
US7657071B2 (en) * | 2005-04-11 | 2010-02-02 | Siemens Medical Solutions Usa, Inc. | Systems, devices, and methods for bundle segmentation in diffusion tensor magnetic resonance imaging |
US7289119B2 (en) * | 2005-05-10 | 2007-10-30 | Sony Computer Entertainment Inc. | Statistical rendering acceleration |
US7408548B2 (en) | 2005-06-30 | 2008-08-05 | Microsoft Corporation | Triangulating procedural geometric objects |
US7432937B2 (en) | 2005-06-30 | 2008-10-07 | Intel Corporation | System and method for concave polygon rasterization |
JP2007073043A (ja) | 2005-09-06 | 2007-03-22 | Sharp Corp | 図形インスタンスに対して選択的にレンダリングを実行するレンダリング装置、レンダリング方法、および、制御プログラム |
US7564459B2 (en) * | 2005-10-31 | 2009-07-21 | Microsoft Corporation | Resolution-independent curve rendering using programmable graphics hardware |
JP4693660B2 (ja) * | 2006-03-10 | 2011-06-01 | 株式会社東芝 | 描画装置、描画方法及び描画プログラム |
CN100578547C (zh) | 2007-05-15 | 2010-01-06 | 北京金山软件有限公司 | 一种用于河流模拟的方法和系统 |
US8538200B2 (en) | 2008-11-19 | 2013-09-17 | Nec Laboratories America, Inc. | Systems and methods for resolution-invariant image representation |
-
2008
- 2008-10-06 GB GBGB0818280.0A patent/GB0818280D0/en not_active Ceased
-
2009
- 2009-09-30 CN CN200910179092.3A patent/CN101714258B/zh not_active Expired - Fee Related
- 2009-10-05 JP JP2009231897A patent/JP5512217B2/ja not_active Expired - Fee Related
- 2009-10-06 GB GB0917508A patent/GB2464381B/en not_active Expired - Fee Related
- 2009-10-06 US US12/588,177 patent/US8477148B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046888A (zh) * | 2006-03-30 | 2007-10-03 | 株式会社东芝 | 渲染装置和方法,以及形状数据生成装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2010092478A (ja) | 2010-04-22 |
GB0818280D0 (en) | 2008-11-12 |
US8477148B2 (en) | 2013-07-02 |
GB2464381A (en) | 2010-04-21 |
JP5512217B2 (ja) | 2014-06-04 |
GB0917508D0 (en) | 2009-11-18 |
CN101714258A (zh) | 2010-05-26 |
GB2464381B (en) | 2011-03-02 |
US20100110093A1 (en) | 2010-05-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101714258B (zh) | 图形处理系统 | |
CN101986344B (zh) | 图形处理系统 | |
EP0875860B1 (en) | Precise gradient calculation system and method for a texture mapping system of a computer graphics system | |
CN101714259B (zh) | 图形处理系统 | |
US7652677B2 (en) | Graphics system employing pixel mask | |
US20050068333A1 (en) | Image processing apparatus and method of same | |
US7944442B2 (en) | Graphics system employing shape buffer | |
US20130120391A1 (en) | Triangulation for Accelerated Multi-Resolution Rendering of Stroked Paths | |
CN105678683A (zh) | 一种三维模型的二维存储方法 | |
CN106408626A (zh) | 图形处理系统 | |
US8072464B2 (en) | 3-dimensional graphics processing method, medium and apparatus performing perspective correction | |
JP2005100176A (ja) | 画像処理装置およびその方法 | |
US20230196676A1 (en) | Rendering three-dimensional objects utilizing sharp tessellation | |
US11776179B2 (en) | Rendering scalable multicolored vector content | |
US20230082839A1 (en) | Rendering scalable raster content | |
EP1926052B1 (en) | Method, medium, and system rendering 3 dimensional graphics data considering fog effect | |
Liktor et al. | Fractional Reyes‐Style Adaptive Tessellation for Continuous Level of Detail | |
JP5504142B2 (ja) | 画像処理装置、画像処理方法及び画像処理プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150520 Termination date: 20190930 |