OpenGL进行文字显示的方法
OSG学习过程中的笔记

一旋转其中trans->setMatrix(osg::Matrix::translate(0,0,20));就是用来平移物体,这个表示象Z轴正方向平移也就是屏幕正上方。
o sg::Matrix::scale(0.5,0.5,0.5)表示缩放的比例,也就是原来物体的一般大小osg::Matrix::rotate(osg::DegreesToRadians(90.0),0,1,0)该方法参数分别表示角度,x,y,z当xyz其中有值是那么物体会绕着物体旋转。
当角度为正值的时候,物体绕着x,y,z箭头指向向右旋转,否则物体绕着x,y,z箭头指向向左旋转osg笔记(一)2011-07-05 19:37:29| 分类:OSG | 标签:|字号大中小订阅场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息。
根节点和各个组节点都可以有零个(实际上是没有执行任何操作)或多个子成员。
在场景图形的最底部,各个叶节点包含了构成场景中物体的实际几何信息。
Osg程序使用组节点来组织和排列场景中的几何体。
场景图形通常包含了多种类型的节点以执行各种各样的用户功能,例如开关节点可以设置其子节点可用或不可用,细节层次节点(LOD)可以根据观察者的距离调用不同的子节点,变换节点可以改变子节点几何体的坐标变换状态。
场景图形特征:1. 提供底层渲染API中具备的几何信息和状态管理功能之外,还兼备以下的附加特征和功能:2. 空间结构:3. 场景拣选,投影面剔除和隐藏面剔除。
4. 细节层次:5. 透明6. 状态改动最少化7. 文件I/O8. 更多高性能函数:全特征文字支持,渲染特效的支持,渲染优化,3d模型文件读写支持,跨平台输入渲染及显示设备的访问.场景图形渲染方式:三种遍历操作1. 更新2. 拣选3. 绘制Osg设计所采用的设计理念和工具:Ansi标准C++C++标准模板库设计模式Osg命名习惯:命名空间:小写字母开头,然后大写字母避免混淆。
VTK中一种显示汉字的方法

