Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 OpenGL вопрос по сглаживанию линий 2D  [new]
igor_dev
Member

Откуда:
Сообщений: 252
Здравствуйте. Не знал на какой форум написать вопрос по OpenGL и написал сюда.

Есть приложение которое рисует линии и другие примитивы в 2D. Необходимо сглаживание
неровностей линий. По антиалиасингу подсказали следующий код:

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

glBegin(GL_LINES);
glColor4f(0.0f, 0.0f, 0.0f, 0.0f);
glVertex3f
           ...
glVertex3f
glEnd();

Для наклонных линий все хорошо: они сглаживаются и смотрятся как нужно. Однако строго

горизонтальные и вертикальные линии выглядят толще и светлее оттенком.

Нормально ли это или можно ли нарисовать так чтобы горизонтальные/вертикальные линии были
более схожи с остальными?

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.


К сообщению приложен файл. Размер - 4Kb
2 ноя 18, 11:08    [21722273]     Ответить | Цитировать Сообщить модератору
 Re: OpenGL вопрос по сглаживанию линий 2D  [new]
Dimonka
Member

Откуда:
Сообщений: 1091
Всё у тебя нарисовано как надо.
Тебе просто надо осознать, что если ты рисуешь гозизонтальную или вертикальную линию в 1 пиксель использую целые числа, то обводка линии будет считаться от этих координат как +-0.5 пиксела и соответственно раскрасит по текущего пиксела и пол предыдущего. Так что рисуй по середине пиксела (добавляй 0.5 к координатам), если хочешь обводку линии ровно в один пиксел.
2 ноя 18, 12:49    [21722443]     Ответить | Цитировать Сообщить модератору
 Re: OpenGL вопрос по сглаживанию линий 2D  [new]
igor_dev
Member

Откуда:
Сообщений: 252
Dimonka,
Как Вы и сказали: добавил 0.5f к координатам Y для горизонтальной линии и..все ОК!

DrawLine2D(new Point2D(100, 200.5f), new Point2D(200, 200.5f));

(рисует линию - основание треугольника. Это моя оболочка над OpenGL)

И еще уточнения по данному решению, пожалуйста:

1) 0.5f лучше добавлять ко всем координатам всех примитивов или
для линии в DrawLine2D проверять если горизонтальная/вертикальная, то тогда добавлять?

2) Это решение (с добавлением 0.5 пикселя) универсально? Оно должно работать на всех разрешениях и устройствах?

К сообщению приложен файл. Размер - 7Kb
2 ноя 18, 13:27    [21722484]     Ответить | Цитировать Сообщить модератору
 Re: OpenGL вопрос по сглаживанию линий 2D  [new]
Dimonka
Member

Откуда:
Сообщений: 1091
igor_dev
И еще уточнения по данному решению, пожалуйста:

1) 0.5f лучше добавлять ко всем координатам всех примитивов или
для линии в DrawLine2D проверять если горизонтальная/вертикальная, то тогда добавлять?

2) Это решение (с добавлением 0.5 пикселя) универсально? Оно должно работать на всех разрешениях и устройствах?

Просто представь себе один пиксель в виде квадрата, а линию в виде отрезка, по которому ведут карандашом заданной толщины и возможно вопросов станет чуть меньше.

1) нет универсального ответа. Всё зависит от того, что ты хочешь получить в итоге.

2) Это решение относится лишь к случаю, когда ты хочешь полностью покрыть целое нечётное количество пикселей. Но если тебе надо нарисовать линию толщиной в чётное количество пикселей, то ничего добавлять не надо. Это решение не имеет отношения к разрешению устройства.
2 ноя 18, 14:58    [21722579]     Ответить | Цитировать Сообщить модератору
 Re: OpenGL вопрос по сглаживанию линий 2D  [new]
igor_dev
Member

Откуда:
Сообщений: 252
Dimonka,
Обнаружился момент при использовании добавления 0.5f к координатам линий. Мне нужно рисовать
сетку так вот при добавлении 0.5f некоторые линии сдвинулись на 1px...
(На рисунке поверх сетки где нет +0.5F вставлен фрагмент сетки с +0.5f и виден сдвиг на некоторых линиях).
Этого можно избежать??

К сообщению приложен файл. Размер - 10Kb
2 ноя 18, 16:02    [21722643]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить