What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
cg:books:rt_one_wk:book_1 [2022/07/28 10:17] – [场景的修改] codingharecg:books:rt_one_wk:book_1 [2024/01/12 05:46] (当前版本) – [Ray Tracing In one Weekend] codinghare
行 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} dot}(b,b)}_\text{a} +t*\underbrace{2*{\color{Peach} dot} (b,(A-C))}_\text{b} +\ +\Longrightarrow &t^2 \cdot \underbrace{{\color{Peach} \cdot}(b,b)}_\text{a} +t \cdot \underbrace{2 \cdot {\color{Peach} } (b,(A-C))}_\text{b} +\ 
-\underbrace{{\color{Peach} dot}((A-C),(A-C))-r^2}_\text{c} = 0 +\underbrace{{\color{Peach} \cdot}((A-C),(A-C))-r^2}_\text{c} = 0 
-\end{align}+\end{align*} 
 +\]
 ==具体实现== ==具体实现==
 可见的是,射线与球体是否相交的问题,就可以转变为关于 $t$ 的方程是否存在根的问题。这种情况下使用判别式 $b^2 -4ac$ 判断即可。\\ \\  可见的是,射线与球体是否相交的问题,就可以转变为关于 $t$ 的方程是否存在根的问题。这种情况下使用判别式 $b^2 -4ac$ 判断即可。\\ \\ 
行 719: 行 721:
   * 模糊镜面反射版本需要提供额外的 ''fuzz''   * 模糊镜面反射版本需要提供额外的 ''fuzz''
 <code cpp> <code cpp>
-        auto material_ground = make_shared<lambertian>(color(0.8, 0.8, 0.0)); +auto material_ground = make_shared<lambertian>(color(0.8, 0.8, 0.0)); 
-    auto material_center = make_shared<lambertian>(color(0.7, 0.3, 0.3)); +auto material_center = make_shared<lambertian>(color(0.7, 0.3, 0.3)); 
-    auto material_left   = make_shared<metal>(color(0.8, 0.8, 0.8)); +auto material_left   = make_shared<metal>(color(0.8, 0.8, 0.8)); 
-    auto material_right  = make_shared<metal>(color(0.8, 0.6, 0.2));+auto material_right  = make_shared<metal>(color(0.8, 0.6, 0.2));
  
-    world.add(make_shared<sphere>(point3( 0.0, -100.5, -1.0), 100.0, material_ground)); +world.add(make_shared<sphere>(point3( 0.0, -100.5, -1.0), 100.0, material_ground)); 
-    world.add(make_shared<sphere>(point3( 0.0,    0.0, -1.0),   0.5, material_center)); +world.add(make_shared<sphere>(point3( 0.0,    0.0, -1.0),   0.5, material_center)); 
-    world.add(make_shared<sphere>(point3(-1.0,    0.0, -1.0),   0.5, material_left)); +world.add(make_shared<sphere>(point3(-1.0,    0.0, -1.0),   0.5, material_left)); 
-    world.add(make_shared<sphere>(point3( 1.0,    0.0, -1.0),   0.5, material_right));+world.add(make_shared<sphere>(point3( 1.0,    0.0, -1.0),   0.5, material_right));
 </code> </code>