CN108986193A - 一种三维文字描边绘制方法 - Google Patents
一种三维文字描边绘制方法 Download PDFInfo
- Publication number
- CN108986193A CN108986193A CN201810748625.4A CN201810748625A CN108986193A CN 108986193 A CN108986193 A CN 108986193A CN 201810748625 A CN201810748625 A CN 201810748625A CN 108986193 A CN108986193 A CN 108986193A
- Authority
- CN
- China
- Prior art keywords
- text
- color
- font
- bitmap
- drafting
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种三维文字描边绘制方法,包括以下步骤,基于FreeType字体引擎从TrueType字体文件中获得相应文字的字形信息;通过文字的字形信息将带描边的字绘制到一张L8A8像素格式的位图上;将字体位图创建为L8A8像素格式的纹理载入显存;构建文字顶点数据载入显存;将文本本体颜色和文本描边颜色设置给显卡;通过在可编程管线中实现一种颜色混合算法渲染文字到三维场景;本发明可在消耗很小的系统资源的情况下,通过添加任意颜色的文字描边,有效地解决文字在三维中显示效果模糊、与背景混淆难以看清等问题,提高了三维文字笔画的清晰程度。
Description
技术领域
本发明涉及计算机图形渲染技术领域,尤其涉及一种三维文字描边绘制方法。
背景技术
文字渲染在三维场景渲染中是非常重要的组成部分,比如场景的状态文本信息显示、三维物体属性文本信息的显示、标注文本信息的显示等。三维场景画面细节丰富、色域广,单一颜色的文字在场景中会由于对比度不够、边缘不锐利等原因,导致出现文字模糊、与背景混淆难以看清等问题。
发明内容
为了解决文字在三维中显示出现的模糊、与背景混淆难以看清的问题,本发明提供一种将带描边的文字绘制到L8A8像素格式的纹理上,在GPU的可编程管线中通过一种颜色混合算法输出文字本体和描边的颜色和透明度的方法,从而在消耗很小的系统资源的情况下,通过添加任意颜色的文字描边,提高文字笔画的清晰程度。
为了实现上述目的,本发明采用了如下技术方案:
一种三维文字描边绘制方法,其中,绘制方法包括以下步骤,
S1,基于FreeType字体引擎从TrueType字体文件中获得相应文字的字形信息;
S2,通过文字的字形信息将带描边的字绘制到一张位图上;
S3,将字体位图创建为纹理载入显存;
S4,构建文字顶点数据载入显存,将文本本体颜色和文本描边颜色设置给显卡;
S5,通过在可编程管线中实现一种颜色混合算法渲染文字到三维场景。
进一步地,基于S1,初始化FreeType引擎库,加载TrueType字体文件,创建字体的FT_Face句柄,根据文字的字符编码获取相应文字的字形信息FT_Glyph。
进一步地,基于S2,
A,位图的像素格式为L8A8,每个像素的第一个字节存储字体的灰度,第二个字节存储字体的透明度,灰度的取值范围为0-255,灰度越大表示字体本体颜色的成分越大,灰度越小表示字体描边颜色的成分越大,比如255表示完全输出字体本体颜色,0表示完全输出字体描边的颜色;透明度的取值范围为0-255,透明度越大表示颜色越不透明;
B,绘制带描边的字形到位图时,先绘制一遍加粗一个像素的粗体,将透明度写入位图每个像素的第二个字节,再按正常粗细绘制一遍字体,将透明度信息写入位图每个像素的第一个字节。
进一步地,基于S3,纹理像素格式为L8A8。
进一步地,基于S4,
A,文字顶点数据为一个四边形顶点buffer,顶点buffer中包含顶点位置和纹理坐标信息;
B,文本本体颜色和文本描边颜色是通过文字渲染状态中的漫反射颜色Diffuse、镜面光颜色Specular、环境光颜色Ambient这三个渲染状态中的任意两个设置给显卡。
进一步地,基于S5,在可编程管线的片段程序中,依据如下混合算法计算文字的最终像素颜色值:
OutPutColour=TextureColor.r*DiffuseColour+(1-TextureColor.r)*SpecularColour;
OutPutColour.a=TextureColor.a*OutPutColour.a;
其中:
OutPutColour为最终输出的颜色值;
TextureColor为根据纹理坐标从纹理中采样得到像素颜色值,TextureColor.r即之前所述位图的灰度值,TextureColor.a即之前所述位图的透明度值;
DiffuseColour为漫反射颜色(以漫反射颜色为例,也可以用其他两个渲染状态设置),这里用来表示文字本体的颜色;
SpecularColour为镜面反射颜色(以镜面反射颜色为例,也可以用其他两个渲染状态设置),这里用来表示文字描边的颜色。
与现有技术相比,本发明的有益效果是:有效解决了三维字体显示模糊的问题,在消耗较小的系统资源的情况下,通过添加任意颜色的文字描边,提高了三维文字笔画的清晰度,达到更好的应用效果。
附图说明
图1为本发明绘制方法的流程图;
图2为本发明具体实施方式的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
参照图1-2,一种三维文字描边绘制方法,绘制方法包括以下步骤,
步骤1,基于FreeType字体引擎从TrueType字体文件中获得相应文字的字形信息;
包括步骤:初始化FreeType引擎库,加载TrueType字体文件,创建字体的FT_Face句柄,根据文字的字符编码获取相应文字的字形信息FT_Glyph。
步骤2,通过文字的字形信息将带描边的字绘制到一张位图上;
其中,位图的一个像素只有2个字节以节省内存和显存,位图的像素格式为L8A8,每个像素的第一个字节存储字体的灰度,第二个字节存储字体的透明度,灰度的取值范围为0-255,灰度越大表示字体本体颜色的成分越大,灰度越小表示字体描边颜色的成分越大,比如255表示完全输出字体本体颜色,0表示完全输出字体描边的颜色;透明度的取值范围为0-255,透明度越大表示颜色越不透明;
绘制带描边的字形到位图时,先绘制一遍加粗一个像素的粗体,将透明度写入位图每个像素的第二个字节,再按正常粗细绘制一遍字体,将透明度信息写入位图每个像素的第一个字节。
步骤3,将前述L8A8像素格式的字体位图创建为纹理载入显存;其中,纹理像素格式也为L8A8,节省了显存空间。
步骤4,构建文字顶点数据载入显存,将文本本体颜色和文本描边颜色设置给显卡;
其中,文字顶点数据为一个四边形顶点buffer,顶点buffer中包含顶点位置和纹理坐标信息;
文本本体颜色和文本描边颜色是通过文字渲染状态中的漫反射颜色Diffuse、镜面光颜色Specular、环境光颜色Ambient这三个渲染状态中的任意两个设置给显卡。
步骤5,通过在可编程管线中实现一种颜色混合算法渲染文字到三维场景;
其中,在可编程管线的片段程序中,依据如下混合算法计算文字的最终像素颜色值:
OutPutColour=TextureColor.r*DiffuseColour+(1-TextureColor.r)*SpecularColour;
OutPutColour.a=TextureColor.a*OutPutColour.a;
其中:
OutPutColour为最终输出的颜色值;
TextureColor为根据纹理坐标从纹理中采样得到像素颜色值,TextureColor.r即之前所述位图的灰度值,TextureColor.a即之前所述位图的透明度值;
DiffuseColour为漫反射颜色(以漫反射颜色为例,也可以用其他两个渲染状态设置),这里用来表示文字本体的颜色;
SpecularColour为镜面反射颜色(以镜面反射颜色为例,也可以用其他两个渲染状态设置),这里用来表示文字描边的颜色。
通过使用上述的技术方案,有效地解决了现有技术中三维字体显示中的问题。本发明在消耗很小的系统资源的情况下,通过添加任意颜色的文字描边,提高三维文字笔画的清晰程度,达到了很好的应用效果。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (6)
1.一种三维文字描边绘制方法,其特征在于:绘制方法包括以下步骤,
S1,基于FreeType字体引擎从TrueType字体文件中获得相应文字的字形信息;
S2,通过文字的字形信息将带描边的字绘制到一张位图上;
S3,将字体位图创建为纹理载入显存;
S4,构建文字顶点数据载入显存,将文本本体颜色和文本描边颜色设置给显卡;
S5,通过在可编程管线中实现一种颜色混合算法渲染文字到三维场景。
2.根据权利要求1所述的一种三维文字描边绘制方法,其特征在于,基于S1,初始化FreeType引擎库,加载TrueType字体文件,创建字体的FT_Face句柄,根据文字的字符编码获取相应文字的字形信息FT_Glyph。
3.根据权利要求1所述的一种三维文字描边绘制方法,其特征在于,基于S2,
A,位图的像素格式为L8A8,每个像素的第一个字节存储字体的灰度,第二个字节存储字体的透明度,灰度的取值范围为0-255,灰度越大表示字体本体颜色的成分越大,灰度越小表示字体描边颜色的成分越大,比如255表示完全输出字体本体颜色,0表示完全输出字体描边的颜色;透明度的取值范围为0-255,透明度越大表示颜色越不透明;
B,绘制带描边的字形到位图时,先绘制一遍加粗一个像素的粗体,将透明度写入位图每个像素的第二个字节,再按正常粗细绘制一遍字体,将透明度信息写入位图每个像素的第一个字节。
4.根据权利要求1所述的一种三维文字描边绘制方法,其特征在于,基于S3,纹理像素格式为L8A8。
5.根据权利要求1所述的一种三维文字描边绘制方法,其特征在于,基于S4,
A,文字顶点数据为一个四边形顶点buffer,顶点buffer中包含顶点位置和纹理坐标信息;
B,文本本体颜色和文本描边颜色是通过文字渲染状态中的漫反射颜色Diffuse、镜面光颜色Specular、环境光颜色Ambient这三个渲染状态中的任意两个设置给显卡。
6.根据权利要求1所述的一种三维文字描边绘制方法,其特征在于,基于S5,在可编程管线的片段程序中,依据如下混合算法计算文字的最终像素颜色值:
OutPutColour=TextureColor.r*DiffuseColour+(1-TextureColor.r)*SpecularColour;
OutPutColour.a=TextureColor.a*OutPutColour.a;
其中:
OutPutColour为最终输出的颜色值;
TextureColor为根据纹理坐标从纹理中采样得到像素颜色值,TextureColor.r即之前所述位图的灰度值,TextureColor.a即之前所述位图的透明度值;
DiffuseColour为漫反射颜色(以漫反射颜色为例,也可以用其他两个渲染状态设置),这里用来表示文字本体的颜色;
SpecularColour为镜面反射颜色(以镜面反射颜色为例,也可以用其他两个渲染状态设置),这里用来表示文字描边的颜色。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810748625.4A CN108986193A (zh) | 2018-07-10 | 2018-07-10 | 一种三维文字描边绘制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810748625.4A CN108986193A (zh) | 2018-07-10 | 2018-07-10 | 一种三维文字描边绘制方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108986193A true CN108986193A (zh) | 2018-12-11 |
Family
ID=64536609
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810748625.4A Pending CN108986193A (zh) | 2018-07-10 | 2018-07-10 | 一种三维文字描边绘制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108986193A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111105474A (zh) * | 2019-12-19 | 2020-05-05 | 广州酷狗计算机科技有限公司 | 字体绘制方法、装置、计算机设备及计算机可读存储介质 |
CN112329383A (zh) * | 2020-09-28 | 2021-02-05 | 广州市百果园网络科技有限公司 | 一种文字描边效果实现方法、装置、设备及存储介质 |
CN112329385A (zh) * | 2020-09-28 | 2021-02-05 | 广州市百果园网络科技有限公司 | 一种文字多层描边效果实现方法、装置、设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101625848A (zh) * | 2009-07-28 | 2010-01-13 | 宁波新然电子信息科技发展有限公司 | 面向嵌入式平台的矢量字库实现方法 |
CN102867322A (zh) * | 2012-08-27 | 2013-01-09 | 广东威创视讯科技股份有限公司 | 三维场景中实现中文标注的方法及装置 |
CN104298504A (zh) * | 2014-09-22 | 2015-01-21 | 无锡梵天信息技术股份有限公司 | 基于FreeType字体引擎的实现字体绘制的方法 |
CN105128587A (zh) * | 2015-08-21 | 2015-12-09 | 陈琰 | 一种由3d数字模型制作彩色金属模型的改进方法 |
CN106056661A (zh) * | 2016-05-31 | 2016-10-26 | 钱进 | 基于Direct3D 11的三维图形渲染引擎 |
CN106170085A (zh) * | 2016-08-02 | 2016-11-30 | 江苏维林苑影像科技有限公司 | 一种无镜立体引擎交互方法 |
CN106709863A (zh) * | 2016-12-28 | 2017-05-24 | 杭州趣维科技有限公司 | 一种基于gpu的高效2d矢量图形渲染方法 |
CN107221020A (zh) * | 2017-05-27 | 2017-09-29 | 北京奇艺世纪科技有限公司 | 一种文字纹理绘制方法及装置 |
CN107527377A (zh) * | 2017-08-25 | 2017-12-29 | 扆冰蕾 | 一种基于移动平台的三维虚拟地球悬空中文字符渲染方法 |
-
2018
- 2018-07-10 CN CN201810748625.4A patent/CN108986193A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101625848A (zh) * | 2009-07-28 | 2010-01-13 | 宁波新然电子信息科技发展有限公司 | 面向嵌入式平台的矢量字库实现方法 |
CN102867322A (zh) * | 2012-08-27 | 2013-01-09 | 广东威创视讯科技股份有限公司 | 三维场景中实现中文标注的方法及装置 |
CN104298504A (zh) * | 2014-09-22 | 2015-01-21 | 无锡梵天信息技术股份有限公司 | 基于FreeType字体引擎的实现字体绘制的方法 |
CN105128587A (zh) * | 2015-08-21 | 2015-12-09 | 陈琰 | 一种由3d数字模型制作彩色金属模型的改进方法 |
CN106056661A (zh) * | 2016-05-31 | 2016-10-26 | 钱进 | 基于Direct3D 11的三维图形渲染引擎 |
CN106170085A (zh) * | 2016-08-02 | 2016-11-30 | 江苏维林苑影像科技有限公司 | 一种无镜立体引擎交互方法 |
CN106709863A (zh) * | 2016-12-28 | 2017-05-24 | 杭州趣维科技有限公司 | 一种基于gpu的高效2d矢量图形渲染方法 |
CN107221020A (zh) * | 2017-05-27 | 2017-09-29 | 北京奇艺世纪科技有限公司 | 一种文字纹理绘制方法及装置 |
CN107527377A (zh) * | 2017-08-25 | 2017-12-29 | 扆冰蕾 | 一种基于移动平台的三维虚拟地球悬空中文字符渲染方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111105474A (zh) * | 2019-12-19 | 2020-05-05 | 广州酷狗计算机科技有限公司 | 字体绘制方法、装置、计算机设备及计算机可读存储介质 |
CN112329383A (zh) * | 2020-09-28 | 2021-02-05 | 广州市百果园网络科技有限公司 | 一种文字描边效果实现方法、装置、设备及存储介质 |
CN112329385A (zh) * | 2020-09-28 | 2021-02-05 | 广州市百果园网络科技有限公司 | 一种文字多层描边效果实现方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8239749B2 (en) | Procedurally expressing graphic objects for web pages | |
CN101116111B (zh) | 使用3d光栅化算法的2d/3d线条渲染 | |
JP5307761B2 (ja) | 電子画像のリアルタイムパーソナライゼーション方法及びシステム | |
KR102275712B1 (ko) | 렌더링 방법, 렌더링 장치 및 전자 장치 | |
US7688317B2 (en) | Texture mapping 2-D text properties to 3-D text | |
CN108022285B (zh) | 地图渲染方法及装置 | |
CN110544290A (zh) | 数据渲染方法及装置 | |
CN108986193A (zh) | 一种三维文字描边绘制方法 | |
US9275493B2 (en) | Rendering vector maps in a geographic information system | |
CN112215934A (zh) | 游戏模型的渲染方法、装置、存储介质及电子装置 | |
CN101071508A (zh) | 图像处理装置和图像处理方法 | |
CN104298504A (zh) | 基于FreeType字体引擎的实现字体绘制的方法 | |
CN111221596B (zh) | 字体渲染方法、装置及计算机可读存储介质 | |
CN103729190B (zh) | 在移动终端上多种媒介统一解析显示的方法 | |
RU2439676C2 (ru) | Передача символов в подпиксельном разрешении | |
RU2422902C2 (ru) | Двумерная/трехмерная комбинированная визуализация | |
CN105550973B (zh) | 图形处理单元、图形处理系统及抗锯齿处理方法 | |
CN108961361B (zh) | 生成特效文字图像的方法及系统、计算机设备 | |
CN115439609A (zh) | 基于地图服务的三维模型渲染方法、系统、设备及介质 | |
JPH0664444B2 (ja) | 文字クリップ方法 | |
AU2009201612A1 (en) | Scalable pixel coverage function-map | |
CN112132941B (zh) | 一种文字渲染方法、装置、设备及存储介质 | |
US20020154135A1 (en) | Systems and methods for rendering visual effects that are a function of depth | |
KR20180037839A (ko) | 그래픽스 프로세싱 장치 및 인스트럭션의 실행 방법 | |
CN112614218B (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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20181211 |