一种通过绘制方式选择三维场景中物体的方法及系统与流程

文档序号:12472193阅读:165来源:国知局
一种通过绘制方式选择三维场景中物体的方法及系统与流程

本发明涉及图像处理技术,具体涉及一种通过绘制方式选择三维场景中物体的方法及系统。



背景技术:

多边形网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑、车辆、人体等,多边形网格为一个多边形列表。三角网格是全部由三角形组成的多边形网格,三角网格为一个三角形列表。在三维CAD软件中编辑三角网格模型时,存在大量三角形,通常采用选择判断方法来获取选中的三角形。传统的选择判断方法经常使用求交计算来判断点与几何元素的关系,例如使用射线法来判断三维场景中的物体是否被选中。射线法基本的判断原理是从选择点引出一条射线,射线方向为观察平面的法向量(从屏幕外往屏幕内的方向),将该射线与三维场景中的物体进行求交计算,如果相交,则物体被选中,否则没有被选中。

但是,在三维场景中用求交计算的方法来判断物体是否被选中的方式需要占用大量的CPU计算资源,如果三维场景中存在大量物体,则会严重影响选择速度。



技术实现要素:

为了解决上述技术问题,本发明提供了一种通过绘制方式选择三维场景中物体的方法及系统。

本发明提出的技术方案如下。

一种通过绘制方式选择三维场景中物体的方法,包括以下步骤:

步骤S10,获取三维场景的图像;

步骤S11,为三维场景中的每个物体分配不同的颜色值;

步骤S12,按照步骤S11分配的颜色值绘制三维场景中的所有物体得到三维场景的颜色表达图像;

步骤S13,根据选择区域对步骤S12绘制得到的三维场景的颜色表达图像进行裁剪;

步骤S14,裁剪后的颜色表达图像中每个像素的颜色值与物体进行对应,从而确定出被选中的物体。

进一步地,所述步骤S11包括:为三维场景中的每个物体根据其唯一标识符分配一个唯一的RGB颜色值并将其存储在颜色缓冲区中,将唯一的RGB颜色值与物体的唯一标识符的对应关系以关系表的形式存储在存储器中;

所述步骤S12包括:按照所述关系表从颜色缓冲区中提取相应的RGB颜色值对三维场景中的所有物体进行绘制,得到三维场景的颜色表达图像并将其存储在存储器中;

所述步骤S13包括:从存储器中取出三维场景的颜色表达图像,裁剪窗口根据选择区域对三维场景的颜色表达图像进行裁剪,其中裁剪窗口的位置和大小设置为与所述选择区域的位置和大小一致;

所述步骤S14包括:根据所述关系表,将裁剪后的三维场景的颜色表达图像内每个像素的RGB颜色值与唯一标识符进行映射,唯一标识符被映射到则表示拥有该唯一标识符的物体被选中。

一种通过绘制方式选择三维场景中物体的系统,包括以下模块:

获取模块,获取三维场景的图像;

分配模块,为三维场景中的每个物体分配不同的颜色值;

绘制模块,按照所述分配模块分配的颜色值对三维场景中的所有物体进行绘制得到三维场景的颜色表达图像;

裁剪模块,根据选择区域对所述绘制模块绘制得到的三维场景的颜色表达图像进行裁剪;

映射模块,将裁剪后的颜色表达图像中每个像素的颜色值与物体进行对应,从而确定出被选中的物体。

进一步地,所述分配模块为三维场景中的每个物体根据其唯一标识符分配一个唯一的RGB颜色值并将其存储在颜色缓冲区中,将唯一的RGB颜色值与物体的唯一标识符的对应关系以关系表的形式存储在存储器中;

所述绘制模块按照所述关系表从颜色缓冲区中提取相应的RGB颜色值对三维场景中的所有物体进行绘制,得到三维场景的颜色表达图像并将其存储在存储器中;

所述裁剪模块从存储器中取出三维场景的颜色表达图像,裁剪窗口根据选择区域对三维场景的颜色表达图像进行裁剪,其中裁剪窗口的位置和大小设置为与所述选择区域的位置和大小一致;

