как растеризовать вращающийся прямоугольник (в 2d с помощью setpixel)

У меня есть четыре 2d вершины ABCD с вращающимся прямоугольником, мне нужно растрировать / рисовать его (эффективно) в pixelbufer с помощью setpixel (x, y, color)

как это сделать?

я пытался с некоторым кодом, как

// convertilg abcd do up down left right, // calculating some dx_left dx_right on y-- // etc (frustrating on special cases when there are 2 up_y vertices in same line etc) for(;;) { drawhorizontalline(y, xstart, xend, color); if(y==downy) break; y--; xstart+=dxstart; xend+=dxend; if(y==lefty) dxstart = dxright; if(y==righty) dxend = dxleft; } 

но это очень расстраивает (ужасно ошибка и большинство разочарований), я действительно устал отлаживать это весь день вчера, и мне нужно найти, возможно, какой-то рабочий код, а не пытаться отлаживать этот

Чтобы заполнить ваш прямоугольник дескриптором его как замкнутый выпуклый многоугольник (почти такой же, как заполнение треугольника)

  1. закажите свои очки в соответствии с правилом обмотки

    поэтому существуют линии AB BC CD DA или наоборот

  2. создать левый и правый буфер

    адрес y -координат, его массив x -позиций и, если необходимо, также массив color,texture coordinates,... для начинающих:

    • int buf_x0[ys],buf_x1[ys];

    где ys – экран y -разрешение

  3. реализовать любой алгоритм линии ничьей

    но вместо рисования на экране просто храните координату x пикселя в буфер.

    • вместо: setpixel(x,y,color); do: buf_x?[y]=x; ,

Какой буфер является местом назначения, зависит от направления линии Y

  • если dy<0 то заполните buff_x0
  • если dy>0 то заполните buff_x1
  • если dy==0 тогда buf_x0[y]=min(x) и buf_x1[y]=max(x)

    1. примените этот линейный алгоритм ко всем пограничным линиям многоугольника (AB, BC, CD, DA)

    после этого буферы содержат начальные и конечные x -позиции ваших горизонтальных линий

    1. заполнить прямоугольник на экране

       for (y=min(Ay,By,Cy,Dy);y<=max(Ay,By,Cy,Dy);y++) draw_horizontal_line(y,buf_x0[y],buf_x1[y],color); 

Изображение для ясности (взято из моих лекций по компьютерной графике низкого уровня)

создание пограничного буфера

Описание изображения:

  • вертикальные прямоугольники представляют пограничные буферы buf_x0[],buf_x1[]
  • правило обмотки по часовой стрелке обеспечивает буфер назначения. Если его закодировано правильно, чем buf_x0[y] <= buf_x1[y] так что рисовать горизонтальные штрихи строк в одиночный for цикла

Также здесь простой пример C ++ для этого

Interesting Posts

Итак, почему i = ++ i + 1 четко определен в C ++ 11?

iOS: изображение поворачивается на 90 gradleусов после сохранения в виде данных представления PNG

Как развернуть meteorное приложение на моем собственном сервере?

Автозаполнение Angularjs от $ http

Unicode grep для Windows

C: развернуть макрос с вставкой токена

Как работает ломбок?

Могу ли я настроить таргетинг на: перед или: после псевдоэлемента с помощью сочетания братьев и сестер?

Если я делаю `typedef` в C или C ++, когда мне следует добавить` _t` в конце typedef’ed типа?

Как ускорить объединение нагрузки без дублирования в NHibernate?

Как копировать ТОЛЬКО те файлы, которые не находятся в пункте назначения?

Использование значка шрифта Awesome для точек маркера с одним элементом элемента списка

Конвертировать DivX (и другие форматы) в DVD-видео под Linux

Как раздуть один вид с помощью макета

Контекстное меню для добавления controllerа / просмотра отсутствует

Давайте будем гением компьютера.