浏览代码

transform nurbs correctly, like polysets

David Rose 23 年之前
父节点
当前提交
242920ed62
共有 1 个文件被更改,包括 10 次插入2 次删除
  1. 10 2
      pandatool/src/mayaegg/mayaToEggConverter.cxx

+ 10 - 2
pandatool/src/mayaegg/mayaToEggConverter.cxx

@@ -1002,6 +1002,8 @@ make_nurbs_surface(const MDagPath &dag_path, MFnNurbsSurface &surface,
   }
   }
   egg_nurbs->set_v_knot(v_knots + 1, v_knot_array[v_knots - 1]);
   egg_nurbs->set_v_knot(v_knots + 1, v_knot_array[v_knots - 1]);
 
 
+  LMatrix4d vertex_frame_inv = egg_group->get_vertex_frame_inv();
+
   for (i = 0; i < egg_nurbs->get_num_cvs(); i++) {
   for (i = 0; i < egg_nurbs->get_num_cvs(); i++) {
     int ui = egg_nurbs->get_u_index(i);
     int ui = egg_nurbs->get_u_index(i);
     int vi = egg_nurbs->get_v_index(i);
     int vi = egg_nurbs->get_v_index(i);
@@ -1012,7 +1014,9 @@ make_nurbs_surface(const MDagPath &dag_path, MFnNurbsSurface &surface,
       status.perror("MPoint::get");
       status.perror("MPoint::get");
     } else {
     } else {
       EggVertex vert;
       EggVertex vert;
-      vert.set_pos(LPoint4d(v[0], v[1], v[2], v[3]));
+      LPoint4d p4d(v[0], v[1], v[2], v[3]);
+      p4d = p4d * vertex_frame_inv;
+      vert.set_pos(p4d);
       egg_nurbs->add_vertex(vpool->create_unique_vertex(vert));
       egg_nurbs->add_vertex(vpool->create_unique_vertex(vert));
     }
     }
   }
   }
@@ -1238,6 +1242,8 @@ make_nurbs_curve(const MDagPath &, const MFnNurbsCurve &curve,
   }
   }
   egg_curve->set_knot(knots + 1, knot_array[knots - 1]);
   egg_curve->set_knot(knots + 1, knot_array[knots - 1]);
 
 
+  LMatrix4d vertex_frame_inv = egg_group->get_vertex_frame_inv();
+
   for (i = 0; i < egg_curve->get_num_cvs(); i++) {
   for (i = 0; i < egg_curve->get_num_cvs(); i++) {
     double v[4];
     double v[4];
     MStatus status = cv_array[i].get(v);
     MStatus status = cv_array[i].get(v);
@@ -1245,7 +1251,9 @@ make_nurbs_curve(const MDagPath &, const MFnNurbsCurve &curve,
       status.perror("MPoint::get");
       status.perror("MPoint::get");
     } else {
     } else {
       EggVertex vert;
       EggVertex vert;
-      vert.set_pos(LPoint4d(v[0], v[1], v[2], v[3]));
+      LPoint4d p4d(v[0], v[1], v[2], v[3]);
+      p4d = p4d * vertex_frame_inv;
+      vert.set_pos(p4d);
       egg_curve->add_vertex(vpool->create_unique_vertex(vert));
       egg_curve->add_vertex(vpool->create_unique_vertex(vert));
     }
     }
   }
   }