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

glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);

其中,参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width和Height指定了视见区域的宽度和高度。注意OpenGL使用的窗口坐标和WindowsGDI使用的窗口坐标是不一样的。图3.1-1表示了在WindowsGDI中的窗口坐标,而图3.1-2则是OpenGL所定义的窗口坐标。

图3.1-1                                                                                                                                                               图3.1-2

例如,要设置如图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);

下面是一个例子:

#include <gl/glut.h>

//不显示控制台窗口
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")

void display()
{
//glMatrixMode( GL_MODELVIEW );
//glLoadIdentity();

glClear( GL_COLOR_BUFFER_BIT );

glColor3f( 1.0, 0.0, 0.0 );
//画分割线,分成四个视见区
glViewport( 0, 0, 400, 400 );
glBegin( GL_LINES );
     glVertex2f( -1.0, 0 );
   glVertex2f( 1.0, 0 );
   glVertex2f( 0.0, -1.0 );
   glVertex2f( 0.0, 1.0 );
    glEnd();

//定义在左下角的区域
glColor3f( 0.0, 1.0, 0.0 );
glViewport( 0, 0, 200, 200 );
glBegin( GL_POLYGON );
   glVertex2f( -0.5, -0.5 );
     glVertex2f( -0.5, 0.5 );
   glVertex2f( 0.5, 0.5 );
   glVertex2f( 0.5, -0.5 );
glEnd();

//定义在右上角的区域
glColor3f( 0.0, 0.0, 1.0 );
glViewport( 200, 200, 200, 200 );//一定要注意,后面这两个参数是高度和宽度,而不是坐标
    glBegin( GL_POLYGON );
     glVertex2f( -0.5, -0.5 );
     glVertex2f( -0.5, 0.5 );
     glVertex2f( 0.5, 0.5 );
     glVertex2f( 0.5, -0.5 );
glEnd();

//定义在左上角的区域
glColor3f( 1.0, 0.0, 1.0 );
glViewport( 0, 200, 200, 200 );//一定要注意,后面这两个参数是高度和宽度,而不是坐标
glBegin( GL_POLYGON );
glVertex2f( -0.5, -0.5 );
glVertex2f( -0.5, 0.5 );
glVertex2f( 0.5, 0.5 );
glVertex2f( 0.5, -0.5 );
glEnd();

//定义在右下角
glColor3f( 1.0, 1.0, 0.0 );
glViewport( 200, 0, 200, 200 );//一定要注意,后面这两个参数是高度和宽度,而不是坐标
glBegin( GL_POLYGON );
glVertex2f( -0.5, -0.5 );
glVertex2f( -0.5, 0.5 );
glVertex2f( 0.5, 0.5 );
glVertex2f( 0.5, -0.5 );
glEnd();

glFlush();
}

void init()
{
    glClearColor( 0.0, 0.0, 0.0, 0.0 );
glColor3f( 1.0, 1.0, 1.0 );

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
//定义剪裁面
gluOrtho2D( -1.0, 1.0, -1.0, 1.0 );

//glViewport( 0, 0, 200, 200 ); //放在这里不好使
}

int main( int argc, char ** argv )
{
     glutInit( &argc, argv );
glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutInitWindowPosition( 100, 100 );
glutInitWindowSize( 400, 400 );
glutCreateWindow( "glViewport()" );
glutDisplayFunc( display );
     init();
glutMainLoop();
}

编译运行结果如下:

OpenGL视口变换函数:glViewport相关推荐

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

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

  2. OPENGL中的glViewport

    OPENGL中有一个Viewport视口的概念,它可以简单理解成,当前你创立的窗口中,要显示绘制的区域(暂且这么理解). glViewport(int x,int y,int w,int h)函数有4 ...

  3. Opengl ES系列学习--glViewport API使用

    去年有分析了一些Opengl ES的实例,但是后面在实际的工作中,发现根基不牢,工作中使用的一些复杂场景还是理解的不够透彻,所以回过心来,必须把基础把扎实.从这节开始,我们后面对一些非常基础普通的Op ...

  4. opengl中的glViewport,glOrtho,glFrustum 理解

    在刚使用opengl时,会遇到对opengles中的一些视角等理解,需要用到glViewport,glOrtho,glFrustum 等函数,下面针对这些函数做一些说明 viewport建立视口,是视 ...

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

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

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

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

  7. [转]OpenGL库介绍

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

  8. OpenGL 库 简介

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

  9. OpenGL开发库的详细介绍

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

最新文章

  1. 防抖 节流_面试必备考点:防抖与节流
  2. 空场景在安卓上的渲染消耗问题
  3. PHP快还是HTML快,PHP_HTML-加速、再加速,web开发人员是否必须掌握复杂 - phpStudy...
  4. 答网友提问:使用 SAP Fiori Tools 创建的 Fiori Elements 应用,如何进行二次开发?
  5. 当导用模块与包的import与from的问题(模块与包的调用)
  6. leetcode - 234. 回文链表
  7. 【Android】Listview返回顶部,快速返回顶部的功能实现,详解代码。
  8. arm的bin二进制代码分析
  9. 多按键多界面二维数组表驱动设计
  10. 统计学从数据到结论(第四版) pdf
  11. 赛扬n5095处理器怎么样 英特尔n5095核显相当于什么水平
  12. python爬虫从入门到放弃,含案例分析,超详细讲解(一)
  13. uniapp简单封装的激励广告和插屏广告
  14. 2021最新可取回皮肤的CSGO开箱网站推荐!
  15. Dreamweaver制作简易的拼图游戏教程
  16. 【游戏仿真实验】Unity仿真蒲丰投针实验,丢针计算圆周率,丢了一百万次针得出的结果是...
  17. IEEE-Access 期刊投稿和回信再投稿步骤
  18. 财务分析和决策学习笔记
  19. html,css 淘宝静态页面
  20. WPF 学习总结归纳之发布订阅与代理模式以及命令的投石问路(一)

热门文章

  1. 如果美工请假了,要程序员做图顶上!会是什么样的场景?经常我们都能听见程序员和设计师之间的互怼日常!
  2. Future模式详解
  3. 计算机权限 英语怎么说,revoke
  4. 中级会计师考试计算机怎样操作,2019年中级会计职称考试机考模式操作不适应怎么办?...
  5. java计算机毕业设计专业课程教学计划进程管理系统源程序+mysql+系统+lw文档+远程调试
  6. 猪价公众号文章文章下一键拨号
  7. @hide无法访问的解决方法
  8. 华硕笔记本,无线网卡无法启用解决办法
  9. unity 导入obj后没有关联mtl材质
  10. oracle index skip scan,索引跳跃式扫描(INDEX SKIP SCAN)