1

我正在使用 FTGL 库在 OpenGL 中绘制文本,一切正常,但是我想为文本添加阴影。我尝试的是用黑色绘制相同的文本,然后在上面用正常颜色绘制文本(伪代码):

glColor3f(0, 0, 0); // outline color
DrawText(x-1, y-1, str);
DrawText(x+1, y-1, str);
DrawText(x+1, y+1, str);
DrawText(x-1, y+1, str);
glColor3f(1, 1, 1); // primary color
DrawText(x,y,str);

但是我必须将文本绘制 5 次,它仍然看起来不太好。

我想在屏幕截图上得到类似的东西

带阴影的文字

4

2 回答 2

3

可能有很多方法可以实现这一目标 - 有些方法比其他方法质量更高。

这是我要做的:

  1. 将文本渲染到内存中的灰度像素图。
  2. 对其执行高斯模糊(可能使用快速库,例如 QImageBlitz 或 ImageMagick)。模糊半径应该在 2-3px 左右。
  3. 对模糊图像应用陡峭的色调曲线,因此亮度范围 [0.0, 0.9] 映射到接近 0.0。这使它不再模糊,结果是文本的“肥大”版本。色调曲线应如下所示:

    替代文字

  4. 将其渲染为黑色的阴影(使用适当的混合模式来模拟 alpha 混合)。然后在它上面渲染常规的黄色文本(您可以选择一个小的偏移量)。

此外,您可以根据想要的阴影柔和程度使用不同的色调曲线。线性色调曲线会产生非常柔和的阴影。

于 2010-12-02T18:59:47.357 回答
2

我通常这样做:

  1. 将颜色设置为半透明黑色,例如 (0,0,0,0.5)
  2. 在所有九个方向上绘制文本(移动到两侧,然后对角线)
  3. 绘制 fg 文本。

它看起来相当不错,您可以使用渲染列表和翻译来加速它。

见这里:http: //i.stack.imgur.com/Dh68y.png

于 2012-11-02T16:46:57.590 回答