三维场景中文字

1 篇文章 0 订阅
1 篇文章 0 订阅

一.三维场景中文字的使用类型

1使用OpenGL位图

使用方法:

使用函数

glRasterPos*()指定屏幕位置,使用glBitmap绘制位图。

使用位图的缺点

如果放大缩小显示,不作处理的话,效果难看。

点阵字库字体种类少

点阵字库通常是由版权的,如汉字库方正。

 

使用微软提供的位图字体和轮廓字体

(1)位图字体

       使用Windows函数wglUseFontBitmaps()提供从系统中读取相应的字符文件来创建位图

 

wgl位图字体的特点:

二维文字,字形信息存储成位图图像的形式。

放大会有锯齿,没有反走样效果。

渲染时一般使用正交投影。(wglUseFontBitmaps以及后面wglUseFontOutlinesWINGDI.h中定义)

 

(2)轮廓字体

    使用Windows函数wglUseFontOutlines (),用法和位图字体很相似,在轮廓字体定义的字体中,字符是一系列直线和弧线。

 

轮廓字体的特点:

文本有了厚度(depth )参数,轮廓字体可以是三维的,使文字像三维物体一样。可以被放大缩小质量不损失。

wgl绘制文字的缺点:

使用wgl函数只能在Windows平台下用,不具有跨平台特性。

效果一般,放大缩小时还是会有锯齿。

灵活性不高,不好给文字加边框显示,文字在南极处看不清楚。

文字重叠时效果比较差,不好做文字避让等其他复杂的效果。

 

3 使用纹理字体

1)使用方法

基本原理是使用有一个纹理来显示任意n*n个不同的字符。记住平均一个字符只有n个像素宽,大概n个像素高。

然后绘制四边形,给他贴上字体纹理中的单个字符的纹理来完成的。(参考资料NeHe教程第24课)

 

使用纹理字体的优点:

使用管理纹理的方式管理文字,更加方便。

使用显示列表管理很小的文字纹理提高效率。

可以给纹理添加mipmap效果,从而改善文字放大缩小时的显示走样的问题。

可以将文字二维三维都渲染,可以增加文字避让的功能。

 

使用纹理字体的缺点:

缺点是只适合英文,不适合中文,因为中文太多了,虽然很多文字我们几乎是用不到,如果每一个字体对应一张纹理很不划算。

中文需要2048*2048大小的纹理,而且只是一种字体

 

4 使用TTF字体

1)TTF字体介绍

TTFTrue Type Font的简称。在Windows/Fonts目录下面后缀为TTF的文件。

TTF是一种矢量字库。因此显示画面时不会出现锯齿或马赛克。

使用FreeType库可以创建非常好看的反走样的字体,做魔兽世界的暴雪公司,以及Quake这样的经典游戏,都是用的TTF字库。(FreeType的免费库http://www.freetype.org)

2)使用TTF字体基本流程

首先连接字库文件。

根据文字编码和所需字体大小取出字槽。

将字槽生成纹理,使用mipmap方式。

将文字纹理贴在指定的位置显示。(参考资料NeHe教程第43课)

3) 使用TTF的优点

反走样的显示效果好。

拥有纹理字体的所有优点。

可选择的字库多,甚至可以定义自己版权字库。

跨平台,windowslinux等平台都支持。

OpenGLD3D图形接口都支持。

 

 

 

 

二.TTF文字的使用方法

 

文字投影方式两种

       二维文字和三维文字,即正交投影和透视投影。

2 文字透视效果,远小近大的效果。

       目标点经纬度位置为原始大小,靠近处放大,远离处缩小,缩放比例在一定范围之间。

文字的边框算法。

       使用绘制8次的方法。

4 文字的反走样处理。

       使用TTF自带的反走样功能和OpenGLmipmap

文字的Billboard

       使用面向屏幕的公告板。

文字避让。

       可以利用脏区记录计算4个方向的避让。

 

三.相关知识点

1 字符Unicode编码

Unicode是一种字符编码方法,是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCSUCS可以看作是"Unicode Character Set"的缩写。

例如字的Unicode编码是6C49

2  Billboard技术

最初是发布消息用的,主要是使用在贴纹理的多边形。

对齐屏幕的公告板(Point-Rotated-Billboard),适合对称球状物体。

面向视点的公告板(Viewpoint-Oriented-Billboard),始终朝向视点。

轴向公告板(Axial-Billboard),适合圆柱对称物体。

 

下面是使用效果:

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值