上一篇:盒子
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 点点头,「可以。不过,事实上我们不需要去定义 Yellow
、White
这些颜色变量,因为常见的颜色变量,已经在一份名为 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
}
不禁觉得,修辞无处不在,而且理应无处不在。
口罩,要戴在心里。
下一篇:框架
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。