Войти
КачалкаИзображения

Скачать Правильный антиалиазинг без шейдеров и multisampling

Загрузить

Загрузил: EvilSpirit

— Тег для вставки в сообщение на форуме или в текст документа.

Правильный антиалиазинг без шейдеров и multisampling

Я придумал способ сделать правильный антиалиазинг без шейдеров и использования multisampling,
используя лишь GL_LINE_SMOOTH, который поддерживается большинством видеокарт.
На некоторых видеокартах производительность почти не падает.

Код простой и в комментариях не нуждается:
if (use_fake_aa) {
  glEnable(GL_POLYGON_OFFSET_FILL);
  glPolygonOffset(1.0f, 1.0f);
  glPolygonMode(GL_FRONT, GL_FILL);
}

// polygons
glDrawElements(GL_TRIANGLES, m.mesh.getFacesCount() * 3, GL_UNSIGNED_INT, 0);

if (use_fake_aa) {
  glDisable(GL_POLYGON_OFFSET_FILL);
  glEnable(GL_LINE_SMOOTH);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glDepthMask(GL_FALSE);

  // lines
  glPolygonMode(GL_FRONT, GL_LINE);
  glDrawElements(GL_TRIANGLES, m.mesh.getFacesCount() * 3, GL_UNSIGNED_INT, 0);

  glDisable(GL_LINE_SMOOTH);
  glDisable(GL_BLEND);
  glDepthMask(GL_TRUE);
}


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

FadeToBlack aka EvilSpirit

#antialiasing, #msaa

Скачать изображение: Правильный антиалиазинг без шейдеров и multisampling (69081_1310238637_fake_antialiasing.png) (33.866 Кб)

Ссылка на файл:

HTML код: