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. float g_RotAngle = 0.5;
  11. void TimerFunction(int value)
  12. {
  13. g_RotAngle += 1.0;
  14. if (g_RotAngle>=360)
  15. {
  16. g_RotAngle = 0;
  17. }
  18. glutPostRedisplay();
  19. glutTimerFunc(10, TimerFunction, 1);
  20. }
  21. void display()
  22. {
  23. //glMatrixMode( GL_MODELVIEW );
  24. //glLoadIdentity();
  25. glClear(GL_COLOR_BUFFER_BIT);
  26. glColor3f(1.0, 0.0, 0.0);
  27. //画分割线,分成四个视见区
  28. glViewport(0, 0, 800, 600);
  29. glBegin(GL_LINES);
  30. glVertex2f(-1.0, 0);
  31. glVertex2f(1.0, 0);
  32. glVertex2f(0.0, -1.0);
  33. glVertex2f(0.0, 1.0);
  34. glEnd();
  35. //定义在左下角的区域
  36. glColor3f(0.0, 1.0, 0.0);
  37. glViewport(0, 0, 400, 300);
  38. glPushMatrix();
  39. glRotatef(g_RotAngle, 0.0, 1.0, 0.0);
  40. glBegin(GL_POLYGON);
  41. glVertex2f(-0.5, -0.5);
  42. glVertex2f(-0.5, 0.5);
  43. glVertex2f(0.5, 0.5);
  44. glVertex2f(0.5, -0.5);
  45. glEnd();
  46. glPopMatrix();
  47. //定义在右上角的区域
  48. glColor3f(0.0, 0.0, 1.0);
  49. glViewport(400, 300, 400, 300);//一定要注意,后面这两个参数是高度和宽度,而不是坐标
  50. glPushMatrix();
  51. glRotatef(-g_RotAngle, 0.0, 1.0, 0.0);
  52. glBegin(GL_POLYGON);
  53. glVertex2f(-0.5, -0.5);
  54. glVertex2f(-0.5, 0.5);
  55. glVertex2f(0.5, 0.5);
  56. glVertex2f(0.5, -0.5);
  57. glEnd();
  58. glPopMatrix();
  59. //定义在左上角的区域
  60. glColor3f(1.0, 0.0, 1.0);
  61. glViewport(0, 300, 400, 300);//一定要注意,后面这两个参数是高度和宽度,而不是坐标
  62. glPushMatrix();
  63. glRotatef(-2*g_RotAngle, 0.0, 1.0, 0.0);
  64. glBegin(GL_POLYGON);
  65. glVertex2f(-0.5, -0.5);
  66. glVertex2f(-0.5, 0.5);
  67. glVertex2f(0.5, 0.5);
  68. glVertex2f(0.5, -0.5);
  69. glEnd();
  70. glPopMatrix();
  71. //定义在右下角
  72. glColor3f(1.0, 1.0, 0.0);
  73. glViewport(400, 0, 400,300);//一定要注意,后面这两个参数是高度和宽度,而不是坐标
  74. glPushMatrix();
  75. glRotatef(-3*g_RotAngle, 0.0, 1.0, 0.0);
  76. glBegin(GL_POLYGON);
  77. glVertex2f(-0.5, -0.5);
  78. glVertex2f(-0.5, 0.5);
  79. glVertex2f(0.5, 0.5);
  80. glVertex2f(0.5, -0.5);
  81. glEnd();
  82. glPopMatrix();
  83. glFlush();
  84. }
  85. void init()
  86. {
  87. glClearColor(0.0, 0.0, 0.0, 0.0);
  88. glColor3f(1.0, 1.0, 1.0);
  89. glMatrixMode(GL_PROJECTION);
  90. glLoadIdentity();
  91. //定义剪裁面
  92. gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
  93. //glViewport( 0, 0, 200, 200 ); //放在这里不好使
  94. }
  95. int main(int argc, char ** argv)
  96. {
  97. glutInit(&argc, argv);
  98. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  99. glutInitWindowPosition(100, 100);
  100. glutInitWindowSize(800, 600);
  101. glutCreateWindow("OpenGL多视口编程");
  102. glutDisplayFunc(display);
  103. init();
  104. glutTimerFunc(1, TimerFunction, 1);
  105. glutMainLoop();
  106. }

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

