三维场景中文字
来源:互联网 发布:海的沉默 知乎 编辑:程序博客网 时间:2024/04/29 05:39
一.三维场景中文字的使用类型
1使用OpenGL位图
使用方法:
使用函数
glRasterPos*()指定屏幕位置,使用glBitmap绘制位图。
使用位图的缺点
如果放大缩小显示,不作处理的话,效果难看。
点阵字库字体种类少
点阵字库通常是由版权的,如汉字库方正。
2 使用微软提供的位图字体和轮廓字体
(1)位图字体
使用Windows函数wglUseFontBitmaps()提供从系统中读取相应的字符文件来创建位图
wgl位图字体的特点:
二维文字,字形信息存储成位图图像的形式。
放大会有锯齿,没有反走样效果。
渲染时一般使用正交投影。(wglUseFontBitmaps以及后面wglUseFontOutlines在WINGDI.h中定义)
(2)轮廓字体
使用Windows函数wglUseFontOutlines (),用法和位图字体很相似,在轮廓字体定义的字体中,字符是一系列直线和弧线。
轮廓字体的特点:
文本有了厚度(depth )参数,轮廓字体可以是三维的,使文字像三维物体一样。可以被放大缩小质量不损失。
wgl绘制文字的缺点:
使用wgl函数只能在Windows平台下用,不具有跨平台特性。
效果一般,放大缩小时还是会有锯齿。
灵活性不高,不好给文字加边框显示,文字在南极处看不清楚。
文字重叠时效果比较差,不好做文字避让等其他复杂的效果。
3 使用纹理字体
1)使用方法
基本原理是使用有一个纹理来显示任意n*n个不同的字符。记住平均一个字符只有n个像素宽,大概n个像素高。
然后绘制四边形,给他贴上字体纹理中的单个字符的纹理来完成的。(参考资料NeHe教程第24课)
使用纹理字体的优点:
使用管理纹理的方式管理文字,更加方便。
使用显示列表管理很小的文字纹理提高效率。
可以给纹理添加mipmap效果,从而改善文字放大缩小时的显示走样的问题。
可以将文字二维三维都渲染,可以增加文字避让的功能。
使用纹理字体的缺点:
缺点是只适合英文,不适合中文,因为中文太多了,虽然很多文字我们几乎是用不到,如果每一个字体对应一张纹理很不划算。
中文需要2048*2048大小的纹理,而且只是一种字体
4 使用TTF字体
1)TTF字体介绍
TTF是True Type Font的简称。在Windows/Fonts目录下面后缀为TTF的文件。
TTF是一种矢量字库。因此显示画面时不会出现锯齿或马赛克。
使用FreeType库可以创建非常好看的反走样的字体,做魔兽世界的暴雪公司,以及Quake这样的经典游戏,都是用的TTF字库。(FreeType的免费库http://www.freetype.org)
2)使用TTF字体基本流程
首先连接字库文件。
根据文字编码和所需字体大小取出字槽。
将字槽生成纹理,使用mipmap方式。
将文字纹理贴在指定的位置显示。(参考资料NeHe教程第43课)
3) 使用TTF的优点
反走样的显示效果好。
拥有纹理字体的所有优点。
可选择的字库多,甚至可以定义自己版权字库。
跨平台,windows,linux等平台都支持。
OpenGL和D3D图形接口都支持。
二.TTF文字的使用方法
二维文字和三维文字,即正交投影和透视投影。
2 文字透视效果,远小近大的效果。
目标点经纬度位置为原始大小,靠近处放大,远离处缩小,缩放比例在一定范围之间。
3 文字的边框算法。
使用绘制8次的方法。
4 文字的反走样处理。
使用TTF自带的反走样功能和OpenGL的mipmap
5 文字的Billboard。
使用面向屏幕的公告板。
6 文字避让。
可以利用脏区记录计算4个方向的避让。
三.相关知识点
1 字符Unicode编码
Unicode是一种字符编码方法,是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。
例如“汉”字的Unicode编码是6C49。
2 Billboard技术
最初是发布消息用的,主要是使用在贴纹理的多边形。
对齐屏幕的公告板(Point-Rotated-Billboard),适合对称球状物体。
面向视点的公告板(Viewpoint-Oriented-Billboard),始终朝向视点。
轴向公告板(Axial-Billboard),适合圆柱对称物体。
下面是使用效果:
- 三维场景中文字
- NGUI界面放到三维场景中方法
- 三维场景中社区的绘制(一)
- 三维场景中社区的绘制(二)
- Open Inventor练习-SoSelection三维场景中查找功能
- Open Inventor练习-SoWin中SoWinExaminerViewer显示三维场景
- Open Inventor练习-SoWin中SoWinRenderArea显示三维场景
- 三维场景中模型纹理按距离压缩方法
- 【SuperMap .Net 组件】场景中添加DEM三维地形
- SLAM: Structure From Motion-移动中三维场景重建
- 如何在ArcGIS中构建生成三维地形地貌场景
- vtk三维场景基本要素
- Arcgis 三维场景模拟
- Arx中文字的三维显示(修改版)
- C#语言在三维中添加图标和文字
- 绘制三维文字----java
- 三维场景中的精度问题
- 三维场景的渲染优化
- 写博,锻炼写文章的努力,必须做到
- C#三种模拟自动登录和提交POST信息的实现方法
- C# .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧(二)
- javascript写俄罗斯方块
- 开张大吉
- 三维场景中文字
- 应用框架
- 动态载入js
- C# 断点续传 上传、下载文件处理
- System.out.println()方法
- 拷贝构造函数和拷贝赋值运算符安全漏洞分析(引用)
- 子网掩码、IP地址、网络号、网络位、主机地址范围
- 普天同庆贺
- 写文档 有整理思路、总结作用,写文档必须让人看得完全明白