作者:手机用户2502902093 | 来源:互联网 | 2023-02-05 08:11
在3dmax67中有EditNormals这个Modifier可以编辑物体定点的法线,但是编辑之后的发现并没有保存在INode的ObjRef中,而是保存在DerivedObj的Modifier中
在3dmax6/7中有Edit Normals这个Modifier可以编辑物体定点的法线,但是编辑之后的发现并没有保存在INode的ObjRef中, 而是保存在DerivedObj的Modifier中。 通过如下代码可以得到这个Modifier
Object* pObj = pNode->GetObjectRef();
if ( pObj->SuperClassID() == GEN_DERIVOB_CLASS_ID || pObj->SuperClassID() == DERIVOB_CLASS_ID)
{
IDerivedObject* iObject = (IDerivedObject*)pObj;
for ( i = iObject->NumModifiers()-1; i >= 0; i--) //find the edit normals modifier
{
Modifier* tmpMod = iObject->GetModifier(i);
if ( tmpMod->ClassID() == Class_ID(0x4aa52ae3, 0x35ca1cde) )
{
pMod = (IEditNormalsMod*)tmpMod->GetInterface(EDIT_NORMALS_MOD_INTERFACE);
break;
}
}
}
如果Scene中只一个物体,并且这个物体是选中的,那么通过pMod可以获得正确的结果。但是如果没有物体或者多个物体被选中,通过pMod获得的数据是错误的。为什么会这样呢?
在maxsdk的文档中说到,如果要获得正确的EditNormals的值,需要Interface* i->SetCommandPanelTaskMode(TASK_MODE_MODIFY); 是否是这里的问题?是不是需要在遍历INode的时候更新CommandPanel的内容才能获得正确的Modifier? 如果是这样应该怎么做呢?
1 个解决方案
到这个论谈去看下
www.gameres.com
里面有