CN110796742B - 一种基于面向对象的三维场景视锥体剔除方法 - Google Patents
一种基于面向对象的三维场景视锥体剔除方法 Download PDFInfo
- Publication number
- CN110796742B CN110796742B CN201911025011.4A CN201911025011A CN110796742B CN 110796742 B CN110796742 B CN 110796742B CN 201911025011 A CN201911025011 A CN 201911025011A CN 110796742 B CN110796742 B CN 110796742B
- Authority
- CN
- China
- Prior art keywords
- camera
- scene
- coordinate system
- cone
- dimensional
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/005—Tree description, e.g. octree, quadtree
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/61—Scene description
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2219/00—Indexing scheme for manipulating 3D models or images for computer graphics
- G06T2219/20—Indexing scheme for editing of 3D models
- G06T2219/2016—Rotation, translation, scaling
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Architecture (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种基于面向对象的三维场景视锥体剔除方法,包括:先解析三维场景相机,获得视锥几何信息;将场景内容由其所处世界坐标系通过刚性变换转换为相机空间坐标系,然后将转换后的内容以及相机视锥投影至相机坐标系X‑Z平面,结合其包围盒信息以及轻量化属性信息构建模型节点对象用以构建四叉树结构,其后根据视锥几何信息决定可视区域,最后通过奇偶射线法判断可视区域与模型节点对象的位置关系,如关系为包含或相交则通过相机宽高比对模型Y维做可视判断。本发明的方法,可实现三维场景及其模型加速绘制的效果,提高帧数,减少运算量,降低时间复杂度。
Description
技术领域
本发明属于图形学及三维模型渲染技术领域,特别涉及一种基于面向对象的三维场景视锥体剔除方法。
背景技术
随着WebGL绘图协议的出现,越来越多复杂的三维场景被渲染在Web应用中,这就导致计算机图像处理的压力很大;如要保证涉及复杂场景渲染的Web应用正常运行,就必须对其进行优化以减轻计算机的压力。在实际开发过程中,常使用Three.js、Cesium.js等开源框架便捷开发工作,该类框架将3D场景抽象为网格、相机、光源等元素,人类可以看到现实世界中的场景元素是由于光源照射到物体发生反射后进入人眼,但人眼能看到的内容是有限的,人眼的作用在WebGL中用相机的概念得以抽象体现。
相机在三维场景中的可见范围呈现为视锥体,视锥体类似棱台,当三维空间中物体位于六个面内或相交时,可见,反之不可见。计算机对于三维场景的渲染每秒钟绘制的次数愈多,场景便会越连贯,故减少每帧绘制的时间是计算机图形学中加速三维场景渲染的关键。
在现阶段涉及场景渲染的Web应用开发中,使用几何剖分技术对复杂场景进行管理,几何剖分技术能将场景中的几何物体组织成层次树,进而删除最终对渲染结果没有影响的场景节点及其整个分支,从而加快绘制速度。现阶段的应用常使用八叉树对三维场景进行管理,使用四叉树对地形场景进行管理,对场景使用视锥剔除。由于考虑内存,导致层次树节点内容一般仅存储视锥判断所需几何信息。
在三维场景中,使用八叉树对场景管理的过程中很难构建满八叉树,故而内存消耗较大,可能会有较多的叶子节点为空节点;同时在对其使用视锥剔除的过程中,需要将三维物体与视锥体的六个面进行6次数学运算的比对,时间复杂度较高实际效率较低,同时内存的过大损耗可能会导致应用卡死或崩溃;另外,由于场景渲染应用于Web中,对模型属性信息可能需要一定交互,但现阶段大多设计视锥剔除的算法很少会涉及模型属性。
综上,亟需一种基于面向对象的三维场景视锥体剔除方法。
发明内容
本发明的目的在于提供一种基于面向对象的三维场景视锥体剔除方法,以解决上述存在的一个或多个技术问题。本发明的方法中,可减少运算次数,提高方法的效率;降低剔除方法复杂度,提高内存的利用率,减少内存的损耗。
为达到上述目的,本发明采用以下技术方案:
本发明的一种基于面向对象的三维场景视锥体剔除方法,包括:
根据三维场景构建三维空间;所述三维空间包括:光源、相机、舞台、世界坐标系下场景元素以及相机坐标系;所述相机坐标系为XYZ笛卡尔坐标系,以相机视线方向为Z轴正方向,以相机向上的方向为Y轴正方向;
解析三维空间的相机数据,获取相机视锥顶点几何数据;
将世界坐标系下场景元素变换至相机坐标系,获得相机坐标系下场景元素;
将相机坐标系下的场景元素进行X-Z投影降维,构建节点对象;所述节点对象包括:场景元素的位置信息、包围盒信息以及轻量化后模型属性信息;所述轻量化后模型属性信息包括:场景元素的ID;
根据节点对象构建X-Z平面投影四叉树结构;
遍历X-Z平面投影四叉树结构,完成三维场景视锥体剔除。
本发明的进一步改进在于,解析三维空间的相机数据,获取相机视锥顶点几何数据的具体步骤包括:
通过相机几何特征求得相机视锥;
通过相机视锥确定相机视锥近视面与远视面宽高数据;
联立宽高数据与相机位置求得视锥顶点几何数据。
本发明的进一步改进在于,将世界坐标系下场景元素变换至相机坐标系,获得相机坐标系下场景元素的步骤具体包括:
变换场景元素内容至相机坐标系;
联立相机在世界坐标系与相机坐标系几何信息,解出三维空间所处世界坐标系调整至相机坐标系所需的旋转矩阵与平移矩阵;
将三维空间的坐标信息通过矩阵旋转与平移矩阵实现刚体变换,获得相机坐标系下场景元素。
本发明的进一步改进在于,
根据节点对象构建X-Z平面投影四叉树结构的步骤具体包括:
将相机坐标系下的场景元素进行X-Z平面投影,并构建包含投影后场景元素属性信息的节点对象,构建用于管理三维场景元素的四叉树结构,设置四叉树的深度属性与每个叶节点最多包含对象的个数,将节点对象插入四叉树中,插入完成后四叉树结构构建结束。
本发明的进一步改进在于,遍历X-Z平面投影四叉树结构,完成三维场景视锥体剔除的步骤具体包括:
确定裁剪区域;
遍历X-Z平面投影四叉树结构,使用射线法进行X-Z维剔除;根据视锥宽高比进行Y维剔除。
本发明的进一步改进在于,遍历X-Z平面投影四叉树结构,完成三维场景视锥体剔除的步骤具体包括:
(1.1)求得相机视锥在X-Z面投影的四个坐标点;
(1.2)对X-Z平面投影四叉树结构进行先序遍历,以步骤(1)求得的坐标组建等腰梯形可视区域,将投影后场景元素的包围盒左上、右下顶点可视区域使用奇偶射线法进行位置关系判断;
(1.3)如果位置关系为可见区域包含该包围盒或与包围盒相交,则进行步骤(4)的判断;否则,将节点对象与所有子节点直接置为不可见;
(1.4)取场景元素的在相机坐标系向上的坐标与视锥在当前位置向上的范围做几何位置判断,如大于范围最大值或小于范围最小值,则场景元素剔除,反之不剔除。
本发明的进一步改进在于,根据三维场景构建三维空间的具体步骤包括:(2.1)创建TH REE.Scene场景对象、远景相机THREE.PerspectiveCamera以及环境光源THREE.AmbientLight,并将相机与光源加入场景中;(2.2)将预加载的场景元素使用THREE.OBJMTLLoader遍历加载;(2.3)使用THREE.WebGLRenderer对场景与相机使用renderer.render(scene,camera)方法进行渲染。
与现有技术相比,本发明具有以下有益效果:
本发明的方法中,对三维场景的模型进行坐标空间转换以及投影降维,其后使用四叉树结构进行管理,将裁剪过程由六次数学运算减少为三次运算,可提高方法效率,降低复杂度,能够提高内存的利用率,减少内存的损耗。本发明将用于地形管理的四叉树结构扩展到对三维场景管理;将复杂的三维运算降维到二维运算,可大大减轻几何运算量,降低复杂度。由于八叉树对三维空间管理未必能构成满八叉树,本发明使用四叉树结构可以节省大量的内存消耗;将四叉树结构用于管理三维空间,对父节点的判断可以决定对其子节点的判断,减少了当父节点不可见子节点的判断量,提高了运算效率。本发明使用面向对象的概念,使得三维场景中模型可附带轻量化的属性数据,之于Web应用可减少其与后台交互,降低应用于模型的耦合度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面对实施例或现有技术描述中所需要使用的附图做简单的介绍;显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的一种基于面向对象的三维场景视锥体剔除方法的流程示意框图;
图2是本发明实施例中,视锥体几何构造示意图;
图3是本发明实施例中,世界及相机坐标系关系示意图;
图4是本发明实施例中,四叉树结构及其意义示意图;其中,图4中的(a)为结构示意图,图4中的(b)为意义示意图;
图5是本发明实施例中,奇偶射线法示意图;
图6是本发明实施例中,X-Z平面剔除示意图;
图7是本发明实施例中,奇偶射线法特殊情况示意图;
图2中fov为相机水平夹角,NLT为近视面左上点,NRT为近视面右上点,NLB为近视面左下点,NRB为近视面右下点,FLT为远视面左上点,FRT为远视面右上点,FLB为远视面左下点,FRB为远视面右下点,height为远视面的高,width为远视面的宽。
具体实施方式
为使本发明实施例的目的、技术效果及技术方案更加清楚,下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述;显然,所描述的实施例是本发明一部分实施例。基于本发明公开的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的其它实施例,都应属于本发明保护的范围。
本发明实施例的一种基于面向对象的三维场景视锥体剔除方法,首先将三维场景元素由其所处的世界坐标系变换为相机空间坐标系;其后对相机坐标系下场景元素以及相机视锥进行相机空间坐标系X-Z方向投影,综合场景元素自身的几何信息以及轻量化后属性信息构建四叉树节点对象,使用节点对象构建四叉树,最后对X-Z面进行一次裁剪,若场景元素可见,则根据相机的宽高比以及模型坐标信息对模型进行第三维可见性判断。
本发明实施例的一种基于面向对象的三维场景视锥体剔除方法,具体实现步骤如下:
一、相机数据分析
(1a)解析Camera相机对象,获取Frustum视锥体对象几何信息,存储备用;
(1b)解析Frustum视锥体对象,获取视锥体在相机坐标系下八个顶点的顶点坐标信息,存储备用。
二、三维物体空间坐标系转换
(2a)求得三维模型所处世界坐标系调整至相机坐标系所需的旋转矩阵R与平移矩阵T,并存储备用;
(2b)将三维模型的坐标信息通过矩阵旋转与平移刚体变换,求得其在相机坐标系中的坐标,并存储备用。
三、构建平面四叉树
(3a)计算求得场景元素的包围盒信息,使用(2b)中三维模型的坐标信息、包围盒信息以及轻量化后模型属性信息构建四叉树节点对象;
(3b)建立四叉树结构,将步骤(3a)中的节点对象存入四叉树结构中,建立基于X-Z平面投影四叉树结构。
四、降维裁剪
(4a)求得相机视锥在X-Z面投影的四个坐标点;
(4b)对步骤(3b)四叉树结构进行先序遍历,以步骤(4a)求得的坐标组建等腰梯形可视区域,将物体的包围盒左上(max)、右下(min)顶点可视区域使用奇偶射线法进行位置关系判断;
(4c)如位置关系为可见区域包含该包围盒或与包围盒相交,则进行步骤(4d)的判断,否则,将节点对象与所有子节点直接置为不可见,剔除;
(4d)取场景元素的在相机坐标系向上的坐标与视锥在当前位置向上的范围做几何位置判断,如大于范围最大值或小于范围最小值,则场景元素剔除,反之不剔除,可见。
综上,本发明相比目前三维空间场景的视锥体裁剪算法,具有以下积极效果:将用于地形管理的四叉树结构扩展到对三维场景管理;将复杂的三维运算降维到二维运算,大大减轻了几何运算量,降低了复杂度;由于八叉树对三维空间管理未必能构成满八叉树,总体来说使用四叉树结构可以节省大量的内存消耗;将四叉树结构用于管理三维空间,对父节点的判断可以决定对其子节点的判断,减少了当父节点不可见子节点的判断量,提高了运算效率;使用面向对象的概念,使得三维场景中模型可附带轻量化的属性数据,之于Web应用可减少其与后台交互,降低应用于模型的耦合度。
请参阅图1至图7,本发明实施例提供了一种基于面向对象的三维场景视锥体剔除方法,本发明的方法使用四叉树对三维场景及其模型进行管理,可减少视锥剔除运算量,降低三维场景管理的内存消耗;能够加快裁剪速度,减轻GPU的压力,降低时间复杂度;场景管理中附带了模型轻量化的属性信息,降低Web应用与后台程序的耦合度。
如图1所示,本发明实施例以Three.js为应用场景,其他开源框架同样适用,具体步骤如下:
步骤一:相机数据分析,包括步骤1.1与1.2。
步骤1.1:解析Camera相机对象,获取Frustum相机视锥对象信息,存储视锥体对象用于步骤1.2;
步骤1.2:解析Frustum对象,获取视锥体在相机坐标系下的八个顶点几何坐标,存储备用,相机视锥及其几何属性如图2;
所述步骤一中相机为PerspectiveCamera远景相机,在Three.js中其定义方式为THREE.PerspectiveCamera(fov,aspect,near,far),其中fov指相机视锥体垂直视角,aspect指相机视锥体宽高比,near指相机视锥近裁剪面,far指相机视锥远裁剪面。
所述步骤1.1中,相机的可视范围为视锥,类似棱台,在Three.js中定义为THREE.Frustum对象,用于三维场景视锥剔除,其几何本质为六个面构成的棱台,在Three.js中定义为THREE.Plane对象;使用相机的投影矩阵与世界矩阵的逆矩阵的叉乘,求出视锥体在近视面的投影矩阵,在Three.js中使用THREE.Matrix4类中multiplyMatrices方法对camera.projectionMatrix与camera.matrixWorldInverse求叉乘,其后使用THREE.Frustum自带的setFromMatrix方法,使用上述求出的投影矩阵作为参数传入获取所需视锥体对象。
所述步骤1.2中,以相机视锥的相机位置做与视锥体的远近截面相交的法线,该点到远近截面的距离已知,相机水平张角fov已知,相机视锥体的宽高比aspect已知,故求得远近界面的宽度与高度分别为:
近截面的宽度WidthNear=hNear×camera.aspect;
远截面的宽度WidthFar=hFar×camera.aspect;
根据所求高度与宽度求八个顶点的坐标,视锥近视面及远视面的左坐标分别为:
步骤二:三维物体空间坐标系转换,包括步骤2.1与2.2。
步骤2.1:求得三维模型所处世界坐标系调整至相机坐标系所需的旋转矩阵R与平移矩阵T,并存储备用,坐标系关系如图3所示;
步骤2.2:将三维模型的坐标信息通过矩阵旋转与平移矩阵实现刚体变换,求得其在相机坐标系中的坐标,并存储备用。
所述步骤二世界坐标系指的是三维场景的绝对坐标系,相机等元素由该坐标系决定自身位置;相机坐标系是指以相机位置以及视线方向的反方向为Z轴正方向,以相机向上的方向所处的轴为Y轴正方向形成的独立于世界坐标系的相机坐标系。
所述步骤2.1中,从世界坐标系转换为相机坐标系属于刚体变换,只需要进行平移和旋转即可,使得原本决定三维空间物体位置的指标由世界坐标系转变为相机坐标系,世界坐标原点到相机的位置假设此时相机的位置为(cx,cy,cz),则此时平移矩阵在三维空间,坐标旋转实际上分别以X、Y、Z轴为旋转轴旋转3次即可达到需要的效果,以Z轴为旋转轴为例,假设此时需要旋转的角度为θ,则设旋转后的坐标向量为旋转前的坐标为则此时设同理可得以X轴为旋转轴,旋转β,以Y轴为旋转轴,旋转γ可得, 同上可得 故旋转矩阵R=RxRyRz;求解完毕后,将其存在全局变量中备用。
所述步骤2.2中,在使用Three.js开发的过程中,实际场景模型及元素都存储在THREE.Scene场景对象的Children数组中,如对场景模型进行坐标变换则实际是对场景对象Children数组内容进行变换即可,通过步骤2.1中计算所得的平移矩阵T与旋转矩阵R即可得到,将变换后的结果存储在全局变量中备用。
进一步地,三维场景中绘制的模型格式可能为Obj等,在Three.js中,本质为THREE.Mesh对象,其geometry属性包含模型的AABB包围盒boundingBox信息,其position即为其在世界坐标系所处位置;
步骤三:构建平面四叉树,包含步骤3.1与3.2。
步骤3.1:计算求得三维物体的AABB包围盒信息,使用步骤2.1中三维模型的坐标信息、包围盒信息以及轻量化后模型属性信息构建四叉树节点对象;
步骤3.2:建立四叉树结构,将步骤3.1中的节点对象存入四叉树结构中,建立基于相机坐标系X-Z平面投影四叉树结构,四叉树及其意义如图4所示。
所述步骤三中,AABB包围盒为三维空间集合体的近似几何体的最大与最小三维坐标,以此简化异形几何体为长方体,在X-Z平面投影后的形状为矩形,该矩形由包围盒最大x坐标、z坐标以及最小x坐标与z坐标构成。
进一步地,在Three.js中,包围盒内容为:
boundingBox:{
max:(x,y,z);//最大坐标
min:(x,y,z);//最小坐标
}
包围盒的本质是场景模型的简化模型,为减少计算压力,本发明将模型的位置定义为包围盒的质心。
所述步骤3.1中四叉树将三维空间场景中的物体存储在叶子节点对象中,所有的父节点至不做存储,假设此时有一模型对象为obj作为四叉树的叶子节点boundingBox为包围盒对象,
position为物体的位置信息其包含三维坐标信息,其结构为:
Node={x:obj.position.x,//obj在相机坐标系中的x坐标
y:obj.position.y,//obj在相机坐标系中的y坐标
z:obj.position.z,//obj在相机坐标系中的z坐标
width:|boundingBox:obj.geometry.boundingBox.max.x-
boundingBox:obj.geometry.boundingBox.min.x|,//包围盒投影的宽
height:|boundingBox:obj.geometry.boundingBox.max.z-
boundingBox:obj.geometry.boundingBox.min.z|,//包围盒投影的长
NodeInfo:{}//此处存储模型的属性信息
}
其中,x、y、z为obj的坐标即在三维场景中的位置,当然在此处为包围盒的质心,width、height为AABB包围盒投影后的矩形长与宽。
所述步骤3.2中四叉树构建过程:首先将平面以原点为基点拆分为四份即四个象限,此时四个象限极为四个叶子节点,当某象限中物体数超过1个,则以该象限的中心点为基点继续进行拆分,以此类推,直到所有的拆分结果中只包含1个物体或达到最大深度为止,因为根据深度的设置可能当四叉树拆分到达最大深度的时候一个节点中可能包含两个以上孩子节点,故在本发明使用的四叉树结构仅设置四叉树的深度不对叶节点包含的对象的阈值做限制。
步骤四:降维裁剪,包含步骤4.1、4.2、4.3与4.4。
步骤4.1:求得相机视锥在X-Z面投影的四个坐标点;
步骤4.2:对步骤3.2中构建的四叉树结构使用先序遍历,以步骤4.1中求得的坐标组建等腰梯形可视区域,将物体的包围盒左上、右下顶点可视区域使用奇偶射线法进行位置关系判断,奇偶射线法示意如图5;
步骤4.3:如位置关系为可见区域包含该包围盒或与包围盒相交,则进行步骤4.4的判断,否则,将节点对象与所有子节点直接置为不可见,判断过程示意如图6;
步骤4.4:取物体的在相机坐标系向上的坐标与视锥在当前位置向上的范围做几何位置判断,如大于范围最大值或小于范围最小值,则物体不可见,反之,可见。
所述步骤4.1中视锥体八个坐标顶点在步骤1.2求得,确定可视范围只需要用到远视面的左上、右上以及近视面的左上、右上坐标点的X值和Z值,该可视范围为等腰梯形;
所述步骤4.2根据步骤4.1中的4个点构建等腰梯形即为可见区域的X-Z面投影,使用奇偶射线法对X-Z平面进行可见性剔除,仅使用包围盒左上和右下顶点与该区域进行几何位置判断即可决定节点对象与其的位置关系。
进一步地,区域为闭合区间,从需要判断的坐标点向区间发射一条射线,若该射线与区域的交点个数为偶数个,则该坐标点位于区域外,若为奇数个,则位于区域内;当射线穿越多边形边界的次数为偶数时,所有第偶数次(包括最后一次)穿越都是穿出,因此所有第奇数次(包括第一次)穿越为穿入,由此可推断点在多边形外部;当射线穿越多边形边界的次数为奇数时,所有第奇数次(包括第一次和最后一次)穿越都是穿出,由此可推断点在多边形内部;当特殊情况,射线与几何面的顶点相交的时候或者射线与几何面的边重合的时候,只需遵循左闭右开的原则,即在射线左边的边与该射线相交时交点有效,应计数;而在射线右边的边与射线相交时交点无效,不计数,值得一提的是,顶点与射线的交点需计数为2个交点。如图7,点A与B分别于顶点相交,A与射线左边并无交点,故A位于几何面的外部;B与射线左侧有交点,则B与几何面交点为3个,故B在几何面内。
所述步骤4.3中使用包围盒投影左上与右下点,如两点都在区域外,则节点对象位于区域外,该节点对象对应的场景模型不可见;如两点之一位于区域内或都位于区域内,则节点对象对应的场景模型可见;本发明可拆分为两次可见性判断,本步骤为第一次可见性判断;若节点对象不可见,若该节点为父节点,则设置其所有子节点以及叶子节点对应的场景模型均不可见。
所述步骤4.4中,使用相机的宽高比计算当三维空间物体处于某Z坐标时的Y的范围,该范围为处于当前Z位置视锥的垂直高度,然后比对模型的Y坐标与该范围的大小关系,如大于该范围最大值或小于其最小值,则不可见,否则,可见;如质心的Y坐标不位于范围中,则模型在垂直维度可能与视锥相交,但此时相交内容较少,故置为不可见。
进一步地,设置模型不可见,则使用THREE.Mesh类中的visible属性即可,当该属性为true,则将模型送入GPU渲染队列,模型即可见,当该属性为false,则将模型不送入GPU渲染队列,模型则不可见。
本发明上述实施例提供了一种基于面向对象的三维场景视锥体剔除方法,先解析三维场景相机,获得视锥几何信息,将场景内容由其所处世界坐标系通过刚性变换转换为相机空间坐标系,然后将转换后的内容以及相机视锥投影至相机坐标系X-Z平面,结合其包围盒信息以及轻量化属性信息构建模型节点对象用以构建四叉树结构,其后根据视锥几何信息决定可视区域,最后通过奇偶射线法判断可视区域与模型节点对象的位置关系,如关系为包含或相交则通过相机宽高比对模型Y维做可视判断。本发明可实现三维场景及其模型加速绘制的效果,提高帧数,减少运算量,降低时间复杂度。
以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员依然可以对本发明的具体实施方式进行修改或者等同替换,这些未脱离本发明精神和范围的任何修改或者等同替换,均在申请待批的本发明的权利要求保护范围之内。
Claims (7)
1.一种基于面向对象的三维场景视锥体剔除方法,其特征在于,包括:
根据三维场景构建三维空间;所述三维空间包括:光源、相机、舞台、世界坐标系下场景元素以及相机坐标系;所述相机坐标系为XYZ笛卡尔坐标系,以相机视线方向为Z轴正方向,以相机向上的方向为Y轴正方向;
解析三维空间的相机数据,获取相机视锥顶点几何数据;
将世界坐标系下场景元素变换至相机坐标系,获得相机坐标系下场景元素;
将相机坐标系下的场景元素进行X-Z投影降维,构建节点对象;所述节点对象包括:场景元素的位置信息、包围盒信息以及轻量化后模型属性信息;所述轻量化后模型属性信息包括:场景元素的ID;
根据节点对象构建X-Z平面投影四叉树结构;
遍历X-Z平面投影四叉树结构,完成三维场景视锥体剔除。
2.根据权利要求1所述的一种基于面向对象的三维场景视锥体剔除方法,其特征在于,解析三维空间的相机数据,获取相机视锥顶点几何数据的具体步骤包括:
通过相机几何特征求得相机视锥;
通过相机视锥确定相机视锥近视面与远视面宽高数据;
联立宽高数据与相机位置求得视锥顶点几何数据。
3.根据权利要求1所述的一种基于面向对象的三维场景视锥体剔除方法,其特征在于,将世界坐标系下场景元素变换至相机坐标系,获得相机坐标系下场景元素的步骤具体包括:
变换场景元素内容至相机坐标系;
联立相机在世界坐标系与相机坐标系几何信息,解出三维空间所处世界坐标系调整至相机坐标系所需的旋转矩阵与平移矩阵;
将三维空间的坐标信息通过矩阵旋转与平移矩阵实现刚体变换,获得相机坐标系下场景元素。
4.根据权利要求1所述的一种基于面向对象的三维场景视锥体剔除方法,其特征在于,
根据节点对象构建X-Z平面投影四叉树结构的步骤具体包括:
将相机坐标系下的场景元素进行X-Z平面投影,并构建包含投影后场景元素属性信息的节点对象;构建用于管理三维场景元素的四叉树结构;设置四叉树的深度属性与每个叶节点最多包含对象的个数;将节点对象插入四叉树中。
5.根据权利要求1所述的一种基于面向对象的三维场景视锥体剔除方法,其特征在于,遍历X-Z平面投影四叉树结构,完成三维场景视锥体剔除的步骤具体包括:
确定裁剪区域;
遍历X-Z平面投影四叉树结构,使用射线法进行X-Z维剔除;根据视锥宽高比进行Y维剔除。
6.根据权利要求1所述的一种基于面向对象的三维场景视锥体剔除方法,其特征在于,遍历X-Z平面投影四叉树结构,完成三维场景视锥体剔除的步骤具体包括:
(1.1)求得相机视锥在X-Z面投影的四个坐标点;
(1.2)对X-Z平面投影四叉树结构进行先序遍历,以步骤(1)求得的坐标组建等腰梯形可视区域,将投影后场景元素的包围盒左上、右下顶点可视区域使用奇偶射线法进行位置关系判断;
(1.3)如果位置关系为可见区域包含该包围盒或与包围盒相交,则进行步骤(4)的判断;否则,将节点对象与所有子节点直接置为不可见;
(1.4)取场景元素的在相机坐标系向上的坐标与视锥在当前位置向上的范围做几何位置判断,如大于范围最大值或小于范围最小值,则场景元素剔除,反之不剔除。
7.根据权利要求1所述的一种基于面向对象的三维场景视锥体剔除方法,其特征在于,根据三维场景构建三维空间的具体步骤包括:
(2.1)创建THREE.Scene场景对象、远景相机THREE.PerspectiveCamera以及环境光源THREE.AmbientLight,并将相机与光源加入场景中;
(2.2)将预加载的场景元素使用THREE.OBJMTLLoader遍历加载;
(2.3)使用THREE.WebGLRenderer对场景与相机使用renderer.render(scene,camera)方法进行渲染。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911025011.4A CN110796742B (zh) | 2019-10-25 | 2019-10-25 | 一种基于面向对象的三维场景视锥体剔除方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911025011.4A CN110796742B (zh) | 2019-10-25 | 2019-10-25 | 一种基于面向对象的三维场景视锥体剔除方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110796742A CN110796742A (zh) | 2020-02-14 |
CN110796742B true CN110796742B (zh) | 2023-03-14 |
Family
ID=69441351
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911025011.4A Active CN110796742B (zh) | 2019-10-25 | 2019-10-25 | 一种基于面向对象的三维场景视锥体剔除方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110796742B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111325783A (zh) * | 2020-02-19 | 2020-06-23 | 深圳震有科技股份有限公司 | 一种基于WebGIS的可视域分析方法及装置 |
CN111251335B (zh) * | 2020-03-24 | 2021-06-08 | 桂林电子科技大学 | 基于包围盒算法的高精度机械臂碰撞检测方法 |
EP3901563B1 (de) * | 2020-04-21 | 2022-12-14 | Carl Zeiss Industrielle Messtechnik GmbH | Verfahren und vorrichtung zur bestimmung einer messstrategie zur vermessung eines messobjekts und programm |
CN111815788B (zh) * | 2020-07-22 | 2022-05-17 | 腾讯科技(深圳)有限公司 | 三维地图处理方法、装置、设备和存储介质 |
CN113781628A (zh) * | 2020-11-26 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 一种三维场景搭建方法和装置 |
CN112215935B (zh) * | 2020-12-02 | 2021-04-16 | 江西博微新技术有限公司 | Lod模型自动切换方法、装置、电子设备及存储介质 |
CN115129191B (zh) * | 2021-03-26 | 2023-08-15 | 北京新氧科技有限公司 | 三维对象拾取方法、装置、设备及存储介质 |
CN114529705B (zh) * | 2022-04-22 | 2022-07-19 | 山东捷瑞数字科技股份有限公司 | 一种三维引擎编辑器的界面布局处理方法 |
CN115591240B (zh) * | 2022-12-01 | 2023-04-07 | 腾讯科技(深圳)有限公司 | 三维游戏场景的特征提取方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281654A (zh) * | 2008-05-20 | 2008-10-08 | 上海大学 | 一种基于八叉树的大规模复杂三维场景处理方法 |
CN104599315A (zh) * | 2014-12-09 | 2015-05-06 | 深圳市腾讯计算机系统有限公司 | 一种三维场景的构建方法及系统 |
CN106204719A (zh) * | 2016-06-30 | 2016-12-07 | 西安电子科技大学 | 基于二维邻域检索的三维场景中海量模型实时调度方法 |
WO2017092307A1 (zh) * | 2015-12-01 | 2017-06-08 | 乐视控股(北京)有限公司 | 模型渲染方法及装置 |
-
2019
- 2019-10-25 CN CN201911025011.4A patent/CN110796742B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281654A (zh) * | 2008-05-20 | 2008-10-08 | 上海大学 | 一种基于八叉树的大规模复杂三维场景处理方法 |
CN104599315A (zh) * | 2014-12-09 | 2015-05-06 | 深圳市腾讯计算机系统有限公司 | 一种三维场景的构建方法及系统 |
WO2017092307A1 (zh) * | 2015-12-01 | 2017-06-08 | 乐视控股(北京)有限公司 | 模型渲染方法及装置 |
CN106204719A (zh) * | 2016-06-30 | 2016-12-07 | 西安电子科技大学 | 基于二维邻域检索的三维场景中海量模型实时调度方法 |
Non-Patent Citations (2)
Title |
---|
基于场景图的视锥裁减优化;董江亥等;《电脑知识与技术》;20100525(第15期);全文 * |
基于自适应二叉树的场景视锥体裁剪算法;牛鹏等;《计算机系统应用》;20180315(第03期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110796742A (zh) | 2020-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110796742B (zh) | 一种基于面向对象的三维场景视锥体剔除方法 | |
CN110910505B (zh) | 一种场景模型的加速渲染方法 | |
CN109145366B (zh) | 基于Web3D的建筑信息模型轻量级可视化方法 | |
EP3882861A2 (en) | Method and apparatus for synthesizing figure of virtual object, electronic device, and storage medium | |
Naylor | Interactive solid geometry via partitioning trees | |
CN107341846B (zh) | 一种实时显示大规模三维重建场景的方法及设备 | |
JP5055214B2 (ja) | 画像処理装置、画像処理方法 | |
CN104331918B (zh) | 基于深度图实时绘制室外地表遮挡剔除以及加速方法 | |
EP2051533B1 (en) | 3D image rendering apparatus and method | |
US9508191B2 (en) | Optimal point density using camera proximity for point-based global illumination | |
US20020095276A1 (en) | Intelligent modeling, transformation and manipulation system | |
CN107038745B (zh) | 一种3d旅游景观漫游交互方法及装置 | |
CN101763649B (zh) | 一种增强模型轮廓的表面点绘制方法 | |
CN107993279B (zh) | 一种场景精确表达方法 | |
Li et al. | Vox-surf: Voxel-based implicit surface representation | |
CN109215106B (zh) | 一种基于动态场景的实时光线追踪加速结构的方法 | |
CN111563948B (zh) | 基于gpu进行资源动态处理和缓存的虚拟地形渲染方法 | |
Liu et al. | A complete statistical inverse ray tracing approach to multi-view stereo | |
Mudge et al. | Viewpoint quality and scene understanding | |
CN114863061A (zh) | 一种远程监护医学图像处理的三维重建方法及系统 | |
Rothermel et al. | A median-based depthmap fusion strategy for the generation of oriented points | |
CN116596985A (zh) | 一种自适应光照模型建模方法与系统 | |
CN113902887A (zh) | 三维可视边生成方法、系统、计算机及可读存储介质 | |
KR930003811B1 (ko) | 3차원도형 처리방법 및 그 장치 | |
Crocker | Screen-area coherence for interactive scanline display algorithms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |