В настоящее время я работаю над пользовательским плагином для Mayport. В данный момент я пытаюсь разобрать материалы из Maya в моих собственных материалах каркаса.
Я создал обратный вызов, который вызывается при добавлении шейдера Ламберта (см. Фрагмент кода ниже). Я чувствую, что этот обратный вызов вызывается еще до инициализации (просто) добавленного шейдера Ламберта, но это не относится к делу.
MCallbackId lambert_added_id = MDGMessage::addNodeAddedCallback(
LambertAddedCallback, // The callback function
"lambert", // The type of object that triggers the callback
m_material_parser.get(), // Client data
&status // Return status
);
Статус возврата MStatus::kSuccess
. Всякий раз, когда я добавляю шейдер Ламберта, этот обратный вызов срабатывает.
Хотя мой вопрос ... Как мне получить узел сетки, к которому добавлен этот материал? Я пытался получить соединения шейдера Ламберта, но их нет (см. Фрагмент кода ниже).
void LambertAddedCallback(MObject& node, void* client_data)
{
assert(node.apiType() == MFn::Type::kLambert);
MFnLambertShader fn_lambert(node);
MGlobal::displayInfo(node.apiTypeStr() + MString(" added!"));
{
MString str = fn_lambert.parentNamespace();
MGlobal::displayInfo((str + " = parentNameSpace").asChar());
}
{
MPlugArray plug_array;
fn_lambert.getConnections(plug_array);
auto num = plug_array.length();
MGlobal::displayInfo("Pluggies: ");
for (int i = 0; i < plug_array.length(); ++i)
{
MGlobal::displayInfo(plug_array[i].name().asChar());
}
}
}
Печатает обратный вызов:
= parentNamespace
Ничего другого не напечатано, что означает, что parentNamespace
и нет подключенных к нему штекеров ..? Я знаю, что когда вы добавляете шейдер Ламберта в сетку, он применяется как поверхностный шейдер в группе шейдеров, но я не могу найти это отношение в обратном вызове.
Итак, мой вопрос к вам: могу ли я получить сетку, с которой (и как) связан этот шейдер Ламберта?