基于扫描射线的3D场景裁剪方法技术

技术编号:7662736 阅读:367 留言:0更新日期:2012-08-09 07:20
本发明专利技术提供一种基于扫描射线的3D场景裁剪方法,其是针对3D场景中场景模型建立一个射线检测体,该射线检测体尽可能包裹住场景模型;建立每个射线检测体与对应场景模型的映射关系;根据场景摄像机当前的坐标与朝向,建立一个均匀分布于场景摄像机视锥内的射线簇,射线簇内每条射线长度不小于摄像机远裁剪面的长度;在当前帧,按一定顺序遍历射线簇中的每一条射线,对射线检测体进行相交检测,如果某个射线检测体被射线命中,则将该射线检测体存放于容器中,遍历容器中的每一个射线检测体,则根据所述映射关系找到该射线检测体对应的场景模型,对场景模型进行渲染。本发明专利技术在运行期通过射线检测体替代场景模型进行快速射线扫描,适用于各种3D场景管理。

【技术实现步骤摘要】
基于扫描射线的3D场景裁剪方法
本专利技术涉及一种3D场景实时渲染时的裁剪方法,主要通过对场景中的模型进行快速射线扫描检测,解决3D场景模型的可见性判断问题。
技术介绍
3D场景是由一定数量的场景模型构成,如何很好地表示出包含着成千上万物体的复杂场景,因此需要场景管理,给场景提供良好的层次关系,以便更好地进行筛选(Culling)和隐藏面消除(Hidden surface removal)。场景管理涉及到可视性处理(Visibility processing)和碰撞检测(Collision detection),系统需要判断场景的哪些部分在视见约束体之内。目前对3D场景组织管理的成熟技术方案主要包括BSP (BinarySpace Partioning trees)、Portal、四叉树、八叉树等。这些技术要求在场景制作期对场景进行空间分割,过程复杂。除Portal技术外,其他技术无法有效地处理空间遮挡关系,但Portal技术在开放式室外3D场景管理领域并不适用。对复杂的大型3D场景进行实时渲染,要求有一个高效的3D场景裁剪单元,裁减的目的是尽可能减少需要渲染的场景模型数量,来降低图形渲染压力,提高程序的运行效率。
技术实现思路
本专利技术要解决的技术问题,在于提供一种基于扫描射线的3D场景裁剪方法,在运行期通过射线检测体替代场景模型进行快速射线扫描,有效解决了场景模型的可见性判断问题,并且不受3D场景布局方式的限制,适用于绝大多数的室内、室外3D场景管理。本专利技术是这样实现的一种基于扫描射线的3D场景裁剪方法,包括如下步骤步骤10、建立原始3D场景,该3D场景由多个场景模型构成;步骤20、针对每个场景模型建立一个射线检测体,该射线检测体是尽可能包裹住场景模型的几何体;步骤30、建立每个射线检测体与对应场景模型的映射关系;步骤40、根据场景摄像机当前的坐标与朝向,建立一个均匀分布于场景摄像机视锥内的射线簇,射线簇内每条射线长度不小于摄像机远裁剪面的长度;步骤50、在当前帧,按一定顺序遍历射线簇中的每一条射线,对射线检测体进行相交检测,如果某个射线检测体被射线命中,则将该射线检测体存放于容器中,并针对该射线检测体标记当前时刻,此时当前时刻为初始值,记为to ;同时规定这个射线检测体在一激活周期内都不从容器中主动移除,该激活周期记为T,如果被命中的检测体早已经存在于容器中,则更新to值为最后一次命中的当前时刻;步骤60、遍历容器中的每一个射线检测体,如果当前时刻t < to+τ,则根据所述映射关系找到该射线检测体对应的场景模型,对场景模型进行渲染;如果当前时刻t > =to+T,则认为该射线检测体激活寿命超时,将该射线检测体从容器中移除;步骤70、在下一帧,将射线簇向一预定方向偏移一定角度进行扫描;;步骤80、重复步骤50到70,直到最右侧的射线的达到视锥右边界时结束。其中,所述射线检测体形状的复杂度是随检测精度、检测效率的提高而提高。其中,所述射线检测体的形状可以是球形、AABB包围盒、或OBB包围盒。其中,所述步骤30建立每个射线检测体与对应场景模型的映射关系是使用哈希表来建立,哈希表的键是每个射线检测体的内存地址,值是场景模型的内存地址或者是场景模型的文件路径。其中,所述步骤70射线簇进行扫描时是采用逐行扫描或逐列扫描的方式进行本专利技术具有如下优点在运 行期通过射线检测体替代场景模型进行快速射线扫描,能够有效的处理场景模型之间的遮挡关系,制作期不需对模型空间进行分割,从而有效解决了场景模型的可见性判断问题,并且不受3D场景布局方式的限制,适用于绝大多数的室内、室外3D场景管理。附图说明下面参照附图结合实施例对本专利技术作进一步的说明。图I为本专利技术方法的流程框图。图2为本专利技术方法建立的一原始3D场景示意图。图3为本专利技术针对图I中原始3D场景的每个场景模型建立一个射线检测体示意图。图4为本专利技术射线簇扫描状态示意图。图5为本专利技术射线簇逐行扫描过程原理示意图。具体实施方式请参阅图I至图5所示,本专利技术提供一种基于扫描射线的3D场景裁剪方法,包括如下步骤步骤10、建立原始3D场景,如图2所示,该3D场景由多个场景模型构成。步骤20、针对每个场景模型建立一个射线检测体,如图3所示,该射线检测体是尽可能包裹住场景模型的几何体,但应尽可能简单;所述射线检测体形状的复杂度是随检测精度、检测效率的提高而提高。在实际使用过程中,根据应用需求和程序运行环境不同,该几何体的形状可以是球形、AABB包围盒、或OBB包围盒,在程序中可使用数学模型表述,如球方程、椭球方程或由多个平面方程描述的多面体;也可使用一簇顶点,借助DirectX (Direct extension,简称 DX)或 OpenGL (Open Graphics Library)等图形库构造成为一个模型。其中DirectX是由微软公司创建的多媒体编程接口,旨在使基于windows的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D动画和丰富音频)的应用程序的理想平台。应用程序可以通过使用DirectX API来访问这些功能。OpenGL是一个专业的图形程序接口,是一个功能强大,调用方便的底层图形库,是一个与硬件无关的软件接口,可以在不同的平台如Windows、Unix、Linux、Mac0S、0S/2之间进行移植。应用程序可使用DirectX和OpenGL的API来进行图形的绘制和模型的渲染。步骤30、建立每个射线检测体与对应场景模型的映射关系,其映射关系可使用哈希表来建立,哈希表的键是每个射线检测体的内存地址,哈希表的值是场景模型的内存地址或者是场景模型的文件路径。步骤40、如图4所示,根据场景摄像机当前的坐标与朝向,建立一个均匀分布于场景摄像机视锥内的射线簇,射线簇内每条射线长度不小于摄像机远裁剪面的长度;所述场景摄像机是在3D场景中用于拍摄场景的虚拟摄像机。对同一个3D场景来说,通过调整摄像机的坐标,拍摄角度,最大拍摄距离等参数,可拍摄3D场景的不同部分,并得到不同的3D画面。DirectX和OpenGL均有对应的API来获得及设定虚拟摄像机。视锥是场景摄像机当前能拍摄的锥体范围。步骤50、在当前帧,按一定顺序遍历射线簇中的每一条射线,对射线检测体进行相交检测,如果某个射线检测体被射线命中,则将该射线检测体存放于容器中,并针对该射线 检测体标记当前时刻,此时当前时刻为初始值,记为to ;同时规定这个射线检测体在一激活周期内都不从容器中主动移除,该激活周期记为T,如果被命中的检测体早已经存在于容器中,则更新to值为最后一次命中的当前时刻;本专利技术的容器是程序设计中用于存储多个程序对象的存储结构,不同的编程语言提供不同的容器。例如在C/C++语言中,可使用一个数组来存放多个同类型的对象或基础类型变量,这个数组即称为容器;也可使用STL (标准模板库)中的诸如vector、Iist、hash_map等多种存储结构来存放同类型的程序对象,这些也称为容器。步骤60、遍历容器中的每一个射线检测体,如果当前时刻t < tO+T,则根据所述映射关系找到该射线检测体对应的场景模型,调用图形绘制引擎的API,对场景模型进行渲染;未在容器中的模型,不参加渲本文档来自技高网...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:罗丁
申请(专利权)人:福建天趣网络科技有限公司
类型:发明
国别省市:

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

1
相关领域技术
  • 暂无相关专利