GDI+ przekształcenia afiniczne tekstur i widok perspektywy

0

Witam,

Mysle, ze nie robie wielkiego bledu umieszczjac temat w tym dziale. Krótko mówiąc, chcę otrzymać taki efekt:

user image

Mając taką próbkę tekstury:

user image

Jak to osiągnąć w GDI+? Próbowałem za pomoca przekształceń afinicznych, ale to mi chyba nie pomoże - czhodzi o stopniowe "ściskanie" tekstury (na końcu dachu jest gęstsza).

Jedyne, co mi sie udało otrzymać:

user image

Ale jak widac, zbyt naturalnie to nie wyglada :|

Mam nadzieję, że dobrze wytłumaczyłem... ma ktoś jakiś pomysł jak do tego podejść? Czy da sie to osiagnac poprzez obliczenie odpowiedniej macierzy transformacji...?

0

Próbowałeś OpenGla?

0

Hmm zalezy mi na GDI+, bo mam juz napisany szablon klas uzywajacych GDI+ - musialbym wszystko od poczatku robic...

[edit]
Szperalem teraz w necie i znalazlem to: http://www.codeguru.com/cpp/g-m/gdi/gdi/article.php/c3679/ Ale nie wiem czy to mi pomoże :|

0

a jak mi sie zdaje GDI+ to jest coś oparte na DirectX to nie lepiej to do directX'a przerobic??

0

GDI+ to jest coś oparte na DirectX

GDI+ nie ma z dx nic wspolnego :|

Pokombinuje chyba z tym warp-em bo jak na razie nic lepszego nie mam...

[edit]
Ok widze ze w GDI+ to chyba niemozliwe - jezeli sie myle, to niech ktos mnie poprawi :>

0

chyba tak zrobisz ten przekręt obrazu:

PointF t[] = {PointF(50,10), PointF(80,40), PointF(15,50)};
g.DrawImage(&bmp, t, 3);

rysuje obraz w równoległoboku, który jest wyznaczony przez 3 p-ty
(czwarty jest zbędny - można go obliczyć z tych trzech).

0

Nie za bardzo... tu chodzi o dokladne ustawienie perspektywy i to wcale nie musi byc w ogolnym przpadku czworokat.

Ma to dzialac tak, ze mam 4 punkty do ustawiania parametrow tekstury (poprzez przeciaganie ich mysza). Potem taka tekstura wypełniam obiekt, ktory moze byc dowolnym wielokatem. Podlad jest caly czas widoczny w wypelnianym obiekcie.

W gdi+ jest funkcja Warp, ale niestety nie ma tam mozliwosci warpowania tekstrur, a jedynie ksztaltow. Tzn moge wypelnic ten ksztalt brushem, ale "zwarpowany" on nie zostanie.

Jedyne co mi przychodzi do glowy to dodanie do GraphicsPath wszystkich pikseli obrazka i warpowanie tego. Ale to bedzie chyba zbyt powolne, a po drugie nie wiem jak niby to zrobic, bo "warpowac" mam na dobra sprawe brusha a nie obrazek...

A moze ktos podpowie, jak by to mozna bylo zrobic w OpenGL i polaczyc z GDI+? Czyli tekstura bylaby generowana w OpenGL - o ile da sie cos takiego zrobic - nie znam si ena OpenGL wiec nie wiem.

0

Ta na bank GDI+ nie ma nic wspolnego z DirectX tylko po co nagłowki są potrzebne? i czy przypadkiem GDI+ to nie jest jakiś krok w strone Visty?

Tekstury w opengl przechowujesz w zmiennej INTEGER;

// Może byś tak łaskawie poczytał najpierw, a nie - jak zwykle - wykazywał się ignorancją? Nagłówki to ew. z PSDK wymaga a jest biblioteką obiektową do obsługi grafiki, następca starego GDI, wcale nie krok w stronę Visty, technologia starsza niż XP. (dop. deus)

0
othello napisał(a)

Ma to dzialac tak, ze mam 4 punkty do ustawiania parametrow tekstury (poprzez przeciaganie ich mysza). Potem taka tekstura wypełniam obiekt, ktory moze byc dowolnym wielokatem. Podlad jest caly czas widoczny w wypelnianym obiekcie.

Musi być jeszcze głębokość, albo nachylenie tego czworokąta...

Ja bym robił to 'własnoręcznie' w pamięci - zwyczajna interpolacja i tyle.
Później rzut na ekran: MaskBlt z gdi.

W GL też można:
ładujesz teksturę, ustawiasz z 40 przeróżnych parametrów, :-D
a później już tylko rysujesz czworokąt w 3D i tyle.

0

Ja bym robił to 'własnoręcznie' w pamięci - zwyczajna interpolacja i tyle.

Mozesz dokladniej napisac co masz na mysli?

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