glViewport()函数和glOrtho()函数的理解_shizhipeng的博客

文章推薦指數: 80 %
投票人數:10人

glOrtho是创建一个正交平行的视景体。

一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。

比如,常用的工程中的制图等。

需要 ... glViewport()函数和glOrtho()函数的理解 shizhipeng 于 2009-12-0413:11:00 发布 51208 收藏 52 分类专栏: OpenGL 文章标签: include buffer ubuntu build 生活 编程 版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/shizhipeng/article/details/4939529 版权 OpenGL 专栏收录该内容 2篇文章 0订阅 订阅专栏 在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho.glOrtho是创建一个正交平行的视景体。

一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。

比如,常用的工程中的制图等。

需要比较精确的显示。

而作为它的对立情况,glFrustum则产生一个透视投影。

这是一种模拟真是生活中,人们视野观测物体的真实情况。

例如:观察两条平行的火车到,在过了很远之后,这两条铁轨是会相交于一处的。

还有,离眼睛近的物体看起来大一些,远的物体看起来小一些。

glOrtho(left,right,bottom,top,near,far),left表示视景体左面的坐标,right表示右面的坐标,bottom表示下面的,top表示上面的。

这个函数简单理解起来,就是一个物体摆在那里,你怎么去截取他。

这里,我们先抛开glViewport函数不看。

先单独理解glOrtho的功能。

假设有一个球体,半径为1,圆心在(0,0,0),那么,我们设定glOrtho(-1.5,1.5,-1.5,1.5,-10,10);就表示用一个宽高都是3的框框把这个球体整个都装了进来。

 如果设定glOrtho(0.0,1.5,-1.5,1.5,-10,10);就表示用一个宽是1.5,高是3的框框把整个球体的右面装进来;如果设定glOrtho(0.0,1.5,0.0,1.5,-10,10);就表示用一个宽和高都是1.5的框框把球体的右上角装了进来。

上述三种情况可以见图:     从上述三种情况,我们可以大致了解glOrtho函数的用法。

  ---glViewport():glOrtho函数只是负责使用什么样的视景体来截取图像,并不负责使用某种规则把图像呈现在屏幕上。

glViewport主要完成这样的功能。

它负责把视景体截取的图像按照怎样的高和宽显示到屏幕上。

比如:如果我们使用glut库建立一个窗体:glutInitWindowSize(500,500);然后使用glutReshapeFunc(reshape);reshape代码如下:voidreshape(intwidth,intheight){   glViewport(0,0,(GLsizei)width,(GLsizei)height);   glMatrixModel(GL_PROJECTION);   glLoadIdentity();   glOrtho(-1.5,1.5,-1.5,1.5,-10,10);    ....}这样是可以看到一个正常的球体的。

但是,如果我们创建窗体时glutInitWindowSize(800,500),那么看到的图像就是变形的。

上述情况见图。

因为我们是用一个正方形截面的视景体截取的图像,但是拉伸到屏幕上显示的时候,就变成了glViewport(0,0,800,500);也就是显示屏变宽了,倒是显示的时候把一个正方形的图像“活生生的给拉宽了”。

就会产生变形。

这样,就需要我们调整我们的OpenGL显示屏了。

我们可以不用800那么宽,因为我们是用的正方形的视景体,所以虽然窗体是800宽,但是我们只用其中的500就够了。

修改一下程序。

