OpenGL教程翻译 第十三课 相机空间

OpenGL教程翻译 第十三课 相机空间

原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载)

Background

在上几节中我们看见两种类型的顶点变换。第一种类型的变换是改变对象的位置(平移),旋转,尺寸(放缩)。这些变换允许我们在3D世界中把一个对象放在任何位置。第二种类型的变换是透视投影变换,把在3D世界坐标系下的顶点位置投影到2D世界坐标系下(比如一架飞机)。一旦坐标变换为2D坐标,那么非常容易将这些2D坐标映射到屏幕空间坐标。这些坐标实际上被用来光栅化组成对象的图元(可能是点、线或者三角形)。

在之前的所有章节中我们还没接触过相机,我们隐含假定相机位于3D空间的原点。事实上,我们希望能够自由的控制相机,可以把它放在3D世界的任何位置,并投影顶点到在相机正前方的2D平面。这将能够反映出相机和屏幕上的对象之间的正确的关系。

在下面这幅图片中,我们看见相机背对我们置于某处。在相机前面有一个虚拟的2D平面,球被投影到该平面上。相机是倾斜着的,所以平面也是倾斜着的。由于相机视角的限制,此 2D平面能看见的部分只是一个矩形。在该矩形的外部所有东西都将被减掉。把这个矩形渲染到屏幕是我们的目标。


理论上可以生成这样的变化矩阵,实现把一个位于3D空间的对象投影到坐落在世界坐标系任意位置的相机正前方的2D平面上。然而,这其中的数学变换比我们之前遇见的要复杂很多。而当相机被置于3D世界坐标系的源点并且方向沿着Z轴时的投影就简单了很多。比如,一个对象放在(0,0,5)处,同时相机放在(0,0,1)处并且方向朝向Z轴。如果我们把相机和对象朝着原点移动一个单位,那时两者的相对距离和方向(就相机的方向而言)保持不变,而区别只是相机此时位于原点。以同种方式移动场景中的所有物体使得我们能够正确渲染场,用之前学到的方法。

上面的例子很简单,因为相机的方向已经

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值