Keywords:VTK;Chinese characters;TrueType font
!" 引言
但是 VTK 毕竟是国外开发的软件,目前并不能
三维图像重建是采用可视化软件系统,利用获得 在 Windows 环境下显示汉字,而在很多场合下,尤其
的二维断层图像 ,重建三维图像[2]。目前比较常用 是在手术规划系统中,各种尺寸及说明文字的标注是
如果需要 文 字 有 一 定 的 厚 度, 增 加 文 字 的 立 体 感,可以加上以下代码:
VTKlinearEXtrusiOnfilter* eXtrude = VTKlinearEXtrusiOnfilter::New( );
eXtrude - > Setinpu(t aClipper - > Getoutpu(t )); eXtrude- > SetEXtrusiOnTyp(e 2); eXtrude - > SetScalefactOr( thickness );/ / thickness 为文字厚度 eXtrude - > Updat(e ); !" 实验结果
在医学领域,VTK 在医学重建 和 处 理 工 作 中 已
#" 显示方法
VTK 中 TrueType 文字显示从总体上讲可以分为
如下几个步骤( 图 1)。
1. 1 获取输入字符串各
个文字编码
对于既有汉字又有英
文的字符串来说,由于汉
字采用的是 两 个 字 符 编
码,英文、 数 字 和 其 它 一
些符号采用 一 个 字 符 编
DWORD GetGiyphOutiine(
HDC hdc, / / 设备环境指针
UINT uChar, / / 字符编码
OpenGL使用手册.

OpenGL函数使用手册(一)OpenGL函数库格式:<库前缀><根命令><可选的参数个数><可选的参数类型> 库前缀有 gl、glu、aux、glut、wgl、glx、agl 等等,1,核心函数库主要可以分为以下几类函数:(1) 绘制基本的几何图元函数。
如:glBegain().(2) 矩阵操作、几何变换和投影变换的函数。
如:矩阵入栈glPushMatrix(),还有矩阵的出栈、转载、相乘,此外还有几何变换函数glTranslate*(),投影变换函数glOrtho()和视口变换函数glViewport()等等。
(3) 颜色、光照和材质函数。
(4) 显示列表函数,主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、glEndList()、glGenLists()、glDeleteLists()和glCallList()。
(5) 纹理映射函数,主要有一维和二维纹理函数,设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*()等。
(6) 特殊效果函数。
(7) 选着和反馈函数。
(8) 曲线与曲面的绘制函数。
(9) 状态设置与查询函数。
(10) 光栅化、像素函数。
2,OpenGL实用库(The OpenGL Utility Library)(GLU)包含有43个函数,函数名的前缀名为glu.(1) 辅助纹理贴图函数。
(2) 坐标转换和投影变换函数。
(3) 多边形镶嵌工具。
(4) 二次曲面绘制工具。
(5) 非均匀有理B样条绘制工具。
(6) 错误反馈工具,获取出错信息的字符串gluErrorString() 3,OpenGL辅助库包含有31个函数,函数名前缀名为aux这部分函数提供窗口管理、输入输出处理以及绘制一些简单的三维物体。
4,OpenGL工具库(OpenGL Utility Toolkit)包含大约30多个函数,函数前缀名为glut,此函数由glut.dll来负责解释执行。
BRICSCAD

Bricscad V9安装Bricscad v9的安装和运行独立于Bricscad 先前版本。
9.2.16 版2009年7月6日新建•新的命令行及文字窗口。
o命令行编辑栏可以请使用各种编辑功能。
o可以设置命令行字体、文字大小、背景及前景颜色。
o可以由文字窗口复制文字。
o如粘贴多行文字到命令行,除最一行外所有行都会运行,最后一行则可以进行编辑。
o如粘贴单行文字到命令行,可以进行编辑命令并不会立即运行。
•新的WxWidgets 基础幻灯片彩现。
•快速选定增加支持< 、<= 、> 和>= 选项。
•新建-VPORTS 命令,可依TILEMODE 设置进行VIEWPORTS 或MVIEW 命令。
•增加'ShowFullPathInTitle' 设置,可以控制在标题列显示完整路径或只显示文件名。
•就地所见即所得的多行文字编辑器。
•就地图块及外部参考编辑命令。
•关连式标注及引线。
•性质列介面中的快速选定工具。
•支持ECW及JPEG2000影像。
•BRX SDK: BRX 为与ARX程序码完全兼容的程序介面(仅支持专业版)。
•DIMREGEN 命令可以更新关连标注。
•图层工具栏中LAYON、LAYOFF、LAYFRZ、LAYTHW、LAYLCK、LAYULK、LAYISO和LAYUNISO命令。
•WIPEOUT 命令可绘制遮蔽物件。
•TRANSPARENCY 命令可设置影像透明。
•TXTEXP 命令可分解文字。
•COPYBASE 和PASTEBLOCK 命令。
•AUDIT 命令。
•XATTACH 命令可贴附外部参考。
•重新设计的可自定义状态栏。
•更新说明文件,并添加命令索引及开发指南。
•COM 程序介面:o增加Mirror()、Mirror3D()、ArrayPolar() 和ArrayRectangular() 。
o增加Preferences.Display.GraphicsWinLayoutBackgrndColor、Preferences.Display.XRefFadeIntensity 和Preferences.Profile.ActiveProfile。
OpenGL进行文字显示的方法

O p e n G L进行文字显示的方法Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998任何一个DEMO、仿真项目、游戏,都少不了文字这种媒体。
这不可不说是对图形视觉媒体的补充——我们还有一些无法超越文字来向观众表达的心事,或是补充说明,或是感悟,或是感激。
——一般的文字不属于图形渲染部分,而属于用户界面部分,这在游戏引擎中看或许一目了然,但是在底层的图形渲染API——OPENGL或D3D中,文字的显示“并不是必须”,但它是多么深深地被需要着口牙。
所以,把字体设置、文字显示作为一种图形学技术而非单纯的完全我属或他属,我是这么想的。
(同样,拾取也算是这样吧[])本文来源于ZwqXin(),转载请注明原文地址:怎么表达文字呢在OpenGL中,我们没有什么现成的东西可用,但确实有办法让我们“得到这种技术”。
让我最记忆深刻的是NEHE的两三篇教程(貌似都是十几课吧),讲述的就是今天的这个主题。
可以到或者在DANCINGWIND的中文翻译(见[])看看~。
而我所知道的这三种方法,前两种应该就是来自那里吧(记得~~),当时要努力完成课程DEMO,于是胡胡混混地就把相应的那两三课学了,而且把它的文字显示方法应用到自己的程序中(还经历了一段艰辛的探索史...连我当时的MyFont类也记录了这份小辛酸,现在看来,是因为当时的知识水平不够理解吧)。
然后后来又一个课程DEMO,老师后来觉得我应该“写中文”,于是我又去探索中文字体显示方法了,并在一个开源DEMO中找到,分析代码段后就拿来主义了,至昨不曾好好考究——这就是我所知的第三种方法。
三种方法都是三步曲:在初始化的时候“创建字体”[Build],在渲染阶段“应用字体”(显示文字)[Print],在程序结束或不再需要文字显示的时候“销毁字体”[kill]。
其中前两步比较重要,着重讨论讨论哈~1.常规的屏幕字体打印(NormalFont)应用得比较广,大名鼎鼎的AZURE以前的DEMO就是用这个的。
OpenGL使用手册

OpenGL函数使用手册(一)OpenGL函数库格式:<库前缀><根命令><可选的参数个数><可选的参数类型> 库前缀有gl、glu、aux、glut、wgl、glx、agl 等等,1,核心函数库主要可以分为以下几类函数:(1)绘制基本的几何图元函数。
如:glBegain().(2)矩阵操作、几何变换和投影变换的函数。
如:矩阵入栈glPushMatrix(),还有矩阵的出栈、转载、相乘,此外还有几何变换函数glTranslate*(),投影变换函数glOrtho()和视口变换函数glViewport()等等。
(3)颜色、光照和材质函数。
(4)显示列表函数,主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、glEndList()、glGenLists()、glDeleteLists()和glCallList()。
(5)纹理映射函数,主要有一维和二维纹理函数,设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*()等。
(6)特殊效果函数。
(7)选着和反馈函数。
(8)曲线与曲面的绘制函数。
(9)状态设置与查询函数。
(10)光栅化、像素函数。
2,OpenGL实用库(The OpenGL Utility Library)(GLU)包含有43个函数,函数名的前缀名为glu.(1)辅助纹理贴图函数。
(2)坐标转换和投影变换函数。
(3)多边形镶嵌工具。
(4)二次曲面绘制工具。
(5)非均匀有理B样条绘制工具。
(6)错误反馈工具,获取出错信息的字符串gluErrorString()3,OpenGL辅助库包含有31个函数,函数名前缀名为aux这部分函数提供窗口管理、输入输出处理以及绘制一些简单的三维物体。
4,OpenGL工具库(OpenGL Utility Toolkit)包含大约30多个函数,函数前缀名为glut,此函数由glut.dll来负责解释执行。
OpenGL11-绘制汉字最高效方法(使用Freetype)(代码已更新)

OpenGL11-绘制汉字最⾼效⽅法(使⽤Freetype)(代码已更新)OpenGL本⾝并没有绘制⽂字的功能,他只是⼀个三维绘图的API集和,很多东西都要⾃⼰动⼿才可以实现。
OpenGL绘制⽂字,⽹络上已经有很多成熟的⽅式⽅法,我这⾥给⼤家介绍的是我使⽤的⽅式,从绘制的效率上来说,速度上从已经达到我个⼈⽔平的最⼤值。
如果你有更好的⽅式,请联系我。
⾸先介绍下⽹络上的⼀些绘制⽅式。
⼀、将要绘制的⽂字按照每⼀个字⽣成⼀个⼩纹理的⽅式,然后再⽤将纹理贴到⽹格的表⾯,绘制出来,例如:“博客园-你好”,则会⽣成6个⼩纹理,然后⽣成⽹格,将纹理贴到⽹格的表⾯。
优点:每⼀个字的⼤⼩颜⾊都可选择。
缺点:⽂字多了以后,频繁的切换纹理造成效率低下。
OSG中使⽤了这种⽅式,效率极差,尤其是在⽂字更新的情况下。
⼆、直接将随绘制的⽂本字符串⽣成⼀个纹理数据(⽽不是⼀个⽂字⼀个纹理),这样做效率上⽐第⼀种要好很多,缺点就是更新的时候要重新构建⼀个新的纹理。
速度上有很⼤损失。
两种⽅式的原理图如下: 三、将所绘制的⽂字都放到⼀个较⼤的纹理上去,然后再纹理上做索引,当绘制的时候,去查表。
在将纹理贴到⽹格上绘制出来,这种⽅式,速度很快,很多游戏引擎都在使⽤这种⽅式,存在的问题绘制的⽂字多了以后速度会变慢,占⽤⼤量的cpu时间,当然对于⼩的应⽤已经⾜够了,今天我提出的⽅式也是基于这样⽅式的,只是我在索引上最了⼀些改进,改进之后的算法,将不再进⾏查表操作,⽽是直接索引,⼀定程度上降低了cpu消耗,提搞了效率。
纹理图⽚如下⽰意图:图⽚存的数据上也很重要,结合OpenGL,采⽤GL_ALPHA的上存储,这样可以⼤⼤降低图⽚所占⽤的显存空间,从⽽提⾼效率。
下⾯定义⼀个⽂字所存储的信息,如下所⽰:class Character{public:Character(){x0 = 0;y0 = 0;x1 = 0;y1 = 0;}/*** 存储当前字符在纹理上的坐标位置*/unsigned short x0;unsigned short y0;unsigned short x1;unsigned short y1;};为了快速索引,减少查找的过程,我么要结合字体本上来做⼀些处理,我们知道⼀个汉字要占⽤2个字节两个字节所能表⽰的范围是0-65535,就是6万多个汉字,那么我们就声明⼀个这么⼤的数组来存储字符的信息:代码如下:Character g_charMap[1<<16];当我们要绘制⼀个⽂字的时候,可以直接通过下标就可以直接定位到该字对应的信息了,例如我们绘制'中'就可以直接获取其在图⽚上的内容了:Character getCharacter(wchar_t ch){return g_charMap[ch];}然后这样也存在⼀个问题,即⼀张多⼤的纹理才可以容纳这么多的字符呢?如果是⼀般的应⽤,我们可以忽略这个问题,中国常⽤的汉字只有3000多个,假设是⼀个汉字占16*16的空间,那么⼀个1024*1024的纹理所能容纳的字符有 1024/16 * 1024/16 = 4096个,⾜够满⾜正常的需要,如果你是想做⼀个通⽤的,没有瑕疵的应⽤,我们就要修改我们的设计⽅式,我能⼀切从速度优先的⽅式考虑,我们在上⾯的Character类中增加⼀个字段描述字符所在的纹理句柄,如下:class Character{public:Character(){x0 = 0;y0 = 0;x1 = 0;y1 = 0;texId = 0;}unsigned short x0;unsigned short y0;unsigned short x1;unsigned short y1;//! 索引纹理,即当前字符所在的纹理unsigned texId;};这样,就可以拜托之前的限制,实现⼤规模的绘制⽂字了。
基于Canvas或WebGL实现图像、文字的不规则变形

基于Canvas或WebGL实现图像、⽂字的不规则变形1. 核⼼思路实现图像/⽂字不规则变形的核⼼思路就是将绘制的图像(的矩形区域)拆分为多个三⾓形区域,当基于不同的变形规则对每个三⾓形区域应⽤不⽤的变换(仿射变换)后,整体就呈现出相应的变形效果了,⽽三⾓形越多,变形效果就越好。
这样解释可能有的朋友会有点懵逼,如果是接触过OpenGL/Direct Graphics开发或3D建模的朋友应该很容易理解——在计算机三维世界中再复杂的2D图形或3D模型都是由三⾓形构成的,那么,为什么是三⾓形呢?关于这个问题,根据查阅资料加个⼈理解总结出两点原因:1. 确定⼀个⾯的最少顶点数就是三个,所以⽤三⾓形表⽰⼀个平⾯的成本最低。
2. 任意两个三⾓形之间的变化都可以⽤⼀个变换矩阵来表⽰,换⽽⾔之,三⾓形之间不存在不规则变形。
上⾯两点中,第⼆点很关键,因为超过三条边后,⽐如四边形,就会出现不规则变形,所谓的不规则变形就是⽆法通过仿射变换实现的变化效果,即⽆法通过⼀个变换矩阵来描述。
⽐如:将图像由原始的矩形变形到等腰梯形就是⼀个不规则变形了:可以看出,上⾯的梯形的变形效果可以由左上、右下两个三⾓形的变换来组成,但是对⾓线上的过渡就⽐较⽣硬了;如果将这⾥的矩形和梯形拆分为更多的三⾓形,那么变形效果就会变得更细腻:总之,通过将图像拆分为多个三⾓形,就能把图像上复杂的变形效果分解为多个不同的仿射变换,从⽽降低了问题的复杂程度,也是⽤到了分治法的思想。
2. Canvas版实现弯曲变形的效果如下所⽰,具体的功能可以打开体验。
从上图中可以看出,弯曲变形其实就是将图像/⽂字(区域)的形状由原本的矩形变成⼀个半扇形。
在实际绘制中可以⽤⼀个个等腰梯形(每个可以分为两个三⾓形)拼出⼀个半扇形,因为当图像原始矩形区域按⽔平和垂直分为多段并拆分为多个矩形时,图像进⾏弯曲变形后,这些矩形也变成半扇形了,但将其四个⾓点连接就变成等腰梯形了。
分段数越多,这些⼩的半扇形和梯形就越相似,⽽整体就越接近⼀个标准的半扇形了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
任何一个DEMO、仿真项目、游戏,都少不了文字这种媒体。
这不可不说是对图形视觉媒体的补充——我们还有一些无法超越文字来向观众表达的心事,或是补充说明,或是感悟,或是感激。
——一般的文字不属于图形渲染部分,而属于用户界面部分,这在游戏引擎中看或许一目了然,但是在底层的图形渲染API——OPENGL或D3D中,文字的显示“并不是必须”,但它是多么深深地被需要着口牙。
所以,把字体设置、文字显示作为一种图形学技术而非单纯的完全我属或他属,我是这么想的。
(同样,拾取也算是这样吧?[乱弹OpenGL选择-拾取机制Ⅰ])本文来源于ZwqXin(/), 转载请注明原文地址:/archives/opengl/opengl-font-setting-showing.html怎么表达文字呢?在OpenGL中,我们没有什么现成的东西可用,但确实有办法让我们“得到这种技术”。
让我最记忆深刻的是NEHE的两三篇教程(貌似都是十几课吧),讲述的就是今天的这个主题。
可以到NEHE网站或者在DANCINGWIND的中文翻译(见[搜集的优良OpenG L教程] )看看~。
而我所知道的这三种方法,前两种应该就是来自那里吧(记得~~),当时要努力完成课程DEMO,于是胡胡混混地就把相应的那两三课学了,而且把它的文字显示方法应用到自己的程序中(还经历了一段艰辛的探索史...连我当时的MyFont类也记录了这份小辛酸,现在看来,是因为当时的知识水平不够理解吧)。
然后后来又一个课程DEMO,老师后来觉得我应该“写中文”,于是我又去探索中文字体显示方法了,并在一个开源DEMO中找到,分析代码段后就拿来主义了,至昨不曾好好考究——这就是我所知的第三种方法。
三种方法都是三步曲:在初始化的时候“创建字体”[Build],在渲染阶段“应用字体”(显示文字)[Print],在程序结束或不再需要文字显示的时候“销毁字体”[kill]。
其中前两步比较重要,着重讨论讨论哈~1. 常规的屏幕字体打印(NormalFont)应用得比较广,大名鼎鼎的AZURE以前的DEMO就是用这个的。
NEHE教程中作为首次出现的字体显示方法,介绍应该比较全面,大家想仔细了解的话请务必从上面网址进入学习(当然还有因为我理解不透不敢乱讲的缘由)。
1. /////////一般的英语字体打印2.void MyFont::BuildGLFont(int fontHeight)3.{4. HDC hDC =::GetDC(HWND_DESKTOP); //////就是这里搞晕了半晚5.6. int tFontHeight = -1 * fontHeight;7.8. NormalFontBase = glGenLists(96); // Storage For 96 Characters9. HFONT font = CreateFont( -tFontHeight, // Height Of Font10. 0, // Width Of Font11. 0, // Angle Of Escapement12. 0, // Orientation Angle13. FW_BOLD, // Font Weight14. TRUE, // Italic15. FALSE, // Underline16. FALSE, // Strikeout17. ANSI_CHARSET, // Character Set Identifier18. OUT_TT_PRECIS, // Output Precision19. CLIP_DEFAULT_PRECIS, // Clipping Precision20. ANTIALIASED_QUALITY, // Output Quality21. FF_DONTCARE|DEFAULT_PITCH, // Family And Pitch22. "Georgia"); // Font Name23.24. HFONT oldfont = (HFONT)SelectObject(hDC, font); // Selects The Font We Want25.26. wglUseFontBitmaps(hDC, 32, 96, NormalFontBase); // Builds 96 Characters Starting At Character 3227.28. SelectObject(hDC, oldfont); // Selects The Font We Want to return to29. DeleteObject(font); // Delete The Font30.31. SetBkMode(hDC,TRANSPARENT);32.33. NormalFont = true;34.}其中bUild的时候首先用到的是GDI的CreateFont函数创建字体——这应该是比较常用的方法,设置了关于字体的一切并选入字体后,有一步重要的操作:wglUseFontBitmaps。
1.2.wglUseFontBitmap3.为当前选中的GDI字体创建一组OpenGL显示列表位图字体4.BOOL wglUseFontBitmap(HDC hDC, DWORD dwFirst, DWORD dwCount, DWORD dwListBase);5.6.参数7.hDC8.设备环境句柄9.10.dwFirst11.用于创建显示列表字体的第一个字符的ASCII值12.13.dwCount14.字符数15.16.dwListBase17.第一个显示列表的名称18.19.返回值20.成功返回TRUE,否则返回FALSE21.输入为DC,32,96以及创建的96个新显示列表的base列表。
函数绘制从ASCII码为3 2-128的字符进入显示列表,依赖OPENGL显示列表的高速显示能力(直接从硬件拿存储区),可以方便进行字符的切换。
在Print过程中,调用glCallLists就能调动起这些列表了,但是怎么决定具体要“调动”哪些字母呢(96个之中)?1.void MyFont::PrintGLText(GLint x, GLint y, const char *string, ...)2. char text[256];3. va_list pArguments;4.5. if (string == NULL)6. return;7.8. va_start(pArguments, string);9. vsprintf(text, string, pArguments);10. va_end(pArguments);11.12.13. glPushAttrib(GL_LIST_BIT | GL_CURRENT_BIT | GL_ENABLE_BIT | GL_LIGHTING_BIT);14. glDisable(GL_DEPTH_TEST);15. glDisable(GL_LIGHTING);16. glDisable(GL_TEXTURE_2D);17. glColor4f(mColor[0], mColor[1], mColor[2], mColor[3]);18.19. glWindowPos2i(x, y);20.21. glListBase(NormalFontBase - 32);22. glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);23. glPopAttrib();24.}首先看函数形式——printf形式,若想有个详细了解,可到这里看看。
简单来说,就是C时代的可变参数列。
va_start - vsprintf - (va_arg)- va_end这套机制就是为了把可变参数列的内容,通过va_list (char*指针)一个一个从栈中取出来赋予他者——我们的glCallLists所要接受的所有“具体字符”,通过base为基础的索引快速寻觅而取得对应ASCII字符的字体信息(实际是位图字体),并依照期望使其形成为“具体字符串”印入屏幕。
另外着重介绍的是我所添加的两个优化——它们贯穿三种文字显示方法之中。
其一是glPushAttrib,它与glPopAttrib配合,保证了其之间的OPENGL状态设置的独立性,使其不影响该代码逻辑的前后的具体渲染状态。
当然参数取GL_ALL_ATTRIB_BITS是保险点,但只要你弄清楚自己的需要,像上面这样给予特定的状态作为参数效率会更高。
恩,颜色,光照,深度测试,混合……选择与当前方法最匹配的状态而没有对状态机的后顾之忧,如同文字本身一样——作为对象完全独立于图形渲染“模块”。
另一是glWindowPos2i(x, y),按《OpenGL编程指南》第8章所说,它取代我们以前用的glRasterPos2i,不再让作为描绘对象的物体承受模型-视图-投影变换之苦[乱弹OpenGL中的矩阵变换(上)] ,而是直接独立到OPENGL世界的出口——屏幕坐标系,如GDI般用窗口坐标(根据屏幕像素数)来描述文字的起点位置。
这同样是赋予文字的独立性,而且意义重大——可知道,当时我用glRasterPos2i多么狼狈,好难才让文字不在场景“里面”乱窜。
在具体应用中,在初始化调用BuildGLFont.,在渲染阶段调用PrintGLText。
譬如:1.//CMAINFRAME2.MyFont mFont;3.4.//初始化:5.mFont.BuildGLFont(25);//25是字体字高,控制字体大小6.7.//渲染阶段(RenderGLScene)8.9.mFont.PrintGLText(530, 710, " - My 3D Graphics");10.11.//将在坐标X = 530, Y =710位置开始绘制文字。
对1024*768大小的渲染窗口中,即在右上角注意,OpenGL窗口坐标系的原点在窗口的左下角,横坐标为X,竖坐标为Y,最大值在右上角。
(同见[乱弹OpenGL选择-拾取机制Ⅱ] )浏览一下效果,第一行就是了,因为我默认用的是Georgia字体(应该一般人电脑都有),所以很漂亮接下来会谈及其余两种方法,并比较之。
真正的纹理文字是怎样弄的呢?怎样让中文字体乖乖显示?什么时候用哪种方法?我集成的MyFont类是怎样个怪样?听下回分解:在OpenGL上设置字体和显示文字(下)本文来源于ZwqXin(/), 转载请注明原文地址:/archives/opengl/opengl-font-setting-showing.htmlTags: OpenGL代码工具类C 分类:OpenGL技术| 评论:1 | 引用:0 | 浏览:7399«水效果Ⅰ- 水池在OpenGL上设置字体和显示文字(下) »分享到新浪微博QQ空间腾讯微博人人网豆瓣0∙点击这里获取该日志的TrackBack引用地址∙相关文章:乱弹OpenGL选择-拾取机制(下) (2009-6-14 23:3:8)乱弹OpenGL选择-拾取机制(上) (2009-6-13 16:54:2)子类调用父类的纯虚函数之问题 (2009-6-8 23:18:32)视锥类CFrustum .zwqxin ver (2009-6-2 22:39:52)标准MFC在OpenGL (2009-5-31 17:46:47)QuickSort 快速排序的实现 (2009-5-6 1:21:55)全屏反锯齿- 多重采样Ⅱ (2009-5-3 19:50:7)全屏反锯齿- 多重采样Ⅰ (2009-5-2 16:21:56)图像处理里的空间域滤波 (2009-4-27 23:53:18)一年前,首次献给OpenGL之夜.雷达追踪 (2009-4-5 22:18:52)在OpenGL上设置字体和显示文字(下)2009-8-6 10:22:27 | 发布:zwqxin本篇紧随上篇,继续说一下鄙人所了解的在OpenGL进行文字显示的方法,也方便不知从哪个次元来到这里的学习者提供一点这方面的信息。