(7)OpenGL多视口变换函数:glViewport使用相关推荐

  1. OpenGL视口变换函数:glViewport

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

  2. OpenGL | 设置视口glViewport 裁剪glScissor 屏幕截图 glReadPixel

    一.设置视口 1.视口 视口(Viewport):指的是OpenGL用于渲染的输出区域,它是窗口中的一个矩形区域.在渲染过程中,OpenGL会将图形投影到视口中,以生成最终的图像.视口通常可以通过gl ...

  3. OpenGL中gluOrtho2D、glViewport、glutInitWindowSize区别与关系

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/HouraisanF/article/d ...

  4. 万字长文详解如何用Python玩转OpenGL | CSDN 博文精选

    作者 | 天元浪子 来源 | CSDN博文精选 [编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Python.Java等语言都能支 ...

  5. 转贴: OpenGL开发库的组成

    OpenGL开发库的组成 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数.它采用C语言风格,提供大量的函数来进行图形的处理和显示.OpenGL库函数的命名方式非常有规律.所有OpenG ...

  6. [转]OpenGL库介绍

    原帖地址:http://blog.csdn.net/yyyuhan/archive/2008/01/15/2045009.aspx 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数.它采 ...

  7. OpenGL 库 简介

    OpenGL 库 简介 OpenGL库函数的命名方式为:<库前缀><根命令><可选的参数个数><可选的参数类型>. 库前缀有gl.glu.aux.glu ...

  8. OpenGL开发库的详细介绍

    OpenGL开发库的组成 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数.它采用C语言风格,提供大量的函数来进行图形的处理和显示.OpenGL库函数的命名方式非常有规律.所有OpenG ...

  9. 万字长文详解如何用 Python 玩转 OpenGL | CSDN 博文精选

    作者 | 天元浪子 责编 | 伍杏玲 出品 | CSDN 博客 [CSDN 编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Pyth ...

最新文章

  1. java连接mysql数据库(jsp显示和控制台显示)
  2. jquery tooltip
  3. 对SetViewportOrg和SetWindowOrg的理解
  4. python连接mysql_Python连接MySQL
  5. 牛客 - Animal Protection(单调栈)
  6. oracle中视图窗粉色的,Oracle 11g日常操作与维护手册
  7. centosc访问mysql_Linux(CentOS7.0)下 C访问MySQL (转)
  8. 一个用python写的从数字高程格式文件(DEM)中提取水系的模块
  9. mysql使用总结(C#)
  10. 计算机多系统启动光盘制作,制作启动光盘,小编教你如何制作光盘启动盘
  11. python网校_《猎豹网校:快速掌握Python系统管理-53讲》
  12. python黑马视频全套-2018年6月北京黑马python24期全套视频课程
  13. 电脑课学生端密码查看
  14. python实现华氏温度和摄氏温度转换
  15. 网站优化快速排名软件大全,用不用随你不做建议
  16. 初识instantRun
  17. Ecowalker充气足球门,为青少年足球训练保驾护航!
  18. 文件夹配额linux,Linux磁盘配额
  19. Python自然语言处理 | 编写结构化程序
  20. alertmanager 简介

热门文章

  1. 如何用你家的猫黑掉邻家的无线网络
  2. 通信原理绪论测试题·
  3. Java为何要使用包装类型
  4. Architectural Documentation in Rhino Rhino建筑文献 Lynda课程中文字幕
  5. saltstack入门教程精华案例
  6. UOS安装 .exe 应用
  7. Delphi 7移植到Delphi XE5碰到及解决的问题 (1)
  8. 关于相似度计算方法的python实现
  9. unity入门~炮弹打飞机(一)
  10. 第一章SQL数据库开发--TSQL概述