当前位置: 首页 > 专利查询>天津大学专利>正文

用于三维射线跟踪的场景模型快速三角化方法技术

技术编号:14894816 阅读:38 留言:0更新日期:2017-03-29 10:06
本发明专利技术属于计算机图形技术领域,为在不影响射线跟踪程序精度的前提下,提高场景模型三角化运算速度,减少三角数目,从而提高射线跟踪程序的整体效率。本发明专利技术采用的技术方案是,用于三维射线跟踪的场景模型快速三角化方法,步骤如下:(1)得到涵盖全部图形信息字符串;(2)从字符串中提取底面多边形、高度、顶点坐标信息;(3)对于每个物体对象,定义为DXF_Face类;(4)对每个面分别利用多边形三角化算法实现三角化;(5)利用opengl的绘图函数在窗口中展示三角化显示效果。本发明专利技术主要应用于计算机图形处理。

【技术实现步骤摘要】

本专利技术属于计算机图形
,具体应用于简单三维场景的三角化射线跟踪程序。
技术介绍
现今最常用的三角化算法为劳德内三角化算法,但此算法并非专门针对多边形的三角化,三角数量较多,更适合应用于较复杂场景。对于三角化射线跟踪,场景模型一般较为简单,多为直棱柱体,且常常采用CAD图形文件存储。因此采用分层的数据结构储存和管理图形单元较为方便。一般是将整个模型划分为物体对象,然后进一步划分为面元,每个面元为单个多边形。因此二维任意多边形的三角化是问题的关键。而对于凹点的处理是难点。比较常见的多边形三角化方法有多边形分割法,使得分割后的每个多边形都为凸多边形,但分割多边形算法一般较复杂,对于简单模型。在不需进行多边形分割的三角化算法中,有一种迭代消点法较为常用,每次找出一个凸点,使得此凸点与相邻两点组成的三角形不包含多边形的任何其他顶点。此方法能够较快的对任意多边形正确划分三角。
技术实现思路
为克服现有技术的不足,本专利技术目的是,在不影响射线跟踪程序精度的前提下,提高场景模型三角化运算速度,减少三角数目,从而提高射线跟踪程序的整体效率。本专利技术采用的技术方案是,用于三维射线跟踪的场景模型快速三角化方法,对于待三角化的三维场景模型,从读取文件到完成三角化,分为五个步骤:(1)利用文件流读取计算机辅助设计CAD图形dxf文件,得到涵盖全部图形信息字符串;(2)从字符串中提取底面多边形、高度、顶点坐标信息,构建物体对象,定义为DXF_Obj类;(3)对于每个物体对象,按照顶点共面原则构建面对象,定义为DXF_Face类;(4)对每个面分别利用多边形三角化算法实现三角化,存储为有向三角对象,定义为Triangle类;三角形由定义为Point类更基本的点和定义为Vector的向量构成;(5)利用opengl的绘图函数在窗口中展示三角化显示效果。利用多边形三角化算法实现三角化具体步骤是,每次找出循环链表中合适的凸点,该凸点与相邻点组成三角,记录后在循环链表中删除该凸点,组成新的多边形,重复此过程,直至多边形为凸的或三角形;进一步地,每次找出循环链表中合适的凸点是找出多边形顶点中出现的至少有两个的连续凹点,如果存在连续凹点,则找出连续凹点数量最多的凹点组,定位到凹点组最外侧的凸点,划分三角并从链表中删除该凸点;如果不存在连续凹点,则定位到任意凹点旁的凸点,划分三角并从链表中删除该凸点。本专利技术的特点及有益效果是:与现有多边形三角化算法相比,本专利技术具有以下优点和有益效果:该方法减少了循环迭代次数,能够更快地从场景模型中提取出适合射线跟踪计算的数据结构。在不损失运算正确性的前提下减低了时间复杂度。该改进三角化方法更适合于应用在实际的射线跟踪计算问题上。附图说明:图1为室内场景三角化模型举例截图;图2为常用的多边形三角化流程图;图3为改进的的多边形三角化流程图;图4为常用的多边形三角化结果举例;图5为改进的的多边形三角化结果举例。具体实施方式针对已有算法中的上述问题,本专利技术提出了一种适用于三维射线跟踪的场景模型三角化方法。先将场景模型从三维CAD模型中提取,转化成自定义的“物体”数据结构;再将每个物体划分成用循环链表表示的面元(多边形)数据结构。这样问题就转化为二维任意多边形的三角化的实现方法了。与现有的常用迭代消点法类似,此处的方法也是每次找出循环链表中合适的凸点,该凸点与相邻点组成三角,记录后在循环链表中删除该凸点,组成新的多边形。重复此过程,直至多边形为凸的或三角形。为了便于后续的说明,这里首先给出一些基本概念的定义。(1)凸点的剩余顶点:当前多边形顶点中,除了该凸点及其相邻两点外的其余顶点。(2)内部三角形:由多边形三个顶点连接而成的三角形,且不超出多边形边界。(3)外部三角形:由多边形三个顶点连接而成的三角形,但超出多边形边界。(4)相交三角形:由多边形三个顶点连接而成的三角形,且与多边形边界相交,或与其他已划分的三角相交。(5)连续凹点:多边形顶点中出现至少两个相邻的凹点。与现有方法所不同的是,本方法对凸点选取准则做了简化。原方法需先找出每个凸点的剩余顶点,然后对每个剩余顶点做“剩余顶点是否在三角内”的判断,这样可以避免出现外部三角形和相交三角形。而新方法只需找出连续凹点,即找出多边形顶点中出现的至少有两个的连续凹点。如果存在连续凹点,则找出连续凹点数量最多的凹点组,定位到凹点组最外侧的凸点,划分三角并从链表中删除该凸点;如果不存在连续凹点,则定位到任意凹点旁的凸点,划分三角并从链表中删除该凸点。这样可以避免在划分的三角形中包含连续凹点,即外部三角形。从划分三角的效果来看,原方法能够避免外部三角形和相交三角形,新方法仅能够避免外部三角形。从主要循环层数上看,后一种方法使得循环层数由两层减为一层,效率提高。这里要说明的是,虽然新方法不能保证对一些个别多边形进行无相交的分割,但这对于较小场景的射线跟踪程序无影响。这是因为射线跟踪模型中,凹点较多的多边形大多出现在建筑的顶面,三角法向量朝上,在相交测试运算过程中不予考虑;而且由于实际过程中还要对三角进行遮挡判断,相交三角形的出现是被允许的。下面将结合附图以及具体实施方式,对本专利技术做进一步描述:以下结合一个室内场景的具体实例,使用VisualStudio2010作为开发平台,利用C#语言和opengl库进行了三角化算法的实现和展示。对于待三角化的三维场景模型,这里以最常用的三维CAD图形(.dxf文件)为例进行说明。从读取文件到完成三角化,大体分为五个步骤:(1)利用文件流读取dxf文件,得到字符串(涵盖全部图形信息);(2)从字符串中提取底面多边形、高度、顶点坐标等信息,构建物体对象(定义为DXF_Obj类);(3)对于每个物体对象,按照顶点共面原则构建面对象(定义为DXF_Face类);(4)对每个面分别利用多边形三角化算法实现三角化,存储为有向三角对象(定义为Triangle类),三角形由更基本的点(定义为Point类)和向量(定义为Vector)构成;(5)利用opengl的绘图函数在窗口中展示三角化显示效果。图1是某教学楼室内场景三角化效果图。图2和图3是多边形三角化算法的完整流程。图2给出的是现今常用的多边形三角化算法,能够对任意凹多边形三角化,结果中不存在外部三角形和相交三角形,但由于存在两个循环,执行速度较慢;图3给出的改进多边形三角化算法,能够对大多数多边形正确完成三角化,但对于一些凹点较深的多边形,可能会出现相交三角形,不过由于循环层数减为一层,执行效率比较高。由于射线跟踪的遮挡测试可以避免相交三角形的重复计算,改进算法并不会影响最终结果。图4和图5是针对同一个多边形,分别利用两种算法实现三角化的效果图。利用定时器计时,对此图形执行100万次三角化过程,两种算法的执行时间分别是7分22秒和2分4秒。本文档来自技高网...

