首页> 中国专利> 对程序几何对象进行三角剖分

对程序几何对象进行三角剖分

摘要

基于在原始程序表面上执行的一些构造立体几何操作,能表达复合程序表面。该基于复合程序表面的域的表达包括相交的隐曲线。在预处理期间,会被三角化的部分基于表示的域首先通过隐曲线和曲线可视三角形的参数区域被分解成没有绑定在任何一边上的简单三角形。粗略的预处理三角形网格随后在运行期通过对该粗略网格的进一步分解而改进,以增加具有基于曲线边和基于非曲线边的三角形以生成采样三角形的网格。更精细的采样三角形网格通过应用几何学实例被进一步改进,以将合适的实例网格映射到合适的采样三角形以在运行期为渲染创建甚至更精细的三角形网格。

著录项

  • 公开/公告号CN101189600A

    专利类型发明专利

  • 公开/公告日2008-05-28

    原文格式PDF

  • 申请/专利权人 微软公司;

    申请/专利号CN200680019706.6

  • 发明设计人 B·K·古恩特;M·加维流;

    申请日2006-06-28

  • 分类号G06F17/00(20060101);

  • 代理机构31100 上海专利商标事务所有限公司;

  • 代理人陈斌

  • 地址 美国华盛顿州

  • 入库时间 2023-12-17 20:15:19

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-05-13

    专利权的转移 IPC(主分类):G06F17/00 变更前: 变更后: 登记生效日:20150423 申请日:20060628

    专利申请权、专利权的转移

  • 2010-01-20

    授权

    授权

  • 2008-07-23

    实质审查的生效

    实质审查的生效

  • 2008-05-28

    公开

    公开

说明书

技术领域

本技术领域涉及计算机图形学。更具体地,本领域涉及在计算机显示设备上渲染计算机所生成的图像。

背景技术

构造立体几何学(CSG)是模拟几何表面的方法,由此更复杂的表面被模型化为简单表面的组合。例如,在计算机图形学中,CSG为自例如是简单柱面和简单球面的更低种类的表面定义更高种类的表面(例如是有洞的球面)提供强大的方式。CSG组件包括例如是原始的柱面和球面,能根据过程或接收一些参数的函数来描述。例如,球形的三维(3D)表面能根据它的中心坐标和它的半径值程序化地加以定义。更复杂的组件能通过使用一些程序化对象执行CSG操作而被模型化。

3D表面的程序模型具有许多需要的特征。例如,它们比多边形网格或多边形表面补丁(例如齿条)更紧密,它们是分辨率独立的且它们通过改变少数参数在运行期得以修改。紧密性对许多原因来说都重要。例如,存储紧密表示花费更少的存储。另外,即使需要更多的计算来在运行期处理紧密表示,紧密表现也能比大的表示更快的被渲染。

在渲染这样的程序表面以显示的一方法中,程序表面表示被转换为互连三角形的网格。计算机图形处理的这一步通常涉及例如是三角剖分或密铺。三角形更好,这是因为它们的过分简单化表示以及它们对渲染的合适度。然而,三角剖分程序表面和存储描述该三角剖分表面模型的数据结构也消耗存储以及为此造成的费用昂贵。因此,需要在渲染至显示器之前在运行期执行更多的涉及三角剖分的任务。因此,避免与存储和获取涉及程序表面的三角剖分表示相关的耗费。

发明内容

在此描述渲染复杂程序表面的方法和系统,其通过用表示原始程序表面的数据执行CS6操作至少部分地形成。CS6操作产生隐函数定义的相交的隐曲线。隐函数包括多个域变量且相交的隐曲线分解为多个参数化区域。另一方面,基于复杂程序表面表示的域被静态地预处理以在该域上生成粗略的三角剖分网格。该粗略的三角剖分网格存储在存储器中并在运行期通过进一步的分解和应用几何实例来进一步改进。

在另一方面,通过增加约束边,连接端点和一些由CSG操作产生的相交隐曲线的参数化区域的中间点,至少部分的生成粗略三角剖分网格。在另一方面,应用Delaunay三角剖分方法以最小化在粗略三角剖分网格的域中的细片三角形的发生。具有Delaunay三角剖分的三角剖分网格通过生成曲线可视化三角形进一步得到增强。

在一方面,曲线可视化三角形包括顶点,以使从该顶点到相应约束边所画的线段与相应的相交隐曲线在不多于一个地方相交。在更进一步的方面,静态生成的粗略三角剖分网格通过通用计算机系统的中央处理单元(CPU)生成并存储以为稍后的使用。

在另一方面,至少通过增加与曲线中间点相关的边至参数区域的端点并将粗略网格的基于非曲线的简单三角形子进行细分以匹配用户定义的参数长度约束,将静态生成的粗略三角剖分网格进一步在运行期做分解以生成更精细的采样三角形网格。

在另一方面,通过应用几何实例进一步改进采样三角形网格。应用几何实例的方法包括至少部分地基于采样三角形类型的分类和在该采样三角形中映射实例网格来选择合适的实例网格。在另一方面,应用几何实例是在图形处理单元(GPU)上,在运行期中实现的。在另一方面,通过GPU接收采样三角形网格的三角形的顶点数据和将该采样三角形分为多种类型的数据。至少部分的基于采样三角形的分类数据,选择合适的实例网格以在采样三角形中被映射。在映射的方法中,从网格中进行同样分类的采样三角形分为一组且使用合适的实例网格一起映射。在一方面,通过使用关于采样三角网格的三角形的顶点数据的实例网格的重心坐标来完成映射。

上述列出的是至少一些实施例的一些特征。附加的特征和优点将从下面的对阐述的结合附图的实施例的详细描述中变的清楚。

附图说明

图1A是示出两个原始的示范性程序表面的框图。

图1B是示出通过在图1A所示的原始表面上执行示范性构造立体几何操作以生成示范性复杂程序表面的框图。

图2是描述通过三角剖分渲染复杂程序表面的总体方法的流程图。

图3为表示程序表面而生成三角剖分网格的总体方法的流程图。

图4是示出示范性图形处理系统的至少一些组件,以渲染包括程序表面的图形对象,这些程序表面基于表示会被渲染的表面的三角剖分网格的框图。

图5是示出包括相交隐曲线的基于示范性表面的示范性的表示的域的框图,其中多个表面彼此相交。

图6是示出使用相交隐曲线静态生成表示基于程序表面的域的表示的粗略三角剖分网格的示范性总体方法的流程图。

图7A是示出对在基于域表示的程序表面中的相交的隐曲线的示范性约束的框图。

图7B是示出了示范性域的框图,使用至少一些具有约束边的三角形约束和三角剖分交点的该示范性域上的参数化曲线。

图8A是示出了具有示范性集的约束边的相交隐曲线的框图,其中至少一些约束边相互干扰。

图8B是示出了具有另一示范性集的约束边的相交隐曲线的框图,其中至少一些该曲线的参数化区域进一步细分以避免各自约束边之间的干扰。

图9是示出了不同三角剖分网格的示范性的最细的长条三角形的框图,其中根据Delaunay三角剖分选择具有最细的长条三角形的网格。

图10是示出包含至少一曲线可视化三角形的示范性三角剖分域的框图。

图11是示出通过隐微分计算交点的示范性隐曲线的切线的方法的框图。

图12是示出相应于相交段的示范性CSG隐曲线的在域中的示范性曲线可视化区域的框图。

图13A是示出了示范性曲线可视化三角形的框图,其中与第一条隐曲线相关的曲线可视化三角形与第二条曲线干扰。

图13B是示出了曲线可视化三角形的框图,其中不同隐曲线的曲线可视化三角形没有相互相交。

图14是示出了至少部分的域在预处理中静态三角化以生成简单域三角形和曲线可视化三角形的一些组合的框图。

图15是示出了通过改进静态生成的粗略三角剖分网格的对域的运行期三角剖分的示范性总体方法的流程图。

图16是示出了在运行期改进静态生成的粗略三角剖分网格以生成更精细的采样三角形网格的框图。

图17A是示出了通过增加曲线可视化三角形,进一步细分至少部分的静态三角剖分的粗略网格,以与增加相交隐曲线的附加边相适应的框图。

图17B是示出了通过在不由基于曲线的边做边界的简单采样三角形内增加边,进一步细分至少部分的静态三角剖分粗略网格的框图。

图17C是示出了通过在运行期生成的曲线可视化三角形中增加边以进一步细分至少部分的静态三角剖分粗略网格,以生成采样三角形的更精细的网格的框图。

图18是示出应用几何实例以更进一步改进运行期生成的采样三角形网格的网格的示范性方法的流程图。

图19是示出从各种几何实例网格到采样三角形网格的合适三角形的示范性映射的框图。

图20是示出包括它们相应的重心坐标的示范性集的不同类型的几何实例网格。

图21是描述在合适的采样三角形类型中映射合适的所选的几何实例网格的示范性方法的列表。

图22是示出用于实施三角剖分程序几何对象的方法的示范性计算环境的框图。

具体实施方式

示范性CSG操作

图1A示出了示范性程序表面S1 110和S2 120,其都是能以一些程序f1(u1,v1)和f2(u2,v2)的过程各自在例如是二维平面中描述的柱状表面。图1B示出了包含表面S1 110和S2 120的CSG操作的结果。特别地,图1B示出了通过从较大的表面S1 110中部分跟踪较小的表面S2 120以获得布尔差分的结果。示出的操作和表面都是示范性的。其他操作,例如是相交和各种表面的联合,例如是球面、旋转表面或多项式片,都是可能的。

3D表面S1 110和S2 120描述为f1(u1,v1)和f2(u2,v2),可以如下定义:

f1(u1,v1)=[f1x(u1,v1),f1y(u1,v1),f1z(u1,v1)]T

f2(u2,v2)=[f2x(u2,v2),f2y(u2,v),f2z(u2,v2)]T

而且,表面S1 110和S2 120的相交的曲线(例如在图1B中的130和135)隐含地定义为函数F=f1(u1,v1)-f2(u2,v2)=[0x,0y,0z]。由于图元S1 110和S2 120通过函数根据域变量(u1,v1)和(u2,v2)程序化描述,描述相交隐曲线的函数F是4个域变量F(u1,v1,u2,v2)的函数。

示范性程序表面渲染

可以选择由执行CSG操作生成的复杂程序表面以显示在屏幕上。应用三角剖分至这样的复杂程序表面的表示是一种在屏幕或显示器上渲染表面的方法。图2为渲染例如是图1B的150的复杂程序表面提供总体方法200,包括相交的任意隐曲线。首先在210,计算机图形处理系统(例如图4的400)接收图元(例如图1A的110和120)的模型,以及在220执行CSG操作(例如图1B所示)以生成例如是图1B的150的复杂程序表面。然后在230中,隐含解释该执行的CSG操作的CSG程序表面的基于2D域的表示(例如是图5的500和550)通过所选的三角剖分处理分解为三角形网格。

2D网格在表面域中。存在对每个表面的2D网格,其贡献给复杂CSG程序表面。如果在2个程序表面之间存在一个CSG操作,将存在2个会被分解的网格。如果在3个网格之间存在2个CSG操作,将有3个网格会被分解,等等。

在240,通过从2D平面到3D平面的映射,从原始程序表面的基于域的2D网格(例如500和550)的组件中制造出最终复杂程序表面的3D网格。例如,通过使用合适表面的表达或过程的顶点阴影程序,在GPU(例如图4的430)中完成映射。在250中渲染这一3D网格以在显示器上产生图像。

图3示出了应用三角剖分至关于CSG程序表面的基于域的表示的示范性方法230.在310中,在预处理中将关于CSG程序表面的基于域的表示静态分解成三角形的粗略网格。之后在320中,将静态三角剖分数据存储在存储器中。在330中,在运行期进一步改进静态三角剖分,生成更好的三角剖分网格以在附加细节中表达表面的复杂性。在运行期的附加处理以在渲染之前获得最终三角剖分具有降低需要存储的资源的开销以及获取关于会被显示的CSG程序表面的复杂三角网格的数据结构的开销的优点。这也导致额外的适应性,例如只对那些会在CSG操作之后显示的部分CSG程序表面进行三角剖分。

用于程序表面的渲染的示范性图像处理系统

图4示出了示范性图形处理系统400以适于显示图形给用户的方式生成图形,该系统包括组件以处理与计算机相关的数据。系统包括可编程通用中央处理单元(CPU)410.存储器420存取至CPU410和图形处理单元(GPU)430.在一实施例中,通过粗略三角剖分静态分解CSG程序表面的域的步骤310在预处理期间在CPU410中完成且作为静态三角剖分数据425存储在存储器420中。GPU430能接收静态三角剖分数据425以在显示器470上渲染CSG程序表面之前做进一步的处理。

示范性的GPU430包括顶点处理单元435(VPU)以处理源自静态三角剖分数据425的三角剖分网格的顶点数据。处理可以包括CSG程序表面的进一步变换。例如,VPU435典型的应用顶点阴影程序从粗略域三角剖分中动态创建CSG表面的3D网格,连同普通的3D变换。光栅440接收一系列向量形式的顶点数据,并使它们转换成与显示像素相关的像素数据。像素处理单元445能为显示器470的像素产生最后的颜色(例如经由调整光亮和阴影)。Z缓冲器450典型的增加深度数据以使在显示器470中的渲染场景的元素显示给在深度上彼此相关的用户。系统400和其上的组件仅仅是作为示出,可以增加其他组件以及删除示出的一些组件。

隐相交曲线的示范性参数化

