opengl 2 - czy dzielić bryły do teksturowania?

Odpowiedz Nowy wątek
2017-05-19 19:43
komando
0

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

edytowany 1x, ostatnio: Ktos, 2017-05-19 19:55

Pozostało 580 znaków

2017-05-19 20:17
flaming
0

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|
edytowany 1x, ostatnio: furious programming, 2017-05-21 12:07

Pozostało 580 znaków

2017-05-19 22:40
0

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.

Pozostało 580 znaków

2017-05-21 12:50
komando
0

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
screenshot-20170521124903.png
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

Pozostało 580 znaków

2017-05-21 12:55
komando
0

Przez przypadek skopiowałem nie tą tablicę wierzchołków do teksturowania ale tamta wygląda dokładnie tak samo jak ta

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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