之前實現過全景圖片查看(OpenGL的幾何變換3之內觀察全景圖),那么我們需要進行分屏該如何實現呢?如下圖:
沒錯就是以前提過的glViewPort函數,廢話不多說了,我直接上代碼:
1 //從這里開始進行所有的繪制 2 void drawCube(void) 3 { 4 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除屏幕和深度緩存 5 glMatrixMode(GL_MODELVIEW); 6 glLoadIdentity(); //重置當前的模型觀察矩陣 7 8 glPushMatrix(); 9 { 10 gluLookAt(0, 0, -5, 0, 0, 0, 0, 1, 0); 11 glTranslatef(0.0f, 0.0f, -5.0f); //移入屏幕 5 個單位 12 glRotatef(xangle_Textures, 1.0f, 0.0f, 0.0f); //繞X軸旋轉 13 glRotatef(yangle_Textures, 0.0f, 1.0f, 0.0f); //繞Y軸旋轉 14 glRotatef(zangle_Textures, 0.0f, 0.0f, 1.0f); //繞Z軸旋轉 15 for (int i = 0; i < 2; i++) { 16 glViewport(i * w_Textures, 0, w_Textures, h_Textures); 17 glBindTexture(GL_TEXTURE_2D, texturesArr[0]); //選擇紋理 18 glBegin(GL_QUADS); { 19 //前面:紋理順時針,立方體逆時針 20 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); //紋理和四邊形的左下 21 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); //紋理和四邊形的左上 22 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); //紋理和四邊形的右上 23 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); //紋理和四邊形的右下 24 }glEnd(); 25 26 glBindTexture(GL_TEXTURE_2D, texturesArr[1]); //選擇紋理 27 glBegin(GL_QUADS); { 28 //后面:紋理順時針,立方體逆時針 29 glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); //紋理和四邊形的左下 30 glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); //紋理和四邊形的左上 31 glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); //紋理和四邊形的右上 32 glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); //紋理和四邊形的右下 33 }glEnd(); 34 35 glBindTexture(GL_TEXTURE_2D, texturesArr[2]); //選擇紋理 36 glBegin(GL_QUADS); { 37 //頂面:紋理順時針,立方體逆時針 38 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); //紋理和四邊形的左下 39 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); //紋理和四邊形的左上 40 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); //紋理和四邊形的右上 41 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); //紋理和四邊形的右下 42 }glEnd(); 43 44 glBindTexture(GL_TEXTURE_2D, texturesArr[3]); //選擇紋理 45 glBegin(GL_QUADS); { 46 //底面:紋理順時針,立方體逆時針 47 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); //紋理和四邊形的左下 48 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, 1.0f); //紋理和四邊形的左上 49 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); //紋理和四邊形的右上 50 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); //紋理和四邊形的右下 51 }glEnd(); 52 53 glBindTexture(GL_TEXTURE_2D, texturesArr[5]); //選擇紋理 54 glBegin(GL_QUADS); { 55 //右面:紋理順時針,立方體逆時針 56 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); //紋理和四邊形的左下 57 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); //紋理和四邊形的左上 58 glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); //紋理和四邊形的右上 59 glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); //紋理和四邊形的右下 60 }glEnd(); 61 62 glBindTexture(GL_TEXTURE_2D, texturesArr[4]); //選擇紋理 63 glBegin(GL_QUADS); { 64 //左面:紋理順時針,立方體逆時針 65 66 glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); //紋理和四邊形的左下 67 glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); //紋理和四邊形的左上 68 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); //紋理和四邊形的右上 69 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); //紋理和四邊形的右下 70 }glEnd(); 71 } 72 }glPopMatrix(); 73 glFlush(); 74 }