Fonts: Difference between revisions
(use 2D graphics API) |
No edit summary |
||
Line 18: | Line 18: | ||
The example doesn't show the call to CreateFont.<br> | The example doesn't show the call to CreateFont.<br> | ||
<source lang="c"> | |||
HDC hdc; // A TrueType font has already been selected | HDC hdc; // A TrueType font has already been selected | ||
HGLRC hglrc; | HGLRC hglrc; | ||
GLYPHMETRICSFLOAT agmf[256]; | GLYPHMETRICSFLOAT agmf[256]; | ||
//create display lists for glyphs 0 through 255 with 0.1 extrusion | // create display lists for glyphs 0 through 255 with 0.1 extrusion | ||
//and default deviation. The display list numbering starts at 1000 | // and default deviation. The display list numbering starts at 1000 | ||
//(it could be any number) | // (it could be any number) | ||
wglUseFontOutlines(hdc, 0, 255, 1000, 0.0f, 0.1f, WGL_FONT_POLYGONS, &agmf); | wglUseFontOutlines(hdc, 0, 255, 1000, 0.0f, 0.1f, WGL_FONT_POLYGONS, &agmf); | ||
//Set up transformation to draw the string | // Set up transformation to draw the string | ||
glLoadIdentity(); | glLoadIdentity(); | ||
glTranslate(0.0f, 0.0f, -5.0f) | glTranslate(0.0f, 0.0f, -5.0f) | ||
glScalef(2.0f, 2.0f, 2.0f); | glScalef(2.0f, 2.0f, 2.0f); | ||
//Display a string | // Display a string | ||
glListBase(1000); // Indicates the start of display lists for the glyphs | glListBase(1000); // Indicates the start of display lists for the glyphs | ||
//Draw the characters in a string | //Draw the characters in a string | ||
glCallLists(24, GL_UNSIGNED_BYTE, "Hello Win32 OpenGL World."); | glCallLists(24, GL_UNSIGNED_BYTE, "Hello Win32 OpenGL World."); | ||
</source> | |||
These days, it seems mostly newcomers use those while learning with old tutorials. | These days, it seems mostly newcomers use those while learning with old tutorials. |
Revision as of 18:20, 2 January 2018
Warning: This article describes legacy OpenGL APIs that have been removed from core OpenGL 3.1 and above (they are only deprecated in OpenGL 3.0). It is recommended that you not use this functionality in your programs. |
OpenGL doesn't support font rendering since OpenGL is a basic 3D API. Fonts require some OS interaction and font files to be installed, therefore core GL doesn't support fonts at all.
On Windows, Microsoft offers certain wgl functions that do font rendering :
wglUseFontBitmaps : this does rendering with glBitmap under the hood.
wglUseFontOutlines : despite the name, this generates geometry. In other words, this does 3D text. It probably use glBegin, glVertex, glEnd under the hood.
Both of those functions were great in 1995 and use display lists.
Here is an example from the MSDN from 1995.
Notice that depends on Fixed Function Pipeline.
The example doesn't show the call to CreateFont.
HDC hdc; // A TrueType font has already been selected
HGLRC hglrc;
GLYPHMETRICSFLOAT agmf[256];
// 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 Win32 OpenGL World.");
These days, it seems mostly newcomers use those while learning with old tutorials.
The Wiki recommends using something crossplatform, such as FTGL and there are many other libraries as well. Another option is to use whatever 2D graphics API is available on your platform (e.g. Cairo), as that usually includes high-quality text rendering, as well as rendering to an offscreen bitmap/pixmap. There will then usually be some way to transfer that bitmap/pixmap to OpenGL to use as a texture on a plane or some other object.