wglUseFontOutlinesA 函数 (wingdi.h)

wglUseFontOutlines 函数创建一组显示列表,其中一个列表用于当前呈现上下文中当前所选大纲字体的每个字形。 显示列表用于绘制 TrueType 字体的 3D 字符。 每个显示列表都以浮点坐标描述字形轮廓。

字形的运行从指定设备上下文的字体的第一个字形开始。 字体的 em 平方大小(拟合字体的原始字体轮廓的名义网格大小)在显示列表中的 x 坐标和 y 坐标中映射到 1.0。 延伸参数设置字体在 z 方向上的深度。

Thelpgmfparameter 返回一个 GLYPHMETRICSFLOAT 结构,其中包含有关字符单元格中每个字形的位置和方向的信息。

语法

BOOL wglUseFontOutlinesA(
  HDC                 unnamedParam1,
  DWORD               unnamedParam2,
  DWORD               unnamedParam3,
  DWORD               unnamedParam4,
  FLOAT               unnamedParam5,
  FLOAT               unnamedParam6,
  int                 unnamedParam7,
  LPGLYPHMETRICSFLOAT unnamedParam8
);

参数

unnamedParam1

指定具有所需轮廓字体的设备上下文。 hdc 的大纲字体用于在当前呈现上下文中创建显示列表。

unnamedParam2

指定构成字体大纲显示列表的一组字形中的第一个。

unnamedParam3

指定用于形成字体大纲显示列表的字形集中的字形数。 wglUseFontOutlines 函数创建计数显示列表,一组字形中的每个字形都有一个显示列表。

unnamedParam4

指定起始显示列表。

unnamedParam5

指定与原始轮廓的最大和弦偏差。 当偏差为零时,和弦偏差相当于原始字体的一个设计单位。 偏差值必须等于或大于 0。

unnamedParam6

指定字体在负 z 方向上的延伸量。 该值必须等于或大于 0。 如果 延伸 为 0,则不延伸显示列表。

unnamedParam7

指定要在显示列表中使用的格式(WGL_FONT_LINES或WGL_FONT_POLYGONS)。 当 格式 WGL_FONT_LINES时, wglUseFontOutlines 函数会创建具有线段的字体。 当 格式 WGL_FONT_POLYGONS时, wglUseFontOutlines 会创建带有多边形的字体。

unnamedParam8

指向要接收字形指标的 计数GLYPHMETRICSFLOAT 结构的数组。 当 lpgmfNULL 时,不返回任何字形指标。

返回值

函数成功后,返回值为 TRUE

当函数失败时,返回值为 FALSE ,并且不会生成任何显示列表。 要获得更多的错误信息,请调用 GetLastError。

注解

wglUseFontOutlines 函数使用当前呈现上下文中的显示列表定义大纲字体的字形。 wglUseFontOutlines 函数仅适用于 TrueType 字体;不支持笔划和光栅字体。

每个显示列表由线段或多边形组成,并且具有以 listBase 编号开头的唯一标识号。

wglUseFontOutlines 函数通过将轮廓的二次 B 样条曲线细分为线段来近似字形轮廓,直到轮廓与内插中点之间的距离在偏差指定的值范围内。 这是WGL_FONT_LINES格式时使用的最终 格式 。 指定WGL_FONT_OUTLINES时,创建的显示列表不包含任何法线;因此,照明无法正常工作。 若要获取正确的线条照明,请使用 WGL_FONT_POLYGONS 并设置 glPolygonMode ( GL_FRONT,GL_LINE ) 。 将 格式 指定为WGL_FONT_POLYGONS轮廓将进一步细化为单独的三角形、三角形扇形、三角形带或四边形条,以创建每个字形的表面。 使用 WGL_FONT_POLYGONS,创建的显示列表调用 glFrontFace ( GL_CW ) 或 glFrontFace ( GL_CCW ) ;因此,可能会更改当前的正面值。 为获得最佳文本外观WGL_FONT_POLYGONS,请按如下所示剔除背面:

glCullFace(GL_BACK); 
glEnable(GL_CULL_FACE);

GLYPHMETRICSFLOAT 结构包含有关字符单元格中每个字形的位置和方向的信息。 lpgmf 参数是 GLYPHMETRICSFLOAT 结构的数组,包含字体的整个字形集。 每个显示列表以相应的 GLYPHMETRICSFLOAT 结构的 gmfCellIncXgmfCellIncY 成员指定的转换结束。 通过转换,只需调用 glCallLists 即可在自然方向绘制连续字符。

注意 使用 OpenGL for Windows 时,当像素格式为双缓冲时,无法对设备上下文进行 GDI 调用。 在使用双缓冲设备上下文时,可以通过使用 wglUseFontOutlineswglUseFontBitmaps 来绕过此限制。
 

示例

下面的代码示例演示如何使用 wglUseFontOutlines 绘制文本。

HDC    hdc;  // A TrueType font has already been selected  
HGLRC  hglrc; 
GLYPHMETRICSFLOAT agmf[256]; 
 
// Make hglrc the calling thread's current rendering context  
wglMakeCurrent(hdc, hglrc); 
 
// create display lists for glyphs 0 through 255 with 0.1 extrusion  
// and default deviation. The display list numbering starts at 1000  
// (it could be any number)  
wglUseFontOutlines(hdc, 0, 255, 1000, 0.0f, 0.1f,  
            WGL_FONT_POLYGONS, &agmf); 
 
// Set up transformation to draw the string  
glLoadIdentity(); 
glTranslate(0.0f, 0.0f, -5.0f) 
glScalef(2.0f, 2.0f, 2.0f); 
 
// Display a string  
glListBase(1000); // Indicates the start of display lists for the glyphs  
// Draw the characters in a string  
glCallLists(24, GL_UNSIGNED_BYTE, "Hello Windows OpenGL World.");

注意

wingdi.h 标头将 wglUseFontOutlines 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 wingdi.h
Library Opengl32.lib
DLL Opengl32.dll

另请参阅

GLYPHMETRICSFLOAT

Windows 上的 OpenGL

WGL 函数

glCallLists

glListBase

glTexGen

wglUseFontBitmaps