|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Vovanius Uryvaeff 2:5020/175.2 26 Nov 2002 21:57:49 To : Alexander Samarin Subject : Быстрая закраска -------------------------------------------------------------------------------- Tue Nov 26 2002 11:51, Alexander Samarin wrote to All: AS> *|||, All!* AS> Почту за предыдущие 3 месяца я потерял, так, что сильно не пинайте AS> т.к. AS> вроде пробегала здесь такая тема. AS> Имею 3-х мерную модель (гоблин) состоящий из полигонов AS> (треугольников), так вот текстурирование мне не нужно, я хотел бы эти AS> полигоны просто закрашивать в свой цвет (для моей задачи итоговая AS> картинка вполне сойдёт). AS> Пока есть только 2 идеи: [skip] Эти идеи - мой совет - лучше не применяй. Впрочем, вторая идея применяется несколько иначе - сначала на отдельном битмапе расставляются все точки границ, а потом достаточно быстро серией логических операций все закрашивают. Расставляются точки так: чертится отрезок с условиями: точка верхнего конца не ставится, точка нижнего конца ставится. Остальные точки по одной в строке. Точки ставятся по XOR - то есть если до установки отчка уже была, она стирается. _ <-- Один конец x x x <-- Еще один конец Дальше закрашивается так: для y=ymin..ymax для x=xmin..xmax A[x,y] = A[x-1,y] XOR C[x,y] A - битмап для прорисовки, C - дополнительный битмап. Так можно нарисовать любой многоугольник. Более просто делается так: есть вершины треугольника (x1,y1), (x2,y2), (x3,y3) 1. Сортируем вершины в порядке возрастания y (y1<y2<y3) 2. Рисуем в два приема для y=x1..x2 линию (x1+ (x2-x1)*(y-y1)/(y2-y1), y) - (x1+ (x3-x1)*(y-y1)/(y3-y1), y) для y=x2..x3 линию (x2+ (x3-x2)*(y-y2)/(y3-y2), y) - (x1+ (x3-x1)*(y-y1)/(y3-y1), y) и всё. вообще - подобным алгоритмом любые многоугольники можно закрашивать, только там понавороченнее. AS> Есть и третья идея, но она нелепа, хотя и работает (нелепа т.к. там AS> куча частных проверок и сильно тормозит) - такой алгоритм я не видел пока AS> ни у кого, хотя он напоминает мой второй. Этот третий алгоритм я придумал AS> (правда не с нуля, но всё-же) 6 лет назад и тогда для меня это было круто AS> :) Этот лучше тоже не применяй. :) Send Email to vovanius2000<yxo>mail. ru --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/330078ed8766.html, оценка из 5, голосов 10
|