一种基于OpenGL的目标光场创建方法与流程

文档序号:16686256发布日期:2019-01-22 18:20阅读:265来源:国知局
一种基于OpenGL的目标光场创建方法与流程

本发明涉及光场显示技术领域,特别是一种基于opengl的目标光场创建方法。



背景技术:

三维显示技术是未来显示技术发展的重要方向之一,它通过让观察者获取到二维显示技术所不具有的深度信息,从而产生更真实的视觉感受。1996年来自美国的学者m.levoy和p.hanrahan提出了三维场景的光场绘制方法,催生了基于光场重构的三维显示技术蓬勃发展。其原理是通过精确再现三维物体空间光场分布来实现真实空间三维显示,具备了裸眼、全景、观察者数目不受限制等诸多化点,是一种优秀的三维显示技术。

目前,光场重构三维显示技术的主要问题在于目标光场的创建方法单一,市场上仅有基于3dmax模型软件的目标光场创建方法,此方法的实时性,准确性,通用性都较低,不足以支撑光场显示技术的发展。opengl作为一个开源的图形程序接口,已经被广泛地应用于虚拟现实、三维显示、图形学等领域。作为一个跨平台、跨程序语言的图形api,它可直接依托于visualstudio、eclipse等集成开发平台,实现三维场景的实时光场获取、映射和计算,大幅度提高算法的速度和准确性。同时与3dmax软件相比,opengl对相机画幅的宽高比没有4:3的约束,也无须使用相机对目标光场进行过采样,使用起来也更加方便。



技术实现要素:

为解决现有技术中存在的问题,本发明的目的是提供一种基于opengl的目标光场创建方法,通过在opengl中读取三维模型数据,并利用模型矩阵,视图矩阵,投影矩阵处理,最终实现四维目标光场的创建。该基于opengl的目标光场创建方法不仅能够实现三维场景的实时光场获取、映射和计算,大幅度提高算法的速度和准确性,而且无须使用相机对目标光场进行过采样,使用起来也更加方便。

为实现上述目的,本发明采用的技术方案是:一种基于opengl的目标光场创建方法,包括以下步骤:

a、opengl读取计算机三维模型数据;

b、通过opengl模型矩阵将模型坐标转换为世界坐标;

c、通过opengl视图矩阵将世界坐标转换为相机坐标;

d、通过opengl投影矩阵将相机坐标转换为投影图像坐标;

e、opengl依照投影图像坐标对投影图像进行绘制并完成存储。

光场显示系统所显示的虚拟场景内容可来自于计算机三维模型,或者某三维模型的不同视角图像。为便于实现动态可交互的显示场景,常采用计算机三维模型作为内容数据源。计算机三维模型的格式众多,每个公司或软件都可以定义自己的格式,常见格式包括.obj、.max、.fbx、.dae、.x等,它们虽然数据封装形式有所不同,但是所包含的信息基本类似,无外乎三维模型的顶点、面片、法线方向、纹理等信息。计算机显示三维模型的核心是三角面片化处理,即将三维场景表面转化成一系列三角形的集合,各类三维模型格式就在致力于记录这些三角形的位置和颜色。因为opengl具有高效自由的图形图像绘制性能,所以在步骤a中选用opengl直接对光场显示需要的计算机三维模型数据进行读取。

作为一种优选的实施方式,所述步骤b具体如下:

读取完三维模型之后,需要经过坐标变换才能采样出光场,利用模型矩阵将模型坐标系转变成世界坐标系。对任意一个三维点的模型坐标(x,y,z)引入一个新的分量w,使w=1,得到该三维点的齐次坐标(x,y,z,1),模型矩阵的维度是4行4列,模型矩阵左乘w齐次坐标(x,y,z,1),即得到该点的世界坐标。

作为另一种优选的实施方式,在opengl中,默认坐标系为水平向右方向为x轴,竖直向上方向为y轴,垂直纸面向外为z轴,当读取该模型文件时,如果相机仍然朝向+z轴时,将发现模型文件不在视场范围内,因此先将模型文件中的物体沿y轴逆时针旋转180度,再将物体沿x轴逆时针旋转90度,即可完成模型坐标到世界坐标的转换。

作为另一种优选的实施方式,所述步骤c具体如下:

步骤b得到的世界坐标后,设置相机阵列观察,opengl设置相机视轴以及朝向,将世界坐标系xw,yw,zw转化为相机坐标系xc,yc,zc。

作为另一种优选的实施方式,所述步骤d具体如下:

使用相机坐标系得到相机坐标后,再使用投影矩阵将相机坐标系印射到尺寸为±1的正方体中,将梯形形态的视椎体缩放成正方体,使靠近视椎的场景被放大,远离视椎的场景被缩小,正好符合透视投影的“近大远小”性质,即得到任意一个三维模型在不同位置、不同角度的投影图像结果。

作为另一种优选的实施方式,所述步骤e中opengl在数据初始化阶段将模型的顶点位置、法线方向和纹理坐标绑定在一起,绑定原则类似于obj格式文件里的三角面片f所引导的数据形式,通过顶点着色器和片段着色器对绑定的坐标做处理,具体处理步骤如下:

e1、第n幅投影图像绘制开始;

e2、顶点着色器内位置坐标计算:顶点着色器对顶点位置和法线方向做处理后输出二维或三维坐标;

e3、片段着色器内纹理坐标计算:片段着色器对纹理坐标做处理后输出需要显示的rgb颜色;

e4、检测是否完成所有图像绘制,如果全部完成,进行所有图像的存储,如果未完成,则将未完成的图像传入第e1步继续绘制;

上述步骤中,顶点着色器和片段着色器之间可自由地传输数据。

本发明的有益效果是:本发明提供的基于opengl的目标光场创建方法不仅能够实现三维场景的实时光场获取、映射和计算,大幅度提高算法的速度和准确性,而且无须使用相机对目标光场进行过采样,使用起来也更加方便。

附图说明

图1为本发明实施例的流程框图。

具体实施方式

下面结合附图对本发明的实施例进行详细说明。

实施例

如图1所示,一种基于opengl的目标光场创建方法,包括以下步骤:

图1中的步骤101是opengl读取计算机三维模型数据。其中光场显示系统所显示的虚拟场景内容可来自于计算机三维模型,或者某三维模型的不同视角图像。为便于实现动态可交互的显示场景,常采用计算机三维模型作为内容数据源。计算机三维模型的格式众多,每个公司或软件都可以定义自己的格式,常见格式包括.obj、.max、.fbx、.dae、.x等,它们虽然数据封装形式有所不同,但是所包含的信息基本类似,无外乎三维模型的顶点、面片、法线方向、纹理等信息。计算机显示三维模型的核心是三角面片化处理,即将三维场景表面转化成一系列三角形的集合,各类三维模型格式就在致力于记录这些三角形的位置和颜色。因为opengl具有高效自由的图形图像绘制性能,所以在本步骤中选用opengl直接对光场显示需要的计算机三维模型数据进行读取。

在本实例中,以.obj格式为例,.obj格式文件由顶点信息(geometricvertices)、纹理信息(texturevertices)和材质信息(materiallibrary)构成。顶点坐标v1(x1,y1,z1)、v2(x2,y2,z2)和v3(x3,y3,z3)控制三个模型点的空间位置,这三个点对应的纹理信息vt1(u1,v1)、vt2(u2,v2)、vt3(u3,v3)控制顶点对应于纹理贴图的uv坐标,用于确定顶点最终的颜色信息,.obj格式文件三个顶点的颜色分别为:红色、绿色和蓝色。这样就可以得出该三角面片的位置、颜包状态,而所有三角面片的集合就构成了最终的3d模型。

