Рисование текста с тенью в OpenGL + FTGL - PullRequest
1 голос
/ 02 декабря 2010

Я рисую текст в 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

Ответы [ 2 ]

3 голосов
/ 02 декабря 2010

Вероятно, есть много способов достичь этого - некоторые с более высоким качеством, чем другие.

Вот что я бы сделал:

  1. рендеринг текста в растровое изображение в градациях серого.
  2. выполнить размытие по Гауссу (возможно, с использованием быстрой библиотеки, такой как QImageBlitz или ImageMagick). Радиус размытия должен быть около 2-3 пикселей.
  3. применить крутую кривую тона к размытому изображению, чтобы диапазон яркости [0,0, 0,9] соответствовал почти 0,0. Это перестает быть размытым, и в результате получается «откормленная» версия текста. Кривая тона должна выглядеть примерно так:

    alt text

  4. визуализирует это как тень в черном цвете (используя соответствующий режим смешивания для эмуляции альфа-смешивания). Затем нарисуйте обычный желтый текст поверх него (с небольшим смещением по вашему выбору).

Кроме того, вы можете использовать различные кривые тона в зависимости от того, насколько мягкой тени вы хотите. Линейная кривая тона даст очень мягкую тень.

2 голосов
/ 02 ноября 2012

Обычно я делаю это так:

  1. установить цвет на полупрозрачный черный, например (0,0,0,0,5)
  2. Нарисуйте текст во всех девяти направлениях (переместите в стороны, а затем по диагонали)
  3. Нарисуйте текст FG.

Выглядит неплохо, и вы можете ускорить его с помощью списка рендера и переводов.

см. Здесь: http://i.stack.imgur.com/Dh68y.png

...