2010-12-02 37 views
1

我在使用FTGL庫在OpenGL中繪製文本,一切正常,但是我想爲文本添加陰影。我試過是繪製相同的文本用黑色的顏色,然後繪製文本之上,與正常顏色是這樣的(僞):在OpenGL + FTGL中繪製帶陰影的文字

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

回答

3

可能有很多的方式來實現這一目標 - 與一些比別人更高的質量。

這裏是我會做:

  1. 呈現文本到內存中的灰度像素圖。
  2. 對其執行高斯模糊(可能使用快速庫,如QImageBlitz或ImageMagick)。模糊半徑應該約爲2-3px。
  3. 對模糊圖像應用陡峭的色調曲線,因此亮度範圍[0.0,0.9]被映射到接近0.0。這使得它不再模糊,結果是文本的「肥胖」版本。色調曲線應該是這個樣子:

    alt text

  4. 渲染的影子,黑色(使用適當的混合模式來模擬alpha混合)。然後在其上面呈現常規的黃色文本(用您選擇的小偏移量)。

此外,您可以使用不同的色調曲線,具體取決於您想要的陰影有多柔和。線性色調曲線會產生非常柔和的陰影。

2

我通常做這種方式:

  1. 設置顏色爲半透明的黑色,如(0,0,0,0.5)
  2. 繪製在所有九個方向的文本(移動到側面,然後對角)
  3. 繪製fg文本。

它看起來不錯,你可以加快渲染列表和翻譯。

請看這裏:http://i.stack.imgur.com/Dh68y.png