一种三维物体的边缘检测方法技术领域
本发明涉及三维场景渲染技术,特别是涉及一种三维物体的边缘检测方法。
背景技术
在三维场景渲染中,边缘检测技术是一项非常常用的技术,比如选取游戏场景中
的游戏对象需要对对象的边缘进行标记。
目前的边缘检测方案中,通过对待进行边缘检测的三维物体(如游戏系统中的游
戏对象)进行三次渲染,来实现三维物体的检测。其中,第一次是渲染一个比原有三维物体
稍大的对象,并将此对象覆盖的模板缓存中对应像素的模板值初始化为1。第二次是按照原
有尺寸渲染这个三维物体,并将此对象覆盖的模板缓存中对应像素的模板值加1。第三次是
根据模板缓存的数据,将像素中模板值为1的像素确定为整个三维物体的边缘占用的像素,
绘制这些模板值为1的像素即可标记出该三维物体的边缘。
在上述传统的方案中,由于需要对待进行边缘检测的三维物体进行三次渲染才能
得到其边缘,这样,就会使得对渲染指令的调用较多,相应的绘制指令(DrawCall)的调用次
数也会较多,从而会使得渲染效率较低。
发明内容
有鉴于此,本发明的主要目的在于提供一种三维物体的边缘检测方法,该方法可
以快速准确检测到三维物体的边缘。
为了达到上述目的,本发明提出的技术方案为:
一种三维物体的边缘检测方法,包括:
对于构成三维物体的每条三角形边,将对应的两条法线的单位向量分别与视线反
方向的单位向量进行点积运算,根据点积运算结果的正负性,确定该条边是否为三维物体
的边缘线段;所述两条法线为共享该条边的两个三角形的法线;
对所述边缘线段进行绘制,得到所述三维物体的边缘。
综上所述,本发明提出的三维物体的边缘检测方法,利用共享边缘线段的两个三
角形的法线单位向量分别与视线反方向的单位向量的点积运算结果的正负性,来筛选出三
维物体的边缘线段。如此,仅需要一次渲染即可标识出三维物体的边缘,从而可以大幅度提
高边缘检测的效率。
附图说明
图1为本发明实施例的方法流程示意图;
图2为共享边缘线段的两邻接三角形的法向量与视线向量的关系示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对
本发明作进一步地详细描述。
本发明的核心思想是:考虑到三维物体的基本渲染单元是三角形,可以利用共享
边缘线段的相邻三角形之间的特性,来筛选出边缘线段,即对于构成三维物体的每条三角
形的边,根据共享该条边的两三角形的法线的单位向量分别与视线反方向单位向量的点积
结果的正负性,来确定该条边是否为三维物体的边缘线段,绘制出所有边缘线段即可渲染
得到三维物体的边缘。如此,可以大幅度减少渲染次数,提高边缘检测效率。
图1为本发明实施例一的流程示意图,如图1所示,该实施例实现的三维物体的边
缘检测方法包括:
步骤101、对于构成三维物体的每条三角形边,将对应的两条法线的单位向量分别
与视线反方向的单位向量进行点积运算,根据点积运算结果的正负性,确定该条边是否为
三维物体的边缘线段;所述两条法线为共享该条边的两个三角形的法线。
本步骤中,利用共享边缘线段的相邻三角形之间的特性,来识别出三维物体的边
缘线段,如此,可以避免传统方案中多次渲染对边缘检测效率的不利影响,大幅度提高了边
缘渲染效率。
较佳地,可以采用下述方法来确定一条三角形边是否为三维物体的边缘线段包
括:
如果所述两条法线分别对应的所述点积运算结果的正负符号相反,则确定该条边
为三维物体的边缘线段。
在上述方法中,利用了共享边缘线段的两个三角形的法线单位向量分别与视线反
方向的单位向量的点积运算结果的正负符号互异的特点,可以快速识别出属于边缘线段的
三角形边。
图2为共享边缘线段的两邻接三角形的法向量与视线向量的关系示意图,如图2所
示,如果视线反方向单位向量(-V)与三角形单位法向量n1之间的点乘结果、向量(-V)与三
角形单位法向量n2之间的点乘结果两者的正负符号相反,则这两个三角形的共享边为组成
三维物体边界的一部分。
步骤102、在几何着色器中,对所述边缘线段进行绘制,得到所述三维物体的边缘。
本步骤中,只需要把步骤101中检测出来的所有边缘线段进行重新绘制,即可标识
出三维物体的边缘,较佳地,为了突出边缘,可以采用一些特殊的绘制方式,如使用与三维
物体其他部分不同的渲染色彩对这些线段进行绘制,达到突出绘制的效果。
较佳地,为了进一步提高图形渲染效率,可以通过图形处理器(GPU)的几何着色器
执行本发明。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的
保护范围之内。