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

转载 2016年08月30日 17:10:42

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

相关文章推荐

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

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

OpenGL视口变换函数:glViewport

调用glViewPort函数来决定视见区域,告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位。当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口。 glViewPort(x:GLI...

OpenGL中glMatrixMode()函数以及视图变换,模型变换,投影变换,视口变换的理解

OpenGL中的视图可以利用照相机来进行比拟。产生目标的场景的变过过程类似于相机拍照。此步骤大概分为三个: 1)把相机固定在三角架上,并让它对准场景(视图变换) 2)对场景安排,使得各个物体在招片中的...

在BlackBerry上使用OpenGL绘图(十):视口变换

10 视口变换 相对于以上变换,视口变换更为简单一些,视口变换最终决定显示出来的图片大小。视口变换类似于冲印的照片底片后最终决定放大还是缩小照片,还决定照片放在相框的哪个位置。   视口变换通过...

OpenGL视口变换

  • 2015年05月20日 13:51
  • 12.18MB
  • 下载

OpenGL中视口变换的矩阵求解

视口变换在投影变换之后,投影变换是将viewing frustum(视景体)变换为一个cuboid(立方体),如下图 关于透视投影的矩阵求解,请参考透视投影详解 视口变换则是将这个cuboid中的...

OpenGL学习脚印: 投影矩阵和视口变换矩阵(math-projection and viewport matrix)

写在前面 前面几节分别介绍了模型变换,视变换,本节继续学习OpenGL坐标变换过程中的投影变换。这里主要是从数学角度推导投影矩阵。对数学不感兴趣的,可以稍微了解下,或者跳过本节内容。本文主要...

opengl多视口显示模型

  • 2009年03月02日 15:28
  • 157KB
  • 下载

OpenGL模型视图变换、投影变换、视口变换总结

产生目标场景的过程类似于用照相机进行拍照: (1)把照相机固定在三角架上,并让他对准场景    从不同位置观察场景(视图变换) (2)对场景进行安排,使各个物体在照片中的位置是我们所...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(7)OpenGL多视口变换函数:glViewport使用
举报原因:
原因补充:

(最多只允许输入30个字)