Возникли некоторые проблемы с плагином-модификатором, который я делаю в C ++ для 3ds Max 2015, и столкнулся с проблемой, когда я применяю модификаторы 2+ (могут быть любые типы модификаторов, которые не имеют значения) к объекту, а затем применяю мой собственный модификатор (OpenSubdiv-MPS), который будет нормально проходить через мой код на первом проходе, но когда я обновляю что-либо для объекта, второй проход через мой код 3ds Max дает мне объект с мешем, который не имеет сопоставления данные. Это приводит к падению моего плагина, потому что мне нужны данные Mapping для него.
Вот список Модифер от Макса:
http://i.imgur.com/y2dOv6x.png (Извините, пока не могу опубликовать изображения)
Все работает нормально, если я использую только 1 модификатор до него или нет других модификаторов. Я также могу разместить столько, сколько я хочу после этого. Еще одно странное явление, которое я заметил, это то, что если я сначала создаю Модификатор 1, а затем добавляю Модификаторы 2+ между ним и объектом, данные сопоставления будут возвращены правильно.
Я предполагаю, что это связано с проблемами валидности / канала, с которыми я сталкивался ранее и смог решить сам, установив валидность канала самостоятельно. Тем не менее, я не смог решить проблему с помощью этого метода снова.
Вот мой код для функции ModifyObject, которую 3ds Max вызывает для моего Модификатора …
void OpenSubdiv_MPS::ModifyObject(TimeValue t, ModContext& mc, ObjectState* os, INode* node)
{
Interval valid = GetValidity(t);
valid &= os->obj->ChannelValidity(t,TOPO_CHAN_NUM);
valid &= os->obj->ChannelValidity(t,GEOM_CHAN_NUM);
if (os->obj->IsSubClassOf(polyObjectClassID))
{
PolyObject *polyOb = (PolyObject*)os->obj;
ModifyPolyObject(polyOb, t, mc);
}
// Convert to a tri mesh if possible
else if(os->obj->CanConvertToType(polyObjectClassID))
{
PolyObject *polyOb = (PolyObject *)os->obj->ConvertToType(t, polyObjectClassID);
// Now stuff this into the pipeline!
os->obj = polyOb;
ModifyPolyObject(polyOb, t, mc, 3);
}
os->obj->SetChannelValidity (GEOM_CHAN_NUM, valid);
os->obj->SetChannelValidity (TOPO_CHAN_NUM, valid);
os->obj->SetChannelValidity (VERT_COLOR_CHAN_NUM, valid);
os->obj->SetChannelValidity (TEXMAP_CHAN_NUM, valid );
os->obj->SetChannelValidity (SELECT_CHAN_NUM, valid);
os->obj->SetChannelValidity (MTL_CHAN_NUM, valid);
}
Любые идеи о том, что может быть причиной того, что 3ds Max не дает моей сетке отображать данные?
Спасибо за время.
Я понял это из-за ответов здесь …
http://forums.cgsociety.org/showthread.php?p=7816721#post7816721
Не нажимая на ссылку, мне просто нужно было убедиться, чтобы обновить ….
ChannelMask ChannelsUsed ();
ChannelMask ChannelsChanged ();
Первоначально для них были установлены значения по умолчанию TOPO_CHANNEL | GEOM_CHANNEL и GEOM_CHANNEL соответственно.
Обновление ChannelIsChanged () до GEOM_CHANNEL | TOPO_CHANNEL | TEXMAP_CHANNEL | VERTCOLOR_CHANNEL решил проблему.