Загрузил: EvilSpirit
— Тег для вставки в сообщение на форуме или в текст документа.
Я придумал способ сделать правильный антиалиазинг без шейдеров и использования 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
Скачать Изображение: Правильный антиалиазинг без шейдеров и multisampling (69081_1310238637_fake_antialiasing.png) (33.866 Кб)
Ссылка на файл:
HTML код: