Nvm Napisano Listopad 24, 2007 Zgłoś Share Napisano Listopad 24, 2007 Witam wszystkich. Otóż, jakiś czas temu rozpoczęłem naukę OpenGL. Mniej więcej większość rzeczy rozumiem. Napotkałem jednak na dziwny (jak dla mnie) problem. Otóż wczytuję teksturę w formacie *.bmp niebiańsko zatytułowaną "kamien3.bmp" przedstawiającą narysowany przeze mnie kamień. Tak wiem, nie jest on zbyt ładny jednak przyjmijmy, że jest w porządku gdyż bibliotece OpenGL się on podoba i wszystko wyświetla się prawidłowo. Okay, ponieważ kamień nie był zbyt ładny i nie miał zbyt wysokiej rozdzielczości postanowiłem go podmienić na coś innego - mianowicie moje "logo", jeśli zgodzicie się to tak nazwać. Miało ono rozmiary 256x256 i nie wyświetlało się poprawnie. Nie pamiętam jednak co wyglądało nie tak. Pomyślałem więc, że jest to wina wielkości bitmapy, ponieważ nasz "kamien3.bmp" miał 64x64 piksele. Tak więc za pomocą moich zdolnych palców jak i mocy obliczeniowej mojego procesora udało mi się pomniejszyć logo do rozmiarów 64x64. Cały zadowolony z sytuacji, byłem pewien, że wszystko się uda. Bzdura. Dla zobrazowania sytuacji przedstawiam dwa screeny przedstawiające efekt działania 2 różnych tekstur, oraz obydwie tekstury. Obydwie bitmapy są 24-bitowe, przynajmniej według zeznań niewątpliwie profesjonalnego narzędzia jakim jest Microsoft Paint (wybaczcie mi sarkazm, teraz na informatyce rysujemy godła w tym programie i 15 sekund bez wytknięcie wady owego programu graniczy z cudem ), ale może wy dopatrzycie się jakiegoś błędu... W kodzie zmieniam tylko adres pliku tekstury! Przedstawiam kod procedury odpowiadającej za wczytanie bitmapy, oraz kod procedury odpowiedzialnej za wyrysowanie całej sceny: procedure LoadTextures; var TextureFile : PSDL_Surface; begin //Wczytaj bitmape TextureFile := SDL_LoadBMP('Data/Textures/kamien3.bmp'); //Storz teksture glGenTextures(1, @Texture); //Generowanie tekstury z bitmapy glBindTexture(GL_Texture_2D, Texture); //Wygeneruj teksture glTexImage2D(GL_Texture_2D, 0, 3, TextureFile^.W, TextureFile^.H, 0, GL_BGR, GL_Unsigned_Byte, TextureFile^.Pixels); //Filtrowanie liniowe //Skaluj linowo gdy obrazek jest wiekszy niz tekstura glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); //Skaluj liniowo gdy obrazek jest mniejszy niz tekstura glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); //Zwolnij powierzchnie bitmapy SDL_FreeSurface(TextureFile); end; Ś)1M)(ź]ą(ą ą1} =1=I} UI} %P1}AQ!} UI} %P(źAŃŹ(ą1%ŃŃ((źAąźą(źMĄąźą(ąQąŃ(źź9IeMU(QI=)-P(źiIąŃ(ą 1}A=1e=8(ąYŃźĄąŹ(ą ąź-ąźĄą(ąYŃźąĄąŹ(ą ąź-ąąźźĄą(ąYŃźąąĄąŹ(ą ąź-ąąźąźĄą(ąźiŃŃ((ąQąŃ((ź=ŃŃ(ą QŃĄ1}QaQUI|QŃ(ź=(źąIŃŃĄIŃŃ(źź9IeMU( i]=I=-P(ą Ą1}EUL(ąQ ąYŃ(ąQ ąYŃ(ąQ ąYŃ(ąQ ąYŃ(ą((źIŃѹѥIŃŃIŃŃŹą(źIŃŃŃĄIŃŃ(źAą(M1}1}M ()( Być może dla Was - starych wyjadaczy OpenGL (pozdrowienia Spider100 ) to problem błachy i kompletnie podstawowy. Oczywiście mogę ominąć ten problem i używać tekstury z kamieniem w roli głównej - to jednak mija się z celem. W końcu ja chcę się przede wszystkim kształcić - dopiero później tworzyć jakieś aplikacje, tudzież gry. Za wszelkie odpowiedzi z góry dziękuję i pozdrawiam. Screeny i pliki tekstur Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Listopad 24, 2007 Zgłoś Share Napisano Listopad 24, 2007 A co jest zle oprucz tego ze jest do gory nogami? www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
TSr Napisano Listopad 24, 2007 Zgłoś Share Napisano Listopad 24, 2007 Patrzę na to i nie wiem o co chodzi. Wyświetla się dobrze czego chcieć więcej? Ubuntu.pl user #10593 Link do komentarza Udostępnij na innych stronach More sharing options...
Nvm Napisano Listopad 24, 2007 Autor Zgłoś Share Napisano Listopad 24, 2007 Przy teksturze kamien3 jest trójkąt, przy drugiej teksturze trójkąt znika. Dlaczego? Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Listopad 24, 2007 Zgłoś Share Napisano Listopad 24, 2007 lol! nastepnym razem pisz konkretnie o co chodzi a nie wypisuj jakies opowiadanie ktorego az sie nie chce czytac. www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Listopad 24, 2007 Zgłoś Share Napisano Listopad 24, 2007 Ej, nie za bardzo kumam w czym problem... .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Listopad 24, 2007 Zgłoś Share Napisano Listopad 24, 2007 Chyba jednak nie znika tylko zmienia kolor (trójkąt) dzieje się (wg. mnie tak) ponieważ przy renderowaniu trójkąta podajesz kolor na jakiś tam następnie bindujesz na teksturę (początkowo kamienia) renderujesz quad. Masz zbindowaną aktualnei teksturę z białymi pixelami(chyba tak to jest uwzględniane) przy 2 obejściu pętli renderującej kolor podanny do trójkąta zostaje przemnożony? przez teksturę (1,1,1) i wychodzi kolor jaki podałeś. Jednak jak zmieniasz na teksturę loga, która ma czarne piksele to wtedy mnoży on przez (0,0,0) i kolor trójkąta zmienia się na 0,0,0 bo nie podajesz w nim coordów jak byś podał to byś ujrzał na nim teksturę również a takto kolory zostają wymnożone i cyk. Dla testu zmień kolor, którym jest zapełniany bufor na inny od czarnego i wyrenderowany zostanie Ci czarny trójkąt a nie jak wg. Ciebie nie będzie trójkąta. Edit: W praktycę muszę sprawdzić czy tak rzeczywiście jest ale chyba tak mi się wydaje. Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Nvm Napisano Listopad 25, 2007 Autor Zgłoś Share Napisano Listopad 25, 2007 5corpio - miałeś rację Dodałem linijkę glBindTexture(GL_TEXTURE_2D, 0); po wyrysowaniu obiektu i już jest okay. Jednak na forum GameDev.pl wyczytałem, że powinno się to robić za pomocą glEnable i glDisable, a nie w taki sposób jak ja to zrobiłem. Ale przecież glEnable przyjmuje tylko jedną wartość, więc nie za bardzo wiem o co chodzi. Mógłby ktoś objaśnić? Anyway - dzięki jeszcze raz. lol! nastepnym razem pisz konkretnie o co chodzi a nie wypisuj jakies opowiadanie ktorego az sie nie chce czytac. Na to nie licz Będę pisał opowiadanie z najbardziej błahej sprawy jaka przyjdzie mi do łba Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Listopad 25, 2007 Zgłoś Share Napisano Listopad 25, 2007 glEnable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D); Pewnie im chodziło o aktywowanie/dezaktywowanie teksturowania Bo pewnie zmiana stanu przez glEnable/glDisable kosztuje mniej czasu niż bindowanie tekstur. Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.