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



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

类似的东西

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

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

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

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

对于 *nix 系统,请使用 POV-Ray 的文件处理系统打开.pov文件中的标准输入文件

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

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

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

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

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

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

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

你也可以像这样传递 shell 变量。如果 foo 包含"hello"包括引号,并且 "example.pov" 需要在这里字符串中包含一个字符串,则

povray "example.pov" <<<$foo

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

此外,还可以使用除刺痛以外的其他 POV 文本,在这种情况下,请使用该文本类型的相关 POV 语法。但是,您不能将 POV 表达式放入此处字符串中。有关更多信息,请参阅 wiki 页面。

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

请参阅相关手册条目

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

最新更新