OpenGL Teksturowanie

Odpowiedz Nowy wątek
2013-06-20 16:23

Rejestracja: 7 lat temu

Ostatnio: 2 lata temu

Lokalizacja: Tutaj,obok

0

Narysowałem graniastosłup - skrzynie - i nałożyłem teksturę.
Jednak zauważyłem, że nie ma lewej ściany choć ją rysuje (to samo z prawą ścianą) reszta jest rysowana dobrze.
h8edmvbwo6bk_t.jpg
kod:

glBegin( GL_QUADS );

      // tylnia sciana
      glTexCoord2f( 0, 0);
          glVertex3f( x, y, z );

      glTexCoord2f( 1, 0 );
          glVertex3f( x + width, y, z );

      glTexCoord2f( 1, 1 );
          glVertex3f( x + width, y + height, z );

      glTexCoord2f( 0, 1 );
          glVertex3f( x, y + height, z );

      // prawa sciana boczna
      glTexCoord2f( 0, 0);
          glVertex3f( x + width, y, z );

      glTexCoord2f( 1, 0 );
          glVertex3f( x + width, y, z + lenght );

      glTexCoord2f( 1, 1 );
          glVertex3f( x + width, y + height, z + lenght );

      glTexCoord2f( 0, 1 );
          glVertex3f( x + width, y + height, z );

      // lewa sciana boczna
      glTexCoord2f( 0, 0);
          glVertex3f( x, y, z );

      glTexCoord2f( 1, 0 );
          glVertex3f( x, y, z + lenght );

      glTexCoord2f( 1, 1 );
          glVertex3f( x, y + height, z + lenght );

      glTexCoord2f( 0, 1 );
          glVertex3f( x, y + height, z );

      // gorna sciana
      glTexCoord2f( 0, 0);
          glVertex3f( x, y + height, z );

      glTexCoord2f( 1, 0 );
          glVertex3f( x + width, y + height, z );

      glTexCoord2f( 1, 1 );
          glVertex3f( x + width, y + height, z + lenght );

      glTexCoord2f( 0, 1 );
          glVertex3f( x, y + height, z + lenght );

      // dolna sciana
      glTexCoord2f( 0, 0);
          glVertex3f( x, y , z );

      glTexCoord2f( 1, 0 );
          glVertex3f( x + width, y , z );

      glTexCoord2f( 1, 1 );
          glVertex3f( x + width, y, z + lenght );

      glTexCoord2f( 0, 1 );
          glVertex3f( x, y, z + lenght );

       // przednia sciana
      glTexCoord2f( 0, 0);
          glVertex3f( x, y, z + lenght );

      glTexCoord2f( 1, 0 );
          glVertex3f( x + width, y, z + lenght );

      glTexCoord2f( 1, 1 );
          glVertex3f( x + width, y + height, z + lenght );

      glTexCoord2f( 0, 1 );
          glVertex3f( x, y + height, z + lenght );
    glEnd();

Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.
edytowany 2x, ostatnio: kacper546, 2013-06-20 16:23

Pozostało 580 znaków

2013-06-20 16:28

Rejestracja: 7 lat temu

Ostatnio: 1 godzina temu

0

Pewnie masz backface culling włączone, testowo je wyłącz lub spróbuj ustawić
glFrontFace(GL_CW);
a następnie
glFrontFace(GL_CCW);

Jeżeli po wyłączeniu backface culling zobaczysz wszystkie ścany, lub w przypadku uruchomienia parametru GL_CCW lub GL_CW będziesz widział brakujace ściany to masz złą orientacje ścian.

Pozostało 580 znaków

2013-06-20 16:52

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

a depth test włączone?

Pozostało 580 znaków

2013-06-20 18:28

Rejestracja: 7 lat temu

Ostatnio: 2 lata temu

Lokalizacja: Tutaj,obok

0

Ja to jestem ..., faktycznie chodziło o bufor głębokości, który kiedyś wyłączyłem.

