Как передать информацию в POV-Ray из сценария оболочки

Как передать переменную из сценария оболочки в POV-Ray? Я хотел бы иметь возможность передавать переменную в качестве аргумента командной строки, а затем использовать это значение в файле .ini или файле .pov.

Что-то типа

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

А затем возможность использовать var в POV-Ray

Я понимаю, что могу отредактировать файлы .ini и .pov в сценарии или использовать модуль для использования одной переменной кадра в качестве двух переменных, но оба эти решения кажутся неудобными.

Я хочу создать 1000 очень похожих сцен. Каждая сцена абсолютно одинакова, за исключением того, что карта высот использует другой файл изображения в качестве источника. Обычно я использую инструменты анимации в POV-Ray для создания нескольких кадров. Однако я уже использую инструменты анимации для циклического переключения разных свойств в каждой сцене.


person Algorithmic Canary    schedule 06.01.2018    source источник


Ответы (2)


Для систем *nix используйте систему обработки файлов POV-Ray, чтобы открыть стандартный -in файл в вашем .pov файле

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

Это будет читаться из стандартного списка разделенных запятыми литералов POV. Однако POV-Ray не поддерживает чтение из канала; Таким образом, используйте herestrings (или heredocuments, если вы должны использовать только sh совместимый синтаксис) для заполнения стандартного ввода для POV-Ray.

Например, если запустить в оболочке (работает для bash):

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

Заполнит переменные var1 и var2 сверху значениями «hello» и «world» соответственно. Обратите внимание, что каждое строковое значение в списке должно быть заключено в кавычки. Это потому, что POV хочет, чтобы литералы POV были в «файле», который мы передаем.

Если вы хотите вместо этого использовать файл .ini, просто вызовите файл .ini вместо файла .pov, и все будет работать как положено.

Если вы хотите, чтобы в файл POV было передано больше или меньше переменных, добавьте или удалите имена переменных из директивы #read и удлините или обрежьте число, которое вы передаете, до той же длины.

Вы также можете передавать переменные оболочки, как это. Если foo содержит "hello", включая кавычки, а "example.pov" ожидает одну строку в строке, то

povray "example.pov" <<<$foo

передаст hello переменной в директиве #read.

Кроме того, вы можете использовать другие литералы POV, кроме укусов, в этом случае используйте соответствующий синтаксис POV для этого типа литерала. Однако вы не можете поместить выражения POV в строку. Дополнительную информацию см. на вики-странице.

person Algorithmic Canary    schedule 07.01.2018

Начиная с POV-Ray 3.7 теперь вы можете объявлять константы в INI-файле и, следовательно, в командной строке с помощью Declare=MyValue=24. Это будет то же самое, что и #declare MyValue=24; в файле сцены. Значение в правой части должно быть постоянным значением с плавающей запятой.

см. соответствующий ввод вручную

Пока вы не передаете дробные значения (или не используете очень большие порядковые номера), вы должны иметь возможность использовать это как компонент в имени файла.

person p10ben    schedule 20.03.2021