本发明属于3d渲染技术领域,具体涉及一种基于opengl的3d眼镜渲染方法及其系统。
背景技术
目前人脸跟踪的3d眼镜绘制一般实现有三种。
第一种是将眼镜3d模型至少分为3个部分——左镜框、镜片、右镜框,然后根据人脸检测得出的人脸yaw姿态角确定左右镜框的显示,例如,当人脸偏向左面,则不显示左镜框;当人脸偏向右面,则不显示右镜框;当人脸正对屏幕,则左右镜框均不显示。这种方法实现最为简单,但由于整个镜框都不被绘制,不够仿真。
第二种是实时得出人脸的3d模型,结合眼镜3d模型实时渲染。这种实现效果最好,但实现难度极大,对设备计算能力要求极高,故难以广泛使用。
技术实现要素:
为了解决上述问题,本发明的目的在于提供一种巧用opengl缓冲区的特性,计算简单,渲染性能高切实现容易的基于opengl的3d眼镜渲染方法及其系统。
为了实现上述发明目的,本发明所采用的技术方案如下:一种基于opengl的3d眼镜渲染方法,所述方法包括以下步骤:
s1、建立3d眼镜模型;
s2、在3d眼镜模型上确定第一锚点,所述第一锚点用于定位3d眼镜模型在人脸上的佩戴位置;
s3、根据3d眼镜模型数据,预设相对应的仿人头模型数据;
s4、以第一锚点为基准,根据预设的仿人头模型数据建立仿人头模型,并在仿人头模型上确定第二锚点;
s5、在绘制时,利用opengl帧缓冲技术,首先将帧缓冲区绑定深度缓冲区、临时颜色缓冲区、颜色缓冲区;
s6、在深度缓冲区和临时颜色缓冲区绘制仿人头模型;
s7、由临时颜色缓冲区切换到颜色缓冲区,深度缓冲区保持不变,根据仿人头模型的第二锚点绘制3d眼镜模型;
s8、将帧缓冲区绘制到屏幕显示,得出基于人脸转向可以部分显示的仿真3d眼镜模型。
进一步,所述方法还包括以下步骤:
在实现步骤s2前,通过摄像头实时获取人脸数据,通过分析人脸数据确定3d眼镜模型的第一锚点数据。
为了实现本发明的另一目的,本发明还采用如下技术方案:一种基于opengl的3d眼镜渲染系统,所述系统包括:
模型单元,用于建立3d眼镜模型,在3d眼镜模型上确定第一锚点,用于定位3d眼镜模型在人脸上的佩戴位置;所述模型单元根据3d眼镜模型数据,预设相对应的仿人头模型数据,以第一锚点为基准,根据预设的仿人头模型数据建立仿人头模型,并在仿人头模型上确定第二锚点;
绘制单元,利用opengl帧缓冲技术,首先将帧缓冲区绑定深度缓冲区、临时颜色缓冲区、颜色缓冲区;所述绘制单元在深度缓冲区和临时颜色缓冲区绘制仿人头模型;所述绘制单元由临时颜色缓冲区切换到颜色缓冲区,深度缓冲区保持不变,根据仿人头模型的第二锚点绘制3d眼镜模型;所述绘制单元将帧缓冲区绘制到屏幕显示,得出基于人脸转向可以部分显示的仿真3d眼镜模型。
进一步,所述系统还包括:
识别单元,通过摄像头实时获取人脸数据,通过分析人脸数据确定3d眼镜模型的第一锚点数据。
与现有技术相比,本发明的有益效果在于:本发明巧用opengl缓冲区的特性,使用预设的仿人头模型作为深度缓冲区的标准,然后再绘制3d眼镜模型,由于首先绘制了仿人头模型,后绘制的3d眼镜模型某些部分则会被认为被遮挡,所以opengl不会对该部分进行绘制,达到了镜框部分显示的效果。本发明计算简单,渲染性能高,仿真效果好,3d眼镜模型能基于人脸的转向而部分显示,避免镜框穿脸的现象。
附图说明
此附图说明所提供的图片用来辅助对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的不当限定,在附图中:
图1是本发明基于opengl的3d眼镜渲染系统的主要模块示意图;
图2是本发明基于opengl的3d眼镜渲染方法的流程示意图。
具体实施方式
下面将结合附图以及具体实施方法来详细说明本发明,在本发明的示意性实施及说明用来解释本发明,但并不作为对本发明的限定。
如图1所示,一种基于opengl的3d眼镜渲染系统,所述系统包括:
模型单元,用于建立3d眼镜模型,在3d眼镜模型上确定第一锚点,用于定位3d眼镜模型在人脸上的佩戴位置;所述模型单元根据3d眼镜模型数据,预设相对应的仿人头模型数据,以第一锚点为基准,根据预设的仿人头模型数据建立仿人头模型,并在仿人头模型上确定第二锚点;3d眼镜模型与仿人头模型锚点一致,则可在渲染时同步变化;
绘制单元,利用opengl帧缓冲技术,首先将帧缓冲区绑定深度缓冲区、临时颜色缓冲区、颜色缓冲区;所述绘制单元在深度缓冲区和临时颜色缓冲区绘制仿人头模型;目的是只使用仿人头模型产生的深度缓冲为后续绘制3d眼镜模型提供遮挡检测,而仿人头模型的颜色效果并不需要;
所述绘制单元由临时颜色缓冲区切换到颜色缓冲区,深度缓冲区保持不变,根据仿人头模型的第二锚点绘制3d眼镜模型;所述绘制单元将帧缓冲区绘制到屏幕显示,得出基于人脸转向可以部分显示的仿真3d眼镜模型;
识别单元,通过摄像头实时获取人脸数据,通过分析人脸数据确定3d眼镜模型的第一锚点数据。
如图2所示,一种基于opengl的3d眼镜渲染方法,所述方法包括以下步骤:
s101:建立3d眼镜模型;
s102:通过摄像头实时获取人脸数据,通过分析人脸数据确定3d眼镜模型的第一锚点数据;
s103:在3d眼镜模型上确定第一锚点,所述第一锚点用于定位3d眼镜模型在人脸上的佩戴位置;
s104:根据3d眼镜模型数据,预设相对应的仿人头模型数据;
s105:以第一锚点为基准,根据预设的仿人头模型数据建立仿人头模型,并在仿人头模型上确定第二锚点;
s106:在绘制时,利用opengl帧缓冲技术,首先将帧缓冲区绑定深度缓冲区、临时颜色缓冲区、颜色缓冲区;
s107:在深度缓冲区和临时颜色缓冲区绘制仿人头模型;
s108:由临时颜色缓冲区切换到颜色缓冲区,深度缓冲区保持不变,根据仿人头模型的第二锚点绘制3d眼镜模型;
s109:将帧缓冲区绘制到屏幕显示,得出基于人脸转向可以部分显示的仿真3d眼镜模型。
一般opengl利用颜色缓冲区以及深度缓冲区进行3d模型的绘制,颜色缓冲区即是最终显示在屏幕的内容;而深度缓冲区则是用于让opengl底层决定是否绘制后层物体的依据,即实现“前景不透明物体遮挡后景物体”。本发明巧用opengl缓冲区的特性,一个帧缓冲区可以同时绑定多个颜色缓冲区以及一个深度缓冲区,且支持动态切换颜色缓冲区或深度缓冲区。绘制时,帧缓冲区首先绑定深度缓冲区以及临时的颜色缓冲区,在深度缓冲区以及临时缓冲区使用预设的仿人头模型作为深度缓冲区的标准,然后帧缓冲区切换到颜色缓冲区再绘制3d眼镜模型,深度缓冲区保持不变;由于首先绘制了仿人头模型,后绘制的3d眼镜模型某些部分则会被认为被遮挡,所以opengl不会对该部分进行绘制,达到了镜框部分显示的效果。本发明计算简单,渲染性能高,仿真效果好,3d眼镜模型能基于人脸的转向而部分显示,避免镜框穿脸的现象。
本实施例所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本发明实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。