我是OpenGL的新手,並嘗試渲染天空盒時遇到了問題。 這幅圖很好地說明了這個問題。OpenGL 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