CS184.1X 计算机图形学导论(第五讲)

一、观察:正交投影

1.特性:保持平行线在投影后仍然是平行的

2.一个长方体,对处在只有深度不同的位置上的同一物体来说,它的大小不会改变。

3.透视投影:平行线在远处会相交(例如铁轨)

4.glOrtho()函数:这个函数描述了一个平行修剪空间。这种投影意味着离观察者较远的对象看上去不会变小(与透视投影相反)。在3D笛卡尔坐标中想象这个修剪空间,左边和右边是最小和最大的X值,上边和下边是最小和最大的Y值,近处和远处是最小和最大的Z值。 正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。

5.用途:这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确

6.glOrtho函数只是负责使用什么样的视景体来截取图像,glOrtho(left, right, bottom, top, near, far)left表示视景体左面的坐标,right表示右面的坐标,bottom表示下面的,top表示上面的。这个函数简单理解起来,就是一个物体摆在那里,你怎么去截取他。

 假设有一个球体,半径为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的框框把球体的右上角装了进来。

 

例题:

在何种情况下,我们需要用M来代替glOrtho?

扫描二维码关注公众号,回复: 3174803 查看本文章

矩阵中唯一改变的项是 (2,2)这一项。

我们把它从 2fn (glOrtho) 变成了 2fn。在glOrtho中,这一项是负的,因为我们把近裁剪面和远裁剪面定义为了正整数,但它们应该是负的,实际上它们代表了平面 z= z=f

如果我们看向一条正的坐标轴时,则不需要把它变为负数。

 

二、透视投影

1.投影的中心是相机或是眼睛的位置

2.中间竖线是屏幕,把后边的物体投影到屏幕上,求取x`的坐标?

利用小三角形和大三角形相似,d/x`=z/x,x`=d*x/z,所以物体距离屏幕越远,所看到的越小

 4.都除以-z/d,为什么是负号,同样道理,相机朝着−z⃗方向观察。

三、透视变换gluPerspective

1.gluLookAt函数详解:

openGL中,视图变换是指保持模型坐标不变的情况下,从不同的方位观察模型,常用的设置观察者属性的函数为glLookAt

函数原型

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

函数定义一个视图矩阵,并与当前矩阵相乘。

第一组eyex, eyey,eyez 相机在世界坐标的位置

第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置

第三组upx,upy,upz 相机向上的方向在世界坐标中的方向

你把相机想象成为你自己的脑袋:

第一组数据就是脑袋的位置

第二组数据就是眼睛看的物体的位置

第三组就是头顶朝向的方向(因为你可以歪着头看同一个物体)。

如果没有调用glLookAt设置视图矩阵,默认情况下,相机会被设置为位置在世界坐标系原点,指向z轴负方向,朝上向量为(010)。

2.gluLookAt函数详解:

如果说gluLookAt定义的是相机外在参数如相机所处位置、旋转角度等,那么gluPerspective定义的就是相机的内在镜头参数了。

四个参数:

gluPerspective ( fovy,aspect,zNear,zFar)

1>第一个参数flvy,定义可视角的大小,flvy值小,表示从相机(人眼)出发的光线的角度小,此时同等距离下,可观察到的视野范围较小,反之则大。

2>第二个参数aspect,定义物体显示在画板上的x和y方向上的比例。aspect小于1,则物体显示出来比实际更高,大于1,显示出来比实际看起来更宽,设为1,会按实际反应长宽比。

3>第三个参数zNear,定义距离相机(人眼)最近处物体截面相距的距离。这个值越大,表示观测点距离物体距离越远,看起来物体就比较小,反之则比较大。如果物体运动到距离观测点的距离小于了设定的zNear,则物体不会被绘制在画板上。

4>第四个参数zFar,定义可观测到的物体的最远处截面相距相机的距离。如果物体运动到距离观测点的距离大于了设定的zFar,则物体不会被绘制的画板上。

(在near和far中间的才会被观察到)

 

上图为屏幕的俯视图,可以得出两个值

3.近平面不可设置为0,远平面影响不大。

4.Z坐标靠近近裁剪面的位置拥有最高的深度分辨率(能够分辨的深度差最小),由于透视矩阵并需把 n  f 映射成  1,于是应用了透视矩阵后,靠近 n 的物体比靠近 f 的物体分布在更宽广的空间里。

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/keguniang/p/9643731.html