max sdk修改器的实现
July 1, 2008
最近给MAX开发插件,需要利用修改器修改模型的各种属性.包括添加新的纹理坐标\添加新的贴图和材质等等.
Max的Mesh是一个十分灵活的mesh类,采用面索引实现各种类型的Triangle组织.(各种Fan、strip等 )
比较特殊的是连纹理坐标也用一个TVFace进行了索引。下面代码给一个MESH添加了一层纹理坐标。
执行过后,经修改器修改过的模型,可以利用UVW Unwrap修改器查看新的纹理坐标。
特别要注意的是:TVFace * tfaces = mesh.mapFaces(2); 这里tfaces 中的顶点索引值一定要正确的初始化,因为Max会通过
这些值查找UV顶点(UVVert)。无效的值会导致其他修改器修改模型时、甚至是更新场景时出现错误。
TriObject *tobj = (TriObject*)os->obj->ConvertToType(t , triObjectClassID);
Mesh &mesh = tobj->GetMesh();
//int newmap = mesh.getNumMaps();
mesh.setNumMaps(2,TRUE);
mesh.setMapSupport(2,TRUE );
int uvnum = mesh.getNumTVerts();
mesh.setNumMapVerts(2,uvnum);
mesh.setNumTVFaces(mesh.getNumFaces());
TVFace * tfaces = mesh.mapFaces(2);
for(int faceid = 0; faceid < mesh.getNumFaces();faceid++)
{
tfaces[faceid].t[0] = mesh.faces[faceid].v[0];
tfaces[faceid].t[1] = mesh.faces[faceid].v[1];
tfaces[faceid].t[2] = mesh.faces[faceid].v[2];
}
UVVert *mv = mesh.mapVerts(2);
for (int i=0; i<uvnum; i++)
{
mv[i] = UVVert(1,1,0);
}
Posted in 





最新留言