gpt4 book ai didi

c++ - 使用 openGL 渲染时如何判断字体大小(以像素为单位)

转载 作者:太空狗 更新时间:2023-10-29 20:46:39 25 4
gpt4 key购买 nike

我正在为 Bitfighter 做编辑,我们在这里使用默认的 OpenGL 描边字体。我们通常渲染线宽为 2 的文本,但这会使较小的字体更难阅读。我想做的是检测字体大小何时低于某个阈值,并将线宽降至 1。问题是,在应用所有变换等之后,我不知道如何判断多高(在像素)将呈现大小为 的字体。

这是实际的内部渲染函数:

if(---something--- < thresholdSizeInPixels)
glLineWidth(1);

float scalefactor = fontsize / 120;

glPushMatrix();
glTranslatef(x, y + (fix ? 0 : size), 0);
glRotatef(angle * radiansToDegreesConversion, 0, 0, 1);
glScalef(scaleFactor, -scaleFactor, 1);
for(S32 i = 0; string[i]; i++)
OpenglUtils::drawCharacter(string[i]);
glPopMatrix();

就在调用它之前,我想检查字体的高度,然后在必要时降低线宽。什么东西在 ---something--- 点?

Bitfighter 是一款纯粹的老式 2D 游戏,因此没有花哨的 3D 变换。所有代码均使用 C++。


我的解决方案是将 Christian Rau 的解决方案的第一部分与第二部分的片段结合起来。基本上,我可以获得当前的比例因子:

static float modelview[16];
glGetFloatv(GL_MODELVIEW_MATRIX, modelview); // Fills modelview[]

float scalefact = modelview[0];

然后,我将 scalefact 乘以 fontsize(以像素为单位),然后乘以 windowHeight/canvasHeight 的比率以获得我的文本将呈现的高度(以像素为单位)。

就是……

textheight = scalefact * fontsize * widndowHeight / canvasHeight

我还喜欢缩放线条粗细的想法,而不是在超过阈值时从 2 步进到 1。现在一切都很好。

最佳答案

where we use the default OpenGL stroked font

OpenGL 不处理字体。没有默认的 OpenGL 描边字体

也许您指的是 GLUT 及其 glutStrokeCharacter 函数。然后请注意 GLUT 不是 OpenGL 的一部分。它是一个独立的库,专注于为小型 OpenGL 演示和教程提供一个简单的框架。

回答您的问题:GLUT Stroke Fonts 是根据顶点定义的,因此适用通常的转换。由于通常所有变换都是线性的,您可以通过模型 View 和投影简单地变换 vector (0, base_height, 0),最后进行透视划分(gluProject 为您完成所有这些 - GLU 不是 OpenGL 的一部分,也是),结果 vector 就是你要找的;取 vector 长度缩放宽度。

关于c++ - 使用 openGL 渲染时如何判断字体大小(以像素为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664807/

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