示范性表面S1 110和S2 120的基于域的表示以500和550各自示出在图5中。曲线510、545、560和585代表在每个该两个域中的点,其中该两个表面S1 110和S2 120相交(例如图1中的130和135)。各自的域500和550的(u1,v1)和(u2,v2)的剩余的点值代表各自表面S1 110和S2 120的剩余点。域500和550能一起代表任一复杂程序表面的基于域的表示,其通过对图元S1 110和S2 120应用CSG操作而形成。

步骤230(图2)的基于域的表示500和550的分解开始于相交曲线510、545、560和585的各自的参数化区域。假设上述的程序函数F(u1,v1,u2,v2),其中F(x)=F(u1,v1,u2,v2),以使是4D域变量(u1,v1,u2,v2)的值的范围,且假定存在函数FP(xp)=xd以使xp和xd各自分割变量x的向量至参数化变量(也称作自变量)的向量和因变量的向量。如果F(x)是:F:Rm→Rn,则数字m-n指示在变换中参数化变量的数量。因此,函数FP(xp)允许从属变量xd以自变量或参数化变量xp的形式表达。因此,由于因变量的值能从自变量或参数化变量的值中取得,参数化隐函数的能力具有减少需要存储这样的函数表示的存储器的直接优点。在函数F:Rm→Rn中m变量相较于n变量的实际数量能变化。例如,4→3的变换是CSG中典型的变换。

确定参数化的示范性方法

参数化如上述的相交曲线(例如510和560)的隐函数通常可以是不可能的。更具体的说,不是每个隐函数的变量都能在表达式中用作参数化变量来表达函数的其他变量。证明通过隐函数的任一域变量参数化的可能性的一种方法是应用简单形式的隐函数原理来确定这样的函数接近无奇异点的各种因导数矩阵中的哪一个。例如,在上例中,其中F是F:R4→R3,具有4个域变量和3个范围变量且F(u1,v1,u2,v2)=F(fx,fy,fz),会给予导数矩阵如下:

fxu1fxv1fxu2fxv2fyu1fyv1fyu2fyv2fzu1fzv1fzu2fzv2

假定因导数矩阵中u1作为自变量,如下:

fxv1fxu2fxv2fyv1fyu2fyv2fzv1fzu2fzv2

根据简单形式的隐函数原理,如果上面的因导数矩阵是无奇异点的,以使矩阵中不存在一列能表达成其他的加权和,则隐函数能以参数形式表达,u1在本例中作为参数化或自变量。基于其他变量的因导数矩阵也可以是非奇异的,因此指示基于这些其他变量的函数参数化的可能性以使这些变量也可以服务为参数化变量。

然而,在曲线的不同部分(例如510和560)存在选择一个变量作为其他上的参数化变量以参数化曲线不同部分的优点。如图5所示,例如,在例如是(u1,v1)的2D域中,能基于相关因导数矩阵的无奇异点属性选择参数化区域。在图5中,在515(P3),u1作参数表变量,然而在520(P2)v1是更好的选择。这至少部分依赖于事实,在区域515(P3)中,参数化变量u1的每个值保证具有自变量v1的一个相应的值。观察整个相交曲线510,然而没有一个参数化变量u1或v1保证曲线上的每个它们的值对应于其他变量的单一值。作为结果,曲线510被分成示范性参数化区域P1 525、P2 520、P3 515和P4 530。在区域P1 525和P3 515中,参数化变量是v1。示范性相交曲线560在表面S2的域550上的类似分割(例如565、570、575和580)也是可能的。而且,如图4所示的2D参数化区域仅仅是为了示例,其他参数化区域是可能的。曲线545和585的参数化区域未示出。然而,这些曲线545和585也能以上述方式分割。相同的原则对于更高维数的域也是真实有效的。

通过域的静态三角剖分的程序表面的域的示范性分解

一旦基于CSG程序表面(例如500和550)的域通过参数化区域(例如515、520、525和530)分割,域通过在预处理中的三角剖分过程进一步被静态分解,如图6的方法600中所述。三角剖分将域空间分成相连的三角形网格。在610,参数化区域约束为增加约束边,且在620,Delaunay三角剖分应用在约束的参数化区域以给予如图7B中的750所示的三角剖分区域的粗略三角形的第一集合,例如。之后在630,曲线可视化三角形确定被确定以进一步改进由Delaunay三角剖分产生的该三角形集合。产生的三角剖分网格在预处理中(如上所述)存储在640以在运行期被进一步改进,其先于渲染包括正在讨论的CSG程序表面的场景。

在参数化区域上的示范性约束

图7A示出了示范性域700,其参数化的隐相交曲线710被约束(610)。示范性约束是边(例如715、720、725和730),这些边简单连接参数化区域P1、P2、P3和P4的点(例如端点)。一旦被约束,三角剖分的初始处理如图7B中750所示的三角剖分域700,使用用作三角形初始粗略集的基础的约束(例如715、720、725和730)。这样的约束确保三角剖分模式将包括约束边(例如715、720、725和730)。然而,约束边(例如715、720、725和730)示例的且其他约束是可能的。

