Возможно ли, чтобы линия сглаживания заканчивалась в OpenGL? - PullRequest
0 голосов
/ 17 октября 2011

Я рисую несколько 2D линий в OpenGL (используя AGL API).Я включил сглаживание линии с помощью GL_LINE_SMOOTH и установил GL_LINE_SMOOTH_HINT на GL_NICEST.

Так, например, вот увеличенное изображение диагональной линии *:

Линия со сглаженными краями http://whileyouweregone.co.uk/images/stackoverflow/good-aa.png

Однако проблема в том, что мой код рисует некоторые фигуры, которые построены из большого числа вертикальных линий, и кажется, что это конецточки линий не сглажены.Вот один из них:

Линии без конечных точек со сглаживанием http://whileyouweregone.co.uk/images/stackoverflow/bad-aa.png

(Каждый шаг, который вы видите, состоит из 10 вертикальных линий с координатами x каждой строки, постепенно увеличивающимися1.0, а координаты y увеличиваются с шагом 0.1.)

Есть ли способ заставить OpenGL также сглаживать конечные точки линий?

Редактировать:

Согласно ответу Calvin1602 , я попытался удалить материал GL_LINE_SMOOTH и вместо этого включаю MSAA, добавив в свой массив атрибутов AGL следующее:

AGL_SAMPLE_BUFFERS_ARB, 1, AGL_SAMPLES_ARB, 4, AGL_MULTISAMPLE

... и звонят:

glEnable(GL_MULTISAMPLE_ARB);

Однако у меня все еще остается та же проблема.Края линий имеют сглаживание (немного по-другому), но конечные точки - нет.

* Снимки экрана сделаны с Mac Pro, работающего под управлением OS X 10.7.1 с ATI Radeon.HD 5770 1024 МБ.

Редактировать 2:

Использование MSAA для меня не работает, но просто рисую все мои линии в виде очень тонких прямоугольников как подсказывает ltjax , кажется, добился цели.(Мне не нужно было использовать текстуру или градиент.)

Ответы [ 3 ]

3 голосов
/ 17 октября 2011

Да, полноэкранное сглаживание сделает это за вас.Например, multi-sampling будет работать и широко поддерживается.Если вы хотите придерживаться только сглаженных линий, вы можете эмулировать это, рисуя вместо этого квадраты (которые немного больше вашей линии) и используя либо предопределенную текстуру «градиент», либо шейдер, который оценивает расстояние от реальной линии.

2 голосов
/ 17 октября 2011

Попробуйте отключить материал GL_LINE_SMOOTH, который не имеет четко определенного поведения в драйверах, и используйте MSAA (многоэлементное сглаживание).

Это включено при создании контекста;это зависит от используемой вами платформы.GLFW?SDL?Другой ?Самодельный?

0 голосов
...