如何从shell脚本将信息传递给POV-Ray

时间:2018-01-06 21:36:57

标签: shell command-line-arguments povray

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

这样的东西
POV-Ray +pass var=$imageNumber file.pov

然后能够在POV-Ray中使用var

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

将从上面填充变量var1和var2,分别使用值“hello”和“world”。请注意,引号必须包含在列表中的每个字符串值周围。这是因为POV想要我们传递的'文件'中的POV文字。

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

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

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

povray "example.pov" <<<$foo

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

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

答案 1 :(得分:1)

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

relevant manual entry

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