您的位置:首页 > 运维架构

GDI文字绘制和windows下opengl文字绘制小结

2013-11-27 16:44 190 查看
1.GDI绘制文字,要设置文字的属性,主要就是通过设置DC中的font对象来实现的。

font对象的创建可以由createfont()、createfontIndirect()来实现。

HFONT CreateFont(
int nHeight,               // height of font
int nWidth,                // average character width
int nEscapement,           // angle of escapement
int nOrientation,          // base-line orientation angle
int fnWeight,              // font weight
DWORD fdwItalic,           // italic attribute option
DWORD fdwUnderline,        // underline attribute option
DWORD fdwStrikeOut,        // strikeout attribute option
DWORD fdwCharSet,          // character set identifier
DWORD fdwOutputPrecision,  // output precision
DWORD fdwClipPrecision,    // clipping precision
DWORD fdwQuality,          // output quality
DWORD fdwPitchAndFamily,   // pitch and family
LPCTSTR lpszFace           // typeface name
);

HFONT CreateFontIndirect( CONST LOGFONT* lplf // characteristics);//其主要是对createfont函数中的参数用LOGFONT结构体进行封装。


这里主要讨论下nEscapement、nOrientation参数的含义

1.在graphics mode为GM_ADVANCED时,nEscapement代表文字行的绘制方向,nOrientation代表每个文字的基线方向。(方向都针对于x轴,1/10度为基本单位),绘制的结果如下图(左)所示:

2.在graphics mode为GM_COMPATIBLE时,nEscapement代表文字行的绘制方向,nOrientation无效。基线始终平行于文字行的绘图方向.如下图(右)所示:

可以通过setGraphicsMode(GM_)来设置graphics mode .





(nescapement=0,设置的是nOrientation的角度) (设置的是nescapement的角度,nOrientation无效)

2.windows下OPengl绘制字体



1,:使用位图装载字体,绘制字体就是绘制位图。

opengl中的位图是不能够旋转和缩放的,且其永远平行于xy平面(不是光栅位置不能旋转缩放,光栅位置是和vertex一样的,经过变换矩阵之后在其位置进行位图绘制。只是位图永远是以变换后的点为起始,然后在平行xy平面上绘制的。)。wglusefontBitmaps(W)可以将字符生成为bitmap对象,并放入显示列表中。

2:使用3维轮廓绘制字体。此种字体就是用点线进行连接生成的3维物体。因此可以和普通的三维物体一样进行旋转,缩放,平移操作。wglusefontOutlines(W)可以生成3d的文字轮廓,并放入显示列表中。但是在windows中,此函数生成的3d文字轮廓只是按照truetype字体生成的,没有其他的字体。

3:使用纹理。可以将bitmap转换为纹理,然后贴在quard上面。

4:使用freetype库实现字体绘制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: