CN102169596B - 一种在嵌入式设备上实现3d渲染的方法及装置 - Google Patents
一种在嵌入式设备上实现3d渲染的方法及装置 Download PDFInfo
- Publication number
- CN102169596B CN102169596B CN 201110055722 CN201110055722A CN102169596B CN 102169596 B CN102169596 B CN 102169596B CN 201110055722 CN201110055722 CN 201110055722 CN 201110055722 A CN201110055722 A CN 201110055722A CN 102169596 B CN102169596 B CN 102169596B
- Authority
- CN
- China
- Prior art keywords
- shader
- vertex shader
- fragment shader
- opengl
- fragment
- 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
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明适用于计算机软件领域,提供了一种在嵌入式设备上实现3D渲染的方法及装置,所述方法包括:采用3D建模工具建立3D模型;根据建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器;解析3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染;建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形。本发明结合了OpenGL ES 2.0实现嵌入式设备上的可编程图形渲染,不仅实现了嵌入式设备上的3D图形渲染技术,还给用户带来更好更舒适的视觉体验,而且能够快速接收和响应用户交互操作,提升产品的整体品质。
Description
技术领域
本发明属于计算机软件领域,尤其涉及一种在嵌入式设备上实现3D渲染的方法及装置。
背景技术
近年来,随着计算机技术的不断发展,3D带来的卓越的视觉效果和娱乐功能已成为近年来研究的热点。目前,它在配备有专门针对3D图形渲染的图形加速卡上的PC机和工作站上应用尤为广泛,因为3D渲染需要大量较为复杂的运算。但随着嵌入式设备不断的普及,以及嵌入式设备上的3D图形图像渲染研究也日趋繁荣,然而,嵌入式系统存在的相对较低的处理能力(计算和图形处理能力)、相对较小的存储空间、相对较低的显示分辨率等特点;再者,由于嵌入式系统是专用的计算机系统,嵌入式设备的硬件结构、底层接口千差万别,导致大理的图形图像应用程序在不同的嵌入式设备上的移植相当的困难。因此,现有嵌入式设备上的3D效果基本都是用2D实现的。
发明内容
本发明实施例的目的在于提供一种在嵌入式设备上实现3D渲染的方法及装置,旨在解决难以在嵌入式设备上实现3D渲染的问题。
本发明实施例是这样实现的,一种在嵌入式设备上实现3D渲染的方法,所述方法包括如下步骤:
采用3D建模工具建立3D模型;
根据所述建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器,其中,所述顶点着色器和所述片段着色器的开发为采用OpenGL ES2.0着色语言编写用于实现3D渲染效果的可解析渲染脚本,所述渲染脚本为XML文件;
解析所述3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染;
建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形;
所述步骤根据建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器具体为:
描述需要实现的3D渲染效果;
确定在顶点着色器中实现的部分及在片段着色器中实现的部分;
确定应用程序、顶点着色器和片段着色器的全局状态变量;
确定顶点着色器与片段着色器之间传递的易变变量;
确定渲染效果的算法;
根据所述全局状态变量、易变变量及渲染效果的算法,采用OpenGL ES2.0着色语言开发用于实现3D渲染效果的顶点着色器和片段着色器;
所述步骤解析所述3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染具体为:
解析所述3D模型;
解析所述顶点着色器和片段着色器,提取所需的顶点着色器和片段着色器源码;
顶点着色器和片段着色器执行3D模型;
为所述顶点着色器和片段着色器绑定数据;
绘制3D渲染图形;
其中,所述顶点着色器和片段着色器执行3D模型的具体步骤如下:
A:为应用程序分配OpenGL ES2.0驱动程序内部存储着色器所需的数据结构,其中,OpenGL ES2.0驱动程序用于控制底层图形硬件的共享访问;
B:将自定义的源代码加载到OpenGL ES2.0驱动程序环境中的一个着色器对象上;
C:编译顶点着色器和片段着色器本机代码;
D:将顶点着色器和片段着色器附加至一个程序对象中,所述程序对象是OpenGL ES2.0管理的一种数据结构,充当了顶点着色器和片段着色器对象的容器;
E:将编译好的程序对象链接在一起,产生一个或多个可执行代码;
F:使用OpenGL ES2.0提供的API,将上述产生的一个或多个可执行代码安装为OpenGL ES2.0的当前状态的一部分,以便用它们来渲染之后的所有图形图元。
本发明实施例的另一目的在于提供一种在嵌入式设备上实现3D渲染的装置,所述装置包括:
3D建模单元,用于采用3D建模工具建立3D模型;
渲染效果实现单元,用于根据所述建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器,其中,所述顶点着色器和所述片段着色器的开发为采用OpenGL ES2.0着色语言编写用于实现3D渲染效果的可解析渲染脚本,所述渲染脚本为XML文件;
解析单元,用于解析所述3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染;
显示单元,用于建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形;
所述渲染效果实现单元具体用于:描述需要实现的3D渲染效果;确定在顶点着色器中实现的部分及在片段着色器中实现的部分;确定应用程序、顶点着色器和片段着色器的全局状态变量;确定顶点着色器与片段着色器之间传递的易变变量;确定渲染效果的算法;根据所述全局状态变量、易变变量及渲染效果的算法,采用OpenGL ES2.0着色语言开发用于实现3D渲染效果的顶点着色器和片段着色器;
所述解析单元具体用于:解析所述3D模型,解析所述顶点着色器和片段着色器,提取所需的顶点着色器和片段着色器源码,顶点着色器和片段着色器执行3D模型,为所述顶点着色器和片段着色器绑定数据,绘制3D渲染图形,其中,所述解析单元通过所述顶点着色器和片段着色器执行3D模型时具体用于:为应用程序分配OpenGL ES2.0驱动程序内部存储着色器所需的数据结构,其中,OpenGL ES2.0驱动程序用于控制底层图形硬件的共享访问,将自定义的源代码加载到OpenGL ES2.0驱动程序环境中的一个着色器对象上,编译顶点着色器和片段着色器本机代码,将顶点着色器和片段着色器附加至一个程序对象中,所述程序对象是OpenGL ES2.0管理的一种数据结构,充当了顶点着色器和片段着色器对象的容器,将编译好的程序对象链接在一起,产生一个或多个可执行代码,使用OpenGL ES2.0提供的API,将上述产生的一个或多个可执行代码安装为OpenGL ES2.0的当前状态的一部分,以便用它们来渲染之后的所有图形图元。
在本发明实施例中,结合了目前比较前沿的OpenGL ES2.0实现嵌入式设备上的可编程图形渲染,不仅实现了嵌入式设备上的3D图形渲染技术,还给用户带来更好更舒适的视觉体验,而且能够快速接收和响应用户交互操作,提升产品的整体品质。
附图说明
图1是本发明实施例提供的在嵌入式设备上实现3D渲染的方法的流程图;
图2是本发明实施例提供的采用RenderMonkey实现3D渲染效果的流程图;
图3是本发明实施例提供的镜片光渲染算法示意图;
图4是本发明实施例提供的解析3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染的流程图;
图5是本发明实施例提供的用EGL实现显示窗口的流程图;
图6是本发明实施例提供的在嵌入式设备上实现3D渲染的装置结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,采用OpenGL ES(OpenGL(Open Graphics Library,一个图形程序接口)for Embedded Systems,即OpenGL三维图形API的子集)2.0的应用程序接口和ES SL(OpenGL ES2.0Shading Language,即OpenGLES2.0着色语言)实现各种3D(Three Dimensions,即三维)图在嵌入式设备上的渲染效果。
本发明提供了一种在嵌入式设备上实现3D渲染的方法及装置:
所述方法包括:
采用3D建模工具建立3D模型;
根据所述建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器;
解析所述3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染;
建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形;
所述步骤根据建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器具体为:
描述需要实现的3D渲染效果;
确定在顶点着色器中实现的部分及在片段着色器中实现的部分;
确定应用程序、顶点着色器和片段着色器的全局状态变量;
确定顶点着色器与片段着色器之间传递的易变变量;
确定渲染效果的算法;
根据所述全局状态变量、易变变量及渲染效果的算法,采用OpenGL ES2.0着色语言开发用于实现3D渲染效果的顶点着色器和片段着色器;
所述步骤解析所述3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染具体为:
解析所述3D模型;
解析所述顶点着色器和片段着色器,提取所需的顶点着色器和片段着色器源码;
顶点着色器和片段着色器执行3D模型;
为所述顶点着色器和片段着色器绑定数据;
绘制3D渲染图形;
其中,所述顶点着色器和片段着色器执行3D模型的具体步骤如下:
A:为应用程序分配OpenGL ES2.0驱动程序内部存储着色器所需的数据结构,其中,OpenGL ES2.0驱动程序用于控制底层图形硬件的共享访问;
B:将自定义的源代码加载到OpenGL ES2.0驱动程序环境中的一个着色器对象上;
C:编译顶点着色器和片段着色器本机代码;
D:将顶点着色器和片段着色器附加至一个程序对象中,所述程序对象是OpenGL ES2.0管理的一种数据结构,充当了顶点着色器和片段着色器对象的容器;
E:将编译好的程序对象链接在一起,产生一个或多个可执行代码;
F:使用OpenGL ES2.0提供的API,将上述产生的一个或多个可执行代码安装为OpenGL ES2.0的当前状态的一部分,以便用它们来渲染之后的所有图形图元。
所述装置包括:
3D建模单元,用于采用3D建模工具建立3D模型;
渲染效果实现单元,用于根据所述建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器;
解析单元,用于解析所述3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染;
显示单元,用于建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形;
所述渲染效果实现单元具体用于:描述需要实现的3D渲染效果;确定在顶点着色器中实现的部分及在片段着色器中实现的部分;确定应用程序、顶点着色器和片段着色器的全局状态变量;确定顶点着色器与片段着色器之间传递的易变变量;确定渲染效果的算法;根据所述全局状态变量、易变变量及渲染效果的算法,采用OpenGL ES2.0着色语言开发用于实现3D渲染效果的顶点着色器和片段着色器;
所述解析单元具体用于:解析所述3D模型,解析所述顶点着色器和片段着色器,提取所需的顶点着色器和片段着色器源码,顶点着色器和片段着色器执行3D模型,为所述顶点着色器和片段着色器绑定数据,绘制3D渲染图形,其中,所述解析单元通过所述顶点着色器和片段着色器执行3D模型时具体用于:为应用程序分配OpenGL ES2.0驱动程序内部存储着色器所需的数据结构,其中,OpenGL ES2.0驱动程序用于控制底层图形硬件的共享访问,将自定义的源代码加载到OpenGL ES2.0驱动程序环境中的一个着色器对象上,编译顶点着色器和片段着色器本机代码,将顶点着色器和片段着色器附加至一个程序对象中,所述程序对象是OpenGL ES2.0管理的一种数据结构,充当了顶点着色器和片段着色器对象的容器,将编译好的程序对象链接在一起,产生一个或多个可执行代码,使用OpenGL ES2.0提供的API,将上述产生的一个或多个可执行代码安装为OpenGL ES2.0的当前状态的一部分,以便用它们来渲染之后的所有图形图元。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一:
图1示出了本发明提供的一种在嵌入式设备上实现3D渲染的方法的流程,为了便于说明,仅示出了与本发明实施例相关的部分。
在步骤S101中,采用3D建模工具建立3D模型。
在本发明实施例中,首先通过三维制作软件通过虚拟三维空间构建具有三维数据的模型,即3D建模。3D建模包括NURBS(Non-Uniform RationalB-Splines,即非均匀有理样条曲线)、多边形网格等。3D建模软件包括但不限于3DMAX。可采用包括3DMAX(3D Studio Max,为一种基于PC系统的三维动画渲染和制作软件)在内的多种3D建模软件实现3D建模,获得实现3D渲染效果的数据,具体的3D建模方法可以为多种,在此不做限制。
在步骤S102中,根据建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器。
由于本发明实施例是对嵌入式系统进行3D渲染,而嵌入式系统具有相对较低的处理能力、相对较小的存储空间、相对较低的显示分辨率等硬件资源相对较紧缺的特点,因此,为了在嵌入式系统中实现较好的3D渲染效果,首先根据嵌入式系统的硬件特点,对现有的OpenGL做修改,得到OpenGL ES2.0,采用OpenGL ES2.0开发用于实现3D渲染效果的可解析顶点着色器和片段着色器。其中对现有的OpenGL所做的修改包括:
删除冗余的API函数;
删除实现复杂和使用较少的函数;
删除不常用的数据类型,加入嵌入式系统需要使用的数据类型;
加入定点运算。
然后,在开发环境中,根据建立的3D模型,采用OpenGL ES2.0开发用于实现3D渲染效果的顶点着色器和片段着色器,在本发明实施例中,顶点着色器和片段着色器的开发即为采用OpenGL ES2.0着色语言编写用于实现3D渲染效果的可解析渲染脚本,在此渲染脚本为XML(Extensible MarkupLanguage,即可扩展标记语言)文件。其中,开发环境包括但不限于AMD(Advanced Micro Devices,超威半导体)的RenderMonkey集成开发环境及NVIDIA(nVIDIA Corporation,NASDAQ:NVDA,英伟达)的FX Composer开发环境。
此处以采用RenderMonkey进行3D渲染效果的开发为例来进行详细说明,但并不限于此例。采用RenderMonkey实现3D渲染效果的具体过程如图2所示:
在步骤S201中,描述需要实现的3D渲染效果。
在本发明实施例中,采用RenderMonkey工具进行3D渲染效果的开发前,我们首先要弄明白,我们需要实现什么样的3D渲染效果,并将这些需要实现的3D渲染效果全部具体描述出来。比如:燃烧着的火焰、美丽的山水、不断弹跳的球等。其描述方式包括但不限于文字描述、图像描述等。
在步骤S202中,确定在顶点着色器中实现的部分及在片段着色器中实现的部分。
在本发明实施例中,顶点着色器中主要实现转换和光照;片段着色器主要实现纹理环境、颜色求各、雾化、Alpha测试的工作。根据顶点着色器及片段着色器各自的实现功能确定在顶点着色器中实现的部分及在片段着色器中实现的部分。
在步骤S203中,确定应用程序、顶点着色器和片段着色器的全局状态变量。
在本发明实施例中,由外部应用程序传递至着色器中的变量,就是全局状态变量,全局状态变量用uniform标志。此处,需要确定哪些变量是全局状态变量,这些全局状态变量用OpenGL ES2.0编写的应用程序定义,包括但不限于:模型的顶点、法线、纹理坐标、颜色、时间、变换矩阵,确定这些全局状态变量后将这些全局状态变量传递至顶点着色器或片段着色器中。根据不同的渲染效果传递不同的全局状态变量至顶点着色器或片段着色器中。
在步骤S204中,确定顶点着色器与片段着色器之间传递的易变变量。
在本发明实施例中,易变变量是用于在顶点着色器中与片段着色器中进行通信的变量,比如,在顶点着色器中,我们将转换后的纹理坐标或者光照的系数等易变变量传递至片段着色器中,由片段着色器根据这些易变变量值进行后续的颜色求和。其中,易变变量用varying标志。
在步骤S205中,确定渲染效果的算法。
在本发明实施例中,渲染效果的算法需要利用应用程序传入全局状态变量(如模型顶点、纹理相关信息,变换矩阵,光源位置,粒子的初始速度,粒子的高度等等)后,顶点着色器读取这些全局状态变量,进行相应的变换,再存放至易变变量或内置全局状态变量中。最后,由片段着色器读取这些变量,并按照片段着色器的渲染效果的算法,对各片段颜色值进行求值并存入内置全局状态变量gl_FragColor中,供管线操作。
由于需要的渲染效果不同,具体的渲染效果算法也不同。例如:对于光照而言,根据实际的渲染需要,光照的渲染效果算法就有一定的变换,有时在光照中需要计算高光光照,有时又需要加入材质光照。再如:典型的粒子系统,都有每个粒子的产生、运动、消失三个过程,然而不同的粒子系统中每个粒子又具有不同的属性,根据不同的渲染效果算法产生火焰、雨水、飘雪等不同的渲染效果。
此处以光照渲染效果为例来说明渲染效果算法,但并不限于此例。
光照分量有:散射光、环境光、镜面光,不同的光照根据不同的光照分量就有不同的光照渲染效果算法。
1、散射光照计算
散射光照计算公式为公式Id=Ld*Md*cosθ,其中Ld是定向光源的散色光,Md材质的散色光,θ是定向光源的位置与法线向量的夹角。
2、环境光
环境光的计算公式为公式Ia=Ga*Ma+La*Ma,其中Ga为全局环境光,Ma为材质环境光,La为光源的环境光分量。
3、镜片光
如图3所示,L是入射光,R是反射光,N是法向量,Eye是眼坐标。光照的强度跟Eye和R的夹角的余弦成比例,即图中的角alpha。如果Eye和R重合,光照最强,Eye不断远离R,光照不断衰退,衰退的速率跟参数shininess有关。其中,shininess的取值范围是0-128。
在步骤S206中,采用OpenGL ES2.0着色语言开发用于实现3D渲染效果的顶点着色器和片段着色器。
在本发明实施例中,最后根据3D模型及上述确定的全局状态变量、易变变量、3D渲染效果算法等,采用OpenGL ES2.0着色语言开发用于实现3D渲染效果的顶点着色器和片段着色器。在本发明实施例中,开发顶点着色器和片段着色器即为采用OpenGL ES2.0着色语言编写用于实现3D渲染效果的可解析渲染脚本,在此渲染脚本为XML文件。
在步骤S103中,解析3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染。
在本发明实施例中,解析3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染的具体过程如图4所示,下面将进行详细描述。
在步骤S401中,解析3D模型。
在本发明实施例中,渲染3D图形需要有被渲染的对象,即3D图形,此处用建立好的3D模型来表示。这些模型在三维空间中最终体现为三维坐标形式的点集合。
在步骤S402中,解析顶点着色器和片段着色器,提取所需的顶点着色器和片段着色器源码。
在步骤S403中,顶点着色器和片段着色器执行3D模型。
在本发明实施例中,应用程序通过调用OpenGL ES2.0API与OpenGL ES通信,然后顶点着色器和片段着色器执行3D模型。顶点着色器和片段着色器执行3D模型的具体步骤如下:
A:为应用程序分配OpenGL ES2.0驱动程序内部存储着色器所需的数据结构,其中,OpenGL ES2.0驱动程序用于控制底层图形硬件的共享访问;
B:将自定义的源代码(解析顶点着色器和片段着色器得到)加载到OpenGLES2.0驱动程序环境中的一个着色器对象上;
C:编译顶点着色器和片段着色器本机代码;
D:将顶点着色器和片段着色器附加至一个程序对象中,因为程序对象是OpenGL ES2.0管理的一种数据结构,充当了顶点着色器和片段着色器对象的容器;
E:将编译好的程序对象链接在一起,产生一个或多个可执行代码;
F:使用OpenGL ES2.0提供的API,将上述产生的一个或多个可执行代码安装为OpenGL ES2.0的当前状态的一部分,以便用它们来渲染之后的所有图形图元。
在步骤S404中,为顶点着色器和片段着色器绑定数据。
在本发明实施例中,由外部应用程序向顶点着色器和片段着色器提供想要实现的3D渲染效果的数据,包括但不限于模型数据、纹理图片数据、矩阵变换和光照数据。
在步骤S405中,绘制3D渲染图形。
在本发明实施例中,根据前面所执行的对象装载和渲染状态机的设置,绘制3D渲染图形,系统初次启动时使用默认的一种渲染效果,此时所绘制的3D渲染图形在帧缓冲区中。
在步骤S104中,建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形。
在本发明实施例中,使用EGL(OpenGL ES和底层Native平台视窗系统之间的接口)来实现窗口交互系统的窗口显示,其中,使用EGL实现窗口显示的具体过程如图5所示,下面将详细描述。
在步骤S501中,获取嵌入式设备的显示器。
在步骤S502中,初始化EGL,并基于EGL的属性选择系统配置。
在本发明实施例中,初始化EGL,并根据获得的EGL实现版本号,为新版本和旧版本的EGL附加额外的特性或运行环境,从而为向后兼容提供有用的价值。
在本发明实施例中,平台不同,则显示界面的配置可能会有限制,因此需要根据平台选择一个系统配置,用于描述显示界面的配置信息。
在步骤S503中,创建显示界面。
在本发明实施例中,显示界面是用于绘制3D渲染图形的显示面。
在步骤S504中,创建状态机。
在本发明实施例中,状态机将当前的颜色、纹理坐标、变换矩阵、绚染模式等状态作用于程序提交的顶点坐标等图元从而形成帧缓冲内的像素,在OpenGL ES的编程接口中,这个状态机就是Context,程序的主要工作就是向状态机Context提供图元、设置状态,偶尔也从Context中获取一些信息。
然后,将绘制在帧缓冲区中的3D渲染图形显示在显示界面上。
在本发明实施例中,与嵌入式设备建立本地窗口交互系统,并注册各类交互操作的事件回调函数。由于用户的每一种操作,都由本地窗口系统调用执行响应该操作的函数。通过使用函数指针,将回调函数的地址作为窗口系统或用户函数的传入参数,就能当用户交互事件(例如:按键、关闭窗口等动作)发生时,触发系统去调用参数传入的函数。
在步骤S105中,等待用户发出操作,并在用户发出操作时响应事件,更新3D渲染效果。
在本发明实施例中,采用事件驱动机制实现用户的交互操作。事件驱动的程序设计是一种面向用户的、被动的程序设计方式,程序总是处于等待用户输入事件状态,然后被动地等待用户操作(用户的各种操作被称之为事件)。事件驱动的程序设计方式需要为各种需要处理的事件编写事件响应函数,当用户发出某个操作时,相应的响应函数就会被调用,程序取得事件并做出反应,事件处理完毕后返回,又处于等待事件状态。当没有事件发生时,主循环处于等待状态;事件发生时,主循环开始响应并将足够的信息分派给合适的回答者,当所有的顶级窗口关闭时,主循环退出。
图形显示出来后,如果只有纯粹的显示而没有友好的交互界面,就会成为一种单调的窗口系统。在本发明实施例中,采用事件驱动机制实现用户的交互操作,用户能够与3D图形进行交互操作,比如通过按键对模型进行旋转、移动、伸缩等,或者通过某一按键实现模拟爆炸的效果等。因此,用户可以通过按键或鼠标等交互方式来更新3D模型和渲染效果,从而让用户获得更多、更复杂、更真实的三维视觉体验。
在本发明实施例中,结合了目前比较前沿的OpenGL ES2.0实现嵌入式设备上的可编程图形渲染,不仅实现了嵌入式设备上的3D图形渲染技术,还给用户带来更好更舒适的视觉体验,而且能够快速接收和响应用户交互操作,提升产品的整体品质。
实施例二:
图6为本发明实施例提供的一种在嵌入式设备上实现3D渲染的装置的结构示意,为了便于说明,仅示出了与本发明实施例相关的部份。该装置可以是内置于电脑、嵌入式设备等电子设备中的软件单元、硬件单元或者软硬件相结合的单元,或者作为独立的挂件集成到电脑、嵌入式设备等电子设备中。其中:
3D建模单元61,用于采用3D建模工具建立3D模型。
在本发明实施例中,首先通过三维制作软件通过虚拟三维空间构建具有三维数据的模型,即3D建模。3D建模包括NURBS、多边形网格等。3D建模软件包括但不限于3DMAX。可采用包括3DMAX在内的多种3D建模软件实现3D建模,获得实现3D渲染效果的数据,具体的3D建模方法可以为多种,在此不做限制。
渲染效果实现单元62,用于根据建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器。
在本发明实施例中,在开发环境中,根据建立的3D模型,采用OpenGL开发用于实现3D渲染效果的顶点着色器和片段着色器,在本发明实施例中,开发顶点着色器和片段着色器即为采用OpenGL ES2.0着色语言编写用于实现3D渲染效果的可解析渲染脚本,在此渲染脚本为XML文件。其中,开发环境包括但不限于AMD的RenderMonkey集成开发环境及NVIDIA的FXComposer。
解析单元63,用于解析3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染。
在本发明实施例中,根据解析的3D模型及顶点着色器和片段着色器,绘制3D渲染图形,系统初次启动时使用默认的一种渲染效果,此时所绘制的3D渲染图形在帧缓冲区中。
显示单元64,用于建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形。
在本发明实施例中,使用EGL来实现窗口交互系统的窗口显示,然后在显示界面显示3D渲染图形。
事件单元65,用于等待用户发出操作,并在用户发出操作时响应事件,更新3D渲染效果。
本发明实施例在具体应用中,3D建模单元61及渲染效果实现单元62可以内置于电脑中完成相应操作,解析单元63、显示单元64及事件单元65可内置于嵌入式设备中完成相应操作,但并不限于此应用。
在本发明实施例中,结合了目前比较前沿的OpenGL ES2.0实现嵌入式设备上的可编程图形渲染,不仅实现了嵌入式设备上的3D图形渲染技术,还给用户带来更好更舒适的视觉体验,而且能够快速接收和响应用户交互操作,提升产品的整体品质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种在嵌入式设备上实现3D渲染的方法,其特征在于,所述方法包括下述步骤:
采用3D建模工具建立3D模型;
根据所述建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器,其中,所述顶点着色器和所述片段着色器的开发为采用OpenGL ES2.0着色语言编写用于实现3D渲染效果的可解析渲染脚本,所述渲染脚本为XML文件;
解析所述3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染;
建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形;
所述步骤根据建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器具体为:
描述需要实现的3D渲染效果;
确定在顶点着色器中实现的部分及在片段着色器中实现的部分;
确定应用程序、顶点着色器和片段着色器的全局状态变量;
确定顶点着色器与片段着色器之间传递的易变变量;
确定渲染效果的算法;
根据所述全局状态变量、易变变量及渲染效果的算法,采用OpenGL ES2.0着色语言开发用于实现3D渲染效果的顶点着色器和片段着色器;
所述步骤解析所述3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染具体为:
解析所述3D模型;
解析所述顶点着色器和片段着色器,提取所需的顶点着色器和片段着色器源码;
顶点着色器和片段着色器执行3D模型;
为所述顶点着色器和片段着色器绑定数据;
绘制3D渲染图形;
其中,所述顶点着色器和片段着色器执行3D模型的具体步骤如下:
A:为应用程序分配OpenGL ES2.0驱动程序内部存储着色器所需的数据结构,其中,OpenGL ES2.0驱动程序用于控制底层图形硬件的共享访问;
B:将自定义的源代码加载到OpenGL ES2.0驱动程序环境中的一个着色器对象上;
C:编译顶点着色器和片段着色器本机代码;
D:将顶点着色器和片段着色器附加至一个程序对象中,所述程序对象是OpenGL ES2.0管理的一种数据结构,充当了顶点着色器和片段着色器对象的容器;
E:将编译好的程序对象链接在一起,产生一个或多个可执行代码;
F:使用OpenGL ES2.0提供的API,将上述产生的一个或多个可执行代码安装为OpenGL ES2.0的当前状态的一部分,以便用它们来渲染之后的所有图形图元。
2.如权利要求1所述的方法,其特征在于,所述步骤建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形具体为:
获取嵌入式设备的显示器;
初始化EGL,并基于EGL的属性选择系统配置;
创建显示界面;
创建状态机;
将3D渲染图形显示在显示界面上。
3.如权利要求1所述的方法,其特征在于,所述步骤建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形之后还包括:
等待用户发出操作,并在用户发出操作时响应事件,更新3D渲染效果。
4.一种在嵌入式设备上实现3D渲染的装置,其特征在于,所述装置包括:
3D建模单元,用于采用3D建模工具建立3D模型;
渲染效果实现单元,用于根据所述建立的3D模型开发用于实现3D渲染效果的顶点着色器和片段着色器,其中,所述顶点着色器和所述片段着色器的开发为采用OpenGL ES2.0着色语言编写用于实现3D渲染效果的可解析渲染脚本,所述渲染脚本为XML文件;
解析单元,用于解析所述3D模型及顶点着色器和片段着色器,实现嵌入式设备上的3D渲染;
显示单元,用于建立嵌入式设备本地窗口交互系统,在显示界面显示3D渲染图形;
所述渲染效果实现单元具体用于:描述需要实现的3D渲染效果;确定在顶点着色器中实现的部分及在片段着色器中实现的部分;确定应用程序、顶点着色器和片段着色器的全局状态变量;确定顶点着色器与片段着色器之间传递的易变变量;确定渲染效果的算法;根据所述全局状态变量、易变变量及渲染效果的算法,采用OpenGL ES2.0着色语言开发用于实现3D渲染效果的顶点着色器和片段着色器;
所述解析单元具体用于:解析所述3D模型,解析所述顶点着色器和片段着色器,提取所需的顶点着色器和片段着色器源码,顶点着色器和片段着色器执行3D模型,为所述顶点着色器和片段着色器绑定数据,绘制3D渲染图形,其中,所述解析单元通过所述顶点着色器和片段着色器执行3D模型时具体用于:为应用程序分配OpenGL ES2.0驱动程序内部存储着色器所需的数据结构,其中,OpenGL ES2.0驱动程序用于控制底层图形硬件的共享访问,将自定义的源代码加载到OpenGL ES2.0驱动程序环境中的一个着色器对象上,编译顶点着色器和片段着色器本机代码,将顶点着色器和片段着色器附加至一个程序对象中,所述程序对象是OpenGL ES2.0管理的一种数据结构,充当了顶点着色器和片段着色器对象的容器,将编译好的程序对象链接在一起,产生一个或多个可执行代码,使用OpenGL ES2.0提供的API,将上述产生的一个或多个可执行代码安装为OpenGL ES2.0的当前状态的一部分,以便用它们来渲染之后的所有图形图元。
5.如权利要求4所述的装置,其特征在于,所述装置还包括:
事件单元,用于等待用户发出操作,并在用户发出操作时响应事件,更新3D渲染效果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110055722 CN102169596B (zh) | 2011-03-09 | 2011-03-09 | 一种在嵌入式设备上实现3d渲染的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110055722 CN102169596B (zh) | 2011-03-09 | 2011-03-09 | 一种在嵌入式设备上实现3d渲染的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102169596A CN102169596A (zh) | 2011-08-31 |
CN102169596B true CN102169596B (zh) | 2013-08-14 |
Family
ID=44490745
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110055722 Active CN102169596B (zh) | 2011-03-09 | 2011-03-09 | 一种在嵌入式设备上实现3d渲染的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102169596B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103456035A (zh) * | 2013-09-06 | 2013-12-18 | 福建星网视易信息系统有限公司 | 实现视频三维显示的装置及方法 |
CN109358852A (zh) * | 2018-08-31 | 2019-02-19 | 惠州市德赛西威汽车电子股份有限公司 | 一种使用shader实现车载GUI换肤的方法 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103135973B (zh) * | 2011-11-30 | 2018-05-01 | 腾讯科技(深圳)有限公司 | 一种界面引擎中的图形图像渲染方法和装置 |
CN102609971A (zh) * | 2012-01-11 | 2012-07-25 | 南京大学 | 嵌入式gpu实现3d-gis的快速渲染系统 |
CN102681849A (zh) * | 2012-05-07 | 2012-09-19 | 禹芙蓉 | 手持移动终端的数字时间3d显示方法 |
CN104717567B (zh) * | 2015-03-30 | 2019-04-12 | 北京奇艺世纪科技有限公司 | 一种天气信息的动态展示方法及装置 |
CN105843603B (zh) * | 2016-03-17 | 2019-08-16 | 广州爱九游信息技术有限公司 | 图形处理的方法及装置 |
CN107918958B (zh) * | 2017-11-07 | 2020-10-30 | 珠海金山网络游戏科技有限公司 | 一种可视化和可定制的三维渲染系统及方法 |
CN108648255B (zh) * | 2018-05-10 | 2022-02-08 | 佛山欧神诺云商科技有限公司 | 一种基于异步均衡自定义渲染样品的方法及其装置 |
CN108595284B (zh) * | 2018-05-14 | 2021-11-26 | 武汉斗鱼网络科技有限公司 | 一种纹理共享方法、计算机设备和存储介质 |
CN109118582B (zh) * | 2018-09-19 | 2020-06-16 | 东北大学 | 一种商品三维重建系统及重建方法 |
CN109785687B (zh) * | 2019-01-31 | 2021-11-16 | 北京谦仁科技有限公司 | 一种用于在线视频教学的数据处理方法、装置及系统 |
CN111145330B (zh) * | 2019-12-31 | 2023-06-30 | 广州方硅信息技术有限公司 | 人体模型渲染方法、装置、电子设备及存储介质 |
CN113902609B (zh) * | 2021-03-17 | 2022-06-10 | 广州市保伦电子有限公司 | 一种基于OpenGL嵌入式设备流畅渲染控件动画方法及设备 |
CN116703690B (zh) * | 2022-11-02 | 2024-05-14 | 荣耀终端有限公司 | 图像处理方法和设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350146A (zh) * | 2008-08-26 | 2009-01-21 | 东北大学 | 可视化的快速设计与验证控制教学实验系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020174181A1 (en) * | 2001-04-13 | 2002-11-21 | Songxiang Wei | Sharing OpenGL applications using application based screen sampling |
-
2011
- 2011-03-09 CN CN 201110055722 patent/CN102169596B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350146A (zh) * | 2008-08-26 | 2009-01-21 | 东北大学 | 可视化的快速设计与验证控制教学实验系统 |
Non-Patent Citations (1)
Title |
---|
张晓伟.基于嵌入式的3D游戏图形渲染引擎的设计.《软件导刊》.2009,第8卷(第8期),第185-186页. * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103456035A (zh) * | 2013-09-06 | 2013-12-18 | 福建星网视易信息系统有限公司 | 实现视频三维显示的装置及方法 |
CN109358852A (zh) * | 2018-08-31 | 2019-02-19 | 惠州市德赛西威汽车电子股份有限公司 | 一种使用shader实现车载GUI换肤的方法 |
CN109358852B (zh) * | 2018-08-31 | 2021-08-20 | 惠州市德赛西威汽车电子股份有限公司 | 一种使用shader实现车载GUI换肤的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102169596A (zh) | 2011-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102169596B (zh) | 一种在嵌入式设备上实现3d渲染的方法及装置 | |
Kessenich et al. | OpenGL Programming Guide: The official guide to learning OpenGL, version 4.5 with SPIR-V | |
Rost et al. | OpenGL shading language | |
US8400444B2 (en) | Method to render a root-less scene graph with a user controlled order of rendering | |
EP2939208B1 (en) | Sprite graphics rendering system | |
US7659901B2 (en) | Application program interface for programmable graphics pipeline | |
US10719912B2 (en) | Scaling and feature retention in graphical elements defined based on functions | |
US20100289804A1 (en) | System, mechanism, and apparatus for a customizable and extensible distributed rendering api | |
US7463259B1 (en) | Subshader mechanism for programming language | |
US10628995B2 (en) | Anti-aliasing of graphical elements defined based on functions | |
CN102426691A (zh) | 一种基于gpu的实时火焰效果的模拟方法 | |
US20110043523A1 (en) | Graphics processing apparatus for supporting global illumination | |
KR20070011062A (ko) | 모델 3d 구성 애플리케이션 프로그램 인터페이스 | |
Friedrich et al. | Exploring the use of ray tracing for future games | |
Palmer | Essential Java 3D fast: developing 3D graphics applications in Java | |
CN103543998A (zh) | 基于html5的web3d图形引擎生成方法 | |
WO2024027237A1 (zh) | 渲染的优化方法、电子设备和计算机可读存储介质 | |
CN118397160A (zh) | 一种用于油田站场逆向建站系统的自主化三维渲染引擎 | |
Malizia | Java™ Mobile 3D Graphics | |
Brownlee et al. | GLuRay: Ray Tracing in Scientific Visualization Applications using OpenGL Interception | |
Vitsas et al. | WebRays: Ray tracing on the web | |
Hergaarden | Graphics shaders | |
Malhotra | Issues involved in real-time rendering of virtual environments | |
Nordahl | Enhancing the hpc-lab snow simulator with more realistic terrains and other interactive features | |
Peddie | Application Program Interface (API) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 2306, east block, Skyworth semiconductor design building, 18 Gaoxin South 4th Road, high tech Zone community, Yuehai street, Nanshan District, Shenzhen, Guangdong 518000 Patentee after: Shenzhen Kukai Network Technology Co.,Ltd. Address before: Room 803, block a, Skyworth building, Gaoxin South 1st Road, Nanshan District, Shenzhen, Guangdong 518000 Patentee before: Shenzhen Coocaa Network Technology Co.,Ltd. |
|
CP03 | Change of name, title or address |