例如,约束边的一定模式能相互干扰(例如通过相交)。图8A示出了这样的干扰。示范性域800可以具有多条相交曲线805和810.然而,如果参数化区域没有被仔细选择,则曲线805的边815的集合可能会干扰曲线810的边820的集合。在那个事件中,通过进一步子分割参数化区域,以图8B所示的方式应用不干扰约束至参数化区域,以给予约束边(例如图8B的830和825)的集合,避免图8A中明显的干扰。

示范性Delaunay三角剖分

一旦确定约束边(例如830和825)的非干扰集合,应用Delaunay三角剖分至这样的约束域空间。在计算几何中,Delaunay三角剖分或Delone三角剖分(如其有时所知的)是这样一种处理,其对三角剖分给定域空间的三角形集合的最小角度进行最大化,因此避免太细的长条三角形。细长三角形由这一方面定义,其中在三角形的高度和宽度之间存在相当大的差别。这样细长的三角形在计算中是不稳定的且需要避免。一般规定,对在n维欧式空间的点的集合P,Delaunay三角剖分是对P的三角剖分DT(P),以使没有P中的点在DT(P)中的任一单一的周围半球内。一种应用Delaunay三角剖分的方法需要重复一次增加一个顶点且重新三角剖分图形中受影响的部分。当顶点加入时,为所有的具有包括新增加顶点的外接圆的三角形完成一次搜索。然后,删除这些三角形并且重新三角剖分图形中的这些部分。

图9示出了Delaunary三角剖分的概念。假定包含域的不同三角剖分的三角形的不同集合具有三角形910、920、930、940,各自作为他们的最细的长三角形,其以在它们的高度和宽度上的差异的形式来定义,然后会选择导致930作为最细的长三角形的三角剖分模式以完成Delaunay三角剖分,以避免如在940中的太细的长三角形。

计算曲线可视化三角形的示范性方法

