wglUseFontOutlinesA 函数 (wingdi.h)

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

字形的运行以指定设备上下文字体的字形开头。 字体的 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 结构构成的数组,其中包含字体的整个字形集。 每个显示列表都以 gmfCellIncXgmfCellIncY 相应 GLYPHMETRICSFLOAT 结构的成员指定的转换结束。 该翻译通过单个调用 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 [仅限桌面应用]
目标平台 窗户
标头 wingdi.h
Opengl32.lib
DLL Opengl32.dll

另请参阅

GLYPHMETRICSFLOAT

在 Windows 上 OpenGL

WGL 函数

glCallLists

glListBase

glTexGen

wglUseFontBitmaps