(5)gluLookAt、glViewport()、glOrtho和gluPerspective参数分析

转载 2016年08月30日 17:04:29

记性不好 ,学习opengl的时候,总是忘记视口和投影变换函数配合时需要注意的地方,导致窗口内看不到三维物体。所以写在这以方便提醒自己。


一、 gluLookAt和投影

     void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);

  gluLookAt的前三个参数定义了观察点的位置,但同时也定了投影函数如正交投影函数各个参数的原点!

  

  正交投影是指物体和照相机之间的距离并不影响他看上去的大小。

void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far)各参数意义如图所示,用来标记正交空间长方体。



若在程序中有glOrtho(-2.0,2.0,-2.0,2.0,5.0,100.0);和gluLookAt(1.0,0.0,0.0,1.0,0.0,-4.0,0.0,1.0,0.0);而物体坐标为(0,0,-10)则表示以(1,0,0)点为原点定义了一个宽为4高为4长为95的立方体,其左下角绝对坐标为(1-2,0-2,0-5)=(-1,-2,-5),物体显示时偏左。




 若物体坐标为(0,0,-4) 此时会显示黑屏。因为物体在正交立方体外。

 

    对于透视投影函数void gluPerspective(GLdouble fovy, //角度

                      GLdouble aspect,//视景体的宽高比

                      GLdouble zNear,//沿z轴方向的两裁面之间的距离的近处

                      GLdouble zFar //沿z轴方向的两裁面之间的距离的远处)

   其中,zNear和zFar两个参数也是以观察点为原点的相对坐标。

二、投影变换到视口变换

  视口是一个矩形的窗口区域,三维图像通过映射生成二维平面的像素后,就是在这片区域绘制的。默认情况下,视口被设置为打开窗口的整个像素矩形。

     glViewport(GLint x,GLint y,GLsizei width,GLsizei height)定义了视口在窗口中的区域同时也规定了二维的像素平面到视口区域的映射关系。

  



   若有glViewport(0,0,w/2,h),即有:




也可以利用glViewPort()生成多窗口模式:


glViewport(0.0,0.0,afxw/2,afxh/2);
    glCallList(box);
     glViewport(afxw/2,0.0,afxw/2,afxh/2);     
    glCallList(box);
    glViewport(0.0,afxh/2,afxw/2,afxh/2);     
    glCallList(box);
    glViewport(afxw/2,afxh/2,afxw/2,afxh/2);     
    glCallList(box);


     生成效果如图所示:


opengl 投影 glOrtho gluPerspective gluLookAt 转载不同作者的理解

1.http://blog.csdn.net/soasoa/article/details/6208382 正投影和透视投影是OPENGL里最基本,而且最重要的内容. 下图分别是正投影...

opengl 投影 glOrtho gluPerspective gluLookAt

glOrtho gluPerspective gluLookAt
  • soasoa
  • soasoa
  • 2011年02月25日 18:55
  • 2591

OpenGL中投影函数glOrtho()、glFrustum()以及gluPerspective()以及函数的用法

OpenGL中,如果想对模型进行操作,就要对这个模型的状态(当前的矩阵)乘上这个操作对应的一个矩阵. 如果乘以变换矩阵(平移, 缩放, 旋转), 那相乘之后, 模型的位置被变换; 如果乘以投影矩阵...

[转]OpenGL中glViewport和glOrtho和glFrustum

  http://www.cnblogs.com/Aries/archive/2011/03/03/1969194.html 在OpenGL中有两个比较重要的投影变换函数,glViewport和glO...
  • GEOLO
  • GEOLO
  • 2011年05月06日 09:13
  • 1839

glViewport()函数和glOrtho()函数

在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho。 glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常...

glViewport()函数和glOrtho()函数的理解(转)

在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho。      glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如...
  • qwq1503
  • qwq1503
  • 2016年11月09日 14:08
  • 116

glViewport()函数和glOrtho()函数的理解(转)

glViewport()函数和glOrtho()函数的理解(转)在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho。glOrtho是创建一个正交平行的视景体。 一般用于...

glViewport()函数和glOrtho()函数的理解(转)

在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho。 glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常...

glViewport()函数和glOrtho()函数的理解(转)

在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho。 glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的...

gluLookAt和gluPerspective关系——学习OpenGL三维建模前必读④

一般来说,建模时采用建模坐标系,然后在绘制的时候,先把建模坐标系转换到世界坐标系. opengl的坐标系, Z的正方向指向屏幕外的(属于右手坐标系),X的正方向指向右, Y的正方向指向上.  ...
  • whucv
  • whucv
  • 2012年11月05日 22:32
  • 1925
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(5)gluLookAt、glViewport()、glOrtho和gluPerspective参数分析
举报原因:
原因补充:

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