Параметры доступа Softimage в C++

Я немного отчаялся здесь... Я пытаюсь получить доступ к одному параметру света в Softimage.

Во-первых, когда мы делаем это:

light.GetParameterValue(L"LightExponent")

оно работает!

Но когда мы пытаемся:

light.GetParameterValue(L"soft_light.atten")

это терпит неудачу полностью!

Я пытался найти документацию, но единственный код, который я мог найти, находится на Python, и нет указаний на эквивалент в C++. В python им удается сделать что-то вроде:

xsi = Application
test = xsi.GetValue("LightName.point.soft_light.atten")

Но я не могу понять, что такое Application, и это не то же самое, что XSI::Application в API.

Итак, есть идеи, как получить доступ к этому значению? Кроме того, если бы я мог найти эквивалент Application.GetValue (в скрипте вы можете увидеть Application.SetValue... так что я представляю, что GetValue существует в некоторой форме!) В C++, это было бы неплохо... Я мог бы просто используйте имя источника света, а затем добавьте информацию, которая мне нужна для доступа к этому значению, например:

SomeUnknownClassForNow::GetValue(light.GetName() + ".point.soft_light.atten");

Любая идея?

1 ответ

Решение

С помощью нашего клиента мне наконец удалось найти правильное решение для этого.

Во-первых, есть несколько прямых параметров, таких как "LightExponent". Но есть другие параметры, связанные с объектом, например свет, в других категориях, называемых шейдерами.

С источником света или, по крайней мере, точечным источником света, есть только один шейдер, называемый "soft_light". Доступ к нему можно получить:

light.GetShaders()[0]

Можно проверить его имя с помощью GetName(). Который в данном случае будет "LightName.point.soft_light".

Наконец, для доступа к параметру "soft_light.atten":

light.GetShaders()[0].GetParameterValue("atten")

Таким образом, в Softimage есть своего рода Иерархия в объектах, и все они разделены как шейдеры. Для более сложного объекта просто найдите подходящий шейдер и извлеките его параметр.

Другие вопросы по тегам