一种文字渲染方法和文字渲染装置与流程

文档序号:11833065阅读:156来源:国知局
一种文字渲染方法和文字渲染装置与流程

本发明涉及图像处理领域,具体涉及一种文字渲染方法和文字渲染装置。



背景技术:

随着移动开发平台(例如Iphone、Android开发平台)的流行和普及,越来越多的人享受着移动平台带来的视觉体验。OpenGL ES是OpenGL三维图形应用程序编程接口(API,Application Programming Interface)的子集,针对手机、掌上电脑(PDA,Personal Digital Assistant)和游戏主机等嵌入式设备而设计。随着OpenGL ES在智能电视和智能手机等智能终端上的应用,基于3D的视觉体验效果也越来越流行起来随着的发展,更多的三维(即3D)应用程序出现在人们的生活中。相比较二维(即2D)来说,3D图形具有无法比拟的用户体验,但是嵌入式平台资源非常有限,如何在紧张的资源下,开发出响应迅速3D的应用,对快速占领市场、增强用户体验,具有非凡的意义!

目前,3D场景中的文字渲染都是基于纹理渲染,在智能终端的3D界面上文字显示非常多,或者该3D界面上的字体存在不同字号、粗体、斜体显示效果时,就需要将不同效果的文字制作成不同的纹理,用于3D渲染显示。这种方案会大大浪费嵌入式系统的显存,尤其在嵌入式平台内存和显存共用的情况,瓶颈尤其突出,例如,遵循嵌入式纹理2的N次方的规则,一种RGBA颜色空间的512*512纹理,在显存中需要占用512*512*4/1024=1兆(即1M)内存,如果用户界面(UI,User Interface)界面上有20处显示文字的地方,图片分辨率为512*512的话,仅仅文字的纹理就需要消耗20M内存。



技术实现要素:

本发明提供一种文字渲染方法和文字渲染装置,用于减少文字内存的占用 量。

本发明一方面提供一种文字渲染方法,包括:

创建只有alpha通道的纹理;

依次获取待渲染的字体图像进行预处理,使得预处理后的字体图像只包含alpha通道的数据;

将预处理后的字体图像更新到上述纹理中,并记录每张字体图像在上述纹理中的纹理坐标;

遍历渲染树,将上述渲染树中的文字渲染节点的坐标转换为世界坐标系中的坐标;

根据每张字体图像在上述纹理中的纹理坐标以及上述文字渲染节点在上述世界坐标系中的坐标,将各预处理后的文字图像渲染到相应地文字渲染节点中。

本发明另一方面提供一种文字渲染装置,包括:

创建单元,用于创建只有alpha通道的纹理;

预处理单元,用于依次获取待渲染的字体图像进行预处理,使得预处理后的字体图像只包含alpha通道的数据;

更新单元,用于将上述预处理单元预处理后的字体图像更新到上述纹理中;

记录单元,用于记录每张字体图像在上述纹理中的纹理坐标;

遍历转换单元,用于遍历渲染树,将上述渲染树中的文字渲染节点的坐标转换为世界坐标系中的坐标;

渲染单元,用于根据每张字体图像在上述纹理中的纹理坐标以及上述文字渲染节点在上述世界坐标系中的坐标,将各预处理后的文字图像渲染到相应地文字渲染节点中。

由上可见,本发明中通过创建只有alpha通道的纹理,将渲染之前将字体图像预处理为只包含alpha通道的数据的字体图像,使得原来一个像素占四个字节的文字图像转变为一个像素占一个字节的文字图像,从而使得文字纹理内存占用减少为原来的四分之一,有效减少了文字内存的占用量。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1-a为本发明提供的一种文字渲染方法一个实施例流程示意图;

图1-b为本发明提供的一种应用场景下文字图像A的纹理坐标示意图;

图1-c为本发明提供的一种应用场景下渲染树示意图;

