变量

garfileo
上一篇:盒子

POV Ray 认为,在理论上我已经具备了用咒语画出一切的能力了。当我反对他的乐观时,他以 Minecraft 这个游戏作为论据。我无言以对,但是,总觉得少了一些什么。

「少的是一致性。克服不了,也可以继续活下去,只是戴口罩会成为常态。」POV Ray 看过了今天的新型肺炎感染者的数量,略有些感慨。

我啜饮了一口昨夜的剩茶,漫不经心地说,「戴口罩和画画有什么关系?」我发现,把茶水含在嘴里,并不咽下,只是让它尽量接近咽部,感觉这样能缓解咽炎。含茶叶效果更好,只是需要担心农残。

POV Ray 指着我昨天的画作所用的咒语,「你想画的盒子,中心是在原点,长 30 cm,宽 15 cm,高 10 cm,颜色是黄色,为什么要写成

box {
  <-0.15, -0.075, -0.05>, <0.15, 0.075, 0.05>
  texture {
    pigment {
      color rgb <1, 1, 0>
    }
  }
}

?其中的 <-0.15, -0.075, -0.05><0.15, 0.075, 0.05>rgb <1, 1, 0>,这些东西就像口罩。如果把握不住咒语的一致性,那么与相机和光源有关的咒语也必然要充斥着这些东西。」

「这些东西,不就是坐标嘛。」

「也可以叫向量。虽然你知道它们都是向量,但是未必能一眼看出它们的现实意义。譬如 rgb <1, 1, 0>,熟悉红、绿、蓝三色叠加原理的人,也要略微思考一下方能理解它的含义。至于 <-0.15, -0.075, -0.05><0.15, 0.075, 0.05>,怕是不会有太多人知道它们表示盒子的两个对角顶点,而且在盒子的所有(8 个)顶点中,前者表示各维坐标最小的顶点,后者表示各维坐标最大的顶点;还有,若以米为单位,仅用这两个顶点就足以表达你所谓的『中心在原点、长 30 cm、宽 15 cm、高 10 cm 的盒子』。」

我不得不同意 POV Ray 说的对,「那么,该怎样摘下这些口罩,露出它们的面目?」

「用变量。可以先根据你的描述,创造一组变量,

#declare foo_size = <0.3, 0.15, 0.10>;
#declare Yellow = rgb <1, 1, 0>;
#declare foo_pigment = pigment { color Yellow }

然后基于这些变量创造盒子,

box {
  -0.5 * foo_size, 0.5 * foo_size
  texture { pigment { foo_pigment } }
}

这样,创造盒子的咒语是不是更清晰了一些?新的咒语与之前的咒语是等价的。」

「是好看了一些。我试着修改相机和光源,

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

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

POV Ray 点点头,「可以。不过,事实上我们不需要去定义 YellowWhite 这些颜色变量,因为常见的颜色变量,已经在一份名为 colors.inc 文件中已经定义过了,只要 povray 没有故障,只需要事先载入这份文件,例如

#version 3.7;
#include "colors.inc"
... ... ...

就可以在咒语中直接使用这些颜色变量。」

我再三打量着新的 foo.pov 文件,

#version 3.7;
#include "colors.inc"

global_settings {
    assumed_gamma 1.0
}

#declare foo_size = <0.3, 0.15, 0.10>;
#declare foo_pigment = pigment { color Yellow }

box {
  -0.5 * foo_size, 0.5 * foo_size
  texture { pigment { foo_pigment } }
}

#declare foo_center = <0, 0, 0>;
#declare foo_upper_right = 0.5 * <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
}

不禁觉得,修辞无处不在,而且理应无处不在。

口罩,要戴在心里。

下一篇:框架
阅读 650

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

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