3ds Max C++;修改器在2+;修改器位于修改器列表中 有一个修改插件的麻烦,我在3DS MAX 2015中用C++制作,我遇到一个问题,我在一个对象上加上2个修饰符(可以是任何类型的修饰符,这并不重要),然后我应用我自己的修饰符(OpenSudiV.MPS),它将在第一遍通过我的代码,但是,当我更新对象的任何内容时,第二次通过代码3ds Max时,会得到一个对象,其中包含一个没有任何贴图数据的网格。这导致我的插件崩溃,因为我需要它的映射数据
以下是Max中的修改器列表: (很抱歉,尚未发布图像) 如果我在它之前只使用一个修改器或者没有其他修改器,那么一切都很好。我也可以在它之后放置任意数量的物品。我注意到的另一个奇怪现象是,如果我首先创建修改器,然后在它和对象之间添加2+个修改器,映射数据将正确返回 我假设这与我以前遇到的有效性/通道问题有关,并且能够通过自己设置通道有效性来解决。但是,我无法再次用这种方法解决问题 以下是3ds Max为我的修改器调用的ModifyObject函数的代码3ds Max C++;修改器在2+;修改器位于修改器列表中 有一个修改插件的麻烦,我在3DS MAX 2015中用C++制作,我遇到一个问题,我在一个对象上加上2个修饰符(可以是任何类型的修饰符,这并不重要),然后我应用我自己的修饰符(OpenSudiV.MPS),它将在第一遍通过我的代码,但是,当我更新对象的任何内容时,第二次通过代码3ds Max时,会得到一个对象,其中包含一个没有任何贴图数据的网格。这导致我的插件崩溃,因为我需要它的映射数据,c++,3dsmax,C++,3dsmax,以下是Max中的修改器列表: (很抱歉,尚未发布图像) 如果我在它之前只使用一个修改器或者没有其他修改器,那么一切都很好。我也可以在它之后放置任意数量的物品。我注意到的另一个奇怪现象是,如果我首先创建修改器,然后在它和对象之间添加2+个修改器,映射数据将正确返回 我假设这与我以前遇到的有效性/通道问题有关,并且能够通过自己设置通道有效性来解决。但是,我无法再次用这种方法解决问题 以下是3ds Max为我的修改器调用的ModifyObject函数的代码 void OpenSubdiv_MPS::M
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没有为我的网格提供贴图数据的想法
谢谢你的时间。由于这里的回复,我最终弄明白了 没有点击链接,我只需要确保更新 ChannelMask ChannelsUsed(); ChannelMask ChannelsChanged() 最初,它们分别设置为其默认值:地形通道、几何通道和几何通道 将ChannelIsChanged()更新为GEOM|u CHANNEL | TOPO|u CHANNEL | TEXMAP|u CHANNEL | VERTCOLOR|u CHANNEL解决了该问题