Как сглаживание OpenGL?

Мне нужно сделать сглаживание в OpenGL. Я нахожу этот код

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glShadeModel(GL_SMOOTH); 

glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST); 
glEnable(GL_POLYGON_SMOOTH);

glDisable( GL_DEPTH_TEST ); 
glEnable( GL_ALPHA_TEST ); 

В этом случае сглаживание работает, но мне не нужна прозрачность. Я думаю, что эти 2 строки отвечают за прозрачность:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Но если я удалю эти строки - сглаживание не работает. Что нужно оставить для сглаживания? Мне нужно только сглаживание в моем проекте, не нужно смешивать...


person user2516034    schedule 24.06.2013    source источник
comment
Вы, вероятно, не хотите использовать сглаживание. Он никогда не давал хороших результатов, и его поддержка не является обязательной. Просто используйте полноэкранное мультисэмпловое сглаживание (FSAA, MSAA). Гораздо проще в использовании, намного лучше результаты.   -  person datenwolf    schedule 25.06.2013


Ответы (1)


Ну сглаживание работает с помощью прозрачности, края то не цветные, то нет но они... ну... прозрачные. Взгляните на эти изображения:

сглаженная линиянесглаженная линия

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

Вы можете попробовать принудительно включить сглаживание в своей программе, сглаживание — это функция оборудования/драйвера, которая просто управляет сглаживанием краев (и, в зависимости от типа сглаживания, другими вещами). Помните, что это функция не OpenGL, а аппаратного обеспечения, драйвера и операционной системы. В общем, вы запрашиваете что-то вроде AA, когда создаете свой OpenGL-контекст.

person Marius    schedule 24.06.2013