在OpenGL + FTGL中绘制带阴影的文本

时间:2010-12-02 17:57:55

标签: opengl text drawing ftgl

我正在使用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次文字,但看起来仍然不太好。

我想在屏幕截图中找到类似的内容

Text with shadow

2 个答案:

答案 0 :(得分:3)

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

这就是我要做的事情:

  1. 将文本渲染为内存中灰度像素图。
  2. 在其上执行高斯模糊(可能使用快速库,如QImageBlitz或ImageMagick)。模糊半径应约为2-3px。
  3. 对模糊图像应用陡峭的色调曲线,因此亮度范围[0.0,0.9]被映射到接近0.0。这使它停止模糊,结果是文本的“肥胖”版本。色调曲线看起来应该是这样的:

    alt text

  4. 将其渲染为阴影,为黑色(使用适当的混合模式模拟Alpha混合)。然后在它上面渲染常规黄色文本(使用您选择的小偏移量)。
  5. 此外,您可以根据所需阴影的柔和程度使用不同的色调曲线。线性色调曲线会产生非常柔和的阴影。

答案 1 :(得分:2)

我通常这样做:

  1. 将颜色设置为半透明黑色,例如(0,0,0,0.5)
  2. 在所有九个方向上绘制文本(移动到两侧,然后是对角线)
  3. 绘制fg文本。
  4. 它看起来非常好,您可以使用渲染列表和翻译加快速度。

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