OpenGL Teksturowanie

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();
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.

1

a depth test włączone?

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

0

Rzutowanie perspektywiczne.

0

To wiem, chodzi o to jak temu zapobiec?

0

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

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.

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.

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