一旦完成Delaunay三角剖分的过程,域被进一步分解以增加可视三角形(图6中的603)。为了完成这一操作,例如搜索由Delaunay三角剖分产生的三角形以确定那些底边(例如1021)与曲线的一个参数化区域(例如P1、P2、P3和P4)相适应的三角形。图10示出了一个这样的三角形1010,其底边与一个参数化区域P3相对应。然而,一些这样的三角形(例如1010)可以有顶点1015,以使三角形的一条或多条边与隐相交曲线1025相交于多处,例如是如图所示的1020。然而,增加具有顶点1040的新三角形1030以进一步子分割域750,以使相交曲线1025没有与三角形相交于多处,该三角形以与曲线1025相关的边1021作为边界。换句话说,曲线可视化三角形(例如1030)具有顶点(例如1040)以使在参数化区域(例如P3)中存在从顶点(例如1040到曲线1025上的点的清晰路径。可对剩余的参数化区域(例如P1、P2和P4)重复这一过程。

图11和12示出了计算可视化三角形(例如1030)的示范性方法。假定在例如是1110的隐相交曲线上的参数化区域,通过隐函数的隐微分计算曲线切线,该隐函数定义在图11所示的端点C1和C2之间的曲线1110的参数化变量的区间这产生具有不同斜率值的一系列切线(例如1111-1114)。从这一系列切线(例如1111-1114)中,识别出具有最大斜率值的切线Tmax(例如1111)以及具有最小斜率值的切线Tmin(例如1114)。

如图12所示,在1111的Tmax和1114的Tmin之间的角度1115中的区别定义了对曲线1110的参数化变量的区间的切线斜率的范围。基于范围1115,确定曲线Vp1 1120和Vp2 1130的交点。结果是,把区域1140和1150中的任一点选为曲线可视化三角(例如1020和1030)的顶点,以使在曲线1110上的任一点能连接到顶点以形成一条线,其与曲线1110不相交。

图11~12的例子示出一种简单的情况,其中曲线是最大斜率切线Tmax和最小斜率切线Tmin,发生在与曲线1110的参数化区域的端点c1和c2相符。取决于曲线,也可以不是这种情况。例如,切线Tmax和Tmin中的一个或两个可以与除了曲线1110的端点的点相符。然而,通过转移切线到端点c1和c2找到切线Tmax和Tmin的相交,确定曲线可视化区域(例如1140和1150)。也即,曲线可视化三角形能使曲线可视化区域1140和1150中的任一点作为顶点。它不必是交点Vp1 1120和Vp2 1130。

请参考图13A和13B,在为曲线可视化三角选择顶点位置中,描述了另一种考虑。例如,图13A的曲线可视化三角1310的顶点Vp1(1320)与隐曲线1315相符,但是具有顶点位置在Vp1(1320)的曲线可视化三角1310与另一条隐曲线1305相交,这时不需要的。通过将图13A的参数化区域P0细分成图13B的区域P3和P4能避免这样的干扰以使符合的曲线可视化三角1325和1330不干扰另一条隐曲线1305。同样地,在图13B中的与曲线1305相关的曲线可视化三角1340和1350具有细分的区域P1和P2以使所述三角形不干扰隐曲线1315。

静态三角剖分的示范性结果

图14示出了在示范性静态三角剖分(例如通过图6的方法600)后的域的至少一部分1400,其包括一个简单的域三角形,具有在它的三条边上的基于非曲线的域边,以及一个曲线可视化三角1415,具有在它的三条边中的至少一条边上的约束边1420。约束边1420连接相交的隐曲线1425上的点,例如端点c1和c2。存储关于简单域三角形(例如1410)的顶点相关的数据和曲线可视化三角(例如1415)以及稍后在运行期内取回以进一步改进三角剖分。

示范性运行期三角剖分

一旦完成静态三角剖分,粗略的三角剖分网格(例如1400)在运行期中进一步改进以生成更精确的网格。在运行期生成更精确的网格避免有关存储和取回细节网格以渲染的开销。图15示出了通过CPU1510和GPU1520的运行期三角剖分的总体方法1500。由CPU1510执行部分的运行期三角剖分1510。在1515,运行在CPU1510上的三角剖分程序接收有关在预处理中执行的静态三角剖分(例如图6的600)的数据。这些数据至少包括有关三角剖分的粗略集合的顶点数据,其三角剖分会被渲染的CSG表面的域。例如,这样的数据包括具有简单三角形(例如图14的1410)的顶点和由上述的静态三角剖分方法产生的曲线可视化三角(例如1415)的顶点的基于域的坐标的数据。在1525,这样的静态三角剖分通过在域中增加边以细分任一简单三角形(例如1410),以及通过进一步细分曲线可视化三角(例如1415),而得到进一步的改进。这样的细分能持续到形成三角形边的用户定义的边参数长度。

请参考图16,描述了一种改进静态三角剖分网格的方法。在1610,通过在隐曲线的参数化区域的附加点上进一步增加边,细分由静态三角剖分产生的曲线可视化三角(例如1415)。图17A示出了一种这样的细分,其中通过增加边以连接在参数化区域曲线1715的端点c1和c2中间的附加的曲线点c3和c4,将曲线可视化三角1710进一步细分成三角形1725、1730和1735。这些在域坐标中指定的曲线点(流入c1、c2、c3和c4)能从存储器中取回。这样的点也能通过求解定义相交隐曲线1715的隐函数在运行期中计算。在1630,也通过增加边(例如1750)以生成例如是如图17B所示的更多的三角形1740和1745,进一步细分简单三角形(例如图17B所示的1720)。这样的细分至少部分基于边缘的用户定义的阈值参数长度,该边缘形成网格的细分三角形的边。

基于增加到生成细分的简单三角形1740和1745的边,增加新的边以确保在细分三角形(例如图17B的1730、1740、1745)之间的共享边是不一致的。当一个三角形的边与另一个三角形的共享边不匹配时就会发生不一致性。例如,如果边1750没有遇到边1755,它将导致不一致性。这样的不一致性能导致由三角剖分网格表示的表面当其最终在屏幕上渲染时的不想要的中断。最小化这样的不一致性改进了渲染图像的总体质量。

例如,也增加界线1756以满足用户设置的参数阈值长度的需求。因此,增加图17C中的新的三角形1760、1770和1775以表示通过图17B中的曲线可视化三角1730初始表示的部分域。边(例如1756)的增加引起了图17B中的邻近三角形1725和1735会被进一步细分以增加例如是1785和1780的三角形。这样的细分导致图17所示的关于采样三角形实例的三角形的组合。与运行期细分的采样三角形的这一组合的顶点相关的数据存储在1640中。

回到图15,基于这样的特征,例如它们的形状,大小以及关于相交曲线的位置,对上述的在步骤1525中确定的采样三角形进行分类。例如,这样的分类包括但不限于,运行期细分的曲线可视化三角(例如图17B中的1775),通过一连接相交曲线1715上的点的边作为该可视化三角的界线,通过对静态三角剖分(例如通过图6的方法600)确定的原始的可视化三角(例如图14的1415)进行细分来生成该相交曲线。进一步的分类也包括基于非曲线的简单三角形(例如图17B的1740和1745),没有以通过有关相交曲线(例如1715)的边的任一边为其界线。然而,另一种分类包括基于非曲线的三角形例如1760、1770、1780和1785,其生成自静态三角剖分(例如通过图6的方法600)期间确定的原始曲线可视化三角(例如图14的1415)。通过增加名字(例如文字和数字)维持与这样的分类相关的数据,以识别与由运行期三角剖分1525产生的每个采样三角形(图17C)相关的分类。

回到图15,进一步在运行期,GPU1520在1540实施进一步改进三角剖分的另一种方法1535。根据该方法1535,GPU在1540接收采样三角形(例如在图17C中的)的顶点数据以及将三角形分成不同类型的采样三角形的数据。然后在1545,基于该分类,GPU1520应用图形实例以增加更多的边至该采样三角形以先于在1550渲染精细的网格,进一步改进三角剖分网格(例如图17C)。在这一方式中,在运行期实施附加的三角剖分以进一步定义CSG程序表面的细节,其包括不必存储定义复杂网格的复杂数据结构的任一相交曲线。下面描述应用几何实例(1545)的示范性方法。

对改进三角剖分的几何实例的示范性方法

图18示出了应用几何实例的示范性方法1800。在1810,在例如是GPU(例如图15的1520)上运行的顶点阴影程序接收采样三角形的顶点数据,例如是形成示出在图17C的网格的采样三角形。除了顶点数据,也接收将采样三角形分类成不同类型的三角形的数据。在1820,至少部分的基于采样三角形的分类,为至少一些采样三角形选择合适的规范的几何实例。然后在1830,为至少一些采样三角形,基于采样三角形的顶点数据和与此相关的几何实例网格的重心坐标,在实例网格中表示的三角形映射到采样三角形。

将几何实例网格映射到采样三角形的示范性方法

图19示出了示范性映射。通过合适地映射实例网格(例如1910、1920和1930)进一步三角剖分采样三角网格1900。图20示出了以附加细节的实例网格类型1910、1920和1930的三个例子,包括它们的重心坐标。在用于选择合适的实例网格到被映射至特殊类型的采样三角形的示范性的标准集合中,用例如是1910的NNN类型的三角形映射运行期细分的例如是图19的1915的简单采样三角形。用例如是1930的NN1类型的实例网格映射例如是1935的运行期细分曲线可视化三角形。最终,使用例如是1920的NN2N类型的三角形,映射由静态曲线可视化三角形(例如图14的1415)的运行期细分产生的基于非曲线的三角形1925。并且取决于邻近三角形的配置,这样的基于非曲线的三角形也能用NN1来映射。

符号N指在关于规范的实例网格(例如1910、1920和1930)的重心点之间(例如在图20的2011和2012之间)的线段的大约数量。例如,在1910中N是2,这是因为与三角形网格1910的每条边上的重心点相应的边在每条边上的数量是2。类似地,NN2N网格1920在底边2021上具有4段,在另外两边2022和2023上具有2段。三角形网格1930是类型NN1而且在本例中N也是2,这是由于底边2031只有1段而另外两边2032和2033具有2段。如同在本例中,使N对每个各种类型的集合实例网格(例如1910、1920和1930)相等,以保证在几何实例后的精细的运行期三角剖分网格不具有不一致的边。

通过选择合适类型的实例网格(例如1910、1920和1930)以映射至所选的采样三角形也避免了在邻近三角形的不一致的边。例如,使用NN1类型(图19的1930实例网格取代NN2N类型(图19的1920)映射图17C的生成自细分原始曲线可视化三角(例如图14的1415)的基于非曲线的三角形,例如1760和1770,以避免用NNN型网格(图19的1910)映射邻近三角形1740和1745引起的不一致边。而且,使用NN1网格替换NN2N网格映射图17C的采样三角形1760和1770,以确保它们的邻近的采样三角形(例如1745和1775)的边的一致性。

具有示为2的N值和相应重心点的三角形1910、1920和1930仅作阐述,基于三角剖分的特定域和例如是所需三角剖分的范围和深度的其他因素,能对其做出更改。在三角剖分网格的共享边之间最小化不一致性将最终导致更好质量的渲染图片。

用于映射三角剖分实例网格到采样三角形的示范性算法

基于系数集合,例如图20中的2017(0,1,0),2016(.5,.5,0)和2014(0,0,1),重心坐标定义规范的三角剖分网格的边上的点。基于这些系数类型的重心坐标值,在将这些网格映射到合适的采样三角形(例如在1900示出的)期间,为表示这些点计算在所选域中的实际坐标。与顶点P0 2012(u0,v0)、p1 2013(u1,v1)和p2 2014(u2,v2)的域坐标中的已知坐标值相关,计算对中间重心点(例如图20的2016)的实际域坐标。

图21是示范性算法的列表2100,其描述将实例网格映射到采样三角形的过程。根据本方法,基于以(x,y,z)形式的系数的形式的心坐标2115的输入以及顶点p0、p1、p2的2D域坐标(u,v)2120。在2130,基于它们的系数值和已知的顶点p0、p1和p2的域坐标值,计算对重心点的域坐标(u,v)。在列表中的算法是示范性的。其他方法能用于在表面的域表示上确定点,以基于图形实例表示三角剖分网格的顶点数据。

示例性计算环境

图22和下面的讨论旨在提供示范性计算环境的简明、通用描述,在其中可以实施所揭示的技术。尽管不需要,揭示的技术在被个人计算机(PC)执行的计算机可执行指令的上下文背景中描述,例如程序模块。通常,程序模块包括例程、程序、对象、组件、数据结构等,其执行特定任务或实施特定抽象数据类型。而且,揭示的技术可以用其他的计算机系统配置来实施,包括手持设备、多处理器系统、基于微处理器或可编程的消费电子装置、网络PC、微型计算机、大型计算机等。揭示的技术也可以在分布式计算环境中实施,其中通过由通信网络连接的远程处理设备执行任务。在分布式计算环境中,程序模块可以驻留在本地和远程存储设备中。

图22示出了合适的计算环境(2200)的一般例子,其中实施所述的实施例。计算环境(2200)并不旨在对本发明的使用或功能加以限制,由于本发明可以在不同的通用或特殊用途计算环境中实施。

请参考图22,计算环境(2200)至少包括一个中央处理单元(2210)和存储器(2220)。在图22中,用虚线包括最基本的配置(2230)。中央处理单元(2210)执行计算机可执行指令且可以是真实或虚拟的处理器。环境2200进一步包括图像处理单元(GPU)2215以执行计算机图形操作,例如顶点映射、像素处理、渲染和木材纹理映射。在多处理系统中,多处理单元执行计算机可执行指令以增加处理能量且如同这样的GPU和CPU能同时运行。存储器(2220)可以是易失性存储器(例如寄存器,高速缓冲存储器、RAM),非易失性存储器(例如ROM、EEPROM、闪存等)或两者的一些组合。存储器(2220)存储实施三角剖分程序几何对象的所述方法的软件(2280)。计算环境可以具有附加特征。例如,计算环境(2200)包括存储装置(2240)、一个或多个输入设备(2250)、一个或多个输出设备(2260),以及一个或多个通信连接(2270)。互连机制(未图示),例如总线、控制器或网络,连接计算环境(2200)的组件。典型地,操作系统软件(未图示)为其他在计算环境(2200)中执行的软件提供操作环境,以及协调计算环境(2200)的组件的行为。

存储装置(2240)可以是可移动或不可移动,且包括磁盘、磁带或磁盒、CD-ROM、CD-RW、DVD或其他能用于存储信息且能在计算环境(2200)内存取的任何其他媒介。存储装置(2240)为实施三角剖分程序几何对象的方法的软件存储指令。

输入设备(2250)可以是触摸输入设备,例如键盘、鼠标、笔、轨迹球、音频输入设备、扫描设备或其他提供对计算环境(2200)的输入的设备。对音频来说,输入设备(2250)可以是声卡或以模拟或数字形式接收音频输入的类似设备,或提供音频采样给计算环境的CD-ROM读装置。输出设备(2260)可以是显示器、打印机、扬声器、CD刻录机或其他从计算环境(2200)中提供输出的设备。

通信连接(2270)在通信媒介上使能对另一计算实体的通信。通信媒体传达信息,例如计算机可执行指令、压缩图形信息、或在调制数据信号中的其他数据。

计算机可读媒介是能在计算环境内被存取的任何有效媒介。作为示例,但不先于,在计算环境(2200)中,计算机可读媒介包括内存(2220)、存储装置(2240)、通信媒介和上述任意的组合。

已经引用所示的实施方式描述和示出了本发明的原则,应该认识到可以在不背离这一原则的前提下在安排和细节上对示出的实施例作修改。在软件中示出的实施例的元素可以在硬件中实施,反之亦然。而且,来自任一示例的技术能和在其他任何示例所描述的技术相结合。

考虑到本发明的原则可适用的许多可能的实施方式,应该认识到示出的实施方式是本发明的例子并且不应被当做本发明的范围的限制。例如,系统的各种组件和这里所述的工具可以在功能和使用上进行结合。因此我们声明来自这些权利要求的范围和精神内的本发明的所有主题。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号