Witam, robię prostą grę w której postać chodzi po pokoju i może oglądać co tam jest i mam problem. Otóż chcę zrobić pokój jako jedną bryłę wymiary 12x4x12 i mam problem z teksturowaniem. Podłoga ma być jedną teksturą, ściany kolejną i sufit jeszcze inną. Czy idzie utworzyć jedną bryłę i teksturować ją częściowo tzn dolną ścianę 1 tekstura ściany 2 sufit 3.? Czy lepiej rozbić to na niezależne płaszczyzny? Czy potrzebuję tablicę ze współrzędnymi do teksturowania osobno podłogi ścian i sufitu? Nie mam pojęcia jak to ruszyć z góry dziękuję za każdą pomoc
Różnie można robić.
Np. ładujesz 6 osobnych tekstur, które potem sobie zamieniasz podczas rysowania. Ale można też spakować te 6 tekstur w jedną, a potem po prostu manipulować ofsetami. sześć tekstur w jednej wygląda np. tak:
| A|B|C|D|E|F|
albo tak:
| A|B|C|
|D|E|F|
Może na początek będzie lepiej zrobić ten sześcian, a potem zbindować odpowiednią teksturę i rysować jedną ścianę, potem drugą teksturę i rysować podłogę (wycinek sześcianu) itd. Unikniesz zabawy z robieniem odpowiedniej tekstury, z drugiej strony takie ciągłe zmiany tekstur są bardziej wymagające dla karty, ale to nie jest aż takie strasznie mocno obciążające.
Ok trochę ruszyłem z projektem i natrafiłem na pewien problem wygląda to tak:
Mam bryłę 8x0,5x4 i teksturuję ją a w wyniku mam coś takiego
Wrzucam kod tylko dla jednej z tych ścian 2 jest analogicznie. Sufit i podłoga wyglądają dobrze
kod rysujący:
glBindTexture(GL_TEXTURE_2D,scianySrodek);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer( 3, GL_FLOAT, 0, geomTexCoordsScinySrodek);
mat4 M4=mat4(1.0f);
M4 = rotate(M4,PI/2,vec3(0,1,0));
glLoadMatrixf(value_ptr(V*M4));
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_FLOAT,0,scianySrodekTexCoords);
glDrawArrays(GL_QUADS,0,scianySrodekVertexCount);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
tablica do teksturowania:
float geomTexCoordsSciany[]={
0,0,0,
1,0,0,
1,1,0,
0,1,0,
1,0,0,
1,0,1,
1,1,1,
1,1,0,
1,0,1,
0,0,1,
0,1,1,
1,1,1,
0,0,1,
0,0,0,
0,1,0,
0,1,1
};
ogólnie wcześniej gdy było to w jakimś kolorze wszystko wyglądało dobrze dopiero gdy próbuję to oteksturować to dostaję taki efekt
Przez przypadek skopiowałem nie tą tablicę wierzchołków do teksturowania ale tamta wygląda dokładnie tak samo jak ta