图2为本发明提供的一种文字渲染装置一个实施例结构示意图。

具体实施方式

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面以一实施例对本发明中的一种文字渲染方法进行描述,请参阅图1-a,本发明实施例中的文字渲染方法包括:

101、创建只有alpha通道的纹理;

本发明实施例中,alpha通道(即阿尔法通道)是一个8位的灰度通道,该 通道用256级灰度来记录图像中的透明度信息,定义透明、不透明和半透明区域。文字渲染装置首先创建只有alpha通道的纹理,由于一个分辨率为512*512的纹理通常可以存放程序的整个用户界面(UI,User Interface)使用到的字体,因此,在步骤101中,文字渲染装置可以创建分辨率为512*512的纹理,当然,文字渲染装置也可以创建其它分辨率的纹理或者根据UI实际使用到的字体数量创建相应分辨率大小的纹理,此处不作限定。应理解,如果UI使用到的字体数量超过所创建的纹理能容纳的范围,则创建新的只有alpha通道的纹理存放剩余的字体。

102、依次获取待渲染的字体图像进行预处理,使得预处理后的字体图像只包含alpha通道的数据;

本发明实施例中,文字渲染装置可从终端的程序控制台中依次获取待渲染的字体图像进行预处理,举例说明,比如程序的UI中的一个渲染节点,需要渲染“电视管家”四个字,那么文字渲染装置就从程序控制台中的相应位置获取将包含“电视管家”字符串的字体图像,并对包含“电视管家”字符串的字体图像进行预处理,使得预处理后的字图图像只包含alpha通道的数据。

可选的,若文字渲染装置获取的待渲染的字体图像中包含两个以上字体,则将包含两个以上字体的字体图像拆分了包含单个字体的字体图像,之后分别对拆分后得到的字体图像进行上述预处理。举例说明,假设文字渲染装置获取的待渲染的字体图像为包含“电视管家”字符串的字体图像,则分别把该字体图像拆分为“电”、“视”、“管”和“家”四张字体图像,之后分别对这四张字体图像进行上述预处理。具体地,遍历该字体图像中的字符串(即“电视管家”),通过freetype工具生成“电”、“视”、“管”和“家”四张字体图像,之后分别将这四张字体图像解码后,转换为只有alpha通道的数据。

103、将预处理后的字体图像更新到上述纹理中,并记录每张字体图像在 上述纹理中的纹理坐标;

文字渲染装置将预处理后的字体图像更新到步骤101创建的纹理中,并记录每张字体图像在上述纹理中的纹理坐标,具体地,每张字体图像在上述纹理中的纹理坐标的计算方式如下:

XcoordStart=XStart;

YcoordStart=YStart;

XcoordEnd=XStart+mx/Mx

YcoordEnd=YStart+my/My

其中,XcoordStart和YcoordStart分别表示字体图像的左上角顶点的横坐标和纵坐标,XcoordEnd和YcoordEnd分别表示字体图像的右下角顶点的横坐标和纵坐标,XStart和YStart根据上述纹理中从上到下、从左到右的文字图像排列规则获得,表示排完前一个文字图像后,排放另一文字图像的位置坐标点的横坐标值和纵坐标值,mx表示文字图像每一行的像素点数量,my表示文字图像每一列的像素点数量,Mx表示步骤101创建的纹理中每一行的像素点数量,My表示步骤101创建的纹理中每一列的像素点数量。

举例说明,假设步骤101创建的纹理的分辨率为512*512,文字图像A的分别率为64*64,则如图1-b所示,文字图像A的纹理坐标计算方式如下:XcoordStart=XStart;YcoordStart=YStart;XcoordEnd=XStart+64/512;YcoordEnd=YStart+64/512。

具体地,文字渲染装置可以通过glTexSubImage2D函数将预处理后的字体图像更新到纹理中。

可选的,通过基于哈希(即hash)管理的字体缓冲表存储字体、字体图像以及哈希值的映射关系信息,其中,上述哈希值基于如下字体属性中的一项或两项以上计算得到:字体的统一码(即unicode)、字体的颜色、字体的字号、 字体的字形,举例说明,某一字体的unicode为3575,字号为20,则由“3575+20”的字符串计算一个哈希值139dd91374d10c66fc67dd8eb0d32a15,具体地,哈希值的计算过程可以参照已有技术实现,此处不作限定。

在步骤103中,在上述字体缓冲表中将每张字体图像在上述纹理中的纹理坐标与相应字体图像的哈希值进行关联,以便形成字体、字体图像、哈希值和字体图像在上述纹理中的纹理坐标的唯一映射,减少检索次数。具体地,文字渲染装置可以在程序初始化时根据程序的UI预先生成上述字体缓冲表。

104、遍历渲染树,将上述渲染树中的文字渲染节点的坐标转换为世界坐标系中的坐标;

本发明实施例中,上述渲染树在程序启动加载场景时根据层次化组织方式生成,在渲染树中存在一个或多个根节点,每个根节点又存在多个子节点,如图1-c所示的渲染树示意图,根节点为程序UI场景的容器,存放父物体的集合,父物体为可以递归且有叶子节点的子节点,子物体为渲染树的叶子节点。文字渲染装置遍历渲染树,将上述渲染树中的文字渲染节点的坐标转换为世界坐标系中的坐标。

下面对分别对世界坐标系和本地坐标系的定义进行说明。世界坐标系就是将所有物体投射到同一个坐标系的坐标系,对于UI上的所有物体来说,世界坐标系都是相同的并且不会改变。本地坐标系,就是坐标系以物体的中心为坐标原点,物体旋转、平移等操作都是围绕本地坐标系进行的,这时当物体模型进行旋转、平移等操作时,本地坐标系也执行相应的旋转、平移等操作。本地坐标系是一个假想的坐标系,该坐标系与物体的相对位置至始至终是不变的,假想出这个坐标系的目的主要是为了正向理解对三维场景中物体执行的平移和旋转操作。使用本地坐标系理解模型变换时,所有的变换操作直接作用与本地坐标系,由于本地坐标系与物体的相对位置不变,因此对本地坐标系进行平移、 旋转和缩放时,物体在场景中位置和形状也会发生相应的变化。

文字渲染装置在渲染前需要先将渲染树中的各文字渲染节点的坐标转换为世界坐标系中的坐标,即将渲染树中的各文字渲染节从本地坐标系转换到世界坐标系,这一过程又称为世界转换,其作用是把独立的物体放在一个统一的坐标系内,组成一个完整的世界场景。

具体地,文字渲染装置将上述渲染树中的文字渲染节点的坐标转换为世界坐标系中的坐标可以参照已有技术实现,此处不再赘述。

105、根据每张字体图像在上述纹理中的纹理坐标以及上述文字渲染节点在上述世界坐标系中的坐标,将各预处理后的文字图像渲染到相应地文字渲染节点中;

可选的,上述每张字体图像仅包含一个字体,则文字渲染装置根据每张字体图像在上述纹理中的纹理坐标以及上述文字渲染节点在上述世界坐标系中的坐标,将各预处理后的文字图像批处理渲染到相应地文字渲染节点中,以实现文字渲染节点的统一渲染,减少文字渲染节点的渲染次数,提高渲染效率,进而提高用户操作响应速度。传统的渲染方案是针对每张文字图像分别进行渲染,渲染次数为N次,本发明采用批处理方式对N张文字图像进行统一渲染,渲染次数为1次。

具体地,文字渲染装置可以根据每张字体图像在上述纹理中的纹理坐标以及上述文字渲染节点在上述世界坐标系中的坐标,调用glDrawElements函数将各预处理后的文字图像渲染到相应地文字渲染节点中,其中,渲染过程中文字图像的着色部分可以通过着色器(例如shader算法)实现。当然,本发明实施例中,文字渲染装置根据每张字体图像在上述纹理中的纹理坐标以及上述文字渲染节点在上述世界坐标系中的坐标,将各预处理后的文字图像渲染到相应地文字渲染节点中的过程也可以参照其它已有技术实现,此处不再赘述。

需要说明的是,本发明实施例中的文字渲染装置具体可以是集成在各种信息处理终端(例如手机、笔记本、平板电脑、个人计算机(PC,Personal Computer)等)中,或者也可以为独立于信息处理终端,且能够通过有线或者无线方式与信息处理终端进行交互的装置,此处不作限定。

由上可见,本发明中通过创建只有alpha通道的纹理,将渲染之前将字体图像预处理为只包含alpha通道的数据的字体图像,使得原来一个像素占四个字节的文字图像转变为一个像素占一个字节的文字图像,从而使得文字纹理内存占用减少为原来的四分之一,有效减少了文字内存的占用量。

下面以另一实施例对本发明中的一种文字渲染装置进行描述,请参阅图2,本发明实施例中的文字渲染装置200包括:

创建单元201,用于创建只有alpha通道的纹理;

预处理单元202,用于依次获取待渲染的字体图像进行预处理,使得预处理后的字体图像只包含alpha通道的数据;

更新单元203,用于将预处理单元202预处理后的字体图像更新到创建单元201创建的纹理中;

记录单元204,用于记录每张字体图像在上述纹理中的纹理坐标;

遍历转换单元205,用于遍历渲染树,将上述渲染树中的文字渲染节点的坐标转换为世界坐标系中的坐标;

渲染单元206,用于根据每张字体图像在上述纹理中的纹理坐标以及上述文字渲染节点在上述世界坐标系中的坐标,将各预处理后的文字图像渲染到相应地文字渲染节点中。

可选的,预处理单元202还用于:若获取的待渲染的字体图像中包含两个以上字体,则将包含两个以上字体的字体图像拆分了包含单个字体的字体图像;分别对拆分后得到的字体图像进行预处理。

可选的,渲染单元206具体用于:根据每张字体图像在上述纹理中的纹理坐标以及上述文字渲染节点在上述世界坐标系中的坐标,将各预处理后的文字图像批处理渲染到相应地文字渲染节点中。

可选的,渲染单元206具体用于:根据每张字体图像在上述纹理中的纹理坐标以及上述文字渲染节点在上述世界坐标系中的坐标,调用glDrawElements函数将各预处理后的文字图像渲染到相应地文字渲染节点中。

可选的,记录单元204具体用于:在字体缓冲表中将每张字体图像在上述纹理中的纹理坐标与相应字体图像的哈希值进行关联,其中,上述字体缓冲表包含字体、字体图像以及哈希值这三者的映射关系信息,上述哈希值基于如下字体属性中的一项或两项以上计算得到:字体的统一码、字体的颜色、字体的字号、字体的字形。

需要说明的是,本发明实施例中的文字渲染装置具体可以是集成在各种信息处理终端(例如手机、笔记本、平板电脑、PC等)中,或者也可以为独立于信息处理终端,且能够通过有线或者无线方式与信息处理终端进行交互的装置,此处不作限定。

应理解,本发明实施例中的文字渲染装置可以如上述方法实施例中提及的文字渲染装置,可以用于实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述实施例中的相关描述,此处不再赘述。

由上可见,本发明中通过创建只有alpha通道的纹理,将渲染之前将字体图像预处理为只包含alpha通道的数据的字体图像,使得原来一个像素占四个字节的文字图像转变为一个像素占一个字节的文字图像,从而使得文字纹理内存占用减少为原来的四分之一,有效减少了文字内存的占用量。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可 以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上为对本发明所提供的一种文字渲染方法和文字渲染装置的描述,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。

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