OpenGL的glViewPort窗口設置函數實現分屏


之前實現過全景圖片查看(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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM