用于渲染三维场景的计算机绘图方法_3

文档序号:8460775阅读:来源:国知局
br>[0118]图11是叠印在显示屏35的像素网格39上的立方体41关于相机点33的透视投影。
[0119]相似地,图12是叠印在显示屏35的像素网格39上的立方体41关于相机点33的正交投影。
[0120]应当指出的是,图11的透视投影与图12的正交投影覆盖相同的像素。因此,对于图13和图14中所示的每个投影,在显示屏35的像素网格39上生成并且由(例如)游戏玩家的计算机系统用户所看到的实际图像是相同的。该投影显著小于图9中所示的投影。由于该投影的尺寸小,背面与正面之间的差异是无法观察到的,所以在该图中,立方体看起来为正方形。
[0121]如果在该立方体中存在对象,则不会因为对象在立方体的正面或背面而看起来较小或较大。
[0122]从技术上讲,在正面与背面之间总是存在差异,但是,由于计算机监视器为像素网格,当差异小于一个像素的尺寸时,所述差异会因太小而不存在。正常情况下,3D计算使用透视,但是,由于正面和背面之间不存在尺寸差异,所以使用不将透视考虑在内的不同计笪并ο
[0123]尽管使用单点投影得到上述例证,但是发明人发现相应的结果也适用于两点和三点投影。
[0124]从以上讨论中可认识到,取决于待表示的3D对象的尺寸以及诸如该对象在观察平面之后的距离和所用焦距之类的参数,在使用正交投影生成对象的视图与使用透视投影生成对象的视图之间可不存在可观察到的差异。但是,透视投影比正交投影的计算开销大得多,即,对于透视投影,计算数量较高。
[0125]此外,线框立方体31和41可当作边界框。因此,如果像框41那样,边界框可使用正交投影进行渲染,则场景中落入该边界框内的任何对象也都可使用正交投影进行渲染。
[0126]因此,发明人发现:对于通过透视投影进行渲染与通过正交投影进行渲染出现可觉察到的差异场景中的对象,可使用透视投影激活电子显示设备的像素来渲染该场景,而对于其余的对象,可使用正交投影激活像素来渲染该场景,从而生成总体上看起来使用透视变换进行真实渲染的场景。
[0127]此外,如所进行的简单说明所示,在本发明的方法的优选实施例中,可基于整个母八分体立方体的2D投影来生成由八叉树建模的场景的八分体的2D投影,而无需将每个八分体单独地从3D空间投影到2D空间。
[0128]图15描述了包括三个对象的场景,该三个对象为叠印在整个八叉树立方体43内的蘑菇的形式。八叉树立方体在图1所示的计算机系统的内存中被存储为数据结构。为了清楚起见,图15中仅可见以实线示出的八叉树的整个母立方体43,以及该母立方体43的以虚线示出的第一组8个子八分体45a,……,45h。然而,从计算机绘图技术中可知,八叉树子立方体围绕场景中对象的部分继续进行细分,场景中对象的部分被弯曲至预定的分辨率极限。如图16中所示,其中包括穿过图15中的八叉树的切片,在该切片中可看到其他三个等级的八分体49、51和53。
[0129]将参考图17至图23描述根据本发明优选实施例所述的方法。
[0130]图17描绘了包括三个呈3D立方体55、57和59形式的非常简单的对象的场景。为了进行解释,需要操作图1的计算机系统沿图17中所示的视角63显示图17场景的2D表不O
[0131]图18描绘了被细分为八分体用于对图15中的场景进行建模的整个八叉树立方体61。为了进行解释,假设八叉树61的整体尺寸使得在施加了正交投影而不是透视投影的情况下将不会觉察到明显的差异,正如结合图10中的立方体41所解释的那样。
[0132]整个八叉树立方体61已经被细分成编号为O至7的8个第一等级子立方体。立方体5已经进一步被细分为8个第二等级子立方体。第一等级子立方体3和4以及第一等级子立方体5的第二等级子立方体3对图17中所示的场景的立方体55、57和59进行建模。
[0133]八叉树立方体61在图1的计算机系统存储器中,以包括图19中所示八叉树的数据结构的方式进行存储。
[0134]为了显示图17中的场景,按照相对于视角63从前到后的顺序读取(即遍历)八叉树的节点。
[0135]与遮挡剔除相关联的主要运算为求得边界框的尺寸。在基于八叉树的系统中,这一般包括采集环绕立方体(encompassing cube)的8个值,将这些值从3D自然空间(worldspace)转化到3D屏幕空间,并且对这些值进行排序以确定水平及垂直最小值和最大值。在基于透视的系统中,这是相当大量的工作,因为一般将针对每个框进行计算。如前面所提及的,根据本发明的优选实施例所述的方法利用了将自然/对象分解为较小正交分区的概念。使用这些分区以求得边界框尺寸可被二等分水平和垂直边缘所取代,因为在处理八叉树数据时正交分区边界框正好是其母边界框大小的四分之一。
[0136]从计算机绘图技术中可知,可从8个不同观察区域观察八叉树,针对前到后观察,遍历八叉树的顺序表可根据视角所落入的区域进行制定。对于图16中所示的视点位于区域+x、+y、+z中的情形,针对前到后观察,遍历八叉树的顺序为“7、6、5、3、4、2、1、0”。
[0137]现在参考图20,由8个30顶点坐标?0(叉0,70,20),...,卩7(叉7,77,27)所限定的整个八叉树立方体61被正交地投影到视角63处的期望观察平面65,从而生成包括有8个2D顶点P(x0,y0),…,P(x7,y7)的立方体的2D投影67。参考图21,限定2D投影的顶点的8个2D顶点P(x0,y0),…,P(x7,y7)可被称为“形式图案”,因为其限定了八叉树投影的形状。此外,由于投影是正交的,所以当被按比例缩小时,也可以限定子八分体的投影的形状,而在使用透视投影的情况下却不是这样的。
[0138]在图21的示图中,顶点被示为被边缘互连,但是这些边缘在对图17的场景的最终植染中将不会显现。形式图案(Form Pattern, FP)顶点PO (x0, y0),…,P7 (x7, y7)按照与八叉树的观察顺序相同的顺序被存储在阵列中,即,FP阵列=[P7, P6, P5, P3, P4, P2^P0P0]。
[0139]然后按照从前到后的顺序读取图19的八叉树,对于图18中所示的视点,该顺序为7、6、5、3、4、2、l、0o
[0140]由于节点7为空,所以不采取任何动作。
[0141]由于节点6为空,所以不采取任何动作。
[0142]由于节点5指向子节点,所以程序深入到下一等级。
[0143]在下一等级中:
[0144]由于节点7为空,所以不采取任何动作。
[0145]由于节点6为空,所以不采取任何动作。
[0146]由于节点5为空,所以不采取任何动作。
[0147]由于节点3为叶节点,所以对于子节点5的子节点3,调用叶节点(Leaf Node)子例程。叶节点子例程将在下文中描述。
[0148]由于节点4为空,所以不采取任何动作。
[0149]由于节点2为空,所以不采取任何动作。
[0150]由于节点I为空,所以不采取任何动作。
[0151]由于节点O为空,所以不采取任何动作,然后程序跳高一个等级。
[0152]由于节点3为叶节点,所以对于子节点3,调用叶节点子例程。
[0153]由于节点4为叶节点,所以对于子节点4,调用叶节点子例程。
[0154]由于节点2为空,所以不采取任何动作。
[0155]由于节点I为空,所以不采取任何动作。
[0156]由于节点O为空,所以不采取任何动作。
[0157]叶节点子例程向形式图案阵列传送边界框的最小点(MinPoint)和最大点(MaxPoint)以及叶节点信息。
[0158]八叉树立方体61的投影67的边界框的左上角(在当前情况下与顶点(xO,yO)重合)被用作8个顶点(xO’yO),…,(x7,y7)的原点。
[0159]然后,叶节点子例程在8个顶点(xO,yO),...,(x7, y7)上运算以将其二等分从而生成图19中所示的8个点(x0,y0)2,…,(x7,y7)2。8个顶点(xO,yO) 2,…,(x7,y7) 2将图18的八叉树立方体的八分体2的2D投影限定为如图22中所示的2’。应当指出的是,该投影通过对限定了整个八叉树八分体立方体的2D投影顶点的点进行划分而得到。并不需要将八分体2的3D顶点投影到观察平面中。因此,这8个点(xO,y0)2,…,(x7, y7) 2为距边界框69的最小值的偏移。相对于边界框69的最小值,移位运算用于二等分8个顶点(xO,yO),...,(x7,y7)。新的点(xO, yO) 2,…,(x7, y7) 2中的每个点被再次二等分以针对下一低等级的每个八分体生成另外的8个子点,例如(x0,y,0)3,...,(x7,y7)3。例如,如图22中的子八分体立方体投影5-3’所示的那样。
[0160]在八叉树表明子八分体是叶节点的情况下,叶节点如图23中那样被加上阴影以生成对原本在图17中所描绘的场景的渲染。倘若对象(例如,图23的立方体)的尺寸足够小,则出于之前参考图1至图13所讨论的原因,使用正交投影进行渲染或者使用透视投影变换进行渲染的立方体之间将不会存在明显的差异。
[0161]如果形式图案方法不与具有终端分支的八叉树数据相关,则该方法可渲染浮点的实心立方体。通过将形式图案方法与八叉树
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1