继续前一次所介绍的人物名称显示,再来仔细地深入分析字体渲染,到底怎么样设置OpenGL函数才能显示出来呢?先来看下面一段代码:
#001void LLFontGL::renderQuad(const LLRectf& screen_rect, const LLRectf& uv_rect, F32 slant_amt) const
#002{
#003 glTexCoord2f(uv_rect.mRight, uv_rect.mTop);
#004 glVertex2f(llfont_round_x(screen_rect.mRight),
#005 llfont_round_y(screen_rect.mTop));
#006
#007 glTexCoord2f(uv_rect.mLeft, uv_rect.mTop);
#008 glVertex2f(llfont_round_x(screen_rect.mLeft),
#009 llfont_round_y(screen_rect.mTop));
#010
#011 glTexCoord2f(uv_rect.mLeft, uv_rect.mBottom);
#012 glVertex2f(llfont_round_x(screen_rect.mLeft + slant_amt),
#013 llfont_round_y(screen_rect.mBottom));
#014
#015 glTexCoord2f(uv_rect.mRight, uv_rect.mBottom);
#016 glVertex2f(llfont_round_x(screen_rect.mRight + slant_amt),
#017 llfont_round_y(screen_rect.mBottom));
#018}
上面这段代码就是设置四边形的四个顶点坐标和纹理坐标。
glVertex2f函数是OpenGL里设置顶点坐标的函数,它的定义如下:
void glVertex2f(
GLfloat x,
GLfloat y
);
其实它是用来设置一个表面的顶点,上面就是调用了四次,依次设置了四边形的四个顶点。
同理,glTexCoord2f函数是OpenGL里设置顶点纹理的函数,也调用了四次。
最后会在下面的函数里调用它,代码如下:
#001void LLFontGL::drawGlyph(const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4& color, U8 style, F32 drop_shadow_strength) const
#002{
#003 F32 slant_offset;
#004 slant_offset = ((style & ITALIC) ? ( -mAscender * 0.2f) : 0.f);
#005
#006 glBegin(GL_QUADS);
#007 {
……
#054 else if (style & DROP_SHADOW)
#055 {
#056 LLColor4 shadow_color = LLFontGL::sShadowColor;
#057 shadow_color.mV[VALPHA] = color.mV[VALPHA] * drop_shadow_strength;
#058 glColor4fv(shadow_color.mV);
#059 LLRectf screen_rect_shadow = screen_rect;
#060 screen_rect_shadow.translate(1.f, -1.f);
#061 renderQuad(screen_rect_shadow, uv_rect, slant_offset);
#062 glColor4fv(color.mV);
#063 renderQuad(screen_rect, uv_rect, slant_offset);
#064 }
#065 else // normal rendering
#066 {
#067 glColor4fv(color.mV);
#068 renderQuad(screen_rect, uv_rect, slant_offset);
#069 }
#070
#071 }
#072 glEnd();
#073}
drawGlyph函数里实现显示字体,主要通过设置一个四边形的顶点和字体的位图纹理来实现显示。
不过,对于中文的显示,使用第二人生里的实现方法是需要修改的,最主要的差别在于英文只有26个字母就可以显示所有文字了,而中文至少也有2000多个汉字才可以显示基本的文章,把所有字体纹理位图保存到内存,就显得比较占用内存,因此使用动态解释的方法或许更好。
蔡军生2008/01/18 QQ:9073204 深圳
分享到:
相关推荐
llvm15源码分析:函数调用链、流程分析、链长短 llvm15源码分析:函数调用链、流程分析、链长 llvm15源码分析:函数调用链、流程分析、链长 llvm15源码分析:函数调用链、流程分析、链长短、频率分析 llvm15源码分析...
MFCwithOpenGLWindow-用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口源码.
MFCwithOpenGLWindow-用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口源码
matlab中调用OpenGL的范例程序,在Matlab中通过mbuild -setup设置好VC编译器后,采用mex -O -v DrawGL02.cpp编译生成.mexw32文件,然后可直接在matlab中执行。(注意编译命令中的O为大写的字母o)
易语言源码易语言32位进程调用64位DLL函数源码.rar 易语言源码易语言32位进程调用64位DLL函数源码.rar 易语言源码易语言32位进程调用64位DLL函数源码.rar 易语言源码易语言32位进程调用64位DLL函数源码.rar ...
易语言源码易语言调用linux函数源码.rar 易语言源码易语言调用linux函数源码.rar 易语言源码易语言调用linux函数源码.rar 易语言源码易语言调用linux函数源码.rar 易语言源码易语言调用linux函数源码.rar ...
用QT的opengl显示图片,一个类的定义文件。
函数调用的过程实际上也就是一个中断的过程,那么C++中到底是怎样实现一个函数的调用的呢?参数入栈、函数跳转、保护现场、回复现场等又是怎样实现的呢?本文将对函数调用的过程进行深入的分析和详细解释,并在VC ...
讲述如何在MFC中调用OpenGL,并有代码说明
易语言调用函数编译原理源码。@资源源码站。
在C#中直接调用OPENGL API , 封装了一个PANEL,直接拖拽就可以使用,代码简单易懂
Unity3D调用Native OpenGL,Unity3D支持调用C++工程的OpenGL渲染,使用RenderingPlugin DLL方式。
函数调用 二进制 汇编级 详细讲解函数调用 一堆栈的形式讲解
静态代码,C/C++代码,函数调用分析工具egypt,用于生成函数调用图
易语言源码动态调用DLL函数.rar 易语言源码动态调用DLL函数.rar 易语言源码动态调用DLL函数.rar 易语言源码动态调用DLL函数.rar 易语言源码动态调用DLL函数.rar 易语言源码动态调用DLL函数.rar
最近在学习opengl的使用,也是参考别人的代码最后修改的成功的,qt5.6.0 才有opengl 显示三位scara机器人,支持旋转,移动,
程序异常退出时,显示当时的函数调用关系 显示当前函数正在被哪个函数调用
自动生成c++函数调用关系图,里面包含了所有要用到的软件,一站式服务; 通过本人亲测的使用总结; 还有使用到的配置文件(c++的),实在不会配置可以直接使用; 改一改配置文件,应该还可以生成c,java,c#语言的调用...
反汇编深入分析函数调用
b()#第二层中的函数直接调用 结果显示: Traceback (most recent call last): File “C:/Users/rog/Desktop/wenzhang.py”, line 4, in b() NameError: name ‘b’ is not defined 但是又要用,怎么办呢?这时候...