《图形编程技术学习》(二十)定义一个视域空间——投影变换函数的参数

一、Projection

1.Perspective projection(透视投影)

2.Parallel projection(平行投影)

投影变换:给定视点、视线方向,计算出当前顶点的投影点坐标。

透视投影

透视投影属于中心投影。透视投影图简称为透视图或透视。它是从某个投射中心将物体投射到单一投影面上所得到的图形。透视图与人们观看物体时所产生的视觉效果非常接近,所以它能更加生动形象地表现建筑外貌及内部装饰。在意有实景实物的情况下,通过拍照或摄像即能得到透视图;对于尚在设计、规划中的建筑物则作图(手工或计算机)的方法才能画出透视图。透视图以渲染、配景,使之成为形象逼真的效果图。由于是中心投影,因此平行投影中的一些重要性质(如平行性、定比性等)和作图规律,在这里已不适用。

平行投影

平行投影是在一束平行光线照射下形成的投影。在平行投影中,同一时刻改变物体的方向和位置。其投影也跟着发生变化;在中心投影中,同一灯光下,改变物体的位置和方向,其投影也跟着发生变化。

二、投影变换(Project Transformation)

• void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);

• void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar );

• void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);

glFrustum()函数定义一个平截头体,它计算一个用于实现透视投影的矩阵,并把它与当前的投影矩阵(一般是单位矩阵)相乘。也即是该函数构造了一个视景体用来将模型进行投影,来裁剪模型,决定模型哪些在视景体里面,哪些视景体的外面,在视景体之外的就不可见。这里gluFrustum是核心库,而gluPersoective是实用库,也就是说是gluFrustum的扩展。

glOrtho是创建一个正交平行的视景体。一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的工程中的制图等。需要比较精确的显示。

1.void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdouble zfar);

znear 和 zfar 必须是正值

2.void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar );

3.void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);

投影变换也都是用矩阵实现的。

有一个专门的堆栈来管理投影矩阵。

 glMatrixMode(GL_PROJECTION)。

glMatrixMode()命令将当前矩阵设置成参数所指定的模式,以满足不同绘图所需执行的矩阵变换。一般而言,在需要绘制出对象或要对所绘制对象进行几何变换时,需要将变换矩阵设置成模型视图模式;而当需要对绘制的对象设置某种投影方式时,则需要将变换矩阵设置成投影模式;只有在进行纹理映射时,才需要将变换矩阵设置成纹理模式。

      与glLoadIdentity()一同使用,glLoadIdentity()功能是重置当前指定的矩阵为单位矩阵。

       我们生活在一个三维的世界——如果要观察一个物体,我们可以:
1、从不同的位置去观察它。(视图变换)
2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它。(模型变换)
3、如果把物体画下来,我们可以选择:是否需要一种“近大远小”的透视效果。另外,我们可能只希望看到物体的一部分,而不是全部(剪裁)。(投影变换)
4、我们可能希望把整个看到的图形画下来,但它只占据纸张的一部分,而不是全部。(视口变换)
这些,都可以在OpenGL中实现。

       OpenGL变换实际上是通过矩阵乘法来实现。无论是移动、旋转还是缩放大小,都是通过在当前矩阵的基础上乘以一个新的矩阵来达到目的。OpenGL可以在最底层直接操作矩阵,不过作为初学,这样做的意义并不大。这里就不做介绍了。

参考链接:https://blog.csdn.net/caoshangpa/article/details/80266028

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值