gpt4 book ai didi

c++ - OpenGL wgl 中心文本

转载 作者:行者123 更新时间:2023-11-28 06:14:59 25 4
gpt4 key购买 nike

我在 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);

但这是不正确的。

最佳答案

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

关于c++ - OpenGL wgl 中心文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30504707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com