【技术保护点】
一种用于三维射线跟踪的场景模型快速三角化方法,其特征是,对于待三角化的三维场景模型,从读取文件到完成三角化,分为五个步骤:(1)利用文件流读取计算机辅助设计CAD图形dxf文件,得到涵盖全部图形信息字符串;(2)从字符串中提取底面多边形、高度、顶点坐标信息,构建物体对象,定义为DXF_Obj类;(3)对于每个物体对象,按照顶点共面原则构建面对象,定义为DXF_Face类;(4)对每个面分别利用多边形三角化算法实现三角化,存储为有向三角对象,定义为Triangle类;三角形由定义为Point类更基本的点和定义为Vector的向量构成;(5)利用opengl的绘图函数在窗口中展示三角化显示效果。

【技术特征摘要】
1.一种用于三维射线跟踪的场景模型快速三角化方法,其特征是,对于待三角化的三维场景模型,从读取文件到完成三角化,分为五个步骤:(1)利用文件流读取计算机辅助设计CAD图形dxf文件,得到涵盖全部图形信息字符串;(2)从字符串中提取底面多边形、高度、顶点坐标信息,构建物体对象,定义为DXF_Obj类;(3)对于每个物体对象,按照顶点共面原则构建面对象,定义为DXF_Face类;(4)对每个面分别利用多边形三角化算法实现三角化,存储为有向三角对象,定义为Triangle类;三角形由定义为Point类更基本的点和定义为Vector的向量构成;(5)利用open...

【专利技术属性】
技术研发人员:任叶童吕辰刚杨晋生陈为刚
申请(专利权)人:天津大学
类型:发明
国别省市:天津;12

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1