max sdk修改器的实现

Date 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);
  }

Hits for this post:1705.

Leave a Reply

You must be logged in to post a comment.