voidreshape(intwidth,intheight){   intdis=width#include#includevoidinit(void){   GLfloatmat_specular[]={1.0,1.0,1.0,1.0};   GLfloatmat_shininess[]={50.0};   GLfloatlight_position[]={1.0,1.0f,1.0,0.0};   GLfloatwhite_light[]={1.0,1.0,1.0,1.0};   GLfloatlmodel_ambient[]={0.1,0.1,0.1,1.0};   glClearColor(0.0,0.0,0.0,0.0);   glShadeModel(GL_SMOOTH);   glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);   glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);   glLightfv(GL_LIGHT0,GL_POSITION,light_position);   glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);   glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);   glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);   glEnable(GL_LIGHTING);   glEnable(GL_LIGHT0);   glEnable(GL_DEPTH_TEST);   }voiddisplay(void){   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);   glutSolidSphere(1.0,20,16);   glFlush();}voidreshape(intw,inth){   glViewport(0,0,(GLsizei)w,(GLsizei)h);   glMatrixMode(GL_PROJECTION);   glLoadIdentity();   if(w<=h)       glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);   else       glOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);   glMatrixMode(GL_MODELVIEW);   glLoadIdentity();}intmain(intargc,char**argv){   glutInit(&argc,argv);   glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);   glutInitWindowSize(500,500);   glutInitWindowPosition(100,100);   glutCreateWindow(argv[0]);   init();   glutDisplayFunc(display);   glutReshapeFunc(reshape);   glutMainLoop();   return0;}       /*CMakeLists.txt*/ PROJECT(s5)CMAKE_MINIMUM_REQUIRED(VERSION2.6)ADD_EXECUTABLE(s5main.cpp)FIND_PACKAGE(OpenGL)FIND_PACKAGE(GLUT)IF(OPENGL_FOUND) INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR}) TARGET_LINK_LIBRARIES(${PROJECT_NAME}${OPENGL_LIBRARIES})ELSE(OPENGL_FOUND) MESSAGE(FATAL_ERROR"OpenGLnotfound")ENDIF(OPENGL_FOUND)IF(GLUT_FOUND) INCLUDE_DIRECTORIES(${GLUT_INCLUDE_DIR}) TARGET_LINK_LIBRARIES(${PROJECT_NAME}${GLUT_LIBRARIES})ELSE(GLUT_FOUND)ENDIF(GLUT_FOUND)     参考:OpenGL编程指南(原书第6版) shizhipeng 关注 关注 35 点赞 踩 52 收藏 打赏 30 评论 glViewport()函数和glOrtho()函数的理解 在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho.glOrtho是创建一个正交平行的视景体。

一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。

比如,常用的工程中的制图等。

需要比较精确的显示。

而作为它的对立情况,glFrustum则产生一个透视投影。

这是一种模拟真是生活中,人们视野观测物体的真实情况。

例如:观察两条平行的火车到,在过了很远之后,这两条 复制链接 扫一扫 专栏目录 OpenGL的glViewPort窗口设置函数实现分屏 xuerongdeng的专栏 12-30 721 OpenGL的glViewPort窗口设置函数实现分屏 之前实现过全景图片查看(OpenGL的几何变换3之内观察全景图),那么我们需要进行分屏该如何实现呢?如下图: 没错就是以前提过的glViewPort函数,废话不多说了,我直接上代码: 1//从这里开始进行所有的绘制 2voiddrawCube(void) 3{ 4glClear(GL_COLOR... glViewport()与glOrtho()函数的理解.doc 04-01 glViewport()与glOrtho()函数的理解glViewport()与glOrtho()函数的理解glViewport()与glOrtho()函数的理解glViewport()与glOrtho()函数的理解 评论 30 您还未登录,请先 登录 后发表或查看评论 OpenGL视口变换函数:glViewport 24K程序猿 10-26 1502 调用glViewPort函数来决定视见区域,告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位。

当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口。

glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);     其中,参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width和Height OpenGL之glViewPort函数的用法 热门推荐 草上爬的博客 05-10 2万+ 其函数原型为:glViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight)x,y以像素为单位,指定了视口的左下角位置。

width,height表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。

在默认情况下,视口被设置为占据打开窗口的整个像素矩形,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函... opengl-glortho理解 最新发布 haoxiangnia111的博客 09-09 565 left表示视景体左面的坐标,即opengl的中心点向左偏移。

right表示右面的坐标,即opengl的中心点向右偏移。

bottom表示下面的,即opengl的中心点向下偏移。

top表示上面的即opengl的中心点向上偏移。

opengl中对glOrtho()函数的理解 weixin_33696822的博客 08-14 611  glOrtho是创建一个正交平行的视景体。

一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。

比如,常用的工程中的制图等。

需要比较精确的显示。

而作为它的对立情况,glFrustum则产生一个透视投影。

这是一种模拟真是生活中,人们视野观测物体的真实情况。

例如:观察两条平行的火车到,在过了很远之后,这两条铁轨是会相交于一处的。

还有,离眼睛近的物体看起来大一些,远的物体看起来小一些。

... 小谈glOrtho(一) 小鸡炖技术 02-28 1633 经过了自己的反复测试,对glOrtho这个函数有了一定的了解,下面如果有说错,请大家多加指正。

  首先,我们看看glOrtho这个函数的形参是怎么样的,不同书本不同,主要有两个版本:   glOrtho(GLDoubleleft,GLDoubleright,GLDoublebottom,GLDoubletop,GLdoublenear,GLdoublefar); glViewport wuxinliulei的专栏 06-16 2463 #include //函数RenderScene用于在窗口中绘制需要的图形 voidRenderScene(void) { //用当前清除色清除颜色缓冲区,即设定窗口的背景色 glClear(GL_COLOR_BUFFER_BIT); //设置当前绘图使用的RGB颜色 glColor3f(1.0f,0.0f,0.0f); //使用当前颜色绘制一个填充的矩形 g OpenGL的glViewport()函数和glOrtho()函数用法 sj19890401 02-26 8267 glViewport()函数 在OpenGL初始化完成之后,我们应该进行一些视图设置。

