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

文档序号:8460775阅读:来源:国知局
数据相关联以及在分支为空时展开图案,形式图案方法实际上可使用类比将形式图案切开,就像形式图案是灰泥一样。最终对象与通过传统技术使用带有3D到2D算法的立体像素所产生的对象具有相同的特性和形式,但是就处理能力而言,形式图案技术使用了小部分时间和运算。
[0162]由2D正交投影点(xO,yO),...,(x7, y7)所限定的母立方体的投影形状可被称为“形式图案”,因为其不仅限定了最高级母八分体而且限定了降级子八分体的正交投影比例,即形式。可实施形式图案的多种变型。
[0163]例如,顶点通常被存储为8个“X”值和8个“Y”值,例如上文所述的(xO,yO),…,(x7, y7)。然而,也有可能收集4个“X”值和4个“Y”值,并且通过将所收集的值相对于中心点偏移来生成其余的值,该中心点通过以下方式生成:将运算所在的立方体的三维中心点进行二维投影或者使用前述边界框(例如,图21中的框69)的2D中心点。只要收集到这些偏移,某些点可以通过对这些值的符号取反而生成。通过合适地收集一半的所讨论角值(corner values),其余的值可通过使用该方法而生成。由符号取反产生点的方法仅对如图24中所示的被正交投影的立方体或棱柱体是精确的。
[0164]形式图案通常为相对于边界框19的4个角中的一个的偏移。或者,形式图案也可以是距边界框内或边界框范围之外的任一点的偏移,也可以没有偏移,而将其在当前屏幕像素上所具有的不变值作为形式图案的值。然而,对边界框4个角之一的使用被认为有助于理解,并且使得左上角(在图21中被表示为“最小值(Min)”)与将屏幕的左上角看作在图25中所示的位置(0,0)的实践相一致。
[0165]渲染3D图形最处理密集的部分之一为将点从3D空间转化到2D屏幕。正常情况下,该处理包括相当多的数学运算。二等分形式图案以及将这些二等分点添加到母形式图案点的形式图案点上产生了与正常的3D到2D转化相同的输出。
[0166]在优选实施例中,计算形式图案不使用相乘、除法或者多个复杂运算。这将在这个系统中用移位(BIT SHIFT)和相加(ADD)来替代。在基于3D图形透视的正常情况下,该方法不起作用,但是,如果待渲染对象被分为如上所述的正交子部分,则系统可利用该非正常图案。
[0167]现在参考图26至图28,根据优选实施例所述的用于处理八叉树数据结构的方法以流程图的形式给出,所述八叉树数据结构含有对用于渲染的场景进行建模的数据。该方法可被编码为有形的计算机可读指令(例如承载在图1中的光盘27上)以使得其组成计算机软件产品29用于通过计算机系统I进行处理。
[0168]现在将讨论图26至28的流程图中的每个流程框处所进行的各种处理。
[0169]在流程框83处,掩模缓存被清零。掩模缓存是一系列的标识位,显示缓存中的每个像素对应于一个标识位,标识位表明像素是否写入该位置。由于算法所提供的从前到后的顺序,每个像素只需要写入一次。当使节点的2D边界框重叠的所有像素都已被写入时,掩模缓存用于忽略该节点及其所有子节点。
[0170]在流程框84处,每个节点可具有O至8个子节点;只要节点上出现的所有子节点都被处理,则该节点被移出堆栈并且不再被考虑。
[0171]在流程框85处,对于递归实施方式,通过简单地返回函数来将最前端的节点移出堆栈。在迭代实施方式中,堆栈的尺寸被减小I。
[0172]在流程框86处,当堆栈上不存在节点时,整个模型被处理完毕。
[0173]在流程框87处,按照从前到后的顺序处理子节点,每个子节点被标记为已处理以确定何时可忽略节点(参见流程框84)。
[0174]在流程框88处,母节点被标记为正交模式,只要该母节点或该母节点的任何一个母节点满足针对正交模式的标准,参见流程框101和102。
[0175]在流程框89处,与附近的观察平面相交的节点必须被细分以避免数学上的不精确。
[0176]在流程框90处,当前节点被推入堆栈,从而确保其子节点(如果存在的话)接下来可被处理。
[0177]在流程框91处,在正交模式中,通过以下方式计算2D边界框:针对自生成正交数据以来的各个等级的家系(ancestry),获得保存在正交缓存数据中的2D边界框的尺寸并且将其除以2。也就是说,满足正交模式标准(参见流程框101)的节点的子节点将具有正好等于存储在正交数据缓存中的边界框尺寸一半的边界框尺寸。孙节点将具有正好四分之一的边界框尺寸,以此类推。在实践中,创建正交缓存数据时堆栈的尺寸可被存储在正交缓存数据中,并且从给出要被2除以的次数的堆栈尺寸中减去。在得到该值的情况下,使用二进制移位运算实现了除法,这比遗传除法要快得多。在得到所计算的边界框尺寸的情况下,通过以下方式来计算偏移:基于子节点数量选择框偏移值,针对各个等级的家系通过与尺寸完全相同的方式将框偏移值除以2,以及所得的商加到存储在正交缓存数据中的边界框位置上。
[0178]在流程框92处,在透视模式中,通过使用标准方式在当前节点的3D边界框的8个角点上进行到屏幕空间的全透视变换来计算2D边界框。通常,这是4x4矩阵与3D矢量相乘所得到的4D矢量(x,y,z,W),其中w分量被用作除数以进行最后的透视变换。应当认识到的是,根据本发明优选实施例所述的系统被设计为尽量避免该步骤。
[0179]在流程框93处,只要计算出2D边界框,测试其是否与任一屏幕边缘重叠,如果重叠,则相应地调整坐标以仅反映出框中与显示缓存重叠的部分。如果边界框完全在显示缓存之外,则不再考虑该节点并且控制流程至流程框84以处理该节点的其余子节点。
[0180]在流程框94处,由于从前到后的绘制顺序(drawing order),只要任一节点的边界框内的所有像素都已被写入,则该节点被封闭并且不再被考虑。通过测试掩模缓存中对应于边界框区域的每个标识位来实现该测试,如果所有的像素都被标记为已写入,则可丢弃该节点并且控制流程至流程框84。
[0181]在流程框95处,如果节点在处理过程中此刻不具有子节点,则提取(drawn)该节点(参见流程框97)。
[0182]在流程框96处,如果边界框的尺寸等于或小于阈值(比如I个像素),则提取该节点。这主要是因为一个像素尺寸以下的进一步细分是不必要的。
[0183]在流程框97处,为了提取(draw)节点,在掩模缓存中对经固定的2D边界框所对应的每个像素进行测试,并且当像素未被写入时,彩色缓存中相应的像素被设置为该节点的颜色并且设定掩模缓存。另外,此刻可写入其他缓存以记录信息,例如深度值和/或正常值。
[0184]在流程框98处,当前节点被推入堆栈,从而确保其子节点接下来可被处理。
[0185]在流程框99处,只要节点满足针对正交模式的标准,该节点的所有子节点也隐含地为正交的,所以此刻标识位和正交缓存数据被复制以将正交模式传递到子节点。
[0186]在流程框100处,在节点中设置正交模式标识位以表明其家系中任一节点是否满足正交模式标准。
[0187]在流程框101处,测试针对正交模式的标准。如已结合图3至图15所讨论的,该标准定性为:当使用透视将框投影到屏幕空间时,该框的背面看起来比该框的正面小的量(由于透视效应)小于I个像素,因而在光栅化时不会被觉察到。有很多方式对此进行测试,但是由于通过将矢量除以w(如结合流程框92所讨论的)施加了透视效应,所以便捷而简单的测试方式为测试框前部的经变换点与框后部的经变换点之间的w值的比率。实际的阈值比率随焦距和显示缓存的尺寸而变化,所以当这些参数中的任一个变化时,必须重新计算该阈值比率。
[0188]因此,监视和执行正交模式包括两部分:
[0189]第一部分包括预计算最佳阈值(当显示尺寸或焦距(视场)变化时进行更新),第二部分包括在渲染的过程中应用该阈值。
[0190]如上所述,潜在的逻辑比较简单;想要知道的是何时经投影的前坐标与后坐标间隔小于1.0像素(或者类似的公差值)。
[0191]虽然可能存在直接计算该值的方式,但是当前使用二进制搜索。标准的二进制搜索在近Z(nearZ)与远Z(farZ)之间进行,从而将近点(nearPoint) = (I, I, I)与远点(farPoint) = (I, I, -1)的点对进行变换,增加(0,0,midZ),其中中Z (midZ)就是近Z与远Z之间的中间值。
[0192]如果经投影的X,Y的变化小于像素阈值,则定位阈值点。
[0193]使用来自二进制搜索的经变换点(即为乂,¥,2,1),则可计算出固定1比率=近胃/远I
[0194]然后,在透视模式的渲染中,计算出8个经变换的框点(每个为X,Y,Z,W)。
[0195]然后,通过计算X,Y, W Min和Max来确定边界框。(注意此处的W)
[0196]然后,当前W比率被计算为curW比率=minW/maxW。
[0197]如果(当前W比率 >=固定W比率),则进入正交模式。
[0198]应当认识到的是,由于1/w通常被计算为透视变换的一部分,所以可能通过乘以倒数来代替除法,这是常见的浮点优化。
[0199]还应当指出的是,该方法在某种程度上不同于将针对比如为24的像素阈值的X与y的变化(同样通过二进制搜索或试凑法进行计算)相比较的经典方法。
[0200]上面所讨论
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1