一种生成3d文字的方法及装置
技术领域
本发明涉及3D文字生成技术,特别地,涉及一种生成3D文字的方法及装置。
背景技术
在进行特效视频编辑时,将文字3D化并进行动画特效叠加是一种常见的高级视频特效效果。在现有的移动端APP中,极少有可将用户输入文字转化为3D化文字的效果。
少量可实现文字3D化效果的APP中,都存在各种问题。其中第一种是简单地在2D文字的基础上叠加一个面,实现效果上比较粗糙。第二种方式为通过AE等电脑软件导出的3D文字模型,然后用OpenGL去加载,这种构造的3D文字虽然具有完善的3D效果,但因为是导出模型,所以文字内容是固定,用户无法自主改变。
发明内容
为了克服现有技术的不足,本发明提供一种生成3D文字的方法及装置,以解决现有的移动端APP中无法生成3D文字或者生成的3D文字效果比较粗糙或者文字内容固定用户无法自主改变的问题。
本发明解决其技术问题所采用的技术方案是:
一方面,
一种生成3D文字的方法,包括以下步骤:
获取2D文字的轮廓信息,所述轮廓信息包括轮廓点坐标集合以及轮廓索引列表;
根据所述轮廓信息进行三角划分得到2D顶点数据;
根据预设文字厚度和所述2D顶点数据得到3D顶点数据;
根据所述3D顶点数据生成3D文字。
进一步地,所述获取2D文字的轮廓信息包括:
接收用户输入的2D内容,所述2D内容用于添加到视频中,包括至少一个2D文字;
识别每个2D文字的轮廓,得到每个2D文字在对应字体下的轮廓点坐标集合以及轮廓索引列表。
进一步地,所述识别每个2D文字的轮廓包括:采用Freetype2库识别每个2D文字的轮廓。
进一步地,所述根据所述轮廓信息进行三角划分得到2D顶点数据包括:
采用OpenGL开源GLU库对所述轮廓信息进行三角划分。
进一步地,所述根据所述轮廓信息进行三角划分得到2D顶点数据包括:
将轮廓点坐标集合以及轮廓索引列表发送到tessellator中进行划分,所述tessellator中基本元被设置为三角形;
从所述tessellator的成功回调里面得到划分完新增的顶点数据;
将所述顶点数据加到所述轮廓点坐标集合中得到2D顶点数据。
进一步地,所述根据预设文字厚度和所述2D顶点数据得到3D顶点数据包括:
将所述2D顶点数据作为3D文字的前面的坐标和索引数据;
根据预设厚度得到后面的坐标和索引数据;
根据所述前面和后面的坐标和索引数据构建所述3D文字各个侧面所需的坐标和索引数据;所述前面和后面以及各个侧面的坐标和索引数据为3D顶点数据。
进一步地,所述根据所述3D顶点数据生成3D文字包括:
使用OpenGL将所述3D顶点数据生成3D文字。
进一步地,所述使用OpenGL将所述3D顶点数据生成3D文字包括:
将所述3D顶点数据输入到坐标系中,使用OpenGL渲染得到3D轮廓;
接收用户输入的渲染设置对所述3D轮廓进行渲染生成3D文字,所述渲染设置包括光照、材质、文字颜色、漫反射和折射属性设置。
进一步地,还包括:
获取每个2D文字的输入顺序;
当生成3D文字后,根据所述输入顺序对生成的3D文字进行排序。
另一方面,
一种生成3D文字的装置,包括:
2D轮廓信息获取模块,用于获取2D文字的轮廓信息,所述轮廓信息包括轮廓点坐标集合以及轮廓索引列表;
2D顶点数据获取模块,用于根据所述轮廓信息进行三角划分得到2D顶点数据;
3D顶点数据获取模块,用于根据预设文字厚度和所述2D顶点数据得到3D顶点数据;
3D文字生成模块,用于根据所述3D顶点数据生成3D文字。
本申请采用以上技术方案,至少具备以下有益效果:
本申请技术方案提供一种生成3D文字的方法及装置,首先获取2D文字的轮廓信息,然后根据轮廓信息进行三角划分得到2D顶点数据,然后根据预设文字厚度和2D顶点数据得到3D顶点数据;最后根据3D顶点数据生成3D文字。本申请方案生成3D文字时,根据2D轮廓信息进行三角划分获取2D轮廓的顶点数据,然后根据预设文字厚度和2D顶点数据构建3D文字轮廓的顶点数据,最终根据3D顶点数据生成3D文字,生成的3D文字清楚,而且用户可以改变预设文字厚度来改变生成的3D文字的效果,十分方便。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种生成3D文字的方法流程图;
图2是本发明实施例提供的一种3D文字结构示意图;
图3是本发明实施例提供的一种具体的3D文字的方法流程图;
图4是本发明实施例提供的一种生成3D文字的装置结构图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面结合附图和实施例对本发明的技术方案进行详细的描述说明。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本申请所保护的范围。
参照图1,本发明实施例提供一种生成3D文字的方法,包括以下步骤:
获取2D文字的轮廓信息,轮廓信息包括轮廓点坐标集合以及轮廓索引列表;
根据轮廓信息进行三角划分得到2D顶点数据;
根据预设文字厚度和2D顶点数据得到3D顶点数据;
根据3D顶点数据生成3D文字。
本发明实施例提供的一种生成3D文字的方法,首先获取2D文字的轮廓信息,然后根据轮廓信息进行三角划分得到2D顶点数据,然后根据预设文字厚度和2D顶点数据得到3D顶点数据;最后根据3D顶点数据生成3D文字。本申请方案生成3D文字时,根据2D轮廓信息进行三角划分获取2D轮廓的顶点数据,然后根据预设文字厚度和2D顶点数据构建3D文字轮廓的顶点数据,最终根据3D顶点数据生成3D文字,生成的3D文字清楚,而且用户可以改变预设文字厚度来改变生成的3D文字的效果,十分方便。
作为对上述实施例的一种补充说明,获取2D文字的轮廓信息包括:接收用户输入的2D内容,2D内容用于添加到视频中,包括至少一个2D文字;识别每个2D文字的轮廓,得到每个2D文字在对应字体下的轮廓点坐标集合以及轮廓索引列表。示例性的,采用Freetype2库识别每个2D文字的轮廓。Freetype2是一种软件字体引擎,旨在小型,高效,高度可定制和便携式,同时能够产生高质量的输出(字形图像)。它也可以用于图形库,显示服务器,字体转换工具,文本图像生成工具以及许多其他产品。
一些实施例中,根据轮廓信息进行三角划分得到2D顶点数据包括:
采用OpenGL开源GLU库对轮廓信息进行三角划分。OpenGL:(英语:Open GraphicsLibrary,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。Glu库:是OpenGL内部进行数学相关运算的辅助库。
进一步地,根据轮廓信息进行三角划分得到2D顶点数据包括:
将轮廓点坐标集合以及轮廓索引列表发送到tessellator中进行划分,tessellator中基本元被设置为三角形;从tessellator的成功回调里面得到划分完新增的顶点数据;将顶点数据加到轮廓点坐标集合中得到2D顶点数据。
作为本发明实施例一种可选的实现方式:根据预设文字厚度和2D顶点数据得到3D顶点数据包括:
将2D顶点数据作为3D文字的前面的坐标和索引数据;根据预设厚度得到后面的坐标和索引数据;根据前面和后面的坐标和索引数据构建3D文字各个侧面所需的坐标和索引数据;前面和后面以及各个侧面的坐标和索引数据为3D顶点数据。示例性的,如图2所示,a1为前面的一个顶点,a2为后面的一个顶点,根据用户输入的预设厚度和前面的坐标数据,即可自动确定一个后面的坐标数据。然后根据前面和后面的坐标数据生成4个侧面的数据,构建成3D顶点数据。
进一步地,使用OpenGL将3D顶点数据生成3D文字。具体地,将3D顶点数据输入到坐标系中,使用OpenGL渲染得到3D轮廓;得到的3D轮廓如图2所示,接收用户输入的渲染设置对3D轮廓进行渲染生成3D文字,渲染设置包括光照、材质、文字颜色、漫反射和折射属性设置。通过OpenGL渲染等技术,实现3D文字的高效稳定的绘制,使用户可以制作高度自定义的3D文字并对其叠加动画、特效、关键帧等额外编辑。另外,还通过支持给3D文字添加材质、光照效果来进一步优化了3D文字的真实性视感。
最后,获取每个2D文字的输入顺序;当生成3D文字后,根据输入顺序对生成的3D文字进行排序。可以理解的是,在正常情况下,输入字符生成后的3D文字都放置在同一个位置,这样会重叠堆放,不利于展示,因此按照输入顺序进行排序,既不会堆积,又不会展示。示例性的,按照输入顺序进行3D生成,后一个生成的3D文字的摆放位置与前一个生成的3D文字的摆放位置间隔预设距离,预设距离可以根据实际情况设置,在此不再详述。
为了更进一步的说明本申请方案,如图3所示,提供一种具体的在移动端3D文字生成的方法,移动端包括手机、pad等移动设备,具体包括以下步骤:
1.获取2D字符的轮廓信息。2.进行三角划分,得到若干三角形面。3.二维顶点构建三维结构4.使用OpenGL渲染3D字符。5.使用3D字符生成任意内容3D文字
具体实施步骤如下:
(1).获取2D文字的轮廓信息。
本发明使用Freetype2库去识别轮廓。对每个字符,可以直接得到字符在对应字体下的轮廓点坐标集合以及轮廓索引列表。
(2).进行三角划分,得到若干三角形面
对第一步得到轮廓点的集合,进行三角形划分。本发明采用OpenGL开源GLU库进行三角划分。
将轮廓点集合全部发送tessellator中,同时将得到轮廓索引列表发送到tessellator,然后设置划分基本元为三角形,开启tessellator进行划分,在tessellator的成功回调里面得到划分完新增的顶点数据。最后将新增的顶点数据按顺序加到字体轮廓点集合里面,由此得到完整三角划分完的顶点数据。
(3)二维顶点构建三维结构
将第2步得到的轮廓数据作为3D文字的前面,在设置好文字厚度的情况,可以由前面的顶点坐标和索引,通过按照顺序依次改变坐标的z轴(x、y轴坐标不变,z轴坐标加上文字厚度),得到后面的顶点坐标和索引。然后依据前面和后面的坐标和索引,可以构建4个侧面的所需要的顶点坐标和索引,即可得到构建3D结构所需要的所有顶点数据。
(4)使用OpenGL渲染3D文字
1.将得到的所有顶点坐标输入到顶点坐标系中,将3D文字在OpenGL环境中渲染出来。此时渲染出来的字符只是一个3D轮廓,由于缺少光照和材质信息,3D文字的效果比较粗糙,且面与面直接的区分度不大。
2.在OpenGL环境中添加光照,然后给文字模型设置材质信息,包括文字的颜色以及漫反射和折射属性,此时再渲染即可以得到生动3D文字。
(5)使用3D字符生成任意内容3D文字
根据字符排列顺序不同以及单个字符的宽度和高度(由字符顶点坐标即可获得),将每个3D字符平移到合适位置,构建出所需要的文字内容的3D效果文字。
本发明实施例提供的生成方法,基于OpenGL,通过freetype识别轮廓,进行三角划分,渲染出可以随时改变内容的3D文字,通过识别单个字符的轮廓,并通过三角划分,二维图形3D化等手段得到3D字符的顶点数据,然后通过OpenGL渲染不同字符实现3D文字的构建。相对于现有的其他技术而言,此发明生成的3D文字效果比较生动,清晰。同时也支持快速构建任意内容的文字。
一个实施例中,本发明还提供一种生成3D文字的装置,如图4所示,包括:
2D轮廓信息获取模块41,用于获取2D文字的轮廓信息,轮廓信息包括轮廓点坐标集合以及轮廓索引列表;具体地,接收用户输入的2D内容,2D内容用于添加到视频中,包括至少一个2D文字;采用Freetype2库识别每个2D文字的轮廓,得到每个2D文字在对应字体下的轮廓点坐标集合以及轮廓索引列表。
2D顶点数据获取模块42,用于根据轮廓信息进行三角划分得到2D顶点数据;具体地,采用OpenGL开源GLU库对轮廓信息进行三角划分。进一步地,根据轮廓信息进行三角划分得到2D顶点数据包括:将轮廓点坐标集合以及轮廓索引列表发送到tessellator中进行划分,tessellator中基本元被设置为三角形;从tessellator的成功回调里面得到划分完新增的顶点数据;将顶点数据加到轮廓点坐标集合中得到2D顶点数据。
3D顶点数据获取模块43,用于根据预设文字厚度和2D顶点数据得到3D顶点数据;具体地,将2D顶点数据作为3D文字的前面的坐标和索引数据;根据预设厚度得到后面的坐标和索引数据;根据前面和后面的坐标和索引数据构建3D文字各个侧面所需的坐标和索引数据;前面和后面以及各个侧面的坐标和索引数据为3D顶点数据。
3D文字生成模块44,用于根据3D顶点数据生成3D文字。具体地,使用OpenGL将3D顶点数据生成3D文字。进一步地,包括:将3D顶点数据输入到坐标系中,使用OpenGL渲染得到3D轮廓;接收用户输入的渲染设置对3D轮廓进行渲染生成3D文字,渲染设置包括光照、材质、文字颜色、漫反射和折射属性设置。
3D文字排序模块45,用于获取每个2D文字的输入顺序;当生成3D文字后,根据输入顺序对生成的3D文字进行排序。
本发明实施例提供的一种生成3D文字的装置,首先通过2D轮廓信息获取模块获取2D文字的轮廓信息;然后2D顶点数据获取模块根据轮廓信息进行三角划分得到2D顶点数据;之后3D顶点数据获取模块根据预设文字厚度和2D顶点数据得到3D顶点数据;此后3D文字生成模块根据3D顶点数据生成3D文字。最后当生成3D文字后,3D文字排序模块根据输入顺序对生成的3D文字进行排序。通过识别单个字符的轮廓,并通过三角划分,二维图形3D化等手段得到3D字符的顶点数据,然后通过OpenGL渲染不同字符实现3D文字的构建,最后再根据输入顺序进行排序。相对于现有的其他技术而言,此装置生成的3D文字效果比较生动,清晰。同时也支持快速构建任意内容的文字。
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是指至少两个。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。