【问题标题】:OpenGL wgl center textOpenGL wgl 中心文本
【发布时间】:2015-05-28 11:00:57
【问题描述】:

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

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 之前,其中xyz 是我希望文本居中的点坐标。

这会从左下角开始绘制我的文本。我怎样才能让这个文本在它自己的质心上居中?

我试过GetTextExtentPoint32来定位我的文字,如下

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

但这是不正确的。

【问题讨论】:

    标签: c++ windows opengl mfc


    【解决方案1】:

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

    【讨论】:

    • 如果您知道每个字母的大小和所有字母的高度。完成后,您可以设置栅格的位置。栅格的位置也取决于相机位置、投影和当前变换。
    • 是的,但是如何获取每个字母的大小?
    • 我认为您使用 GetTextExtentPoint32 的想法是正确的。但是这个函数在屏幕空间中返回值,你需要将它转换为 [-1..1] 空间。你可以试试这个代码:glRasterPos2f((float)-extent.cx / (g_width), (float)-extent.cy / (g_height)); g_height 和 g_width 是窗口的大小。
    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多