0

ここで少し必死です... Softimage のライトの 1 つのパラメータにアクセスしようとしています。

まず、これを行うと:

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」と呼ばれるシェーダーは 1 つだけです。次の方法でアクセスできます。

light.GetShaders()[0]

その名前は GetName() で確認できます。この場合、これは「LightName.point.soft_light」になります。

最後に、「soft_light.atten」パラメーターにアクセスするには:

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

つまり、Softimage では、オブジェクトに一種の階層があり、これらすべてがシェーダーとして分離されています。より複雑なオブジェクトの場合は、適切なシェーダーを見つけてそのパラメーターを抽出します。

于 2012-08-10T17:53:02.137 に答える