首先是设定视见区域,即告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位。

当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口。

我们调用glViewPort函数来决定视见区域:    procedureglViewPort(x:GLInt;y:GLInt;Width:GLSizei; OpenGL入门纪录--视口变换函数glViewPort函数用法 阿a楞的博客 07-11 7289 其函数原型为:glViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight) x,y以像素为单位,指定了视口的左下角位置。

width,height表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。

在默认情况下,视口被设置为占据打开窗口的整个像素矩形,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用g OpenGLglViewport()函数 mozhi 12-21 3201 1.glViewport()用来设置视口大小 voidglViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight); 对于一个OpenGL坐标(xnd,ynd),它变换后的坐标为(Xw,Yw),那么变换公式为 解释一下这个公式的意义:视口变换也就是glViewport()做的工作,它是把OpenGL的标准化设备坐标转换为屏幕空间坐... OpenGL之深入解析坐标系统 ╰つ栺尖篴夢ゞ 07-04 460 坐标系 2D笛卡尔坐标系(由x、y决定) 3D笛卡尔坐标系(由x、y、z决定) 视口 glViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight),对应屏幕区域的范围; 投影 透视投影和正投影 qtopengl窗口变化时物体大小保持不变 toTheUnknown的博客 02-27 1272 可以重写resizeGL函数,并在其中根据窗口的大小重新生成投影矩阵,如: //OpenGLWidget继承QOpenGLWidget和QOpenGLFunctions_4_0_Core voidOpenGLWidget::resizeGL(intwidth,intheight) { glViewport(0,0,width,height); QM... 【OpenGL】glViewport函数在同一窗口显示多个视图 xiaobo_duanfei的专栏 06-18 5009 在OpenGL中,我们可以用glViewport()函数创建多个视口,在一个窗口中同时显示。

glViewport函数: voidglViewport(GLint x,  GLint   y,  GLsizei   width,  GLsizei   height); 在窗口中定义一个矩形区域,最终的图像将映射到这个矩形中。

(x,y)指定了视 (7)OpenGL多视口变换函数:glViewport使用 ysu341341的博客 08-30 1650 OpenGL多视口变换函数:glViewport使用 glViewport是OpenGL中的一个函数。

计算机图形学中,在屏幕上打开窗口的任务是由窗口系统,而不是OpenGL负责的 1.功能glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来 glOrtho chuibb001的专栏 03-26 719 函数简介 使用glOrtho[1]函数可以将当前的可视空间设置为正投影空间。

基参数的意义如图,如果绘制的图空间本身就是二维的,可以使gluOrtho2D.他的使用类似于glOrtho. 函数用途 设置或修改修剪空间的范围 句法 voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop, glViewport含义 wyyy2088511的博客 11-03 557 glViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight)为其函数原型。

X,Y————以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。

width,height————表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。

“相关推荐”对你有帮助么? 非常没帮助 没帮助 一般 有帮助 非常有帮助 提交 ©️2022CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页 shizhipeng CSDN认证博客专家 CSDN认证企业博客 码龄17年 暂无认证 17 原创 14万+ 周排名 183万+ 总排名 11万+ 访问 等级 987 积分 19 粉丝 46 获赞 31 评论 58 收藏 私信 关注 热门文章 glViewport()函数和glOrtho()函数的理解 51206 误删libc.so.6的解决方法 15364 ubuntu下gcc的默认的环境变量路径 13063 ffmpegbuildwithxvid 3542 Windows10连接到Windows7远程桌面提示你的凭据不工作 3384 分类专栏 江湖兴趣 2篇 C/C++ 2篇 Linux 3篇 OpenGL 2篇 Windows 1篇 最新评论 glViewport()函数和glOrtho()函数的理解 dagunliyu123: 极好!! glViewport()函数和glOrtho()函数的理解 rjyyqf: 谢谢,看完之后理解的很清楚,但我调试的时候有个问题 [code=csharp] voidreshape(intwidth,intheight) { intdis=width



請為這篇文章評分?