Сглаживание с помощью GL_TRIANGLE_FAN

Я не получаю сглаживания при рисовании GL_TRIANGLE_FAN с этим кодом:

  glDisable(GL_DEPTH_TEST);

  // Blended points, lines, and polygons.
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
  glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
  glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

  glEnable(GL_POINT_SMOOTH);
  glEnable(GL_LINE_SMOOTH);
  glEnable(GL_POLYGON_SMOOTH);

Что я делаю неправильно?


person Neil G    schedule 01.07.2012    source источник


Ответы (1)


Сглаживание краев всегда является подсказкой, реализация (вы не указываете, какая) может игнорировать его в соответствии со спецификацией. По разным причинам (например, неспособность обрабатывать пересекающиеся полигоны, плохое взаимодействие с смешиванием фреймбуфера) этот вид сглаживания вышел из употребления и был заменен алгоритмами на основе мультисэмплов, которые работают на уровне фреймбуфера. Для управления этим существует расширение ARB multisample (на самом деле, я считаю, что оно используется по умолчанию в последних версиях спецификации). Или часто у драйверов есть способы включить его глобально без модификации исходного кода.

person Andy Ross    schedule 01.07.2012
comment
Спасибо за быстрый ответ. Какой самый простой способ добиться желаемого смешивания? Будет ли мультисэмплинг обычно реализовываться на современном оборудовании (возрастом менее 3 лет)? - person Neil G; 01.07.2012
comment
Это полностью зависит от вашей платформы. Например, если вы используете драйверы nvidia в Linux, просто установка переменной среды __GL_FSAA_MODE на 4 дает довольно полезные результаты, не беспокоясь. Расширение ARB_multisample имеет документацию по API и в настоящее время поддерживается на большинстве / на всем оборудовании. - person Andy Ross; 01.07.2012