Cieniowanie -Gouraud bez dodatkowych bibliotek

0

Witam,
piszę "silnik" do cieniowania Gouraud bez użycia dodatkowych bibliotek, w standardowym trybie graficznym dostępnym w VS,
czy możecie mi wskazać jakiś konkretny opis tego algorytmu?
lub jakieś fragmenty kodu w C++, samego algorytmu , a nie jakiegoś konkretnego programu.

opis tak 3 po 3: http://pl.wikipedia.org/wiki/Cieniowanie_Gourauda

0

A
^
/ \C
/ - /
B /-
jeden ze sposobów: jesli masz trojkąt ABC, dzielisz go na dwie czesci- lewą i prawą (jeśli opiszesz go sobie zgodnie ze wskazówkami zegara, to po Y początku i konca kazdej krawędzi bedziesz wiedział która jest lewa, a która prawa). Na rysunku lewa to krawędzie AB, prawa to AC i CB. Teraz interpolujesz kolory pomiedzy krawędziami wierzchołków A - B, A - C oraz B-C po osi Y, czyli wszystkie wspólrzedne ekranowe Y tych krawędzi muszą mieć przypisany swoj kolor. Dalej w poziomie (w X) interpolujesz kolor dla każdego Y pomiedzy lewą a prawą strona.

Najprostszy interpolator to
rgb_t[Y][X] = rgb_left_edge[Y] + t*(rgb_right_edge[Y]-rgb_left_edge[Y]),
gdzie t E<0,1> i zwiekszsz go z krokiem dla ciebie równym (1/liczba pikseli do interpolowania) - rgb oznacza, że musisz go wykonać dla kazdego kanału koloru.

Oczywiście najprostszy interpolator, to na CPU mało wydajny interpolator - zazwyczaj interpolatory pisało sie tak, by pętla nie zawierała żadnych mnożeń - wiec korzystało się z jakiegoś algorytmu przyrostowego całkowitoliczbowego. Do szybkiego interpolatora kolorów w 32-bitowym RGB uzywać najlepiej MMX lub całkowitoliczbowego SSE2 - - wtedy kazdy koloru kanał mozesz interpolować jednocześnie.

To takie ogolne informacje, jak czegoś nie wiesz, to pytaj.

0
_asd napisał(a)

A
^
/ \C
/ - /
B /-
jeden ze sposobów: jesli masz trojkąt ABC, dzielisz go na dwie czesci- lewą i prawą (jeśli opiszesz go sobie zgodnie ze wskazówkami zegara, to po Y początku i konca kazdej krawędzi bedziesz wiedział która jest lewa, a która prawa). Na rysunku lewa to krawędzie AB, prawa to AC i CB. Teraz interpolujesz kolory pomiedzy krawędziami wierzchołków A - B, A - C oraz B-C po osi Y, czyli wszystkie wspólrzedne ekranowe Y tych krawędzi muszą mieć przypisany swoj kolor. Dalej w poziomie (w X) interpolujesz kolor dla każdego Y pomiedzy lewą a prawą strona.

Najprostszy interpolator to
rgb_t[Y][X] = rgb_left_edge[Y] + t*(rgb_right_edge[Y]-rgb_left_edge[Y]),
gdzie t E<0,1> i zwiekszsz go z krokiem dla ciebie równym (1/liczba pikseli do interpolowania) - rgb oznacza, że musisz go wykonać dla kazdego kanału koloru.

Oczywiście najprostszy interpolator, to na CPU mało wydajny interpolator - zazwyczaj interpolatory pisało sie tak, by pętla nie zawierała żadnych mnożeń - wiec korzystało się z jakiegoś algorytmu przyrostowego całkowitoliczbowego. Do szybkiego interpolatora kolorów w 32-bitowym RGB uzywać najlepiej MMX lub całkowitoliczbowego SSE2 - - wtedy kazdy koloru kanał mozesz interpolować jednocześnie.

To takie ogolne informacje, jak czegoś nie wiesz, to pytaj.

Jak zacząć projekt w VS , w mfc,
aby zacząc rysować, szukam w necie, jest duzo tego do C#, javy, a do VC++ coś licho ...

Jesli mozesz to daj znac jak rozpoczac projekt,
mneij wiecej łapię jak działa ten algorytm, alenie wiem, na jakich typach danych moge pracowac, wiem, ze jest point itp, ale jak to poskładać aby zrobic poczatek projektu?

Docelowo chce miec funkcje, ktorej podam punkty i kolory, zaznaczy m i te punkty tworzac figure geometryczna , nastepnie je wycieniuje

1 użytkowników online, w tym zalogowanych: 0, gości: 1