Heathcliff Posted August 4, 2008 Report Share Posted August 4, 2008 Witam Wszystkich, Robimy z kolegą skaner 2.5D jako naszą pracę magisterską. Z OpenGL'em nie miałem styczności na studiach stąd ten post. Chciałbym pokryć teksturą (zdjęciem z aparatu) wygenerowany wcześniej model (patrz link do zdjęcia). Pomijając to, że zdjęcie trzeba będzie dopasować rozmiarem, pozycją itd chciałbym wiedzieć jak "nałożyć" te zdjęcie na mój model. W sieci czytałem troche tutoriali, ale wszystkie oparte były na prostej sześciokątnej bryle typu: glBindTexture (GL_TEXTURE_2D, 13); glBegin (GL_QUADS); glTexCoord2f (0.0, 0.0); glVertex3f (0.0, 0.0, 0.0); glTexCoord2f (1.0, 0.0); glVertex3f (10.0, 0.0, 0.0); glTexCoord2f (1.0, 1.0); glVertex3f (10.0, 10.0, 0.0); glTexCoord2f (0.0, 1.0); glVertex3f (0.0, 10.0, 0.0); glEnd (); Moj model składa się z kilku tysięcy GL_QUADS. Chciałbym wiedzieć w jaki sposób mam zmodyfikować funkcje glTexCoord2f (x, y) tak, aby całe zdjęcie znalazło się na modelu (na wszystkich quadach). Do tej pory potrafie umieścić całe zdjęcie na jednym quadzie, co przy tak ogromnej ich ilości nie wygląda za dobrze. Z góry dziękuje za pomoc, Łukasz PS: Link do zdjęcia: Zdjęcie Link to comment Share on other sites More sharing options...
Toster Posted August 4, 2008 Report Share Posted August 4, 2008 Ogolnie nie jestem od tego specjalista ale teztura jest skalowana do wielkosci 1,1 czyli jak wsp. textury ustawisz jako: (0,0) - (1,0) (0,1) - (1,1) to na qadzie rozepniesz cala teksture. Czyli musisz zrobic tak: jesli w poziomie liczba qadow to M a w pionie to M to znaczy ze masz mode o wielkosci MxN quadow. teraz kolejne qady w poziomie beda mialy wspolrzedne textury takie: (a, B) - (a+a', B) (a, b+b') - (a+a', b+b') gdzie a' = 1/M b' = 1/N a = 0, b=0 w kolejnym przejsciu zwiekszamy: a = a + a' do konca lini b = b + b' nowa linia i calosc powtarzamy MxN razy dla wszystkich qadow przy rozpoczynaniu kolejnej lini (b = b+b') a=0 Jak cos sie myle prosze o korekte Always Dark<br /> Link to comment Share on other sites More sharing options...
Force Posted August 4, 2008 Report Share Posted August 4, 2008 wg mnie tak duży model powinien być zrobiony w programie graficznym i w nim można teksturę nakładać, eksprtujesz do jakiegoś formatu i w programie otwierasz (opengl nie ma wbudowanych do tego meto, ale są gotowe biblioteki do ładowania plików blendera itp.) Baza tysięcy lotnisk: http://airportsbase.com Link to comment Share on other sites More sharing options...
Spider100 Posted August 5, 2008 Report Share Posted August 5, 2008 Nie wiem czy cokolwiek zrozumiałem ale jeśli tekstura ma być narzucona na obiekt od góry to można automatycznie wygenerować koordynaty dla wszystkich wierzchołków za pomocą glTexGen szukaj na googlach co i jak. www.spider.dathox.com Link to comment Share on other sites More sharing options...
Heathcliff Posted August 6, 2008 Author Report Share Posted August 6, 2008 Witam ponownie, Co do glTexGen to wypróbowałem i faktycznie bardzo szybko można nałożyć teksturę, ale wydaje mi się, że nadaje się to bardziej do prostszych modeli i wydaje mi się, że prędzej czy później musiałbym wrócić do glTexCoord2f(x,y). Toster, dzięki za pomoc, metoda sprawdziła się świetnie, praktycznie copy/paste tego co napisałeś Nie wiem tylko dlaczego tekstura nałożyła się do góry nogami. Czy to normalne ? Jak obrócić obrazek/teksturę o np 90' ? Pozdrawiam, Łukasz Link to comment Share on other sites More sharing options...
Toster Posted August 6, 2008 Report Share Posted August 6, 2008 Ogolnie to uklad wspolrzednych jest narzucony przez dany system. Z tego co pamietam to DX mial prawo skretny a GL lewoskretny (albo na odwrot). W efekcie albo w GL albo w DX tekstury byly obrocone punk (0,0) byl w lewym dolnym rogu a nie w lewym gornym. Obrot o wielokrotnosc 90 lub flipH albo flipV jest dosyc prosty, poprostu zamieniasz ze soba wspolrzedna A,B (wg moich wzorow). jak np chcesz zrobic obrot o 90st to zamien A->B, B->A. Poeksperymentuj bo jest to proste a duzo trzeba by sie rozpisywac. Jesli chodzi o obrot o dowolny kat to jest to ciut bardziej zlozone i od reki ci tego nie napisze musialbym wziasc kartke i sobie rozrysowac a nie wiem co dokladnie chcesz uzyskac wiec nie bede wybiegal z bębenkiem przed szereg Normalne to zupelnie cos innego, uzywane sa do cieniowania i jako takie nie maja nic wspolnego z tekstura. Always Dark<br /> Link to comment Share on other sites More sharing options...
Blind Posted August 6, 2008 Report Share Posted August 6, 2008 Tak dla scislosci w Dx mozna zmienic uklad wspolzedny na lewo lub prawo skretny. www.blinder.pl - Blog Link to comment Share on other sites More sharing options...
Heathcliff Posted August 6, 2008 Author Report Share Posted August 6, 2008 Problem rozwiązałem tak, że załadowałem teksturę od tyłu Odejmując w kolejnych krokach odpowiednio : a = a - a' do konca lini b = b - b' nowa linia Dzięki za pomoc Pozdrawiam serdecznie, Łukasz H. Link to comment Share on other sites More sharing options...
Nvm Posted August 6, 2008 Report Share Posted August 6, 2008 CYTAT(Blind @ śro, 06 sie 2008 - 20:55) Tak dla scislosci w Dx mozna zmienic uklad wspolzedny na lewo lub prawo skretny. Nie chce nic mówić ale to trochę jak wtrącenie Jasona nt. Linuksa Pozdrawiam serdecznie, Łukasz H. Też się tak nazywam Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.