Ray Tracing in one weekend:chapter 10:可定位相机

本文介绍了如何在3D图形编程中创建一个可调整视角的相机系统。通过设置垂直视角、定义视点和目标点,以及允许相机滚动和侧面倾斜,实现了更灵活的相机控制。此外,还讨论了相机的upvector和视场的改变,以产生不同的视角效果。
摘要由CSDN通过智能技术生成

chapter 10:可定位相机

文章翻译

  相机和电解质一样,都很难解决出现的错误,因此我总是逐渐的开发我的代码。首先,让我们允许一个可调整的视角( fov ),这是你从观察点所看到的角度。因为我们的图片不是正方形,因此水平和垂直的视角是不一样的,我总是使用垂直视角。我也经常用度数来定义它,并在构造函数中改变弧度 —— 这是个人风格问题。
  我首先让光线保持从原点出发射向z轴-1位置的屏幕,我们也可以让屏幕在z轴-2位置或者其它地方,只要我们让 h 和这个距离成正比,下面是我们的步骤:
在这里插入图片描述
  这表明 ***h = tan(theta/2)***,我们的相机现在变成了:
在这里插入图片描述
  声明 camera cam(90, float(nx)/float(ny)) ,以及以下这些球类:
在这里插入图片描述
  我们得到图片:
在这里插入图片描述
  有一个武断的想法,给我们关心的点起一个名字,我们将放置相机的位置称为 lookfrom,将我们看向的点称为 lookat(过后,如果你想,你可以定义一个看的方向来替代看向的点)
  我们还需要一种方法来指定相机的滚动或侧面倾斜,绕着 look-lookfrom 轴来旋转。另一个思考的方法是,即使你保持 lookatlookfrom 为常量,你仍然可以让你的头围绕着你的鼻子旋转,现在我们需要的方法是为相机定义一个 up vector. 请注意,在屏幕中我们已经有一个 up vector,这个屏幕和视线正交。
在这里插入图片描述
  实际上,只要我们想,我们可以使用任意的 up vector,并简单的将其投影到这个屏幕上,为相机得到一个 up vector。我使用普遍传统的方式来命名一个 “view up” (vup) vector ,通过一组差积(cross),我们现在有一组完全正交基(u,v,w)来描述我们相机的朝向。
在这里插入图片描述
  记住 vup,v,w 都在一个相同的屏幕,注意,像之前我们的固定摄像头面向 -z,我们的任意视图摄像头面向 -w。我们可以将其记在心里,但是没有必要,可以使用 world up (0,1,0) 来定义 vup。这是方便的,将自然的让你的相机保持水平,直到你决定体验一下疯狂的相机角度。
在这里插入图片描述
  这允许我们改变视点:
在这里插入图片描述
  得到图片:
在这里插入图片描述
  我们可以改变视场来得到:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值