本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版上一修订版两侧同时换到之后的修订记录 | ||
cg:books:rt_one_wk:book_1 [2022/07/28 10:04] – [模糊镜面反射] codinghare | cg:books:rt_one_wk:book_1 [2024/01/12 05:46] – [Ray Tracing In one Weekend] codinghare | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ======Ray Tracing In one Weekend====== | + | ====Ray Tracing In one Weekend==== |
//study notes// | //study notes// | ||
---- | ---- | ||
行 132: | 行 132: | ||
现在利用点积的结合律对该等式进行扩展,我们可以得到一个关于 $t$ 的一元二次方程: | 现在利用点积的结合律对该等式进行扩展,我们可以得到一个关于 $t$ 的一元二次方程: | ||
\\ \\ | \\ \\ | ||
- | \begin{align} | + | \[ |
+ | \begin{align*} | ||
&dot((A + tb -C), (A + tb -C)) = r^2 \newline | &dot((A + tb -C), (A + tb -C)) = r^2 \newline | ||
\Longrightarrow &dot(tb + {\color{Red}(A-C) }), (tb + {\color{Red}(A-C) }) = r^2 \newline | \Longrightarrow &dot(tb + {\color{Red}(A-C) }), (tb + {\color{Red}(A-C) }) = r^2 \newline | ||
- | \Longrightarrow &t^2*\underbrace{{\color{Peach} | + | \Longrightarrow & |
- | \underbrace{{\color{Peach} | + | \underbrace{{\color{Peach} |
- | \end{align} | + | \end{align*} |
+ | \] | ||
==具体实现== | ==具体实现== | ||
可见的是,射线与球体是否相交的问题,就可以转变为关于 $t$ 的方程是否存在根的问题。这种情况下使用判别式 $b^2 -4ac$ 判断即可。\\ \\ | 可见的是,射线与球体是否相交的问题,就可以转变为关于 $t$ 的方程是否存在根的问题。这种情况下使用判别式 $b^2 -4ac$ 判断即可。\\ \\ | ||
行 698: | 行 700: | ||
scattered = ray(rec.p, reflected + fuzz*random_in_unit_sphere()); | scattered = ray(rec.p, reflected + fuzz*random_in_unit_sphere()); | ||
</ | </ | ||
+ | ===main 文件中的对应修改[9.6]=== | ||
+ | ==ray_color()== | ||
+ | 由于我们已经将 material 抽象化,因此需要使用指针进行对应材质的调用。此处我们允许自行指定材质的衰减率: | ||
+ | <code cpp> | ||
+ | if (world.hit(r, | ||
+ | ray scattered; | ||
+ | color attenuation; | ||
+ | if (rec.mat_ptr-> | ||
+ | return attenuation * ray_color(scattered, | ||
+ | return color(0, | ||
+ | } | ||
+ | </ | ||
+ | <WRAP center round box 100%> | ||
+ | 之前一直不太明白为什么 '' | ||
+ | </ | ||
+ | ==场景的修改== | ||
+ | * 改变了背景大球的颜色 | ||
+ | * 新增一左一右两球,材质为 metal | ||
+ | * 改变了中间球的颜色 | ||
+ | * 模糊镜面反射版本需要提供额外的 '' | ||
+ | <code cpp> | ||
+ | auto material_ground = make_shared< | ||
+ | auto material_center = make_shared< | ||
+ | auto material_left | ||
+ | auto material_right | ||
+ | |||
+ | world.add(make_shared< | ||
+ | world.add(make_shared< | ||
+ | world.add(make_shared< | ||
+ | world.add(make_shared< | ||
+ | </ | ||
+ |