所述映射模块根据所述关系表,将裁剪后的三维场景的颜色表达图像内每个像素的RGB颜色值与唯一标识符进行映射,唯一标识符被映射到则表示拥有该唯一标识符的物体被选中。

一种通过绘制方式选择三维场景中物体的方法,包括以下步骤:

步骤S30,获取三维场景的图像;

步骤S31,为三维场景中的每个物体分配不同的颜色值;

步骤S32,将选择区域划分为N个区域块,N为自然数;

步骤S33,选取划分后的其中一个区域块,将裁剪窗口的位置和大小设置为与所述被选取的区域块的位置和大小一致;

步骤S34,按照步骤S11分配的颜色值绘制所述裁剪窗口中的所有物体;

步骤S35,所述裁剪窗口中每个像素的颜色值与物体进行对应,从而确定出所述被选取的区域块中被选中的物体;

步骤S36,判断被划分的所有区域块是否都已经被处理,如果还有区域块未被处理,则返回步骤S33继续执行;如果所有区域块均已被处理,则继续步骤S37;

步骤S37,将步骤35中针对每个区域块所选中的物体合并起来即为选择区域所选中的所有物体。

进一步地,所述步骤S31包括:为三维场景中的每个物体根据其唯一标识符分配一个唯一的RGB颜色值并将其存储在颜色缓冲区中,将唯一的RGB颜色值与物体的唯一标识符的对应关系以关系表的形式存储在存储器中;

步骤S34包括:按照所述关系表从颜色缓冲区中提取相应的RGB颜色值对所述裁剪窗口中的所有物体进行绘制,得到该裁剪窗口的颜色表达图像存储在存储器中;

步骤S35包括:从存储器中取出该裁剪窗口的颜色表达图像,根据所述关系表,将该裁剪窗口的颜色表达图像中每个像素的RGB颜色值与唯一标识符进行映射,唯一标识符被映射到则表示拥有该唯一标识符的物体被选中。

一种通过绘制方式选择三维场景中物体的系统,包括以下模块:

获取模块,获取三维场景的图像;

分配模块,为三维场景中的每个物体分配颜色值;

分块模块,将选择区域划分为N个区域块,N为自然数;

设置模块,选取划分后的其中一个区域块,将裁剪窗口的位置和大小设置为与所述被选取的区域块的位置和大小一致;

绘制模块,按照分配模块分配的颜色值绘制所述裁剪窗口中的所有物体;

映射模块,将绘制后的所述裁剪窗口中每个像素的颜色值与物体进行对应,从而确定出所述裁剪窗口中被选中的物体;

判断模块,判断被划分的所有区域块是否都已经被处理,如果还有区域块未被处理,则继续由设置模块、绘制模块和映射模块进行相应的处理,直到所有区域块均已被处理;

合并模块,将映射模块中针对每个区域块所选中的物体合并起来即为选择区域所选中的所有物体。

进一步地,所述分配模块为三维场景中的每个物体根据其唯一标识符分配一个唯一的RGB颜色值并将其存储在颜色缓冲区中,将唯一的RGB颜色值与物体的唯一标识符的对应关系以关系表的形式存储在存储器中;

所述绘制模块按照所述关系表从颜色缓冲区中提取相应的RGB颜色值对所述裁剪窗口中的所有物体进行绘制,得到该裁剪窗口的颜色表达图像存储在存储器中;

所述映射模块从存储器中取出该裁剪窗口的颜色表达图像,根据所述关系表,将该裁剪窗口的颜色表达图像中每个像素的RGB颜色值与唯一标识符进行映射,唯一标识符被映射到则表示拥有该唯一标识符的物体被选中。

本发明的有益效果:

1.本发明使用绘制的方式判断三维场景中的物体是否被选中,其计算主要由显卡完

成,可以充分利用显卡的性能,效率更高,且无需过多占用CPU的计算资源。

