【发布时间】:2014-06-23 19:15:54
【问题描述】:
我在 C++ 中为 3ds Max 2015 制作的修改器插件遇到了一些问题,我遇到了一个问题,我将 2 个以上的修改器(可以是任何类型的修改器,没关系)应用于对象然后我应用我自己的修改器( OpenSubdiv-MPS ),它将在我的代码的第一次通过时很好地运行,但是当我为对象更新任何内容时,第二次通过我的代码 3ds Max 给了我一个没有网格的对象有任何映射数据。这会导致我的插件崩溃,因为我需要它的映射数据。
这是 Max 的 Modifer 列表:
http://i.imgur.com/y2dOv6x.png(抱歉,还不能发图)
如果我只在它之前使用 1 个修饰符或不使用其他修饰符,一切都会正常工作。我也可以在它之后放置任意数量的东西。我注意到的另一个奇怪的事件是,如果我创建第一个修饰符,然后在它和对象之间添加 2+ 个修饰符,映射数据将正确返回。
我认为这与我之前遇到的有效性/渠道问题有关,并且能够通过自己设置渠道有效性来解决自己。但是,我再次无法通过此方法解决问题。
这是 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 不为我的网格提供映射数据的任何想法?
感谢您的时间。
【问题讨论】: