CN114049424A - 一种基于三维渲染引擎的文字高效绘制显示方法 - Google Patents
一种基于三维渲染引擎的文字高效绘制显示方法 Download PDFInfo
- Publication number
- CN114049424A CN114049424A CN202111331915.7A CN202111331915A CN114049424A CN 114049424 A CN114049424 A CN 114049424A CN 202111331915 A CN202111331915 A CN 202111331915A CN 114049424 A CN114049424 A CN 114049424A
- Authority
- CN
- China
- Prior art keywords
- character
- texture picture
- picture
- plotting
- rectangular
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
- G06T15/205—Image-based rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Geometry (AREA)
- Image Generation (AREA)
Abstract
本发明涉及一种基于三维渲染引擎的文字高效绘制显示方法,包括如下步骤:步骤1、将多个文字组成的整个文字标绘当成一个矩形来进行绘制,将该整个文字标绘内的所有文字预先从字体文件中读取出来,并且按照文字标绘的版式进行排版,然后输出成一张矩形图片;步骤2、创建多张纹理图片,所述纹理图片的尺寸为半个屏幕到一个屏幕尺寸大小;步骤3、将每一张纹理图片映射到一组文字标绘,所述一组文字标绘包括多个整个文字标绘,每个整个文字标绘对应一张矩形图片,将多张矩形图片进行再排版布置在所述的纹理图片中;其中,所述的纹理图片被切割为多行,矩形图片矩形再排版时步骤在所述的行中。
Description
技术领域
本发明涉及计算机图形处理显示领域,尤其是,一种基于三维渲染引擎的文字高效绘制显示方法。
背景技术
在三维引擎中针对文字的渲染原理其实已经是一个比较成熟的技术了,大致流程基本上都是一致的,如图1所示:首先从字体文件中获取到文字字模,即文字的二维位图数据,然后把字模转化为纹理图片载入到显存,最后渲染到相应的显示位置。这一整套流程我们既可以在腾讯科技(深圳)有限公司申请的专利——《一种文字渲染方法及装置》里面看到,也可以在武汉国遥新天地信息技术有限公司申请的专利——《一种三维文字描边绘制方法》里面也能见到,只是各方的侧重和细节不太一样而已。
在三维渲染引擎中,绘制文字的传统做法是,将每一个被显示的文字从字体文件里面读取出来,排版存储到一张大的纹理图片之中,并对每一个文字建立纹理坐标,使用此纹理图片创建Geometry对象绘制所有文字,在Geometry对象中,每一个文字对应一个矩形,每个矩形映射到纹理图片中的文字。可以发现,每显示出来一个文字都需要绘制一个对应的矩形,即显示的文字数量与矩形数量是相等的,如果显示文字的数量非常庞大时,则需要绘制的矩形数量也会非常庞大,再加上文字位置动态变化,则需要动态更新庞大的矩形顶点数据,这就造成数据更新的延迟,影响到文字显示的流畅性。
在三维渲染引擎中,相比点线面这样的几何对象的绘制,文字的渲染绘制一直是渲染引擎里面消耗资源最多且绘制效率却又是最低的存在。近几年,随着显卡硬件技术的飞速发展,不断升级的高性能显卡在一定程度上缓解了三维渲染引擎实现高效绘制对硬件的基本需求,然而,对于那些追求极致的用户,或者对于那些追求高性价比的用户来说,三维渲染引擎在使用传统方式大批量绘制文字时总是难以达到与硬件相匹配的预期性能效果,即对于中低端显卡,大批量文字渲染时,画面不够流畅;而使用高端显卡则成本过高,不适合应用的普及。
发明内容
针对以上问题,本发明提出一种基于三维渲染引擎的文字高效绘制显示方法,提供优化的文字绘制方式,重点解决以下技术问题:
(1)针对大批量文字的显示绘制进行批量纹理化。
(2)平衡纹理资源利用率与绘制矩形的数量。
(3)批量纹理化过程中的资源分配与回收问题。
本发明的优化方案,使得在中低端显卡上绘制大批量文字标绘时也能获得高效的显示效率。本发明的三维渲染引擎渲染绘制大批量文字时,能够大规模减少文字绘制矩形的数量,从而达到效率优化目的。
本发明的技术方案为:一种基于三维渲染引擎的文字高效绘制显示方法,包括如下步骤:
步骤1、将多个文字组成的整个文字标绘当成一个矩形来进行绘制,将该整个文字标绘内的所有文字预先从字体文件中读取出来,并且按照文字标绘的版式进行排版,然后输出成一张矩形图片;
步骤2、创建多张纹理图片,所述纹理图片的尺寸为半个屏幕到一个屏幕尺寸大小;
步骤3、将每一张纹理图片映射到一组文字标绘,所述一组文字标绘包括多个整个文字标绘,每个整个文字标绘对应一张矩形图片,将多张矩形图片进行再排版布置在所述的纹理图片中;其中,所述的纹理图片被切割为多行,矩形图片矩形再排版时布局在所述的行中。
进一步的,所述步骤2中,每个纹理图片开始被创建出来时,内部的空白可排版区域就是纹理图片的尺寸大小,然后分配整个文字标绘给它,即,将整个文字标绘对应的矩形图片排版到纹理图片中,同时记录这个纹理图片已经使用过和未使用过的区域,循环此过程分配所有文字标绘,直到这个纹理图片用完,即纹理图片没有可使用的区域,或者没有合适大小的区域分配给新的文字标绘对象,这时候可以再次创建一张新的纹理图片来继续分配,循环上面这个过程,直到分配完所有绘制的文字标绘对象。
进一步的,在显示的过程中,文字标绘对象的数量也是动态改变的,既有新增的文字标绘,也有被删除的文字标绘,对于新增的文字标绘,从已有的纹理图片里面寻找空白区域排版它的矩形图片,找不到空白区域就创建新的纹理图片;而对于被删除的文字标绘,则将它占用的纹理图片区域回收,记录到这张纹理图片的空白区域列表中,以便于分配给其它新增的文字标绘对象。
进一步的,对于整个纹理图片的空白区域,将其切分成一行一行的矩形区域,形成一个以行位置和行高为标记的行矩形列表,列表中每一行的矩形区域高度由第一个分配给此行的文字标绘对象来决定,设置为文字标绘对象的矩形图片高度加上两个像素高,其中顶部一个像素高度隔离上面的行,底部一个像素高度隔离下面的行,每一行除了记录行高,还需要记录当前行可使用的起始点横向x值。
进一步的,维护一个空白区域列表,用于存储那些被回收的矩形区域,在被回收的矩形区域列表中,将处于相同行并且相邻的两个空白矩形区域合并成一个空白矩形区域。
在给文字标绘对象分配纹理图片区域时,首先可以从纹理图片中的空白区域列表中查询是否有符合条件的,如果没有,再次从行矩形列表中查询是否有符合条件的,如果还是没有,则最后还可以创建新的纹理图片来满足对文字标绘的分配。
有益效果:
现有技术中三维渲染引擎针对少量的文字标绘,使用原始绘制方式是最优的,然而针对大批量的文字标绘对象,由于渲染矩形数量的庞大使得渲染效率急剧下降,而采用本发明中的方法,在矩形绘制数量上和纹理图片资源利用率上达成一个平衡点,则可以较大的提高大批量文字标绘的渲染效率,本发明的优点也就体现在这些方面:
1、针对大批量文字标绘数据,渲染效率得到极大的提升。
2、对于中低端显卡,在保证画面流畅性的前提下,可显示的文字标绘数量也有了较大的提高。
附图说明
图1文字绘制的通用流程;
图2渲染引擎对于文字绘制的处理;
图3大纹理图片映射多个文字标绘;
图4多纹理图片映射多组文字标绘;
图5纹理图片内部的资源管理。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅为本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域的普通技术人员在不付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。
三维渲染引擎对于文字的绘制,本身就已经做了相应的优化处理,然而这种优化只是针对少量或者中等数量的文字绘制而采取的策略,对于大批量的文字绘制却不是最优的解决方案,本发明正是基于原始解决方案之上提出的更具针对性的优化方法,从而在绘制大批量文字时的效率明显高于原始解决方案。
下面首先介绍三维渲染引擎的原始解决方案。
三维渲染引擎对于文字的绘制过程,具体流程是这样的:渲染引擎将文字标绘中所用到的每一个字符从字体文件中取出来,并且排版到一张大的纹理图片中,然后文字标绘中的每一个字符都生成一个矩形对象,将每个矩形对象的纹理坐标映射到这张纹理图片中对应的字符位置,从而实现文字绘制,如图2所示。
以上过程,可以很清晰的看出渲染引擎针对文字标绘的处理所具备的优点,那就是纹理图片资源利用率达到了最大化,图片占用的内存资源达到了最小化。文字标绘中的字符数量越多,那么出现重复性的字符概率就越高,在纹理图片中只需要包含一次这个字符,就可以在多个标牌中重复性的使用,而我们常用的字符数量总是不会太大,因此纹理图片的尺寸(占用内存)终究不会太大。
然而渲染引擎的这种优化处理也是存在缺陷的,可以看到,每一个文字标绘所包含的每一个字符都需要生成一个矩形对象,那么如果这个标绘里面的字符数量庞大,标绘数量也很庞大,那么可以想象一下,我们需要绘制的矩形对象也就非常可观了,可以称得上海量了,这样势必导致渲染引擎负担过重而影响帧率。海量文字标绘所遇到的情形就是这样。因此可以针对这个问题做一些改进措施。
既然绘制的矩形数量太过庞大,那么就减少矩形数量,方法就是将整个文字标绘当成一个矩形来进行绘制,这就需要将文字标绘内的所有文字预先从字体文件中读取出来,并且按照文字标绘的版式进行排版,然后输出成一张矩形图片。
这张输出的矩形图片理论上是可以单独作为一张纹理图片来绘制对应的文字标绘对象,但是如果我们这样做了,那就是一个文字标绘对应一个单独的纹理图片,也就是一个文字标绘使用一个Geometry对象进行绘制,虽然有一定的优化效果,但是却达不到批量绘制的目的。
根据本发明的实施例,正确的做法应该是,将这些矩形图片进行再排版,输出到一张更大的纹理图片中,然后所有文字标绘都映射到这张大纹理中来,也就形成了多个文字标绘只使用一个Geometry对象进行绘制,从而实现了文字标绘的批量化绘制,如图3所示。
将所有文字标绘都排版到一张大的纹理图片里面来,很明显的依然存在问题,那就是纹理图片的大小随着文字标绘数量的增加,图片尺寸会变得非常大,大到显卡都难以装载的地步,因此需要做进一步的优化处理。
根据本发明的实施例,考虑到一张大的纹理图片排版不了所有的文字标绘,因此,本发明创建多张纹理图片出来,每一张纹理图片映射一组文字标绘。可以固定所有的纹理图片大小尺寸,该纹理图片的大小尺寸选择需要根据情况设定,因为太小了排版不了多少文字标绘,优化效果不太明显;太大了又影响显卡的装载速度,同样影响显示效果,因此优选的,纹理图片的尺寸选择范围一般在半个屏幕尺寸到一个屏幕尺寸大小左右,因为从常理上来看,最大的文字标绘肯定不会超过半个屏幕大小,而显卡也能迅速装载一个屏幕大小左右的图片。如图4所示,选择了长宽都为1024的图片尺寸。
这里面还需要解决一个问题,就是纹理图片的资源分配和回收问题。纹理图片的资源包含两重含义:一重含义是每个纹理图片内部的空白可排版区域;一重含义是所有纹理图片的数量。
每个纹理图片开始被创建出来时,内部的空白可排版区域就是纹理图片的尺寸大小,然后可以分配文字标绘给它,也就是将文字标绘对应的矩形图片排版到纹理图片中,同时记录这个纹理图片已经使用过和未使用过的区域,循环此过程分配所有文字标绘,直到这个纹理图片用完,即纹理图片没有可使用的区域,或者没有合适大小的区域分配给新的文字标绘对象,这时候可以再次创建一张新的纹理图片来继续分配,循环上面这个过程,直到分配完所有绘制的文字标绘对象。
在显示的过程中,文字标绘对象的数量也是动态改变的,既有新增的文字标绘,也有被删除的文字标绘,对于新增的文字标绘,我们从已有的纹理图片里面寻找空白区域排版它的矩形图片,找不到空白区域就创建新的纹理图片;而对于被删除的文字标绘,我们则将它占用的纹理图片区域回收,记录到这张纹理图片的空白区域列表中,以便于分配给其它新增的文字标绘对象。
整个纹理图片的空白区域,可以切分成一行一行的矩形区域,形成一个以行位置和行高为标记的行矩形列表,列表中每一行的矩形区域高度由第一个分配给此行的文字标绘对象来决定,一般是这个文字标绘对象的矩形图片高度加上两个像素高(顶部一个像素高度隔离上面的行,底部一个像素高度隔离下面的行),每一行除了记录行高,还需要记录当前行可使用的起始点(横向x值)。另外还需要维护一个空白区域列表,用于存储那些被回收的矩形区域,在被回收的矩形区域列表中,还可以将处于相同行并且相邻的两个空白矩形区域合并成一个空白矩形区域,如图5所示。
这样我们在给文字标绘对象分配纹理图片区域时,首先可以从纹理图片中的空白区域列表中查询是否有符合条件的,如果没有,再次从行矩形列表中查询是否有符合条件的,如果还是没有,则最后还可以创建新的纹理图片来满足对文字标绘的分配。
Claims (5)
1.一种基于三维渲染引擎的文字高效绘制显示方法,其特征在于,包括如下步骤:
步骤1、将多个文字组成的整个文字标绘当成一个矩形来进行绘制,将该整个文字标绘内的所有文字预先从字体文件中读取出来,并且按照文字标绘的版式进行排版,然后输出成一张矩形图片;
步骤2、创建多张纹理图片,所述纹理图片的尺寸为半个屏幕到一个屏幕尺寸大小;
步骤3、将每一张纹理图片映射到一组文字标绘,所述一组文字标绘包括多个整个文字标绘,每个整个文字标绘对应一张矩形图片,将多张矩形图片进行再排版布置在所述的纹理图片中;其中,所述的纹理图片被切割为多行,矩形图片矩形再排版时布局在所述的行中。
2.根据权利要求1所述的一种基于三维渲染引擎的文字高效绘制显示方法,其特征在于:
所述步骤2中,每个纹理图片开始被创建出来时,内部的空白可排版区域就是纹理图片的尺寸大小,然后分配整个文字标绘给它,即,将整个文字标绘对应的矩形图片排版到纹理图片中,同时记录这个纹理图片已经使用过和未使用过的区域,循环此过程分配所有文字标绘,直到这个纹理图片用完,即纹理图片没有可使用的区域,或者没有合适大小的区域分配给新的文字标绘对象,这时候可以再次创建一张新的纹理图片来继续分配,循环上面这个过程,直到分配完所有绘制的文字标绘对象。
3.根据权利要求1所述的一种基于三维渲染引擎的文字高效绘制显示方法,其特征在于:
在显示的过程中,文字标绘对象的数量也是动态改变的,既有新增的文字标绘,也有被删除的文字标绘,对于新增的文字标绘,从已有的纹理图片里面寻找空白区域排版它的矩形图片,找不到空白区域就创建新的纹理图片;而对于被删除的文字标绘,则将它占用的纹理图片区域回收,记录到这张纹理图片的空白区域列表中,以便于分配给其它新增的文字标绘对象。
4.根据权利要求1所述的一种基于三维渲染引擎的文字高效绘制显示方法,其特征在于:
对于整个纹理图片的空白区域,将其切分成一行一行的矩形区域,形成一个以行位置和行高为标记的行矩形列表,列表中每一行的矩形区域高度由第一个分配给此行的文字标绘对象来决定,设置为文字标绘对象的矩形图片高度加上两个像素高,其中顶部一个像素高度隔离上面的行,底部一个像素高度隔离下面的行,每一行除了记录行高,还需要记录当前行可使用的起始点横向x值。
5.根据权利要求1所述的一种基于三维渲染引擎的文字高效绘制显示方法,其特征在于:
维护一个空白区域列表,用于存储那些被回收的矩形区域,在被回收的矩形区域列表中,将处于相同行并且相邻的两个空白矩形区域合并成一个空白矩形区域;
在给文字标绘对象分配纹理图片区域时,首先可以从纹理图片中的空白区域列表中查询是否有符合条件的,如果没有,再次从行矩形列表中查询是否有符合条件的,如果还是没有,则最后还可以创建新的纹理图片来满足对文字标绘的分配。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111331915.7A CN114049424A (zh) | 2021-11-11 | 2021-11-11 | 一种基于三维渲染引擎的文字高效绘制显示方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111331915.7A CN114049424A (zh) | 2021-11-11 | 2021-11-11 | 一种基于三维渲染引擎的文字高效绘制显示方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114049424A true CN114049424A (zh) | 2022-02-15 |
Family
ID=80208416
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111331915.7A Pending CN114049424A (zh) | 2021-11-11 | 2021-11-11 | 一种基于三维渲染引擎的文字高效绘制显示方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114049424A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117911578A (zh) * | 2024-03-20 | 2024-04-19 | 广州中望龙腾软件股份有限公司 | 一种文字渲染方法、装置、计算机设备和存储介质 |
-
2021
- 2021-11-11 CN CN202111331915.7A patent/CN114049424A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117911578A (zh) * | 2024-03-20 | 2024-04-19 | 广州中望龙腾软件股份有限公司 | 一种文字渲染方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11344806B2 (en) | Method for rendering game, and method, apparatus and device for generating game resource file | |
JP5851607B2 (ja) | 漢字構成方法および装置、文字構成方法および装置、ならびにフォントライブラリ構築方法 | |
US8724914B2 (en) | Image file generation device, image processing device, image file generation method, image processing method, and data structure for image files | |
EP2464093A1 (en) | Image file generation device, image processing device, image file generation method, and image processing method | |
US20140250374A1 (en) | Information processing apparatus, method, and program | |
CN108205960B (zh) | 一种文字渲染的方法和装置、电子地图制作系统及导航系统 | |
CN106327453B (zh) | 一种拼合图片资源的方法及图片资源拼合装置 | |
CN112135073B (zh) | 一种基于fpga的图像字符叠加方法 | |
CN110544291A (zh) | 一种图像渲染方法及装置 | |
US20180357166A1 (en) | Method and apparatus for system resource management | |
CN114049424A (zh) | 一种基于三维渲染引擎的文字高效绘制显示方法 | |
WO2024187347A1 (zh) | 可实时排序多个图元的图像处理方法和系统及电子设备 | |
JP2010123002A (ja) | 文書画像レイアウト装置 | |
JP2882465B2 (ja) | 画像生成方法およびその装置 | |
CN102576296A (zh) | 基于矢量的放大指示器 | |
CN116976280B (zh) | 基于矢量图标的电网gis图元渲染方法及装置 | |
CN103208128A (zh) | 显示图片的方法及装置 | |
CN115270032B (zh) | 一种基于WebGL的动态高清文字显示方法及系统 | |
US20030231176A1 (en) | Memory access device, semiconductor device, memory access method, computer program and recording medium | |
KR20110021714A (ko) | 전자 문서를 페이지별로 컴퓨터 그래픽스로서 공급하는 방법 및 장치 | |
EP0062669A1 (en) | GRAPHICS AND TEXT IMAGE GENERATOR FOR A GRID SCAN DISPLAY. | |
CN114840792A (zh) | 基于网格化处理的Web端疫情分布可视化系统与方法 | |
CN1196534A (zh) | 视窗环境下的文字显示方法 | |
CN106776489B (zh) | 显示设备的电子文档显示方法和系统 | |
CN116883575B (zh) | 建筑群渲染方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |