調用glViewPort函數來決定視見區域,告訴OpenGL應把渲染之后的圖形繪制在窗體的哪個部位。當視見區域是整個窗體時,OpenGL將把渲染結果繪制到整個窗口。
void glViewPort(GLInt x; GLInt y; GLSizei Width; GLSizei Height);
其中,參數X,Y指定了視見區域的左下角在窗口中的位置,一般情況下為(0,0),Width和Height指定了視見區域的寬度和高度。注意OpenGL使用的窗口坐標和WindowsGDI使用的窗口坐標是不一樣的。圖3.1-1表示了在WindowsGDI中的窗口坐標,而圖3.1-2則是OpenGL所定義的窗口坐標。
例如,要設置如圖3.1-3中的視見區域,我們應該調用函數:
glViewPort(100,100,Width,Height);
圖3.1-3
glViewport()函數可以實現拆分窗口的功能,可以用不同的視口多次繪制同一個物體,如,為了創建兩個並排的窗口,可以使用下面的這些函數,並輔以適當的模型視圖和投影變換:
glViewport(0, 0, sizex/2, sizey);
glViewport(sizex/2, 0,sizex/2, sizey);
1 #include <gl/glut.h> 2 3 //不顯示控制台窗口 4 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") 5 6 void display() 7 { 8 glClear(GL_COLOR_BUFFER_BIT); 9 glColor3f(1.0, 0.0, 0.0); 10 //畫分割線,分成四個視見區 11 glViewport(0, 0, 400, 400); 12 glBegin(GL_LINES); 13 glVertex2f(-1.0, 0); 14 glVertex2f(1.0, 0); 15 glVertex2f(0.0, -1.0); 16 glVertex2f(0.0, 1.0); 17 glEnd(); 18 19 //定義在左下角的區域 20 glColor3f(0.0, 1.0, 0.0); 21 glViewport(0, 0, 200, 200); 22 glBegin(GL_POLYGON); 23 glVertex2f(-0.5, -0.5); 24 glVertex2f(-0.5, 0.5); 25 glVertex2f(0.5, 0.5); 26 glVertex2f(0.5, -0.5); 27 glEnd(); 28 29 30 //定義在右上角的區域 31 glColor3f(0.0, 0.0, 1.0); 32 glViewport(200, 200, 200, 200);//注意,后面這兩個參數是高度和寬度,而不是坐標 33 glBegin(GL_POLYGON); 34 glVertex2f(-0.5, -0.5); 35 glVertex2f(-0.5, 0.5); 36 glVertex2f(0.5, 0.5); 37 glVertex2f(0.5, -0.5); 38 glEnd(); 39 40 //定義在左上角的區域 41 glColor3f(1.0, 0.0, 0.0); 42 glViewport(0, 200, 200, 200);//注意,后面這兩個參數是高度和寬度,而不是坐標 43 glBegin(GL_POLYGON); 44 glVertex2f(-0.5, -0.5); 45 glVertex2f(-0.5, 0.5); 46 glVertex2f(0.5, 0.5); 47 glVertex2f(0.5, -0.5); 48 glEnd(); 49 50 //定義在右下角 51 glColor3f(1.0, 1.0, 1.0); 52 glViewport(200, 0, 200, 200);//注意,后面這兩個參數是高度和寬度,而不是坐標 53 glBegin(GL_POLYGON); 54 glVertex2f(-0.5, -0.5); 55 glVertex2f(-0.5, 0.5); 56 glVertex2f(0.5, 0.5); 57 glVertex2f(0.5, -0.5); 58 glEnd(); 59 glFlush(); 60 } 61 62 void init() 63 { 64 glClearColor(0.0, 0.0, 0.0, 0.0); 65 glColor3f(1.0, 1.0, 1.0); 66 67 glMatrixMode(GL_PROJECTION); 68 glLoadIdentity(); 69 70 //定義剪裁面 71 gluOrtho2D(-1.0, 1.0, -1.0, 1.0); 72 } 73 74 int main(int argc, char ** argv) 75 { 76 glutInit(&argc, argv); 77 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 78 glutInitWindowPosition(100, 100); 79 glutInitWindowSize(400, 400); 80 glutCreateWindow("蔣昌松_使用glbegin_glend_glViewport"); 81 glutDisplayFunc(display); 82 83 init(); 84 glutMainLoop(); 85 }
轉至:http://blog.csdn.net/why_study/article/details/8204838