多边形表面线条z缓冲器值的调整的制作方法

文档序号:6405951阅读:175来源:国知局
专利名称:多边形表面线条z缓冲器值的调整的制作方法
技术领域
本发明总目的是用一个具有Z缓冲器的图形适配器使得在计算机图形系统中能够实现上面画有线条的多边形的三维影象。通常,图形适配器会使表面线条的一些线段消失,这是由于数据不足而引起的,下面将对此进行详细的说明。
图形适配器的主要部件中有一个存储与一个图象元(象素)的深度有关的值的Z缓冲器。Z缓冲器来消除被遮挡的表面,使得在适配器准备给一个象素上色时Z缓冲器能检查所要上色的象素是否处在大于(深于)显示在屏幕上的这个现存的象素的深度上。如果要上色的象素较深,则适配器不作任何处理。否则适配器就将该象素上色,並且用新的深度值对Z缓冲器进行更新。
当对多边形表面上的线条上色时就存在一个问题。就数字上来说,线条和表面都处于相同的深度。也就是说,表面和线条在Z缓冲器中存有相同的值。这样就会发生差错,因为有一些象素要上线条的颜色,而另外一些象素则要上多边形表面的颜色。此外,用相对线条上色的处理比在一个显示器上所提供的象素组更为精确一些。具体地说,线条上色处理被迫要用那些实际上並不处在这根线条上的象素,以及由于不知道线条所属表面的法线,该处理必需对那些离线象素的深度进行估计。因此,由于处理估计不精确使得线条的深度大于多边形表面的深度的这些线象素就会像是隐去了。
应该注意到通过大大改动目前所使用的各种图形适配器的硬件设计或微程序设计可以将一根法线与各个离线象素联系起来。然而作这些改动需要对各图形适配器进行改型或重新设计微程序,这样处理极费时,成本也高。因此,就非常希望对于由这些误差而引起的各种问题能提供一种软件解决的方法。
与原有技术不同,本发明提供了一种设置线条和多边形表面之间的关系的方法,使得多边形表面看成是更深一些,从而使这些线条可见(亦即上色)。一个标准的Z缓冲器通常可以标记的深度值值域从-2**23至2**23-1,使得较大的值标记进入屏幕(显示器)更深。因此为了在线条和多边形表面具有相同的数字深度时保证将线条而不是多边形表面上色,在考虑多边形上的一根线条时必需将多边形看成比这根线条更深一些,从而由图形适配器重叠写出。本发明通过始终将与一个多边形表面有关的各深度值标记得比线条各深度值更大(更深)一些来达到这个目的。这是通过对每个多边形一次计算出一个作为该多边形表面法线的函数的偏置或位移量再依照各线条使用的输出范围调整为每个多边形上色的适配器输出的Z缓冲器值域来实现的。例如,如果一个多边形处于其法线正指出屏幕的位置上,则偏置为最小,然而,如果这多边形实际是侧向的,则偏置就大,以补偿在深度估计处理(在本发明的画线部分内)中所产生的较大的误差。
应该指出在画多边时这种Z缓冲器调整作用並不会改变多边形的外形。可能根据深度尾标在颜色上有些不明显的变化(如颜色总亮度的256分之一的值对于人的眼睛来说是察觉不出来的),或者在多边形表面和不在该面上的任何线条的交点上有一个孤立的象素误差。因此,重要的是应使Z缓冲器调整尽量小。
通过以上简解,对于熟悉该项技术的来说参照附图从下面的说明和所附权利要求就可明白本发明的目的、特征和优点。