2.本发明通过对选择区域进行分块处理,并且在每次绘制前将裁剪窗口的位置和大小设置为与区域块的位置和大小一致,这样可以减少视口(viewport)变换的缩放比例,使得物体在栅格化时能覆盖更多的像素,减少由于没有覆盖所有像素而导致漏选的可能性。

附图说明

图1为本发明实施例提出的通过绘制方式选择三维场景中物体的第一种方法流程图;

图2为本发明实施例提出的通过绘制方式选择三维场景中物体的第一种系统框图;

图3为本发明实施例提出的通过绘制方式选择三维场景中物体的第二种方法流程图;

图4为本发明实施例提出的通过绘制方式选择三维场景中物体的第二种系统框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。但本领域技术人员知晓,本发明并不局限于附图和以下实施例。

本发明提出了一种通过绘制方式选择三维场景中物体的方法,如图1所示,包括以下步骤:

步骤S10,获取三维场景的图像:三维场景中的各个物体是用一个树结构来组织,根节点代表整个场景,子节点代表场景里面的对象,对象本身也可以有子对象,譬如一个长方体对象包含6个面的子对象;对象有唯一的标识符;各个对象本身包含几何信息,譬如三角形包含三个顶点的坐标,NURBS曲面包含节点、控制顶点等信息来描述自身在场景中的形状与位置;

步骤S11,为三维场景中的每个物体分配不同的颜色值:为三维场景中的每个物体根据其唯一标识符分配一个唯一的RGB颜色值,并将所有的唯一RGB颜色值存储在颜色缓冲区中,例如唯一标识符为1的物体,其RGB颜色值可以对应为ox000001;也可以为背景色分配一个唯一的RGB颜色值,也可以存储在颜色缓冲区中,例如默认背景色为纯黑色,其RGB颜色值可以对应为ox000000;将唯一的RGB颜色值与物体的唯一标识符的对应关系以关系表的形式存储在存储器中,如果为背景色分配了唯一的RGB颜色值,则该唯一的RGB颜色值也可以存储在颜色缓冲区中,但在关系表中没有与之对应的物体的唯一标识符。需要说明的是,所述的RGB颜色值与物体用于显示的常规颜色不同,该RGB颜色值只是在选择过程中使用,并不会刷新到显示器,因此不会被用户看到;

步骤S12,绘制三维场景中的物体:按照所述关系表从颜色缓冲区中提取相应的RGB颜色值对三维场景中的所有物体进行绘制,得到三维场景的颜色表达图像存储在存储器中;

步骤S13,裁剪三维场景的颜色表达图像:从存储器中取出三维场景的颜色表达图像,裁剪窗口根据选择区域对三维场景的颜色表达图像进行裁剪,其中裁剪窗口的位置和大小设置为与所述选择区域的位置和大小一致;

步骤S14,确定被选中的物体:根据所述关系表,将裁剪后的三维场景的颜色表达图像内每个像素的RGB颜色值与唯一标识符进行映射,唯一标识符被映射到则表示拥有该唯一标识符的物体被选中;如果裁剪后的颜色缓冲区内的像素的RGB颜色值为背景色对应的RGB颜色值,由于关系表中并没有与之对应的物体的唯一标识符,因此代表该像素位置没有物体被选中。

上述方案使用绘制的方法判断三维场景中的物体是否被选中,其中的计算主要由显卡完成,可以充分利用显卡的性能,效率更高,且无需过多占用CPU的计算资源。

本发明还提出了一种通过绘制方式选择三维场景中物体的系统,如图2所示,包括以下模块:

获取模块:获取三维场景的图像:三维场景中的各个物体是用一个树结构来组织,根节点代表整个场景,子节点代表场景里面的对象,对象本身也可以有子对象,譬如一个长方体对象包含6个面的子对象。对象有唯一的标识符。各个对象本身包含几何信息,譬如三角形包含三个顶点的坐标,NURBS曲面包含节点、控制顶点等信息来描述自身在场景中的形状与位置;

