欢迎光临散文网 会员登陆 & 注册

阿昌学习《RayTraing in one week》 (十)

2022-11-17 00:46 作者:柯昌弟弟c  | 我要投稿

第十章

主要是对摄像机的一些操作,叫做:可定位摄像机。书里说这里调试也比较麻烦,我感觉是真的挺麻烦的。

首先,让我们有一个可调整的视野fov,作者之前使用的画布图像不是一个正方形,所以垂直和水平的fov值是不同的,作者喜欢垂直方向的fov,我也一样的使用了垂直方向,但是还是保留了我自己的输出正方形的图。

视角图

首先,我的射线是从原点发射,射到z=-1的平面(原作者说-1 -2 都行),那么图中很明显就能得到h=tan(θ/2),有了公式就很容易得到相机模型了,那就改写一下摄像机:

新的camera.h脚本

额外加一下π的值:

在drand48.h加一个常量π

当然哈 主函数也要改:

主函数这边我还是沿用了自己的200*200

main函数内修改了一下摄像机和球

书里正常应该是输出90度类似广角的长画面,我这里是一个正方形的,小伙伴也可以使用其他的比例来看,输出结果:

200*200两个球

现在摄像机可以调整视角了,接下来我们将摄像机位置也变化一下。

首先书中定义了摄像机的位置叫lookfrom,看向的点叫lookat。

摄像机的朝向(看到的方向)

这里他加了一个比喻,就是说你站直了,你的头还是可以左右转动的:

vup的方向示意

我们实际上可以使用任何我们想要的向上的向量,简单的把他投射到这个平面上得到一个向上的向量,所以就得到了vup,通过叉乘计算,就可以得到一个完整的蒸饺(u,v,w)。这里我建议小伙伴自己画一下图,真的很有必要,画出来就知道vup和uvw的关系了。

接下来就是修改代码了:

可以变换位置的camera就搞定了

回到main函数,用上一章的那几个球:

那两个新加的球可以光荣退役了

我给出自己的输出的图:

200*200,其它和书中数据一致

多跑几个配置的图也可以看看,我这里就不多跑其它的图了。关于摄像机还剩最后一个部分 —— 景深(直译是聚焦模糊)。

阿昌学习《RayTraing in one week》 (十)的评论 (共 条)

分享到微博请遵守国家法律