关闭

(7)OpenGL多视口变换函数:glViewport使用

193人阅读 评论(0) 收藏 举报

OpenGL多视口变换函数:glViewport使用


glViewport是OpenGL中的一个函数。计算机图形学中,在屏幕上打开窗口的任务是由窗口系统,而不是OpenGL负责的


1.功能glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。

2.参数

glViewport(GLint x,GLint y,GLsizei width,GLsizei height)为其函数原型。

X,Y————以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。width,height————表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。

3.代码示例:

OpenGL多视口变换函数:glViewport使用


glViewport是OpenGL中的一个函数。计算机图形学中,在屏幕上打开窗口的任务是由窗口系统,而不是OpenGL负责的


1.功能glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。

2.参数

glViewport(GLint x,GLint y,GLsizei width,GLsizei height)为其函数原型。

X,Y————以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。width,height————表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。
3.代码示例:

OpenGL多视口变换函数:glViewport使用


glViewport是OpenGL中的一个函数。计算机图形学中,在屏幕上打开窗口的任务是由窗口系统,而不是OpenGL负责的


1.功能glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。

2.参数

glViewport(GLint x,GLint y,GLsizei width,GLsizei height)为其函数原型。

X,Y————以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。width,height————表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。
3.代码示例:
  1. //计算gluLookAt矩阵    
  2. #pragma once  
  3. #include <windows.h>  
  4. #define GLUT_DISABLE_ATEXIT_HACK  
  5. #include <gl/glut.h>  
  6. #include <atlimage.h>  
  7. #include <math.h>  
  8. //不显示控制台窗口    
  9. //#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")    
  10.   
  11. float g_RotAngle = 0.5;  
  12.   
  13. void TimerFunction(int value)  
  14. {  
  15.     g_RotAngle += 1.0;  
  16.     if (g_RotAngle>=360)  
  17.     {  
  18.         g_RotAngle = 0;  
  19.     }  
  20.     glutPostRedisplay();  
  21.     glutTimerFunc(10, TimerFunction, 1);  
  22. }  
  23. void display()  
  24. {  
  25.     //glMatrixMode( GL_MODELVIEW );  
  26.     //glLoadIdentity();  
  27.     glClear(GL_COLOR_BUFFER_BIT);  
  28.     glColor3f(1.0, 0.0, 0.0);  
  29.     //画分割线,分成四个视见区  
  30.     glViewport(0, 0, 800, 600);  
  31.     glBegin(GL_LINES);  
  32.     glVertex2f(-1.0, 0);  
  33.     glVertex2f(1.0, 0);  
  34.     glVertex2f(0.0, -1.0);  
  35.     glVertex2f(0.0, 1.0);  
  36.     glEnd();  
  37.     //定义在左下角的区域  
  38.     glColor3f(0.0, 1.0, 0.0);  
  39.     glViewport(0, 0, 400, 300);  
  40.     glPushMatrix();  
  41.     glRotatef(g_RotAngle, 0.0, 1.0, 0.0);  
  42.     glBegin(GL_POLYGON);  
  43.     glVertex2f(-0.5, -0.5);  
  44.     glVertex2f(-0.5, 0.5);  
  45.     glVertex2f(0.5, 0.5);  
  46.     glVertex2f(0.5, -0.5);  
  47.     glEnd();  
  48.     glPopMatrix();  
  49.   
  50.     //定义在右上角的区域  
  51.     glColor3f(0.0, 0.0, 1.0);  
  52.     glViewport(400, 300, 400, 300);//一定要注意,后面这两个参数是高度和宽度,而不是坐标  
  53.     glPushMatrix();  
  54.     glRotatef(-g_RotAngle, 0.0, 1.0, 0.0);  
  55.     glBegin(GL_POLYGON);  
  56.     glVertex2f(-0.5, -0.5);  
  57.     glVertex2f(-0.5, 0.5);  
  58.     glVertex2f(0.5, 0.5);  
  59.     glVertex2f(0.5, -0.5);  
  60.     glEnd();  
  61.     glPopMatrix();  
  62.     //定义在左上角的区域  
  63.     glColor3f(1.0, 0.0, 1.0);  
  64.     glViewport(0, 300, 400, 300);//一定要注意,后面这两个参数是高度和宽度,而不是坐标  
  65.     glPushMatrix();  
  66.     glRotatef(-2*g_RotAngle, 0.0, 1.0, 0.0);  
  67.     glBegin(GL_POLYGON);  
  68.     glVertex2f(-0.5, -0.5);  
  69.     glVertex2f(-0.5, 0.5);  
  70.     glVertex2f(0.5, 0.5);  
  71.     glVertex2f(0.5, -0.5);  
  72.     glEnd();  
  73.     glPopMatrix();  
  74.     //定义在右下角  
  75.     glColor3f(1.0, 1.0, 0.0);  
  76.     glViewport(400, 0, 400,300);//一定要注意,后面这两个参数是高度和宽度,而不是坐标  
  77.     glPushMatrix();  
  78.     glRotatef(-3*g_RotAngle, 0.0, 1.0, 0.0);  
  79.     glBegin(GL_POLYGON);  
  80.     glVertex2f(-0.5, -0.5);  
  81.     glVertex2f(-0.5, 0.5);  
  82.     glVertex2f(0.5, 0.5);  
  83.     glVertex2f(0.5, -0.5);  
  84.     glEnd();  
  85.     glPopMatrix();  
  86.     glFlush();  
  87. }  
  88. void init()  
  89. {  
  90.     glClearColor(0.0, 0.0, 0.0, 0.0);  
  91.     glColor3f(1.0, 1.0, 1.0);  
  92.     glMatrixMode(GL_PROJECTION);  
  93.     glLoadIdentity();  
  94.     //定义剪裁面  
  95.     gluOrtho2D(-1.0, 1.0, -1.0, 1.0);  
  96.     //glViewport( 0, 0, 200, 200 ); //放在这里不好使  
  97. }  
  98. int main(int argc, char ** argv)  
  99. {  
  100.     glutInit(&argc, argv);  
  101.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  
  102.     glutInitWindowPosition(100, 100);  
  103.     glutInitWindowSize(800, 600);  
  104.     glutCreateWindow("OpenGL多视口编程");  
  105.     glutDisplayFunc(display);  
  106.     init();  
  107.     glutTimerFunc(1, TimerFunction, 1);  
  108.     glutMainLoop();  
  109. }  


http://blog.csdn.net/liuchuang_mfc/article/details/49701585
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:784次
    • 积分:53
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章存档