首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL wgl居中文本

OpenGL wgl居中文本
EN

Stack Overflow用户
提问于 2015-05-28 19:00:57
回答 1查看 470关注 0票数 0

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

代码语言:javascript
复制
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
}

我通过调用

代码语言:javascript
复制
glTranslatef(x, y, z);
glRasterPos2f(0.f, 0.f);

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

这将从左下角开始绘制文本。如何将此文本置于其自身的质心上?

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

代码语言:javascript
复制
SIZE extent;
GetTextExtentPoint32(hDC, SpinTools::string2wstring(text).c_str(), strlen(text), &extent);
glRasterPos2f(-extent.cx / 2, -extent.cy / 2);

但这是不正确的。

EN

回答 1

Stack Overflow用户

发布于 2015-05-28 21:02:31

我觉得你和GetTextExtentPoint32的想法是对的。但此函数返回屏幕空间中的值,您需要将其转换为-1..1空格。你可以试试这个代码: glRasterPos2f((float)-extent.cx / ( g_width ),(float)-extent.cy / ( g_height ));g_height和g_width是窗口的大小

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30504707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档