2010-07-24 2 views
2

Я пишу программу рисования в Delphi. Пользователь нажимает 2 точки на экране и между ними рисуется линия. Я хочу, чтобы линии были сглажены. Я ставлю этот код в создании процедуры() класса OpenGL (который называется только один раз в начале):OpenGL: Увеличивает количество строк, сменяет сглаживание?

glEnable(GL_LINE_SMOOTH); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); 

Когда я начинаю рисовать, первый, второй и, возможно, третьи линии рисуются штраф. Но, что интересно, когда число строк увеличивается (скажем, 7, 8 строк), сглаживание начинает срываться! Добавляя каждую строку на экране, она только ухудшается, и края линий начинают становиться похожими на пилообразные!

Я также поставил тот же код в верхней части моей схемы draw(), которая рисует линии (и запускается каждым щелчком мыши), но ничего не меняется.

Я делаю что-то неправильно здесь? У кого-нибудь есть предложение?

+0

Возможно ли, что jaggies зависят от угла? Линии, расположенные вблизи горизонтали или вертикали, обычно становятся менее размытыми, чем промежуточные. –

+0

Нет. Это не тот случай. Он не отличается тем, что является углом или длиной линии. – Mahm00d

+0

У вас есть шанс опубликовать снимок экрана? –

ответ

6

Вы уверены, что не используете ни одного сегмента линии более одного раза? Вы звоните glClear перед выполнением какого-либо рисунка?

+0

Спасибо за отличный ответ! Это была именно проблема. линии более одного раза, и это вызвало эффект. – Mahm00d

2

Check значение GL_SMOOTH_LINE_WIDTH_RANGE и сравните его с glLineWidth() s вы пытаетесь использовать.

+0

Хороший ответ - я предположил, что они были одинаковой ширины, но он не сказал этого явно. –

+0

При повторном чтении я не уверен, где у меня есть идея :( – genpfault

+1

Вы уверены, что стандартный OpenGL имеет константу GL_SMOOTH_LINE_WIDTH_RANGE? Потому что она не распознает ее в Delphi (с использованием стандартного OpenGL.dll). BTW, я использую 3 в glLineWidth(), и я даже проверил с 1 и получаю ту же проблему. – Mahm00d

Смежные вопросы