当前位置: 首页 > 专利查询>东南大学专利>正文

基于渲染管线的交互式实时自由立体显示方法技术

技术编号:19024513 阅读:30 留言:0更新日期:2018-09-26 19:20
本发明专利技术提供一种基于渲染管线的交互式实时自由立体显示方法,读入需要渲染的模型的顶点数据,利用顶点数据生成网格模型并得到简化网格模型,传入OpenGL渲染流水线;生成单视点渲染场景图;设置渲染窗口分辨率、目标表面材质、光源类型和位置,利用OpenInventor开源库,分别针对每个不同视点的场景,实施场景渲染;对不同视点场景纹理缓冲进行融合的像素融合算法,得到用于输出的融合图像;利用OpenGL可编程渲染管线特性,使用GLSLshader语言,在片元着色器中完成像素选取与融合操作,最后输出融合后的结果;实现用户交互接口。该方法通过多视角融合实现三维数据的立体显示;利用多纹理映射技术完成每视点处场景的渲染,满足使用者对观察对象进行实时交互式观察的需求。

【技术实现步骤摘要】
基于渲染管线的交互式实时自由立体显示方法
本专利技术涉及一种基于渲染管线的交互式实时自由立体显示方法。
技术介绍
相比于传统的二维平面显示,立体显示能够提供给观看者更接近于真实世界的视觉感受,而自由立体显示技术利用了人眼的视差原理,不通过任何工具就能让左右眼睛从视屏幕上看到两幅具有视差的,有所区别的画面,将它们反射到大脑,人就会产生立体感。立体显示技术摆脱了助视设备的束缚,成为了当前立体显示领域的研究热点。随着立体显示技术的不断发展,已经有多种技术可用于实现立体显示。基于柱状透镜的自由立体显示技术需要从大量视角对同一场景进行绘制,对于渲染速度以及大数据量分析与处理速度有很高的要求。目前世面上的自由立体显示系统往往无法做到根据用户的交互指令,进行实时刷新,采用离线制作好的视频素材;也就是预先处理每帧图像,将选取像素并融合的多帧图像最终合成视频,最终在自由立体显示设备上播放。这样的方案存在操作繁琐,播放内容不能实时更改等局限。
技术实现思路
本专利技术的目的是提供一种基于渲染管线的交互式实时自由立体显示方法,通过将传入的数据进行绘制成像,通过倾斜式柱状透镜自由立体显示设备实现裸眼3D显示效果,基于OpenGL可编程渲染管线开发,实现了实时交互式自由立体显示,根据用户的交互指令对目标数据进行平移、旋转、缩放等操作,并可以做到实时刷新绘制,解决现有技术中存在的操作繁琐,播放内容不能实时更改等局限的问题。本专利技术的技术解决方案是:一种基于渲染管线的交互式实时自由立体显示方法,包括以下步骤,S1、读入需要渲染的模型的顶点数据,利用顶点数据生成网格模型,并利用拉普拉斯平滑算法进行网格简化,得到简化网格模型,传入OpenGL渲染流水线;S2、根据使用场景设置视点个数、虚拟摄像机位,具体为,设置融合图像的视点个数为N、视点间隔角度delta,调用OpenGLAPIgluLookAt函数和gluPerspective函数,在以原点为中心点,半径为R的弧上根据视点个数N每相隔角度delta摆放N个虚拟摄像机,且使虚拟摄像机阵列以xoz面对称,其中每个虚拟摄像机的光轴为该位置到原点确定的方向向量,虚拟摄像机的法线方向为坐标轴z的正方向,针对每一个虚拟摄像机,使用OpenGL固定管线渲染步骤S1所述简化网格模型,生成单视点渲染场景图。S3、设置渲染窗口分辨率、目标表面材质、光源类型和位置,利用OpenInventor开源库,分别针对每个不同视点的场景,实施场景渲染,具体为,调用OpenGLAPI,使用glGenBuffers、glBindBuffer和glBufferData三个函数在显存中开辟数据空间PixBufferi即纹理数组,记屏幕横向像素个数为Xw,纵向像素个数为Yw,则其中每块区域所占大小为Xw×Yw×3比特,,利用RenderToTexture技术,将之前使用固定管线生成的单角度渲染场景图的帧缓冲区中的颜色缓冲区附加到对应的纹理缓冲区对象,调用glFramebufferTexture2D函数将渲染结果以纹理形式保存到显存中;S4、将步骤S3所述不同视点场景纹理缓冲进行融合的像素融合算法具体描述如下:遍历屏幕区域所有像素,根据映射公式从不同视点处的图像中选取像素通道,其中,i/3的商表示像素横坐标,其范围为0至Xw-1;j表示像素的纵坐标,其范围为0至Yw-1;i/3的余数为0、1、2时分别对应像素(i/3,j)的蓝、绿、红通道,X为液晶显示屏上单个柱状透镜宽度下所能覆盖的子像素个数,ɑ为倾斜透镜与竖直方向的夹角弧度,N为S2所述视点个数,计算结果Nk为当前子像素所对应的场景纹理编号;根据Nk从对应视点的渲染场景图中获得像素通道值,完成所有像素遍历后即得到用于输出的融合图像;S5、利用OpenGL可编程渲染管线特性,使用GLSLshader语言,在片元着色器中实现像素融合算法,将S3所述单视点场景纹理缓冲融合生成最终屏幕输出图像,,具体为,向片元着色器中传入uniform变量以表示映射公式中的值ɑ和X,根据S4所述映射公式计算出对应坐标处的像素通道值所对应的场景纹理缓冲编号;通过该采样器,调用着色器语言内置采样函数texture2D,由计算出的视点索引值选取对应纹理处的颜色值,融合生成片元处的最终颜色值,从而生成具有裸眼3D效果的每一帧图像;S6、实现用户交互接口,自定义消息回调函数,针对交互时键盘鼠标发出的消息,进行相应的处理,以响应来自用户的交互请求。进一步地,步骤S1中,采用拉普拉斯平滑算法实现简化得到的网格结构的平滑操作,具体为:S11、初始化网格的邻接结构集M;S12、新建临时点集用来存储集合M中所有点平滑后的位置;S13、对于所有网格中的顶点V,先初始化临时向量为零向量V0,接着取的邻域点集Padj(p),再对所有领域点T,将其位置加到临时向量Vt里,最后将临时向量Vt的位置存入临时点集中;S14、对所有网格中的顶点P,将P的位置修改为临时点集中对应的位置。进一步地,步骤S2中,视点间隔角度delta是根据最佳观看距离dis为参数的公式计算得出,delta=sin(0.2/dis)米。进一步地,步骤S4中,访问步骤S3所述单视点场景纹理缓冲的具体方法为:编写片元着色器程序,在着色器中声明sampler2D数组,大小设置为之前的视点个数值N,在着色器程序中通过该数组中的每一个元素访问步骤S3所述场景纹理缓冲,通过gl_FragCoord变量访问片元着色器。进一步地,步骤S5中裸眼3D效果图像的实时生成具体实施步骤如下:S51、每一次刷新时将不同视点处的图像采用绘制到纹理技术,此时将帧缓存中的颜色缓冲区RenderBuffer输出到对应纹理对象TextureBuffer上并保存在显存中;S52、改写渲染管线中的片元着色器,将纹理对象以纹理单元TextureUnit编号,在客户端向着色器传入一个uinform变量,表示纹理对象所在纹理单元,片元着色器根据该句柄访问指定纹理对象;S53、通过子像素映射公式,通过纹理采样器Sampler以及glsl内置的纹理采样函数texture2d()选取像素并组合成屏幕对应坐标处像素;S54、首先将屏幕坐标系中的点的二维坐标即着色器语言中的内置变量gl_FragCoord代入以上公式中,从而得出对应于哪一幅图像的索引,之后访问对应视点的图像的纹理对象在对应二维坐标处的颜色信息,最终计算片元的输出值;S55、建立四边形覆盖整个屏幕,则片元着色器输出的像素点适配整个屏幕,片元着色器此时输出的像素数据即为所需求的数据,且直接通过渲染管线输出。进一步地,步骤S6具体为,S61、首先声明并定义回调函数InventorMotionCallback,作为SoWinExaminerViewer组件的消息回调函数,调用setEventCallback函数完成回调函数在SoWinExaminerViewer类中的注册。S62、在InventorMotionCallback函数定义中完成其对于Windows窗口消息的处理工作,并针对用户交互时产生的消息刷新场景,以完成对交互的响应。进一步地,步骤S62具体为,S621、当用户按住鼠标左键拖拽时产生鼠标滑动消息WM_MOUSEMOVE,将二维屏幕坐标本文档来自技高网...

【技术保护点】
1.一种基于渲染管线的交互式实时自由立体显示方法,其特征在于:包括以下步骤,S1、读入需要渲染的模型的顶点数据,利用顶点数据生成网格模型,并利用拉普拉斯平滑算法进行网格简化,得到简化网格模型,传入OpenGL渲染流水线;S2、根据使用场景设置视点个数、虚拟摄像机位,具体为,设置融合图像的视点个数为N、视点间隔角度delta,调用OpenGL API gluLookAt函数和gluPerspective函数,在以原点为中心点,半径为R的弧上根据视点个数N每相隔角度delta摆放N个虚拟摄像机,且使虚拟摄像机阵列以xoz面对称,其中每个虚拟摄像机的光轴为该位置到原点确定的方向向量,虚拟摄像机的法线方向为坐标轴z的正方向,针对每一个虚拟摄像机,使用OpenGL固定管线渲染步骤S1所述简化网格模型,生成单视点渲染场景图;S3、设置渲染窗口分辨率、目标表面材质、光源类型和位置,利用OpenInventor开源库,分别针对每个不同视点的场景,实施场景渲染,具体为,调用OpenGL API,使用glGenBuffers、glBindBuffer和glBufferData三个函数在显存中开辟数据空间PixBufferi即纹理数组,记屏幕横向像素个数为Xw,纵向像素个数为Yw,则其中每块区域所占大小为Xw×Yw×3比特,将步骤S2所述单角度渲染场景图的帧缓冲区中的颜色缓冲区附加到对应的纹理缓冲区对象,调用glFramebufferTexture2D函数将渲染结果以纹理形式保存到显存中,得到单视点场景纹理缓冲;S4、将步骤S3所述不同视点场景纹理缓冲进行融合的像素融合算法具体描述如下:遍历屏幕区域所有像素,根据映射公式...

【技术特征摘要】
1.一种基于渲染管线的交互式实时自由立体显示方法,其特征在于:包括以下步骤,S1、读入需要渲染的模型的顶点数据,利用顶点数据生成网格模型,并利用拉普拉斯平滑算法进行网格简化,得到简化网格模型,传入OpenGL渲染流水线;S2、根据使用场景设置视点个数、虚拟摄像机位,具体为,设置融合图像的视点个数为N、视点间隔角度delta,调用OpenGLAPIgluLookAt函数和gluPerspective函数,在以原点为中心点,半径为R的弧上根据视点个数N每相隔角度delta摆放N个虚拟摄像机,且使虚拟摄像机阵列以xoz面对称,其中每个虚拟摄像机的光轴为该位置到原点确定的方向向量,虚拟摄像机的法线方向为坐标轴z的正方向,针对每一个虚拟摄像机,使用OpenGL固定管线渲染步骤S1所述简化网格模型,生成单视点渲染场景图;S3、设置渲染窗口分辨率、目标表面材质、光源类型和位置,利用OpenInventor开源库,分别针对每个不同视点的场景,实施场景渲染,具体为,调用OpenGLAPI,使用glGenBuffers、glBindBuffer和glBufferData三个函数在显存中开辟数据空间PixBufferi即纹理数组,记屏幕横向像素个数为Xw,纵向像素个数为Yw,则其中每块区域所占大小为Xw×Yw×3比特,将步骤S2所述单角度渲染场景图的帧缓冲区中的颜色缓冲区附加到对应的纹理缓冲区对象,调用glFramebufferTexture2D函数将渲染结果以纹理形式保存到显存中,得到单视点场景纹理缓冲;S4、将步骤S3所述不同视点场景纹理缓冲进行融合的像素融合算法具体描述如下:遍历屏幕区域所有像素,根据映射公式从不同视点处的图像中选取像素通道,其中,i/3的商表示像素横坐标,其范围为0至Xw-1;j表示像素的纵坐标,其范围为0至Yw-1;i/3的余数为0、1、2时分别对应像素(i/3,j)的蓝、绿、红通道,X为液晶显示屏上单个柱状透镜宽度下所能覆盖的子像素个数,ɑ为倾斜透镜与竖直方向的夹角弧度,N为S2所述视点个数,计算结果Nk为当前子像素所对应的场景纹理编号;根据Nk从对应视点的渲染场景图中获得像素通道值,完成所有像素遍历后即得到用于输出的融合图像;S5、利用OpenGL可编程渲染管线特性,使用GLSLshader语言,在片元着色器中实现像素融合算法,将步骤S3所述单视点场景纹理缓冲融合生成最终屏幕输出图像,具体为,向片元着色器中传入uniform变量以表示映射公式中的值ɑ和X,根据步骤S4所述映射公式计算出对应坐标处的像素通道值所对应的场景纹理缓冲编号;通过该采样器,调用着色器语言内置采样函数texture2D,由计算出的视点索引值选取对应纹理处的颜色值,融合生成片元处的最终颜色值,从而生成具有裸眼3D效果的每一帧图像;S6、实现用户交互接口,自定义消息回调函数,针对交互时键盘鼠标发出的消息,进行相应的处理,以响应来自用户的交互请求。2.如权利要求1所述的基于渲染管线的交互式实时自由立体显示方法,其特征在于:步骤S1中,采用拉普拉斯平滑算法得到简化网格模型,具体为:S11、初始化网格的邻接结构集M;S12、新建临时点集用来存储集合M中所有点平滑后的位置;S13、对于所有网格中的顶点V,先初始化临时向量为零向量V0,接着取的邻域点集Padj(p),再对所有领域点T,将其位置加到临时向量Vt里,最后将临时向量Vt的位置存入临时点集中;S14、对所有网格中的顶点P,将P的位置修改为临时点集中对应的位置。3.如权利...

【专利技术属性】
技术研发人员:胡轶宁郑涛谢理哲张宇宁王征
申请(专利权)人:东南大学
类型:发明
国别省市:江苏,32

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

1