如何从 shell 脚本向 POVRay 传递信息

How to pass infomation to POV-Ray from a shell script

如何将变量从 shell 脚本传递到 POV-Ray?我希望能够将变量作为命令行参数传递,然后在 .ini 文件或 .pov 文件中使用该值

类似

POV-Ray +pass var=$imageNumber file.pov

然后可以在 POV-Ray 中使用 var

我意识到我可以在脚本中编辑 .ini 和 .pov 文件或使用模数将单个帧变量用作两个变量,但这两种解决方案看起来都很尴尬。

我想生成 1000 个极其相似的场景。除了高度图使用不同的图像文件作为其源之外,每个场景都完全相同。通常,我会使用 POV-Ray 中的动画工具来生成多帧。但是,我已经在使用动画工具在每个场景中循环不同的 属性。

对于 *nix 系统,使用 POV-Ray's file handling system 打开 .pov 文件中的标准输入文件

#fopen STDIN "/dev/stdin" read
#read (STDIN, var1, var2)

这将从标准输入中读取以逗号分隔的 POV 文字列表。但是,POV-Ray 不处理从管道读取数据;因此,使用 herestrings(如果您必须仅使用 sh 兼容语法,则使用 heredocuments)来填充 POV-Ray 的标准输入。

例如,如果 运行 在 shell 中(适用于 bash):

povray "example.pov" <<<'"hello","world"'

将分别用值 "hello" 和 "world" 填充上面的变量 var1 和 var2。请注意,列表中的每个字符串值都必须包含引号。这是因为 POV 需要我们传递的 'file' 中的 POV 文字。

如果您想改用 .ini 文件,只需调用 .ini 文件代替 .pov 文件,一切都会按预期工作。

如果您希望将更多或更少的变量传递给 POV 文件,请在 #read 指令中添加或删除变量名称,并扩展或trim您传递的数字到相同的长度。'

您也可以像这样传递 shell 变量。如果 foo 包含 "hello" 包括引号,并且 "example.pov" 期望 herestring 中有一个字符串,那么

povray "example.pov" <<<$foo

会将hello传递给#read指令中的变量。

此外,您可以使用字符串以外的其他 POV 文字,在这种情况下,使用该文字类型的相关 POV 语法。但是,您不能将 POV 表达式放入 herestring。有关详细信息,请参阅 wiki page

从 POV-Ray 3.7 开始,您现在可以在 INI 文件中声明常量,因此在命令行中使用 Declare=MyValue=24。这与场景文件中的 #declare MyValue=24; 相同。右边的值必须是常量浮点值。

查看 relevant manual entry

只要不传递分数值(或使用非常大的序列号),您应该可以将其用作文件名中的一个组成部分。