私はOpenGLを初めて使っていて、スカイボックスのレンダリングに問題が発生しました。 この図は、この問題をかなりうまく示しています。OpenGL Skyboxが正しくレンダリングされない側
skyboxの辺が表示されず、画像のように辺を表示すると、 の別の辺ではなく、画像が右隣にレンダリングされているように見えますキューブ。
void display (void) // Create The Display Function
{
glPushMatrix();
glDepthMask(0);
/* replace this code with your height field implementation */
/* you may also want to precede it with your rotation/translation/scaling */
/* Clear buffers */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0, 0.0, 0.0, // eye position
0.1, 0.0, 0.1, // camera direction
0.0, 1.0, 0.0); // up direction
glPushAttrib(GL_ENABLE_BIT);
glEnable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glDisable(GL_BLEND);
glColor4f(1.0, 1.0, 1.0, 1.0);
/*!!!!!!!!!!!!!! FRONT FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D,frontTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f( 0.5f, 0.5f, -0.5f);
glTexCoord2f(1, 0); glVertex3f(-0.5f, 0.5f, -0.5f);
glTexCoord2f(1, 1); glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2f(0, 1); glVertex3f( 0.5f, -0.5f, -0.5f);
glEnd();
/*!!!!!!!!!!!!!! LEFT FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, leftTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f( 0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 0); glVertex3f( 0.5f, 0.5f, -0.5f);
glTexCoord2f(1, 1); glVertex3f( 0.5f, -0.5f, -0.5f);
glTexCoord2f(0, 1); glVertex3f( 0.5f, -0.5f, 0.5f);
glEnd();
/*!!!!!!!!!!!!!! RIGHT FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, rightTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(-0.5f, 0.5f, -0.5f);
glTexCoord2f(1, 0); glVertex3f(-0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 1); glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2f(0, 1); glVertex3f(-0.5f, -0.5f, -0.5f);
glEnd();
/*!!!!!!!!!!!!!! BACK FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, backTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(-0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 0); glVertex3f( 0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 1); glVertex3f( 0.5f, -0.5f, 0.5f);
glTexCoord2f(0, 1); glVertex3f(-0.5f, -0.5f, 0.5f);
glEnd();
/*!!!!!!!!!!!!!! TOP FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, upTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 1); glVertex3f(-0.5f, 0.5f, -0.5f);
glTexCoord2f(0, 0); glVertex3f(-0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 0); glVertex3f( 0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 1); glVertex3f( 0.5f, 0.5f, -0.5f);
glEnd();
/*!!!!!!!!!!!!!! BOTTOM FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, downTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2f(0, 1); glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2f(1, 1); glVertex3f( 0.5f, -0.5f, 0.5f);
glTexCoord2f(1, 0); glVertex3f( 0.5f, -0.5f, -0.5f);
glEnd();
/*!!!!!!!!!!!!!! end of drawing of a textured quad !!!!!!!!!!!!!!!*/
glPopAttrib();
glPopMatrix();
/* Swap buffers, so one we just drew is displayed */
glutSwapBuffers();
}
ここでは何か基本的なものが欠けているように感じますが、わかりません。コードはチュートリアルのサイト(http://sidvind.com/wiki/Skybox_tutorial)より多かれ少なかれ です。 コードはUbuntu Linuxでg ++ 4.5.2でコンパイルされましたが、同じ問題が Visual Studioでも発生します。
上記のコードで使用されている数値は、 がリンクされた画像を生成した値であることを示す必要があります。
私が知る限り、私が与えた座標はシームレスなエッジを形成するはずです。カメラを軸に沿って(いずれかの方向に)指し示すと、ボックスの適切な面が表示されますが、ボックスの他の面ではなく黒で囲まれます。 gluLookAt関数を使用してパースペクティブを変更するだけですが、その呼び出しがなくても問題は解決しません。私は、z軸に沿って平行移動しようとすると、画像のサイズに変化はないことに気付きました。 – sabauma
質問を編集して、投影行列を設定する場所にコードを追加できますか? ( 'glMatrixMode(GL_PROJECTION);の後のもの) – geofftnz
私はglMatrixMode(これは私の問題です)への呼び出しを行っていません。 – sabauma