OpenGL wgl中心文本

OpenGL wgl center text

本文关键字:文本 wgl OpenGL      更新时间:2023-10-16

我在Windows下的OpenGL上下文中绘制文本,使用以下辅助函数,我从http://nehe.gamedev.net/tutorial/bitmap_fonts/17002/获得了它:

GLvoid glPrint(HDC hDC, const char *fmt, ...)                   //Custom GL "Print" Routine
{
char        text[256];                              // Holds Our String
va_list     ap;                                     // Pointer To List Of Arguments
if (fmt == nullptr)                                 // If There's No Text
    return;                                         // Do Nothing
va_start(ap, fmt);                                  // Parses The String For Variables
vsprintf_s(text, fmt, ap);                      // And Converts Symbols To Actual Numbers
va_end(ap);                                         // Results Are Stored In Text
glPushAttrib(GL_LIST_BIT);                          // Pushes The Display List Bits
glListBase(base - 32);                              // Sets The Base Character to 32
glCallLists((GLsizei)strlen(text), GL_UNSIGNED_BYTE, text); // Draws The Display List Text
glPopAttrib();                                      // Pops The Display List Bits
}

我通过调用

来定位文本
glTranslatef(x, y, z);
glRasterPos2f(0.f, 0.f);

glPrint之前,其中x, yz是我想要居中文本的点坐标。

这将从左下角开始绘制文本。如何将文本居中到它自己的质心上?

我尝试GetTextExtentPoint32来定位我的文本,如下所示

SIZE extent;
GetTextExtentPoint32(hDC, SpinTools::string2wstring(text).c_str(), strlen(text), &extent);
glRasterPos2f(-extent.cx / 2, -extent.cy / 2);

我认为你的想法与GetTextExtentPoint32是正确的。但是这个函数在屏幕空间中返回值,您需要将其转换为[-1..]1)实践。你可以试试下面的代码:glRasterPos2f((float)-extent)。Cx/(g_width), (float)-extent。Cy/(g_height));G_height和g_width是窗口的大小