图1中的步骤102是通过opengl模型矩阵将模型坐标转换为世界坐标。读取完三维模型之后,需要经过坐标变换才能采样出光场。首先需要利用模型矩阵(modelmatrix)将模型坐标系转变成世界坐标系。对于opengl语言而言,任意一个三维点的模型坐标(x,y,z)都会引入一个新的分量w,使得w=1,进而得到该点的齐次坐标(x,y,z,1)。模型矩阵的维度是4行4列,模型矩阵左乘w齐次坐标(x,y,z,1)之后,将得到该点的世界坐标。在opengl中,默认坐标系为水平向右方向为x轴,竖直向上方向为y轴,垂直纸面向外为z轴,当读取该模型文件时,如果相机仍然朝向+z轴时,将发现模型文件不在视场范围内。因此可先将物体沿y轴逆时针旋转180度,再将物体沿x轴逆时针旋转90度,即可完成模型坐标到世界坐标的转换。

在本实例中,模型坐标转换为世界坐标的具体数学表达式为:

其中[xw,yw,zw,1]t是世界坐标,[x,y,z,1]t是模型坐标,这里缩放矩阵scale,平移矩阵translate都为单位矩阵,并且模型变换的顺序是,先缩放,再旋转,再平移。旋转矩阵rotatex和rotatey具体为:

其中θx=90°,θy=180°。

图1中的步骤103是通过opengl视图矩阵将世界坐标转换为相机坐标。具体方式为:得到世界坐标后,需要设置相机阵列观察。opengl设置相机视轴以及朝向,将世界坐标系xw,yw,zw转化为相机坐标系xc,yc,zc。

在本实例中,opengl中有三个参数:向量eye、向量target和向量up,eye设置相机视点的位置,将其坐标点设置为a(xa,ya,za),eye视点与target点的连线即为视轴方向,即相机坐标系的zc轴,在此相机阵列中将相机阵列点设置为统一的朝向,因此相机坐标系zc轴平行于z轴,zc轴与up向量的叉乘即为相机坐标系的xc轴;zc轴与xc轴的叉乘即为相机坐标系的yc轴,yc轴与up向量方向一致,而相机坐标系是左手坐标系,这些参数的具体值为:

图1中的步骤104是通过opengl投影矩阵将相机坐标转换为投影图像坐标。具体实现方式为:使用相机坐标系得到相机坐标后,再使用投影矩阵(projectionmatrix)将相机坐标系映射到尺寸为±1的正方体中。当使用投影矩阵perspective后,就能够将一个梯形形态的视椎体缩放成正方体,这样靠近视椎的场景将放大,远离视椎的场景将变小,正好符合透视投影的“近大远小”性质。这样经过模型矩阵、视图矩阵和投影矩阵的作用后,就能够得到任意一个三维模型在不同位置、不同角度的投影结果。

图1中的步骤105是opengl依照投影图像坐标对投影图像进行绘制并完成存储。具体实现方式为:opengl在数据初始化阶段将模型的顶点位置、法线方向和纹理坐标绑定在一起,绑定原则类似于.obj格式文件里的三角面片f所引导的数据形式。顶点着色器和片段着色器即是对这些绑定的坐标做处理:顶点着色器主要对顶点位置和法线方向做处理,通常输出二维或三维坐标;片段着色器主要对纹理坐标做处理,通常输出需要显示的rgb颜色;顶点着色器和片段着色器之间可以自由地传输数据。

在本实例中,投影图像序列的绘制流程为:

第一步:第n幅投影图像绘制开始;

第二步:顶点着色器内位置坐标计算;

第三步:片段着色器内纹理坐标计算;

第四步:检测是否完成所有图像绘制,如果全部完成,进行所有图像的存储,如果未完成,则将未完成的图像传入第一步骤。

在具体实施时,需要说明的是:为保证图像渲染速度,应避免cpu与gpu之间过多的数据交换,因此cpu读取三维模型的顶点信息以及刚体变换信息并传给gpu之后,需要在fbo容器内渲染所有投影图像,fbo(帧缓存对象,framebufferobject)是一种离线渲染方法,它可以保证图像数据一直留在后台无需显示出来。在顶点着色器中,使用光场映射算法对模型的顶点位置和法线方向的变换;在片段着色器中,根据纹理坐标从绑定的纹理图像中抓取该顶点的原始颜色,根据变换过后的法线计算该点受环境光影响后的实际颜色。

以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

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