框架

garfileo
上一篇:变量

既然 POV Ray 认为我已经具备运用咒语绘制一切的能力,我决定闭门造车,让之前画的盒子更复杂一些,为它增加一个板条框架。

盒子是平行六面体,要为它造框架,我需要 12 根板条,蓝色的。所谓板条,无非是细长的盒子罢了。

首先,基于盒子的尺寸

#declare foo_size = <0.3, 0.15, 0.10>;

我能确定盒子顶面上的 4 个顶点的坐标:

#declare v1 = <-0.5 * foo_size.x, 0.5 * foo_size.y, -0.5 * foo_size.z>;
#declare v2 = v1 + <foo_size.x, 0, 0>;
#declare v3 = v2 + <0, 0, foo_size.z>;
#declare v4 = v3 + <-foo_size.x, 0, 0>;

基于这 4 个顶点坐标,我可以构造 4 根板条, 并把它们放在顶面合适的位置:

#declare bar_size = 0.01;
#declare bar_texture = texture { pigment { color Blue } }
box {
  v1 + bar_size * <-0.5, -0.5, -0.5>, v2 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v2 + bar_size * <-0.5, -0.5, -0.5>, v3 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v4 + bar_size * <-0.5, -0.5, -0.5>, v3 + bar_size * <0.5, 0.5, 0.5> 
  texture { bar_texture }
}
box {
  v1 + bar_size * <-0.5, -0.5, -0.5>, v4 + bar_size * <0.5, 0.5, 0.5> 
  texture { bar_texture }
}

结果可以得到:

这些咒语,没有什么玄机可言……只需要一场瘟疫能够令人不得不呆在家里,与世隔绝。现在,我有足够的耐心画出底面的 4 根板条:

#declare v5 = v1 + <0, -foo_size.y, 0>;
#declare v6 = v2 + <0, -foo_size.y, 0>;
#declare v7 = v3 + <0, -foo_size.y, 0>;
#declare v8 = v4 + <0, -foo_size.y, 0>;

box {
  v5 + bar_size * <-0.5, -0.5, -0.5>, v6 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v6 + bar_size * <-0.5, -0.5, -0.5>, v7 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v8 + bar_size * <-0.5, -0.5, -0.5>, v7 + bar_size * <0.5, 0.5, 0.5> 
  texture { bar_texture }
}
box {
  v5 + bar_size * <-0.5, -0.5, -0.5>, v8 + bar_size * <0.5, 0.5, 0.5> 
  texture { bar_texture }
}

结果得到:

接下来,画中间的 4 根,

box {
  v5 + bar_size * <-0.5, -0.5, -0.5>, v1 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v6 + bar_size * <-0.5, -0.5, -0.5>, v2 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v7 + bar_size * <-0.5, -0.5, -0.5>, v3 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v8 + bar_size * <-0.5, -0.5, -0.5>, v4 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}

结果得到:

现在,我已经习惯了画盒子了。好像我的存在,就是为了画出它们。

如果觉得这个带有边框的盒子太像一口棺材,就把黄色的大盒子弄得透明一些,

#declare foo_size = <0.3, 0.15, 0.10>;
#declare foo_texture = texture { pigment { color rgbt <1, 1, 0, 0.75> } } // <= 看这里!
box {
  -0.5 * foo_size, 0.5 * foo_size
  texture {foo_texture}
}

结果得到:

像一口水晶棺……它背后的全部咒语如下:

#version 3.7;
#include "colors.inc"

global_settings {
    assumed_gamma 1.0
}

#declare foo_size = <0.3, 0.15, 0.10>;
#declare foo_texture = texture { pigment { color rgbt <1, 1, 0, 0.75> } }
box {
  -0.5 * foo_size, 0.5 * foo_size
  texture {foo_texture}
}

#declare v1 = <-0.5 * foo_size.x, 0.5 * foo_size.y, -0.5 * foo_size.z>;
#declare v2 = v1 + <foo_size.x, 0, 0>;
#declare v3 = v2 + <0, 0, foo_size.z>;
#declare v4 = v3 + <-foo_size.x, 0, 0>;

#declare bar_size = 0.01;
#declare bar_texture = texture { pigment { color Blue } }
box {
  v1 + bar_size * <-0.5, -0.5, -0.5>, v2 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v2 + bar_size * <-0.5, -0.5, -0.5>, v3 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v4 + bar_size * <-0.5, -0.5, -0.5>, v3 + bar_size * <0.5, 0.5, 0.5> 
  texture { bar_texture }
}
box {
  v1 + bar_size * <-0.5, -0.5, -0.5>, v4 + bar_size * <0.5, 0.5, 0.5> 
  texture { bar_texture }
}

#declare v5 = v1 + <0, -foo_size.y, 0>;
#declare v6 = v2 + <0, -foo_size.y, 0>;
#declare v7 = v3 + <0, -foo_size.y, 0>;
#declare v8 = v4 + <0, -foo_size.y, 0>;

box {
  v5 + bar_size * <-0.5, -0.5, -0.5>, v6 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v6 + bar_size * <-0.5, -0.5, -0.5>, v7 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v8 + bar_size * <-0.5, -0.5, -0.5>, v7 + bar_size * <0.5, 0.5, 0.5> 
  texture { bar_texture }
}
box {
  v5 + bar_size * <-0.5, -0.5, -0.5>, v8 + bar_size * <0.5, 0.5, 0.5> 
  texture { bar_texture }
}

box {
  v5 + bar_size * <-0.5, -0.5, -0.5>, v1 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v6 + bar_size * <-0.5, -0.5, -0.5>, v2 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v7 + bar_size * <-0.5, -0.5, -0.5>, v3 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}
box {
  v8 + bar_size * <-0.5, -0.5, -0.5>, v4 + bar_size * <0.5, 0.5, 0.5>
  texture { bar_texture }
}

#declare foo_center = <0, 0, 0>;
#declare foo_upper_right = 0.3 * <1, 1, 1> + foo_center;
camera {
  location foo_upper_right
  look_at foo_center
}

#declare camera_upper_right = foo_upper_right + <0.5, 0.5, -1>;
light_source {
  camera_upper_right
  color White
}

POV Ray 看了我的作品,他认为用圆柱体来替代我极具耐心制作的板条会简单一些。我曾经潜入他的书房,偷学了诸如 foo_size.xfoo_size.yfoo_size.z 这些访问向量的第一、二、三维分量以及定义透明颜色的手法,结果也被他发现了。

下一篇:有物混成
阅读 758

5.7k 声望
1.8k 粉丝
0 条评论
你知道吗?

5.7k 声望
1.8k 粉丝
文章目录
宣传栏