专利名称:图形边系统的制作方法
技术领域:
本发明涉及计算机系统的改进,尤其涉及处理图形显示上的边信息(edge information)的系统及方法。
本申请的部分内容受版权保护。版权拥有人允许作为专利申请文件的有关复制,但保留其版权。
边信息的图形处理是在以审美的和人机工程的方法进行信息表达中的一个重要问题。现代的图形系统利用了设计用来处理各种信息(包括文本和图形信息)的信息处理系统,使人机工程方式进行的信息处理变得越趋复杂。例如,程序员或用户用一设定方法处理图形边信息的能力就非常有限。
先有技术软件操作系统结构的边处理能力有限。限制之一是该操作系统结构不可支持一给定外设,该体系结构没有被先设计或无法被修改以支持该外设。还有,先有技术的体系结构只能以单一的预定方式处理图形边信息。
因此,本发明的主要目的之一是在一个有存储器和与之相连的显示器的计算机上灵活地处理图形目标及其相关的边。该目的是通过把图形目标装入存储器,又将图形目标转换成多个边目标,再把边目标转换成多个扫描行象素,最后在显示器上显示该扫描行象素的方式实现的。
图1是本发明一个最佳实施例的个人计算机系统框图;图2是一个最佳实施例的一对图形边示意图3是一个最佳实施例的分类排序图;图4示出了一个最佳实施例的星形多边形偶—奇规则;图5示出了一个最佳实施例采用分枝数规则的星形多边形;图6示出了一个最佳实施例在偶—奇规则对中后的星形多边形的对中框架;图7示出了一个最佳实施例在对中的分枝数规则下的星形多边形的对中框架;图8示出了内镶偶—奇规则之下的星形多边形的内镶框架;图9示出了分枝数规则下的多边形星的内镶框架;图10示出了一个最佳实施例在外镶偶—奇规则下的星形多边形的外镶框架;图11示出了一个最佳实施例在外镶分枝数规则下的星形多边形的外镶框架。
图12示出了一个最佳实施例的分立设备所用的边工具(edge engines);图13示出了一个最佳实施例具有图示结构的区域基元;图14示出了一个最佳实施例用于确定当前位置状态的方法;图15示出了一个最佳实施例的各种边;图16示出了一个最佳实施例在正Y方向上的扫描转换;
图17示出了一个最佳实施例的直边实例。
图18是一个最佳实施例的逻辑流程图。
图19是根据本发明实施边变换处理的实施例的流程图;图20是根据本发明实施。边变换处理的实施例的流程图;以及图21是根据本发明提出的进行边变换处理的实施例的框图。
本发明最好在具有操作系统的个人机(例如IBMPS/2或Apple,Macintosh计算机)上实施。图1展示了典型的硬件环境,其中的计算机包括具有中央处理器10如一标准微处理器,固有非易失性存储器11,以及通过总线12相连的多个其他单元。图1所示工作站包括一个RAM14,Rom16,连接外设(如硬盘20和软盘21)到总线的I/O适配器18,连接键盘24和用户接口适配器22,鼠标器26,喇叭28,麦克风32,以及/或其它连到总线的用户接口设备(例如触摸式屏幕),连接工作站到识别数据处理网络23的通讯适配器34,以及把总线与显示设备38相连的显示适配器36。该计算机有一常驻操作系统如Apple System/M。
在一最佳实施例中,是由面向目标的编程技术用C++语言来实现本发明的。如本领域普通技术人员所知,面向目标的编程(OOP)目标包括数据结构及数据操作的软件实体。这些元素一起使目标根据数据元素所表现的特点以及其数据操纵功能表现的行为模仿任意现实世界的实体。以这一方式,目标可以模仿具体事物,例如人和计算机,而且它们可以成型数字或几何概念一类的抽象概念。目标技术的好处在于三个基本原理封装,多形性,以及继承性。
目标隐藏(或封装)其数据和算法(其功能通过算法而进行工作)的内部结构,不用展示这些实施细节,目标展示能清楚表现其抽象而无其他细节信息的接口。多形性使封装又进一步。其概念是多个形状、一个接口。一个软件部件可向另一部件发出命令而无需知晓该部件到底是什么。接收命令的部件对其进行解释且根据其变量和数据决定如何执行该命令。第三个原理是继承,它允许开发者再使用它已有的设计和编码。这一能力使开发者避免开发软件时一切都需从头开始。反之,通过继承,开发者开发出继承了行为的子类别,从而开发者可以满足其客户特定需求。
先有技术把目标和类别库在过程环境中分层。市场上许多应用结构采用了这一设计方式。其中,在单一操作系统的上面有至少一个或多个目标层,虽然这一方式在目标层级中利用了封装,多形性,和继承性的原理,而且确实较之过程编程技术有了长足的改进,但仍有局限性。其困难在于虽然实际上开发者易于重新使用自己的目标,但却难于使用其它系统的目标,开发者仍需调用过程操作系统进入低级非目标层级。
面向目标编程的另一方面是接近于应用开发的结构过程(framework,是指一组提供预制结构以解决一组相关问题的关联类别)。对结构最合理的定义之一由伊利诺斯大学(U-niversity of Illinois)的Ralph E.Johnson和普度(Purdue)大学的Vincent F.Russo于1991年在“Reusing Object-OrientedDesigns”一书中作出的。依利诺依斯大学技术报告UIUCD-CS91-1696中提出的“一个抽象类别是一组目标的设计,这些目标合作以推行一组响应性,因此,结构就是一组能合作以执行特定的一组计算响应性的一组目标类别”。从编程角度出发,结构实际上是几组提供一个工作应用程序的预制结构的内联目标类别。例如,一个用户接口结构可提供绘制窗,滚动条,选项屏等的支持和“系统预置”行为。由于结构基于目标技术,这一行为可为继承并取代,以便允许开发者扩展该结构并生成客户化的特定专业领域中的解决方法。程序员不用改变原编码而只是扩展软件,这是优于常规编程的一个要点。此外,开发者不是通过编码层级盲目进行工作,因为结构提供了体系结构指南及模型,并在同时使其不必提供针对问题范畴的唯一特定行为。
从商业角度来看,结构可以看成封装或实施一特定专业领域中的专门知识的一种方式。公司开发机构、独立的软件销售商(ISV)及系统集成商都已获得了特定领域的专门知识,例如制造,财会以及前面实例中的现金交易等。该专门知识被收录于其编码之中。结构允许这些机构去寻找和组装该专门知识的共同特性,作法是将专门知识收录在机构的编码中。首先,这使开发者可以生成或扩展一个利用该专门知识的应用程序,然后问题被解决一次而且商业定律和设计也得以前后一致地实施和使用。另外,结构和在结构之后所实现的专门知识对已经获取了市场统管和销售全过程知识(例如制造,会计或生物技术的包装,再销售,以及应用,进而实行技术开发及普及)的那些机构工具有战略性的重要意义。
历史上,结构只是在最近才成为个人计算机的主导思想。这一进展得利于面向目标语言的出现,例如C++。传统上,C++大多运用在UNIX系统上以及研究人员的工作站上,而不是在商业个人计算机上。正是象C++及其它面向目标的语言(例如Smalltalk和其它)使得许多大学和研究项目能够设计出今天商用结构和分类库的先驱。其中的例子包括斯坦福大学(Stanford University)的InterView,卡内基-麦伦大学(Camegie-Mellon University)的Andrew工具箱以及苏黎世大学(University of Zurich)的ET++结构。
根据系统级以及要解决的问题的性质能产生出许多种结构。结构的类型范围包括从辅助开发用户接口的应用程序结构到提供通讯、打印,文件系统支持,图形之类的基本系统软件服务的低级结构。应用程序结构的商用例子是MacApp(Apple),Bedrock(Symantec),OWL(Borland),NeXTStep AppKit(NeXT)以及Smalltalk-80 MVC(ParcPlace)等等。
用结构进行编程要求习惯其它系统的开发者采用新的思维方式。事实上,它与常规的“编程”概念完全不同。在以前的操作系统(例如DOS和UNIX)中,开发者自己的程序提供了所有结构。操作系统通过系统调用提供服务。开发者的程序在需要服务时进行调用并在得到服务后控制返回。程序结构基于控制流程,它在开发者所编写的编码中得以实现。
而当采用结构时,该过程成为逆向。开发者不再负责流程控制。开发者必须放弃根据执行的流程来理解编程任务这一思维方式,而根据目标的响应进行思考,因为目标的响应必须根据结构来决定何时执行任务。开发者编写的的例行程序由不是开发者写的编码所驱动,开发者甚至从未见过这些编码。控制流程的转换对只对过程编程有经验的开发者而言可能是较大的精神障碍。然而,一旦这一技术被理解,结构编程比其他编程所需做的工作将大为减少。
应用结构为开发者提供预定功能性。系统结构(例如包括在最佳实施例中的那些)具有概念,它提供系统级服务,诸如系统程序员这样的开发者用这种系统级的服务进行子分类/置换以生成定制的方案。例如,一个可以提供用来支持新的及多用途的设备(例如声频,视频,MIDI,动画等等)的基础程序的多媒体结构。需要支持新型设备的开发者必须写一个设备驱动程序,如果用结构来完成此任务,开发者只需提供该新设备的具体特征以及行为特性。
在这种情况下,开发者只实施将被多媒体结构调用的某一成员功能。开发者所获得的直接好处是用于每类设备的通用码已由多媒体结构提供了。这意味着开发者所要编写、测试及调度的设备驱动程序码要少许多。使用系统结构的另一例子是对小计算机系统接口(SCSI)设备,NuBus卡及图形设备有不同的I/O结构。由于具有继承的功能性,每个结构为其设备类别中发现的通用功能性提供支持。其他开发者则可以依据这些对所有设备保持一致的接口。
一个最佳实施例采用了结构的概念并将其应用于整个系统。对于商用或公司开发者、系统集成商、或者原设备制造商(OEM)而言,这意味着如MacApp这类的结构的所有已示优点不仅可以影响应用层级(例如文本和用户接口),还可影响系统层级(例如图形,多媒体,文档系统,I/O,测试等等)。
在一个最佳实施例的体系结构中生成的应用程序实际上类似于编写拚装到结构协约上的特定域的谜块。以此方式,编程的整个概念改变了。不用逐行编写能调用多个API层的编码,软件的开发采用的是在该环境中从先有结构中衍生类别,然后根据要求加入新行为和/或置换继承的行为的方式。
如此,开发者的应用程序就变成为由所有其它结构应用程序编写和共享的编码集。这是一个强有力的概念,因为开发者们将在工作中建立互相依赖的关系。这也使开发者能够灵活地按照需求的最小量进行客户化。某些结构将如其原样使用。在某些情况下,客户化量最少,所以开发者安装的谜块也最小。在其它情况下,开发者也可能进行扩展修改并生成全新的东西。在一最佳实施例中,如图1所示,位于RAM14中并由CPU10控制的程序负责用面向目标的图形结构执行各种任务。
一个最佳实施的利用再现(rendening,在3-D图形中,指把一个模型从一个给定摄象位置变换到一个基于屏幕的视图的处理)流水线的边工具来操纵一个TGrafEdges表。它只被分立设备运用。例如,在TFrameBuffer设备中,边工具利用表示一个基元被填充和成框架部分的边来生成扫描行间距。这一处理称为扫描转换。
TGrafEdge是一多形扫描转换基元(Primitive,在Taligent操作环境图形系统中,指的是一个基本图形目标)。图2展示了一对图形边。每个图形边230、240有一最小值Y为210,起始值X为200,高度值220,以及虚拟Step方法。Step方法为下一扫描行(下一整数Y值)更新X值。TGrafEdge因此可表现只在Y方向单调的任何曲线,即,它对每个间隔的扫描行都设有单一的X值。TGrafEdge还对于单一CAG节点目标进行引用,用于确定出一个点位于整个几何形状之内还是之外。
一个简单的基元易于再现,它有单一的轮询计数,用于确定一个点在几何形状之内或之外。而TGArea基元则可任意复杂。每个子基元都有自己的轮询计数。所有子基元的轮询计数可用于计算整个基元的状态。进行内/外计算的结构由TGArea建立并转至边工具。但是,与更复杂的内/外计算有关的开销应该只由TGArea基元引起。边工具的子类别将提供去阶梯扫描转换,而且可为强速边(例如直线边)生成。
象素完善性对边工具很重要,因为边工具进行扫描转换以分离设备单元。假定有一组限定设备空间中的一个区域的边,象素完善性就会决定哪些象素要修改。即使“象素”一个词引用于此,象素完善性仍可用于其它分立设备,因为它定义了坐标系统上分离设备所在的位置。
扫描转换是把一个几何形状转换成水平扫描行距的一个过程,尔后这些扫描行被绘制在分立的图形设备上。一个几何形状可被填充或镶框或二者兼为之。绘制被填充和/或被镶框的几何形状的算法要保证没有重复绘制,从而允许形状变换并对函数是正确透明的。边工具填充由表示其外形轮廓的TGrafEdges表定义的一个几何形状。用户可以通过在任一选择方向追踪某一几何形状的参数而确定其轮廓。这便确定了表中每个边的符号。边符号指向正Y方向,则为正。在输出上无效的边被取消。
图3示出了一个最佳实施例的排序。边先根据其较小的Y值被排序,然后又按照在一特定Y值内的X值排序。每个与边相交的扫描行生成的X方向的间距至少有一个。通过总是保持有一个边(即穿过当前扫描行的边)“有效”的表即可完成这一任务。每个扫描行都有有效边表。然后,当边被穿过时,下列规则之一被用于生成该扫描行的适当间距。这些规则是偶-奇规则或分枝数规则。
偶-奇规则每次遇到边时,开始或结束一个间距。图4示出了根据本发明的一个最佳实施例为每对边生成的星形间距。
分枝数规则当遇到边时,边的符号被加在始设为零的分枝数上。当分枝数不再为零时,就产生了间距。当分枝数为零时,间距结束。这便能填满一个多边形的外边界内所有区域。图5示出了采用一个最佳实施例的分枝数规则的星形多边形。
所采用的规则取决于被再现的基元。例如定义一个多边形图形目标的TGPolygon基元就包含了指定使用某个规则的参数。TGEllipse基元可使用任一规则,因为两种规则用于一个非自相交几何图形时所产生的结果相同。围绕一个目标可绘制两种框架,这取决于框架的目的细线框架和粗框架。以下将对它们进行讨论。
粗框架的粗细可任意选定。末端盖(end caps)、连接方式(joint styles)以及阴影(dashing)均可按需使用。边工具扫描同时进行粗框及填充转换。表示框架两侧(左和右侧)的TGafEdge被生成并填入有填充边的表中。框架边的方向以及符号与生成框架边的填充边的方向及符号一致。当该基元被扫描转换时,保持两个分枝数一个用于左框架边而一个用于右框架边。框架生成的间距取决于使采用的填充规则。
偶-奇规则遇到一个框架边时,其符号被加至适当的分枝数(左或右)上。当两个分枝数不等时,一个间距就产生了。当它们相等时,间距结束。
分枝数规则遇到一个框架边时,其符号被加至适当的分枝数(左或右)。当两个分枝数的符号不等时,间距产生,而当符号相等时则间距结束。
根据所用之笔平衡,框架可在填充区域重叠。但是,由于填充区域和框架一起绘制,所以没有一个区域会被重复绘制。
对于对中笔而言,框架之粗细是以填充区的轮廓为中心的。通过使框架生成的间距取代填充所产生的间距即可实现这一要求。
图6示出了一个最佳实施例中在对中偶-奇规则下的一个星形多边形的对中框架,而图7示出了一个最佳实施例中在对中分枝数规则之下的一个星形多边形的对中框架。如果是内镶笔,框架的粗细就完全在填充区轮廓之内。为框架生成的间距取代了为填充生成的间距,但它们只在有填充间距生成时才会被绘制。换言之,该框架被钳制在填充几何形状内。这与外镶框架相反。图8示出了根据本发明的一个最佳实施例在内镶偶-奇规则下的星形多边形的内镶框架。图9则示出了在分枝数规则之下的星形多边形的内镶框架。
对于外镶笔而言,框架之粗细完全在填充区轮廓之外。为框架生成的间距只是在没有填充间距被绘制时才被绘制。换言之,框架从不在填充几何形状之内被绘制。这与内镶框架相反。图10示出了一个最佳实施例中在外镶偶-奇规则下的星形多边形的外镶框架。图11则示出了一个最佳实施例中的外镶分枝数规则之下的星形多边形的外镶框架。
边工具阶梯效应子类别图12展示了分立设备所运用的边工具,但未示出去阶梯效应边工具。TEdgeEngine是所有边工具由之衍生的抽象类别。它包括接受TGrafEdges的一个纯虚拟功能。它还包括一个纯虚拟Render功能。
TFillEdge Engine完成TGrafEdges表所叙述的几何形状的阶梯填充。该边可为任意类型。
TRectiLinearFillEdgeEngine执行线性TGrafEdges表所叙述的几何形状的阶梯填充。它是TFillEdgeEngine的优化程序,并假设每个TGrafEdge都是一条垂直线。
FillAndFrameEdgeEngine执行TGrafEdges表所叙述的几何形状的阶梯填充和框架成形。该边可为任意形状。
TRectilinearFillAndFrameEdgeEngine执行线性TGrafEdges表所叙述的几何形状的阶梯填充和框架成形。它是TFillEdgeEngine的优化程序并假设每个TGrafEdge都为一垂直线。
边工具去阶梯效应子类别将一边工具进行子分类的另一原因是要容纳去阶梯效应。有效地实施共享通用优化以便在过滤核心程序(filterKernel)边周围的区域进行卷积。这一优化不仅避免了形状内部的大量过滤操作,而且允许使用比如PaintSpans之类的简单非合成TSpanPainter方法。一个去阶梯效应边工具可经两个途径对边进行卷积。
高级取样方式扫描以较高分辩率进行扫描,又再现成为子象素位映象,这些子象素位映象在一个子象素层级表示细节。相反,子象素扫描转换可被预先计算形成表格,进入和退出坐标边的小数部分中的一些有效位可使该表被索引。这些位映象是典型的4×8象素。若使用一个箱式滤波器(box fil-ter),则所需的只是位映象的位总数。若用一高质量滤波器(其支持的尺寸大于0.5),则每个输出象素的透明度由其本身及相邻位映象的加数均值所确定。
高质量滤波器产生另一问题。扫描行只有在其提供的所有子象素位映象都已由过滤核心程序卷积并求和之后才输出。这意味着边工具将在其扫描转换之后将间距输出运用到两个扫描行。这些方式通常运用于极点是整数或有必要求解隐藏表面积的时候。预滤波方式在包括一个边的每个象素处使用精确的面积计算。听起来这好象很昂贵,但实际上它具有一个有效的增值分解。对于在一扫描行上的一对给定边,可以有多至三个相交区域左边,中间或完全复盖的象素,以及右边。与一边相交的所有象素的面积必须被计算。若一个通用边与几个相邻的象素相交,则相连相交的象素的面积可由计算机递增计算。对于有给定斜率的边,从一个象素到下一个象素的面积差是恒定的。基于这一假设的方式更为有趣。
无论何种算法被采用,总可遇到两条边的情况。独立的边是第一种情况,这种情况极为普遍。所有工具都将遇到这一情况。所有来自只有框架或只有填充的边工具的边均落入这一范畴。一个Framing和Filling边工具将在框架的外边遇到这一情况。在确定了边的不透明度之后,透明的象素必须由用TSpanPainter的CompositeSpan方法的目的象素合成。内部不透明间距可通过TSpanPainter的PaintSpans或PainBlock方法设置。
第二种情况是由不同颜料填充的两个相邻边。这种情况只出现在填充和成框架之时。框架和填充之间的内部接口必须小心合成。沿该接口不提供背景色给象素的最终值。该工具必须调用一个边的TSpanPainter GetDesiredColorAt方法,以确定使用者在该象素处所想要的色彩。一旦找到了该色彩,边工具必须调用其他TSpanPainter的SetAbut-tingEdgeColor以及PaintAbuttingEdgePixel方法以获取正确的合成结果。GetDesiredColorAt以及SetAboutingEdgeColor的每个象素的花费可以避免,如果TSpanPainter的IsShadingCon-stant方法返回TRUE的话。
CAG目标以下展示CAG目标及其在扫描转换中运用的实例。图13是一个最佳实施例中展示结构的区域基元。该区域由三个不同的几何形状组成一个长方形,一个椭园形和一个多边形。每一个几何形状都与一操作相关。当进行扫描转换时,边工具必须有一方法来确定在该几何形状内(内或外)的当前位置状态。图14示出了一个最佳实施例中确定当前位置状态的方法。
有八条描述该区域的边两个用于长方形,两个用于椭圆,而四个用于多边形。它们指向其“母(parent)”,一个在边状态改变时得到通知的TCAGNode目标。当边工具遇到一个边时,该边把边符号传递出去将该变换通知其母节点。该节点就利用边符号来确定边所属目标的状态(位于其中或其外)。若状态改变,则节点通知其母节点。该循环持续直到不再有变化发生,或达到根节点。这一处理是在扫描转换时维护区域当前状态的快速有效方法,边工具向根节点查询区域当前状态并因此而产生扫描行距。
要从几何图形生成边,采用了以下步骤。首先必须标识Y向单调边。由于水平边在Y方向扫描转换时无结果,所以将其除去。对每个边,用下列值将适当类型的边目标初始化。X在边顶部的X值;Y在边顶部的Y值;最终Y在边底部的Y值;以及符号若边向下则为+1,向上则为-1。
图15示出了一个最佳实施例中的各种边。1500示出了一长方形,1510示出了两条垂直边,1520示出了旋转长方形(多边形),1530示出了四条直边,1540示出了椭圆形,1550示出了两条椭圆边,1560示出了一条封闭曲线回路,而1570示出了四条取样边。
图16示出了一个最佳实施例中在Y方向上的扫描转换,转换一次只发生一个扫描行,并要求每一边都只在Y方向上是单调的。
图17示出了一个最佳实施例中的直边例子。矢量是步进函数;f(x)=y+斜率,这里,斜率=0.5。该直边的符号为+1。
所有边的抽象主类别具有下列数据结构X(实数)——当前X值;Y(整数)——当前Y值;最终Y(整数)——边底部的Y值;符号(整数)——+1或-1,取决于边在Y上的方向;步进函数——被调用以进行X下一行扫描;以及转换函数——在扫描转换期间边相交时调用。
从所有边的抽象主类别可以衍生下述子类别
直边,垂直边,椭圆边,以及取样边。
直边——为一直线段的边,包括X(实数)——当前X值;Y(整数)——当前Y值;最终Y(整数)——在边的底部的Y值;符号(整数)——+1或-1取决于边在Y上的方向,以及步进函数——加线之斜率于当前X值中。
垂直边——一条垂直边段的边,包括X(实数)——当前X值;Y(整数)——当前Y值;最终Y(整数)——在边的底部的Y值;符号(整数)——+1或-1由边在Y的方向所决定,以及步进函数——由于垂直线段的X值为常量,所以不起作用。
椭园形边——一条垂直线段的边,包括X(实数)——当前X值;Y(整数)——当前Y值;最终Y(整数)——在边的底部的Y值;符号(整数)——+1或-1,取决于边在Y上的去向,以及步进函数——根据bresenham椭圆算法计算在椭圆边界上的下一X值。
取样边——它是一段直线的序列,包括X(实数)——当前X值;Y(整数)——当前Y值;最终Y(整数)——右边底部的Y值;符号(整数)——+1或-1,取决于边在Y上的朝向,以及步进函数——通过把当前线段的斜率加到当前X值或在当前线段结束时跳到下一线段而计算下一值。
图18为一个最佳实施例中的逻辑流程图,处理从功能框1800开始从一给定几何形状生成边,几何形状包括长方形,椭圆和多边形。然后,在功能框1810处对边进行排序分类,沿Y值增大方向为主分类区而沿X增值方向作为第二分类区。其次,将当前扫描行初始化为在功能框第一边的Y值,在功能框1830处把新的边收集组成一个有效边表(与当前扫描行相交的那些边的表)。在功能框1840处去除那些不再与当前扫描行相交的边。然后在功能框1850处调用步进函数,以确定在所有有效边中是否有任何边异常(边的步进函数计算相应于当前扫描行的下一X值)。进而在判别框1860处进行测试以确定是否有必要沿X方向对边进行分类排序。若有新边加入而以前的边被去除或边已相交,则须进行X方向的分类排序。若其必要,则在功能框1870处沿X增值方向进行有效边排序分类,然后控制去往功能框1880。若排序分类不必要,则控制直接去往功能框1880。
在功能框1880中,对每条边进行测试以确定边的相交是否会导致几何形状外的变换以及在当前扫描行上绘制象素的变换。边转换函数可用于归纳进行内/外检测的方法。该逻辑的其它讨论示于解释该处理各种实施例的图19,10和21中。然后,在判别框1890中,进行测试以确定是否已处理了所有边。若是,则处理结束于终点1891。若否,则在功能框1892处对当前扫描行增值然后控制去往功能框1830进一步进行上述逻辑处理。
分枝数规则图19是根据图18的功能框1880提出的发明要点的边转换处理的一个实施例的流程图。处理始于功能框1990,在该处,边的符号被加至当前轮询计数并在判别框1910处进行测试以确定是否该轮询计数已为零。若是,则在当前扫描行上从保存的X值到边的X值绘制象素(如功能框1940所示)。若否,则在判别框1920处确定轮询计数是否非零。若是,则在框1930处保存边的X值。
偶-奇规则图20是根据图18的功能框1880提出的发明要点的边转变处理的一个实施例的流程图。处理始于功能框2000,边的符号被加至当前轮询计数并在框2010处进行测试以确定是否轮询计数为偶数。若是,则在功能框2030处从保存的X值到边的X值在当前扫描行上绘制象素。若为奇,则在功能框2020处保存有边的X值。
图21是根据本发明的边转换处理的实施例框图。该图把一个长方形和一个椭圆结合在一起以展示转换处理。其合成值存于框2100中。合成目标2110用了两个偶-奇值并计算两个值的逻辑合成。偶-奇目标2120用偶-奇逻辑追踪每个几何图形的内外状态。遇到边时,通过框2130调用其转变函数。2140示出了长方形和椭圆的边。
权利要求
1.一种在具有存储器和显示器的计算机上处理图形目标的方法,其特征在于包括以下步骤(a)将一个图形目标装入存储器;(b)将该图形目标转换成多个边目标;(c)把边目标转换成多个扫描行象素;以及(d)在显示器上显示扫描行象素和图形目标。
2.权利要求1所述方法,包括多形地表示边目标的步骤。
3.权利要求2所述方法,包括以一可扩展方式表示边目标的步骤。
4.权利要求1所述方法,包括以一可扩展方式确定扫描行象素位于图形目标之内或之外的步骤。
5.权利要求4所述方法,包括利用偶-奇处理对边目标进行处理的步骤。
6.权利要求4所述方法,包括用分枝数处理对边目标进行处理的步骤。
7.权利要求4所述方法,包括对任何图形目标的边进行处理的步骤。
8.权利要求1所述方法,包括用面向目标的处理对目标进行处理的步骤。
9.处理图形目标的装置,其特征在于包括(a)一个计算机;(b)位于计算机中的存储器;(c)与计算机相连的显示器;(d)把图形目标装入存储器的方法;(e)把图形目标转换成多个边目标的方法;(f)把边目标转换成多个扫描行象素;以及(g)在显示器上显示扫描行象素和图形目标的方法。
10.权利要求9所述装置,包括多形地表示边目标的方法。
11.权利要求10所述装置,包括以一可扩展方式表示边目标的装置。
12.权利要求9所述装置,包括以一可扩展方式确定扫描行象素位于图形目标之内或之外的装置。
13.权利要求12所述装置,包括利用偶-奇处理对边目标进行处理的装置。
14.权利要求12所述装置,包括用分枝数处理时边目标进行处理的装置。
15.权利要求12所述装置,包括对任何图形目标的边进行处理的装置。
16.权利要求9所述装置,包括用面向目标的处理对边目标进行处理的装置。
17.权利要求1所述方法,包括以一扩展方式把边目标转换成象素的步骤。
18.权利要求1所述方法,包括用剪切算法把边目标从顶部转换到底部的步骤。
19.权利要求1所述装置,包括以一可扩展方式把边目标转换成象素的装置。
20.权利要求1所述装置,包括有剪切算法把边目标从顶部转换到底部的装置。
21.用于在具有存储器和显示器的计算机上处理图形目标的方法,其特征在于包括以下步骤。(a)把一个图形目标装入存储器;(b)把该图形目标转换成多个边目标;(c)把边目标转换成多个扫描行象素;(d)将扫描行象素进行去阶梯效应处理;以及(e)在显示器上显示扫描行象素和图形目标。
全文摘要
通过把图形目标装入存储器并将其转换成多个边目标,进而把边目标转换成多个扫描行象素,然后在显示器上显示扫描行象素和图形目标的计算机图形目标处理方法和系统。
文档编号G06T15/50GK1113666SQ94190617
公开日1995年12月20日 申请日期1994年1月3日 优先权日1993年6月30日
发明者理查德·D·韦伯, 阿瑟·W·卡贝拉尔 申请人:塔里根特公司