使用修饰符插件遇到了一些问题我在c ++中为3ds Max 2015制作并且遇到了我应用2+修饰符的问题(可以是任何类型的修饰符,它没有'对一个对象然后我应用我自己的修饰符(OpenSubdiv-MPS),它将通过我的代码在第一遍中运行,但是当我更新对象的任何内容时,第二次通过我的代码3ds Max给出我是一个没有任何映射数据的网格物体。这导致我的插件崩溃,因为我需要它的映射数据。
这是Max的Modifer列表:
http://i.imgur.com/y2dOv6x.png(抱歉,无法发布图片)
如果我之前只使用1个修饰符或没有其他修饰符,那么一切正常。我也可以随心所欲地放置它。我注意到的另一个奇怪的事情是,如果我创建我的Modifier 1st,然后在它和对象之间添加2+ Modifiers,将正确返回Mapping数据。
我认为这与我之前遇到的有效性/频道问题有关,并且能够通过自己设置频道有效性来解决自己问题。但是,我再也无法通过此方法解决问题。
以下是3ds Max为我的修改器调用的ModifyObject函数的代码...
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给我的Mesh没有映射数据的任何想法?
感谢您的时间。
答案 0 :(得分:0)
由于这里的回复,我最终搞清楚了......
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解决了这个问题。