如何将变量从shell脚本传递到POV-Ray?我希望能够将变量作为命令行参数传递,然后在.ini文件或.pov文件中使用该值
像
这样的东西POV-Ray +pass var=$imageNumber file.pov
然后能够在POV-Ray中使用var
我意识到我可以编辑脚本中的.ini和.pov文件,或者使用模数将单帧变量用作两个变量,但这些解决方案看起来都很尴尬。
我想生成1000个非常相似的场景。每个场景都完全相同,只是高度图使用不同的图像文件作为其源。通常,我会使用POV-Ray中的动画工具来生成多个帧。但是,我已经在使用动画工具在每个场景中循环不同的属性。
答案 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;
相同。右侧的值必须是常量浮点值。
只要您不传递小数值(或使用非常大的序列号),您就应该能够将其用作文件名中的一个组成部分。