分配模块,为三维场景中的每个物体分配不同的颜色值:为三维场景中的每个物体根据其唯一标识符分配一个唯一的RGB颜色值,并将所有的唯一RGB颜色值存储在颜色缓冲区中,例如唯一标识符为1的物体,其RGB颜色值可以对应为ox000001;也可以为背景色分配一个唯一的RGB颜色值,也可以存储在颜色缓冲区中,例如默认背景色为纯黑色,其RGB颜色值可以对应为ox000000;将唯一的RGB颜色值与物体的唯一标识符的对应关系以关系表的形式存储在存储器中,如果为背景色分配了唯一的RGB颜色值,则该唯一的RGB颜色值也可以存储在颜色缓冲区中,但在关系表中没有与之对应的物体的唯一标识符。需要说明的是,所述的RGB颜色值与物体用于显示的常规颜色不同,该RGB颜色值只是在选择过程中使用,并不会刷新到显示器,因此不会被用户看到;

绘制模块,绘制三维场景中的物体:按照所述关系表从颜色缓冲区中提取相应的RGB颜色值对三维场景中的所有物体进行绘制,得到三维场景的颜色表达图像存储在存储器中;

裁剪模块,裁剪三维场景的颜色表达图像:从存储器中取出三维场景的颜色表达图像,裁剪窗口根据选择区域对三维场景的颜色表达图像进行裁剪,其中裁剪窗口的位置和大小设置为与所述选择区域的位置和大小一致;

映射模块,确定被选中的物体:根据所述关系表,将裁剪后的三维场景的颜色表达图像中每个像素的RGB颜色值与唯一标识符进行映射,唯一标识符被映射到则表示拥有该唯一标识符的物体被选中;如果裁剪后的颜色缓冲区内的像素的RGB颜色值为背景色对应的RGB颜色值,由于关系表中并没有与之对应的物体的唯一标识符,因此代表该像素位置没有物体被选中。

为了提高判断精度,避免出现漏选的情况,本发明的优选实施例还提出了一种通过绘制方式选择三维场景中物体的方法,如图3所示,包括以下步骤:

步骤S30,获取三维场景的图像:三维场景中的各个物体是用一个树结构来组织,根节点代表整个场景,子节点代表场景里面的对象,对象本身也可以有子对象,譬如一个长方体对象包含6个面的子对象。对象有唯一的标识符。各个对象本身包含几何信息,譬如三角形包含三个顶点的坐标,NURBS曲面包含节点、控制顶点等信息来描述自身在场景中的形状与位置;

步骤S31,为三维场景中的每个物体分配不同的颜色值:为三维场景中的每个物体根据其唯一标识符分配一个唯一的RGB颜色值,并将所有的唯一RGB颜色值存储在颜色缓冲区中,例如唯一标识符为1的物体,其RGB颜色值可以对应为ox000001;也可以为背景色分配一个唯一的RGB颜色值,也可以存储在颜色缓冲区中,例如默认背景色为纯黑色,其RGB颜色值可以对应为ox000000;将唯一的RGB颜色值与物体的唯一标识符的对应关系以关系表的形式存储在存储器中,如果为背景色分配了唯一的RGB颜色值,则该唯一的RGB颜色值也可以存储在颜色缓冲区中,但在关系表中没有与之对应的物体的唯一标识符。需要说明的是,所述的RGB颜色值与物体用于显示的常规颜色不同,该RGB颜色值只是在选择过程中使用,并不会刷新到显示器,因此不会被用户看到;

步骤S32,划分区域块:将选择区域划分为N个区域块,N为自然数;

步骤S33,设置裁剪窗口:选取划分后的其中一个区域块,将裁剪窗口的位置和大小设置为与所述被选取的区域块的位置和大小一致;

步骤S34,绘制裁剪窗口中的物体:按照所述关系表从颜色缓冲区中提取相应的RGB颜色值对所述裁剪窗口中的所有物体进行绘制,得到该区域块的颜色表达图像存储在存储器中;

