3D font in OpenGL

In this article, I give a wrap class which encapsulate the OpenGL 3D Font
functions. With this class, you can design any 3D letter as a 3D geometry
object, translating, scaling, rotating, texture mapping, etc.
The key steps to display a 3D letter is:
1) Create a display list
2) Create and set a font to current windows context device,
wglUseFontOutlines
function can retrieve the 3d Font geometry data from the context device.
3) call
glListBase and
glCallLists to
display 3D font letters.
The
wglUseFontOutlines
function calculate the 3D font geometry data from the mathmatic module of
Windows system TrueType fonts library.
My 3D font class contain position, material color data and content
string. It can be used as a separate geometry object in a multiple 3D
objects scene.
Here is a small example:
class C3DFontView : public CView
{
...
CGLFont m_FontX; // Declare a font object in your view class
...
};
int CMy3DFontView::OnCreate(LPCREATESTRUCT lpCreateStruct) // Create view
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
/*
** Setup font attributes
*/
m_FontX.SetXOffset(-0.4f);
m_FontX.SetYOffset(-0.4f);
m_FontX.SetXScale(1.4f);
m_FontX.SetYScale(1.3f);
m_FontX.SetZScale(0.8f);
m_FontX.SetXRotate(-20.0f);
m_FontX.SetYRotate(-6.0f);
m_FontX.SetZRotate(90.0f);
wglMakeCurrent(m_pDC->m_hDC,m_hRC);
m_FontX.SetFontType(GL_FONT_SOLID); // Select font type
m_FontX.CreateFont(m_pDC, "Arial Black"); // Create the font
m_FontX.SetText("Xing"); // Select text to render
wglMakeCurrent(NULL,NULL);
}
void CMy3DFontView::OnDraw(CDC* pDC) // Draw method
{
CMy3DFontDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
...
wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);
DrawGLFont(); // Render the text
SwapBuffers(m_pDC->GetSafeHdc());
wglMakeCurrent(m_pDC->GetSafeHdc(), NULL);
}
void CMy3DFontView::DrawGLFont(void) // The render method
{
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
//clear color buffer
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//set light model
glLightfv(GL_LIGHT0, GL_AMBIENT, m_Lightambient); //set light ambient
glLightfv(GL_LIGHT0, GL_DIFFUSE, m_Lightdiffuse); //set light specular
glLightfv(GL_LIGHT0, GL_SPECULAR, m_Lightspecular); //set light specular
glLightfv(GL_LIGHT0, GL_POSITION, m_Lightposition); //set light position
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(-0.5f, 0.0f, -5.0f);
m_FontX.GLDrawText(); // Render the text
glFlush();
}
Downloads
Download demo project - 175 Kb

Comments
Who do I create simple text with black line around the letter?
Posted by Legacy on 06/19/2003 12:00amOriginally posted by: ron
Who do I create simple text with black line around the letter?
ReplyThank you!!!
ron.
Who do I create simple text with black line around the letter?
Posted by Legacy on 06/19/2003 12:00amOriginally posted by: ron
ReplyWho do I create simple text with black line around the letter?
Posted by Legacy on 06/19/2003 12:00amOriginally posted by: ron
ReplyWho do I create simple text with black line around the letter?
Posted by Legacy on 06/19/2003 12:00amOriginally posted by: ron
ReplyChinese text?
Posted by Legacy on 12/22/2002 12:00amOriginally posted by: zhourong
ReplyWhere is the author????
Posted by Legacy on 10/06/2002 12:00amOriginally posted by: Jianjun Zhao
How to display Chinese font?Any help?
Reply
Where is the author????
Posted by Legacy on 10/06/2002 12:00amOriginally posted by: Jianjun Zhao
How to display Chinese font?Any help?
ReplyWhere is the author????
Posted by Legacy on 10/06/2002 12:00amOriginally posted by: Jianjun Zhao
How to display Chinese font?Any help?
ReplyChinese Font?
Posted by Legacy on 10/06/2002 12:00amOriginally posted by: Yu-Sheng Lai
Any body knows how to display Chinese font?
ReplyThank you very much beforehand.
- Lance
Keep Attribute -- little affected by other codes
Posted by Legacy on 12/04/2000 12:00amOriginally posted by: lxcao
ReplyLoading, Please Wait ...