0

我在这里有点绝望......我正在尝试访问 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,它和API中的XSI::Application不一样。

那么,知道如何访问这个值吗?另外,如果我能在 C++ 中找到 Application.GetValue 的等价物(在脚本中,您可以看到 Application.SetValue... 所以我想 GetValue 以某种形式存在!),那就太好了...我可以简单地使用灯光的名称,然后添加我需要访问该值的信息,例如:

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

任何的想法 ?

4

1 回答 1

0

在我们一位客户的帮助下,我终于设法找到了一个合适的解决方案。

首先,有一些直接参数,例如“LightExponent”。但是还有其他与对象相关的参数,例如灯光,在其他称为着色器的类别中。

对于光源,或者至少是点光源,只有一个着色器,称为“soft_light”。可以通过以下方式访问它:

light.GetShaders()[0]

可以使用 GetName() 验证其名称。在这种情况下,它将是“LightName.point.soft_light”。

最后,访问“soft_light.atten”参数:

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

因此,在 Softimage 中,对象中有某种层次结构,所有这些都作为着色器分离。对于更复杂的对象,只需找到正确的着色器并提取其参数即可。

于 2012-08-10T17:53:02.137 回答