图1为采用本发明的Z缓冲器调整处理的一个系统的方框图;
图2为说明本发明处理过程的流程图;
图3画出了一个在笛卡尔坐标系中的多边形,在这多边形的表面上画有一根线条。
参见图1,图中以方框图形式示出了一个采用本发明处理的系统。用户软件程序10具有一个子程序库12,使得图形用户可以提出专用程序申请。用户软件10提供画一个表面上有一些线条的多边形的实际申请。本发明包含在用户软件10内,用标记数14标记。这里提供了一种处理,使得多边形表面上的线条可见,尽管由于所考虑的多边形表面和线条都处于相同的数学深度而有些误差也没有关系。标记数16所表示的是几何微程序,该微程序接收来自子程序库12的诸如矩阵、成型坐标顶点等与所考虑的多边形表面和线条有关的信息。然后,几何微程序16将接收到的多边形和线条的信息变换成设备坐标值。这个变换有效地将“完全坐标”(用户规定的绘图坐标,它是独立于设备的三维笛卡尔坐标)映射成与设备有关的坐标。设备坐标根据显示环境来投射多边形表面和线条。也就是说,设备坐标与诸如屏面面积和Z缓冲器深度值等所使用的实际显示硬件有关。设备坐标然后被加到光栅微程序18。光栅微程序18还接收子程序库12和用户程序10发来的信息和指令。光栅微程序18利用设备坐标和库12发来的信息确定每个象素的色(r、g、b)值和Z缓冲器深度值。这里使用的光栅微程序18和几何微程序16是指由诸如西列克图形公司(Silicon Graphics Inc.)制造的工作站所例举的那些概念。粗略地说,几何微程序是将顶点变换到显示设备坐标系内的那个硬件/固件部分,而光栅微程序则是对多边形内部进行内插、正确地将色值和Z缓冲器值装入存储设备或显示设备的位平面的那个硬件/固件部分。帧缓冲器20实际地为每一个象素指定和存储r、g、b值。应该指出,每个象素的彩色(r、g、b)值要根据在Z缓冲器内有关这个象素的数据计算。因此,只有r、g、b值被传送到显示微程序和硬件22,然后显示微程序和硬件22将这些值转换成能在诸如CRT这样的屏幕24上显示的模拟电压信号。本发明处理提供给光栅微程序18的这些信息和指令,使得与线条和多边形表面相应的各象素的r、g、b值显示在屏幕24上,並且线条始终是可见的。
图2为说明本发明处理过程的流程图,其中在步1处理启动。在步2确定首先要画的是线条还是多边形。如果在步2得出首先要画的是线条,则在步2a将Z缓冲器设置到一个具体的值域。通常,大多数图形适配器都有一个Z缓冲器,这个Z缓冲器也就是一个能够记录与每个象素有关的深度值的存储设备。Z缓冲器一般用来消除被遮挡的表面。也就是说,如果第一根线条看成比含有一些相同的象素的相应线条更深入到屏幕内,则与较深的那根线条相应的这些象素就略去不计。因此,靠近指示器(显示器表方)的那根线条得到显示。通常,使用的是具有24位容量的Z缓冲器,它提供了一个从-2**23到(2**23)-1的值域。步2a将这Z缓冲器的值域设置到总深度值域的一个百分数,如总值域的百分之七十五(75%)。为了设置Z缓冲器的值域通常要做的是将一对值置入寄存器,光栅微程序18要用到这一对值。因此,可计算得缺席值域为从-2**23到(2**22)-1(一些Z缓冲器通常配置成那些最大的正值是较深的,也就是说离屏面较远)。因此,步2a有效地将Z缓冲器的深度值值域限制在认为是最接近屏面的值的75%。在步2b,将线条画(将与线条相应的象素上色)入到先前置为最近的75%的Z缓冲器值的值域内。这是一个比较简单的任务,因为一个程序能够规定将一根线条映射到Z缓冲器值的任何子集内。因此,线条将始终被画入最接近屏面的那部分Z缓冲器,也就是说,一根线条的可能最深点会处在一个Z缓冲器的总深度值的75%处。
步3计算多边形的法线,这是通过在多边形表面上取三个不共线的点求出向量积来实现的。用户软件10已知这三点的笛卡尔坐标,因此确定表面法线是一个比较简单的操作。
在步4,将在步3所确定的法线的坐标映射成设备坐标。设备坐标与一个取决于设备的坐标系有关,通常用来表示该设备的显示空间。因此,映射成设备坐标的所计算得的法线与具体所使用的显示系统图形适配器和所显示的整个景象有关,而与一个上面画有线条的具体多边形表面无关。将法线映射到设备坐标上是用几何微程序16以及观察和/或投影矩阵的逆转置来完成的,如前参照图1所作说明。
其次,在步5和步5a计算出相应于多边形表面和线条的深度值之间的位移量或偏置。这个位移量用以下表示或计算,它是算得的多边形表面法线与从多边形表面到观察者(显示器24的用户)的向量(该向量在设备坐标中与Z轴平行,因此大大简化了运算)之间夹角的正切。
(X*X)+(y*y)|z|]]>
以上正切表示式中的x、y、z是在步4所确定的设备坐标的法线的各个分量。这个计算式再乘以一个协调常数K(步5a)就得出实际位移量。协调常数用来对不同级别的分辨力进行补偿。详细地说,一个24位Z缓冲器(具有2**24个不同可取值)和屏幕上的象素(一般沿屏幕平面在x轴或y轴上至多只有2**11个值)之间的分辨力级别不同由协调常数加以补偿。常数k使由于过小的位移量(一个基本侧向的多边形可能有时使线条的一些部分不可见)或过大的位移量(由于深度尾数的关系显示的彩色可能稍有偏离,通常各种该差将限制在256级彩色强度的一级以内,肉眼不能察觉出来)可能引起的各种该差为最小。
还应当注意,太大的位移量会使一个单象素误差在多边形和一根非面上的线条的交点处成为可见的。在这个交点处,由于该线条相对多边形表面的视在移动,该线条就会有稍多一些是可见的。按照本发明,采用协调常数为4096可以得出良好的结果。这个值是用于全屏幕图象的。对于显示在比较小的区域内的图象,由于分辨力级别差异较大,采用较大的协调常数较为合适。对于一个24位的Z缓冲器已经定出一个很宽的常数范围,给出良好的结果。因此,可以使用任何能获得合理结果的协调常数k,这並不偏离本发明的范围。
在步6确定所计算得的位移量(为正切表示式乘以常数k)是否大于Z缓冲器值域的25%。如果大于25%,则本发明所作的处理是通过Z缓冲器的值域设置为从-2**22到(2**23)-1将位移量限制到Z缓冲器值域的25%(步10)。如果所计算得的位移量小于或等于25%,则步7将多边形的Z缓冲器的值域设置为从-2**23+位移量到2**22+(位移量-1)。这位移量为可以画在多边形表面上的各线条的深度值与多边形表面的有效深度值之间的差值。位移量必需限制在25%以内,因为任何大于25%的位移量都会引起对Z缓冲器的值域来说是无效的值。因此,赋予多边形表面一个大于线条的Z缓冲器的深度值,这就保证了光前画的线条始终是可见的,保证了多边形表面始终会被认为深于该线条。
步8对多边形上不认为是深于线条的那部分(这部分中不含与线条的象素同位的象素)象素进行勾画或上色。由于多边形和线条现在都已画出,在步9本发明的处理是确定是否还有其它图形程序需要处理。如果有,处理返回到步2,确定需要处理的是一根线条还是多边形。如果没有其它图形程序需要处理,则进至步11结束。
参见图3,其中在笛卡尔坐标系中示出了一对相交的多边形26和28。此外也示出了多边形26表面上的一根线条30。希望用既与多边形26又与多边形28不同的颜色画出线条30。现将参照图2和图3来说明本发明的一个例子。首先为了简便起见假设Z缓冲器的深度值容量为1000(0-999)。步1处理过程启动,步2确定要处理的是线条还是多边形,而步2a对于本例来说将Z缓冲器的值域设置为总容量的75%(深度值值域为0-749),这是最靠近屏幕表面的值域。然后在步2b将线条30画入这个值域。步3算出在笛卡尔坐标内平面(多边形)26的法线,步4将该法线映射到设备坐标。
然后在步5和5a内计算Z缓冲器的位移量。在步5计算出正切表示式,再在步5a乘以常数k。假设对于本例而言位移量等于15。步6确定该位移量是否大于Z缓冲器容量的25%。如果是,则位移量被设置成等于25%(步10)。然而在该例中15小于Z缓冲器值域(1000)的25%。因此过程进至步7,设置对多边形26的Z缓冲器的值域。对本例而言,多边形Z缓冲器的值域将为0+15至749+15,可以看到多边形26怎样会始终有一个在值域15至764内的Z缓冲器的深度值。这些值在一个深于线条Z缓冲器深度值值域(0-749)的值域(15-760)内。因此,多边形26上与线条30相交的那部分将始终被看作更深一些,从而被光栅微程序18在确定r、g、b值时略去不计。在步8画出多边形26,步9确定是否还有其它图形程序需要处理。在本例中处理完成,本发明的处理在步11结束。
虽然已经示出和说明了一些优选实例,但应该理解其中可以作出许多变更和修改而並不偏离所附权利要求的范围。
权利要求
1.一种在一个计算机图形系统中显示一个表面上含有一根线条的多边形的方法,该方法的特征是它由下列各步组成设置一个深度值值域;显示处在所述值域内的一个深度上的所述线条;位移所述深度值值域,位移量取决于所述多边形表面的取向;以及显示处在所述经位移的值域内的一个深度上的所述多边形,所述多边形表面的深度大于所述线条的深度。
2.一种按照权利要求1的方法,该方法的特征是所述设置值域的步由下列各步组成提供存储一组深度值的装置;以及规定部分所述存储装置与所述深度值值域相应。
3.一种按照权利要求2的方法,该方法的特征是所述位移值域的步由下列各步组成计算所述多边形表面的一根法线;将计算得的法线的坐标映射为取决于一个专用显示设备的坐标;计算一个位移量;将所述位移量限制到一个预定值;以及将所述位移量加到所述深度值值域。
4.一种按照权利要求3的方法,该方法的特征是所述计算位移量的步由下列各步组成计算所述多边形的法线与从观察者眼睛到所述多边形表面的向量之间的夹角的正切;以及将所计算得的正切乘以一个常数得出所述位移量。
5.一种按照权利要求3的方法,该方法的特征是所述限制位移量的步由下列各步组成确定所述位移量是否大于所述存储装置总容量的预定百分数;以及将所述位移量限制到所述预定百分数。
6.一种在一个计算机图形系统内显示一个在表面上含有一根线条的多边形的方法,该方法的特征由下列各步表征提供存储一组深度值的装置;规定部分所述存储装置与深度值的一个值域相应;显示处在所述值域内的一个深度上的所述线条;计算所述多边形表面的一根法线;计算所述多边形法线与观察者眼睛到所述多边形表面的向量之间的夹角的正切;将所计算得的正切乘以一个常数得到一个位移量;将所述深度值值域位移所述位移量;以及显示处在所述经位移的值域内的一个深度上的所述多边形,所述多边形表面的深度大于所述线条的深度。
7.一种显示一个表面上含有一根线条的多边形的计算机图形系统,该系统的特征是具有下列装置设置一个深度值值域的装置;显示处在所述值域内的一个深度上的所述线条的装置;位移所述深度值值域的装置,位移量取决于所述多边形表面的取向;以及显示处在经位移的值域内的一个深度上的所述多边形的装置,所述多边形表面的深度大于所述线条的深度。
8.一种按照权利要求7的系统,该系统的特征是所述设置一个值域的装置由下列装置组成存储一组深度值的装置;以及规定部分所述存储装置与所述深度值值域相应。
9.一种按照权利要求8的系统,该系统的特征是所述位移值域的装置由下列装置组成计算所述多边形表面的一根法线的装置;将所计算得的法线的坐标映射为取决于一个专用显示设备的坐标的装置;计算一个位移量的装置;将所述位移量限制到一个预定值的装置;以及将所述位移量加至所述深度值值域的装置。
10.一种按照权利要求9的系统,该系统的特征是所述计算一个位移量的装置由下列装置组成计算所述多边形法线与从观察者眼睛到所述多边形表面的矢量之间的夹角的正切的装置;以及将所计算得的所述正切乘以一个常数得出所述位移量的装置。
11.一种按照权利要求9的系统,该系统的特征是所述限制位移量的装置由下列装置组成确定所述位移量是否大于所述存储装置总容量的预定百分数的装置;以及将所述位移量限制到所述预定百分数。
12.一种显示一个表面上含有一根线条的多边形的计算机图形系统,该系统的特征是具有下列装置存储一组深度值的装置;规定部分所述存储装置与一个深度值值域相应的装置;显示处在所述值域内的一个深度上的所述线条的装置;计算所述多边形表面的一根法线的装置;计算所述多边形法线与观察者眼睛到所述多边形表面的矢量之间的夹角的正切的装置;将所算得的所述正切乘以一个常数得出一个位移量的装置;将所述深度值值域位移所述位移量的装置;以及显示处在所述经位移的值域内的一个深度上的所述多边形的装置,所述多边形表面的深度大于所述线条的深度。
全文摘要
在一个图形环境中提供了一种系统和方法,保证画在一个多边形表面上的一根线条对一个该图形系统的用户来说始终可见。在配有Z缓冲器的环境中,其中所含的深度值值域被设置到总容量的75%,这是被认为最接近显示屏幕表面的。然后线条被画入Z缓冲器深度值的这75%的集中。再根据在设备坐标中的多边形法线计算出位移量。将这位移量加到以前所设置的Z缓冲器深度值的75%的值域。然后在等于以前所设置的值域加上位移量的一个深度上画出多边形。
文档编号G06T15/40GK1051255SQ90109079
公开日1991年5月8日 申请日期1990年11月12日 优先权日1989年11月21日
发明者格登·G·福苏姆 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1