使用 OpenGL 测量位图字体 (Windows)
确定 OpenGL 中渲染的位图字体的“像素”长度的“正确”方法是什么?我使用 2D ortho 和 wglUseFontBitmaps() 函数在 Windows 中构建字体字符列表。如果我想测量生成的文本的大小(用于居中、格式化等),正确的方法是什么?
我应该使用 Win32 GDI GetTextExtent() API 函数,还是有办法确定 OpenGL 中当前的“光标”位置? glRasterPos 函数设置输出位置,并且当渲染每个字符时,输出位置会自动前进。那么我可以使用 glGetRasterPos 吗?
What is the 'correct' way to determine the 'pixel' length of bitmap fonts rendered in OpenGL? I'm using 2D ortho and the wglUseFontBitmaps() function to build font character lists in Windows. If I want to measure the size of my resultant text (for centering, formatting etc), what is the correct way to do this?
Should I be using the Win32 GDI GetTextExtent() API function, or is there a means of determining the current 'cursor' position within OpenGL? The glRasterPos functions sets the output position, and as each character is rendered, the output position automatically advances.. so is there a glGetRasterPos perhaps that I could use?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
OpenGL 不拥有这些字体; Windows GDI 必须提供该信息。我在对此问题的回答中展示了如何正确执行此操作。您需要使用
GetCharABCWidths()
获取每个字符的宽度,使用GetTextMetrics()
获取高度。看一下 formattedString.GetLength() 上的for
循环,它计算字符串宽度(以像素为单位)。然后您可以使用glRasterPos2d()
将文本放在正确的位置。OpenGL doesn't own the fonts; Windows GDI must provide the information. I showed how to do it right in my answer to this question. You need
GetCharABCWidths()
for the per-character widths andGetTextMetrics()
for the heights. Look at myfor
loop over formattedString.GetLength(), which calculates the string width in pixels. Then you can useglRasterPos2d()
to put the text in the right place.