|
|
@@ -413,7 +413,7 @@ convert_char_chan(double start_frame, double end_frame, double frame_inc,
|
|
|
}
|
|
|
|
|
|
EggXfmSAnim *anim = _tree.get_egg_anim(node_desc);
|
|
|
- if (!anim->add_data(tgroup->get_transform())) {
|
|
|
+ if (!anim->add_data(tgroup->get_transform3d())) {
|
|
|
// *** log an error
|
|
|
}
|
|
|
delete tgroup;
|
|
|
@@ -528,21 +528,21 @@ process_model_node(MaxNodeDesc *node_desc) {
|
|
|
break;
|
|
|
|
|
|
case SHAPE_CLASS_ID:
|
|
|
- if (state.obj->ClassID() == EDITABLE_SURF_CLASS_ID) {
|
|
|
+ if (state.obj->ClassID() == EDITABLE_SURF_CLASS_ID) {
|
|
|
Logger::Log( MTEC, Logger::SAT_HIGH_LEVEL,
|
|
|
"Found a NURB object in the hierarchy!" );
|
|
|
- NURBSSet getSet;
|
|
|
- if (GetNURBSSet(state.obj, time, getSet, TRUE)) {
|
|
|
- NURBSObject *nObj = getSet.GetNURBSObject(0);
|
|
|
- if (nObj->GetType() == kNCVCurve) {
|
|
|
- //It's a CV Curve, process it
|
|
|
+ NURBSSet getSet;
|
|
|
+ if (GetNURBSSet(state.obj, time, getSet, TRUE)) {
|
|
|
+ NURBSObject *nObj = getSet.GetNURBSObject(0);
|
|
|
+ if (nObj->GetType() == kNCVCurve) {
|
|
|
+ //It's a CV Curve, process it
|
|
|
egg_group = _tree.get_egg_group(node_desc);
|
|
|
get_transform(max_node, egg_group);
|
|
|
- make_nurbs_curve((NURBSCVCurve *)nObj, string(max_node->GetName()),
|
|
|
- time, egg_group);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ make_nurbs_curve((NURBSCVCurve *)nObj, string(max_node->GetName()),
|
|
|
+ time, egg_group);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
case CAMERA_CLASS_ID:
|
|
|
@@ -781,7 +781,7 @@ get_transform(INode *max_node, EggGroup *egg_group) {
|
|
|
// node's parent
|
|
|
m4d = m4d * egg_group->get_node_frame_inv();
|
|
|
if (!m4d.almost_equal(LMatrix4d::ident_mat(), 0.0001)) {
|
|
|
- egg_group->add_matrix(m4d);
|
|
|
+ egg_group->add_matrix4(m4d);
|
|
|
Logger::Log( MNEG_GEOMETRY_GENERATION, Logger::SAT_DEBUG_SPAM_LEVEL,
|
|
|
"Non-identity matrix applied to node!" );
|
|
|
} else {
|
|
|
@@ -877,7 +877,7 @@ get_joint_transform(INode *max_node, EggGroup *egg_group) {
|
|
|
// node's parent
|
|
|
m4d = m4d * egg_group->get_node_frame_inv();
|
|
|
if (!m4d.almost_equal(LMatrix4d::ident_mat(), 0.0001)) {
|
|
|
- egg_group->add_matrix(m4d);
|
|
|
+ egg_group->add_matrix4(m4d);
|
|
|
Logger::Log( MNEG_GEOMETRY_GENERATION, Logger::SAT_DEBUG_SPAM_LEVEL,
|
|
|
"Non-identity matrix applied to node!" );
|
|
|
} else {
|
|
|
@@ -953,7 +953,7 @@ if (parent_node) {
|
|
|
m4d = m4d * pi_m4d;
|
|
|
}
|
|
|
if (!m4d.almost_equal(LMatrix4d::ident_mat(), 0.0001)) {
|
|
|
- egg_group->add_matrix(m4d);
|
|
|
+ egg_group->add_matrix4(m4d);
|
|
|
Logger::Log( MNEG_GEOMETRY_GENERATION, Logger::SAT_DEBUG_SPAM_LEVEL,
|
|
|
"Non-identity matrix applied to node!" );
|
|
|
} else {
|
|
|
@@ -1600,14 +1600,14 @@ make_polyset(INode *max_node, Mesh *mesh,
|
|
|
|
|
|
LVector3d realNorm = ((points[1] - points[0]).cross(
|
|
|
points[2] - points[0]));
|
|
|
- Point3 maxNormTemp = mesh->getFaceNormal(iFace);
|
|
|
- LVector3d maxNorm = (LVector3d(maxNormTemp.x, maxNormTemp.y, maxNormTemp.z) *
|
|
|
- vertex_frame);
|
|
|
-
|
|
|
- if (realNorm.dot(maxNorm) < 0.0) {
|
|
|
- egg_poly->set_vertex(0, verts[2]);
|
|
|
- egg_poly->set_vertex(2, verts[0]);
|
|
|
- }
|
|
|
+ Point3 maxNormTemp = mesh->getFaceNormal(iFace);
|
|
|
+ LVector3d maxNorm = (LVector3d(maxNormTemp.x, maxNormTemp.y, maxNormTemp.z) *
|
|
|
+ vertex_frame);
|
|
|
+
|
|
|
+ if (realNorm.dot(maxNorm) < 0.0) {
|
|
|
+ egg_poly->set_vertex(0, verts[2]);
|
|
|
+ egg_poly->set_vertex(2, verts[0]);
|
|
|
+ }
|
|
|
|
|
|
// *** More shader stuff to ignore
|
|
|
/*
|
|
|
@@ -1745,31 +1745,31 @@ get_vertex_weights(INode *max_node, EggVertexPool *vpool) {
|
|
|
EggVertexPool::iterator vi;
|
|
|
|
|
|
if (mod) {
|
|
|
- // create a physique export interface
|
|
|
- IPhysiqueExport *pPhysiqueExport = (IPhysiqueExport *)mod->GetInterface(I_PHYINTERFACE);
|
|
|
- if (pPhysiqueExport) {
|
|
|
- // create a context export interface
|
|
|
- IPhyContextExport *pContextExport =
|
|
|
- (IPhyContextExport *)pPhysiqueExport->GetContextInterface(max_node);
|
|
|
- if (pContextExport) {
|
|
|
- // set the flags in the context export interface
|
|
|
- pContextExport->ConvertToRigid(TRUE);
|
|
|
- pContextExport->AllowBlending(TRUE);
|
|
|
+ // create a physique export interface
|
|
|
+ IPhysiqueExport *pPhysiqueExport = (IPhysiqueExport *)mod->GetInterface(I_PHYINTERFACE);
|
|
|
+ if (pPhysiqueExport) {
|
|
|
+ // create a context export interface
|
|
|
+ IPhyContextExport *pContextExport =
|
|
|
+ (IPhyContextExport *)pPhysiqueExport->GetContextInterface(max_node);
|
|
|
+ if (pContextExport) {
|
|
|
+ // set the flags in the context export interface
|
|
|
+ pContextExport->ConvertToRigid(TRUE);
|
|
|
+ pContextExport->AllowBlending(TRUE);
|
|
|
|
|
|
for (vi = vpool->begin(); vi != vpool->end(); ++vi) {
|
|
|
EggVertex *vert = (*vi);
|
|
|
int max_vi = vert->get_external_index();
|
|
|
-
|
|
|
- // get the vertex export interface
|
|
|
- IPhyVertexExport *pVertexExport =
|
|
|
- (IPhyVertexExport *)pContextExport->GetVertexInterface(max_vi);
|
|
|
- if (pVertexExport) {
|
|
|
- int vertexType = pVertexExport->GetVertexType();
|
|
|
-
|
|
|
- // handle the specific vertex type
|
|
|
- if(vertexType == RIGID_TYPE) {
|
|
|
- // typecast to rigid vertex
|
|
|
- IPhyRigidVertex *pTypeVertex = (IPhyRigidVertex *)pVertexExport;
|
|
|
+
|
|
|
+ // get the vertex export interface
|
|
|
+ IPhyVertexExport *pVertexExport =
|
|
|
+ (IPhyVertexExport *)pContextExport->GetVertexInterface(max_vi);
|
|
|
+ if (pVertexExport) {
|
|
|
+ int vertexType = pVertexExport->GetVertexType();
|
|
|
+
|
|
|
+ // handle the specific vertex type
|
|
|
+ if(vertexType == RIGID_TYPE) {
|
|
|
+ // typecast to rigid vertex
|
|
|
+ IPhyRigidVertex *pTypeVertex = (IPhyRigidVertex *)pVertexExport;
|
|
|
INode *bone_node = pTypeVertex->GetNode();
|
|
|
MaxNodeDesc *joint_node_desc = _tree.find_joint(bone_node);
|
|
|
if (joint_node_desc){
|
|
|
@@ -1780,10 +1780,10 @@ get_vertex_weights(INode *max_node, EggVertexPool *vpool) {
|
|
|
Logger::Log( MTEC, Logger::SAT_MEDIUM_LEVEL, bone_node->GetName() );
|
|
|
}
|
|
|
}
|
|
|
- else if(vertexType == RIGID_BLENDED_TYPE) {
|
|
|
- // typecast to blended vertex
|
|
|
- IPhyBlendedRigidVertex *pTypeVertex = (IPhyBlendedRigidVertex *)pVertexExport;
|
|
|
-
|
|
|
+ else if(vertexType == RIGID_BLENDED_TYPE) {
|
|
|
+ // typecast to blended vertex
|
|
|
+ IPhyBlendedRigidVertex *pTypeVertex = (IPhyBlendedRigidVertex *)pVertexExport;
|
|
|
+
|
|
|
for (int ji = 0; ji < pTypeVertex->GetNumberNodes(); ++ji) {
|
|
|
float weight = pTypeVertex->GetWeight(ji);
|
|
|
if (weight > 0.0f) {
|
|
|
@@ -1804,11 +1804,11 @@ get_vertex_weights(INode *max_node, EggVertexPool *vpool) {
|
|
|
}
|
|
|
}
|
|
|
//Release the context interface
|
|
|
- pPhysiqueExport->ReleaseContextInterface(pContextExport);
|
|
|
- }
|
|
|
- //Release the physique export interface
|
|
|
- mod->ReleaseInterface(I_PHYINTERFACE, pPhysiqueExport);
|
|
|
- }
|
|
|
+ pPhysiqueExport->ReleaseContextInterface(pContextExport);
|
|
|
+ }
|
|
|
+ //Release the physique export interface
|
|
|
+ mod->ReleaseInterface(I_PHYINTERFACE, pPhysiqueExport);
|
|
|
+ }
|
|
|
}
|
|
|
else {
|
|
|
//No physique, try to find a skin
|