|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.04.2013, 14:20 | #1 |
Регистрация: 06.04.2013
Сообщений: 3
|
Растеризация кривой Безье.
Привожу здесь свой алгоритм рисования кривой Безье средствами Glut. Среда Visual Studio 2012, C++ проект.
Проблема в том, что растеризует кривую он как-то неадекватно, хотя закрашиваемые пиксели вроде бы считает как нужно. Растеризую с помощью алгоритма DDA. вот код: Код:
причем когда кривую рисую широкую, наблюдаются разрывы как на скрине, а когда в четверть экрана, пиксели сжимаются плотнее и получается наложение, и как следствие утолщение линии. Подскажите как это вообще делается для кривых, как исправить алгоритм, или может быть стоит взять другой? в интернете инфы по этому вопросу раз два и обчелся. Последний раз редактировалось Braun1408; 06.04.2013 в 14:24. |
06.04.2013, 14:35 | #2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
1. Вертексы Вы используете как отдельные точки, причем располагаете их по вещественным координатам. Вполне естественно, что при Растянутом графике у Вас возникают разрывы. Выход - используйте вертексы как узлы ломаной.
2. У Вас шаг построения кривой не зависит от ее длины в пикселях. Поэтому при мелких масштабах точки налезают одна на другую - их просто слишком много. Выход - корректировать шаг в зависимости от масштаба. 3. Компромиссное решение: 1000 узлов на кривой - слишком много. Достаточно будет и 30. |
06.04.2013, 15:41 | #3 | |
Регистрация: 06.04.2013
Сообщений: 3
|
Цитата:
Код:
Код:
Но будет ли это растеризацией как таковой? |
|
06.04.2013, 17:04 | #4 |
Регистрация: 06.04.2013
Сообщений: 3
|
кстати, так все рисуется и без функции ДДА. похоже это не то совсем. надо как то попиксельно нарисовать
|
06.04.2013, 18:01 | #5 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Собственно, посмотрите, у Вас везде фигурируют целые числа. Только потом результат округляется до целых. А в OpenGL размер поля по умолчанию составляет от -1 до +1, причем не зависит от размеров окна. Вы, конечно, можете переопределить масштаб, но тогда у Вас "полывут" координаты всех 4-х точек. В общем, слишком много геморроя, пока учтешь все нюансы. Да и стоит ли овчинка выделки, если самое главное, ради чего подключают OpenGL - аппаратное ускорение графики, Вы совершенно не используете, просчитывая все центральным процессором? |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[C++] Растеризация изображения | oneMoreWood | Помощь студентам | 0 | 02.01.2012 23:20 |
Кривая Безье. | Muaxaxa | Общие вопросы Delphi | 2 | 28.11.2011 01:03 |
Direct3D9, программная растеризация | _-Re@l-_ | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 6 | 01.09.2011 19:21 |
Построение кривой безье. | faustinus | Помощь студентам | 1 | 26.12.2010 18:02 |
Кривая Безье | ELL | Помощь студентам | 4 | 20.05.2008 22:56 |