#EDIT
Dlaczego ten z założenia sześcian wygląda jak prostopadłościan?
Funkcja z pierwszego postu wywoływana tak:

DrawPrism(0,0,0,1,1,1,Texture);

lmepb560q6jc_t.jpg


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.
edytowany 1x, ostatnio: kacper546, 2013-06-20 18:35

Pozostało 580 znaków

2013-06-20 19:23

Rejestracja: 7 lat temu

Ostatnio: 9 miesięcy temu

0

Rzutowanie perspektywiczne.

Pozostało 580 znaków

2013-06-20 19:50

Rejestracja: 7 lat temu

Ostatnio: 2 lata temu

Lokalizacja: Tutaj,obok

0

To wiem, chodzi o to jak temu zapobiec?


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.

Pozostało 580 znaków

2013-06-20 20:02

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

0

To kwestia tego, jaką masz perspektywę.
Pokaż gluPerspective albo glFrustum, czy czego tam używasz.

Pozostało 580 znaków

2013-06-20 20:37

Rejestracja: 7 lat temu

Ostatnio: 2 lata temu

Lokalizacja: Tutaj,obok

0

Do ustawiania perspektywy używam:

// ustawienie obserwatora
gluLookAt( eyex, eyey, eyez, centerx, centery, centerz, 0, 1, 0 );

A glFusrum używam tak:

void Reshape( int width, int height )
{   
    // obszar renderingu - całe okno
    glViewport( 0, 0, width, height );

    // wybór macierzy rzutowania
    glMatrixMode( GL_PROJECTION );

    // macierz rzutowania = macierz jednostkowa
    glLoadIdentity();

    // parametry bryły obcinania
    if( Aspect == ASPECT_1_1 )
    {
        // wysokość okna większa od wysokości okna
        if( width < height && width > 0 )
             glFrustum( - 2.0, 2.0, - 2.0 * height / width, 2.0 * height / width, 1.0, 15.0 );
        else
        // szerokość okna większa lub równa wysokości okna
        if( width >= height && height > 0 )
             glFrustum( - 2.0 * width / height, 2.0 * width / height, - 2.0, 2.0, 1.0, 25.0 );
    }
    else
         glFrustum( - 2.0, 2.0, - 2.0, 2.0, 1.0, 15.0 );

    // generowanie sceny 3D
    Display();
}

EDIT:
Znalazłem taki 'złoty środek' w postaci, że długość jest równa jednej trzecie sumy szerokości i wysokości.
Czyli dla sześcianu o szerokości 3 i wysokości 3 długość wynosi 1.


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.
edytowany 1x, ostatnio: kacper546, 2013-06-20 20:40

Pozostało 580 znaków

2013-06-20 21:04

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

0

glFrustum( - 2.0, 2.0, - 2.0 height / width, 2.0 height / width, 1.0, 15.0 );

w odległości 1.0 od kamery (przedostatni parametr) ustawiasz widzialną szerokość na 4.0 (różnica między pierwszym a drugim, i trzecim a czwartym parametrem).

To bardzo „rozwarta” kamera, kąt widzenia około 127°.

Użyj lepiej gluPerspective, zaoszczędzisz sobie obliczeń. Kąt ustaw na 45.0 na początek.

Pytanie: dlaczego kamera na 127° powoduje takie zniekształcenia, podczas gdy człowiek naturalnie widzi na około 180° i nie ma tego problemu?
Odpowiedź: ekran na który patrzysz nie zajmuje ci całych 180° pola widzenia, tylko raczej w zakresie 30-60°, zależnie od rozmiaru ekranu i odległości z jakiej patrzysz.

edytowany 2x, ostatnio: Azarien, 2013-06-20 21:14
Ad. zniekształceń - dodatkowo oko nie jest płaskie a viewplane owszem - obiekty zamiast być rzutowane prostopadle na ekran są rzutowane pod kątem. - msm 2013-06-20 21:44

Pozostało 580 znaków

Odpowiedz

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