步骤S35,确定裁剪窗口中被选中的物体:从存储器中取出该裁剪窗口的颜色表达图像,根据所述关系表,将该裁剪窗口的颜色表达图像中每个像素的RGB颜色值与唯一标识符进行映射,唯一标识符被映射到则表示拥有该唯一标识符的物体被选中;如果裁剪后的颜色缓冲区内的像素的RGB颜色值为背景色对应的RGB颜色值,由于关系表中并没有与之对应的物体的唯一标识符,因此代表该像素位置没有物体被选中;

步骤S36,判断是否有未被处理的区域块:判断被划分的所有区域块是否都已经被处理,如果还有区域块未被处理,则返回步骤S33继续执行;如果所有区域块均已被处理,则继续步骤S37;

步骤S37,合并所有被选中的物体:将步骤35中针对每个区域块所选中的物体合并起来即为选择区域所选中的所有物体。

上述方案中,在对每次选择的区域块绘制前将裁剪窗口的位置和大小设置为与所述被选取的区域块的位置和大小一致,这样做可以减少视口变换的缩放比例,使得物体在栅格化时能覆盖更多的像素,减少由于没有覆盖任何像素导致被漏选的可能性。

本发明的优选实施例还提出了一种通过绘制方式选择三维场景中物体的系统,如图4所示,包括以下模块:

获取模块,获取三维场景的图像:三维场景中的各个物体是用一个树结构来组织,根节点代表整个场景,子节点代表场景里面的对象,对象本身也可以有子对象,譬如一个长方体对象包含6个面的子对象。对象有唯一的标识符。各个对象本身包含几何信息,譬如三角形包含三个顶点的坐标,NURBS曲面包含节点、控制顶点等信息来描述自身在场景中的形状与位置;

分配模块,为三维场景中的每个物体分配不同的颜色值:为三维场景中的每个物体根据其唯一标识符分配一个唯一的RGB颜色值,并将所有的唯一RGB颜色值存储在颜色缓冲区中,例如唯一标识符为1的物体,其RGB颜色值可以对应为ox000001;也可以为背景色分配一个唯一的RGB颜色值,也可以存储在颜色缓冲区中,例如默认背景色为纯黑色,其RGB颜色值可以对应为ox000000;将唯一的RGB颜色值与物体的唯一标识符的对应关系以关系表的形式存储在存储器中,如果为背景色分配了唯一的RGB颜色值,则该唯一的RGB颜色值也可以存储在颜色缓冲区中,但在关系表中没有与之对应的物体的唯一标识符。需要说明的是,所述的RGB颜色值与物体用于显示的常规颜色不同,该RGB颜色值只是在选择过程中使用,并不会刷新到显示器,因此不会被用户看到;

分块模块,划分区域块:将选择区域划分为N个区域块,N为自然数;

设置模块,设置裁剪窗口:选取划分后的其中一个区域块,将裁剪窗口的位置和大小设置为与所述被选取的区域块的位置和大小一致;

绘制模块,绘制裁剪窗口中的物体:按照所述关系表从颜色缓冲区中提取相应的RGB颜色值对所述被选取的区域块内的所有物体进行绘制,得到该区域块的颜色表达图像存储在存储器中;

映射模块,确定裁剪窗口中被选中的物体:从存储器中取出该区域块的颜色表达图像,根据所述关系表,将该区域块的颜色表达图像中每个像素的RGB颜色值与唯一标识符进行映射,唯一标识符被映射到则表示拥有该唯一标识符的物体被选中;如果裁剪后的颜色缓冲区内的像素的RGB颜色值为背景色对应的RGB颜色值,由于关系表中并没有与之对应的物体的唯一标识符,因此代表该像素位置没有物体被选中;

判断模块,判断是否有未被处理的区域块:判断被划分的所有区域块是否都已经被处理,如果还有区域块未被处理,则继续由设置模块、绘制模块和映射模块进行相应的处理,直到所有区域块均已被处理;

合并模块,合并所有被选中的物体:将映射模块中针对每个区域块所选中的物体合并起来即为选择区域所选中的所有物体。

以上,对本发明的实施方式进行了说明。但是,本发明不限定于上述实施方式。凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1