1

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

就像是

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

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

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

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

4

2 回答 2

1

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

请参阅相关的手册条目

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

于 2021-03-20T01:46:44.540 回答
1

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

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

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

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

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

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

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

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

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

povray "example.pov" <<<$foo

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

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

于 2018-01-07T04:09:17.607 回答