|
@@ -943,14 +943,16 @@ void ColladaUtils::exportColladaHeader(TiXmlElement* rootNode)
|
|
|
|
|
|
TiXmlElement* authorNode = new TiXmlElement("author");
|
|
TiXmlElement* authorNode = new TiXmlElement("author");
|
|
contributorNode->LinkEndChild(authorNode);
|
|
contributorNode->LinkEndChild(authorNode);
|
|
|
|
+ TiXmlText* authorNodeText = new TiXmlText("Torque3D MIT User");
|
|
|
|
+ authorNode->LinkEndChild(authorNodeText);
|
|
|
|
|
|
TiXmlElement* authoringToolNode = new TiXmlElement("authoring_tool");
|
|
TiXmlElement* authoringToolNode = new TiXmlElement("authoring_tool");
|
|
contributorNode->LinkEndChild(authoringToolNode);
|
|
contributorNode->LinkEndChild(authoringToolNode);
|
|
TiXmlText* authorText = new TiXmlText(avar("%s %s Object Exporter", getEngineProductString(), getVersionString()));
|
|
TiXmlText* authorText = new TiXmlText(avar("%s %s Object Exporter", getEngineProductString(), getVersionString()));
|
|
authoringToolNode->LinkEndChild(authorText);
|
|
authoringToolNode->LinkEndChild(authorText);
|
|
|
|
|
|
- TiXmlElement* commentsNode = new TiXmlElement("comments");
|
|
|
|
- contributorNode->LinkEndChild(commentsNode);
|
|
|
|
|
|
+ //TiXmlElement* commentsNode = new TiXmlElement("comments");
|
|
|
|
+ //contributorNode->LinkEndChild(commentsNode);
|
|
|
|
|
|
// Get the current time
|
|
// Get the current time
|
|
Platform::LocalTime lt;
|
|
Platform::LocalTime lt;
|
|
@@ -969,22 +971,23 @@ void ColladaUtils::exportColladaHeader(TiXmlElement* rootNode)
|
|
TiXmlText* modifiedText = new TiXmlText(avar("%s", localTime.c_str()));
|
|
TiXmlText* modifiedText = new TiXmlText(avar("%s", localTime.c_str()));
|
|
modifiedNode->LinkEndChild(modifiedText);
|
|
modifiedNode->LinkEndChild(modifiedText);
|
|
|
|
|
|
- TiXmlElement* revisionNode = new TiXmlElement("revision");
|
|
|
|
- assetNode->LinkEndChild(revisionNode);
|
|
|
|
|
|
+ //TiXmlElement* revisionNode = new TiXmlElement("revision");
|
|
|
|
+ //assetNode->LinkEndChild(revisionNode);
|
|
|
|
|
|
- TiXmlElement* titleNode = new TiXmlElement("title");
|
|
|
|
- assetNode->LinkEndChild(titleNode);
|
|
|
|
|
|
+ //TiXmlElement* titleNode = new TiXmlElement("title");
|
|
|
|
+ //assetNode->LinkEndChild(titleNode);
|
|
|
|
|
|
- TiXmlElement* subjectNode = new TiXmlElement("subject");
|
|
|
|
- assetNode->LinkEndChild(subjectNode);
|
|
|
|
|
|
+ //TiXmlElement* subjectNode = new TiXmlElement("subject");
|
|
|
|
+ //assetNode->LinkEndChild(subjectNode);
|
|
|
|
|
|
- TiXmlElement* keywordsNode = new TiXmlElement("keywords");
|
|
|
|
- assetNode->LinkEndChild(keywordsNode);
|
|
|
|
|
|
+ //TiXmlElement* keywordsNode = new TiXmlElement("keywords");
|
|
|
|
+ //assetNode->LinkEndChild(keywordsNode);
|
|
|
|
|
|
// Torque uses Z_UP with 1 unit equal to 1 meter by default
|
|
// Torque uses Z_UP with 1 unit equal to 1 meter by default
|
|
TiXmlElement* unitNode = new TiXmlElement("unit");
|
|
TiXmlElement* unitNode = new TiXmlElement("unit");
|
|
assetNode->LinkEndChild(unitNode);
|
|
assetNode->LinkEndChild(unitNode);
|
|
- unitNode->SetAttribute("meter", "1.000000");
|
|
|
|
|
|
+ unitNode->SetAttribute("name", "meter");
|
|
|
|
+ unitNode->SetAttribute("meter", "1");
|
|
|
|
|
|
TiXmlElement* axisNode = new TiXmlElement("up_axis");
|
|
TiXmlElement* axisNode = new TiXmlElement("up_axis");
|
|
assetNode->LinkEndChild(axisNode);
|
|
assetNode->LinkEndChild(axisNode);
|
|
@@ -1010,8 +1013,8 @@ void ColladaUtils::exportColladaMaterials(TiXmlElement* rootNode, const Optimize
|
|
|
|
|
|
String diffuseMap;
|
|
String diffuseMap;
|
|
|
|
|
|
- if (mat->getName() && mat->getName()[0])
|
|
|
|
- matNames.last() = String(mat->getName());
|
|
|
|
|
|
+ if (mat->getName() && mat->getName()[0])
|
|
|
|
+ matNames.last() = mat->mMapTo;
|
|
|
|
|
|
// Handle an auto-generated "Default Material" specially
|
|
// Handle an auto-generated "Default Material" specially
|
|
if (mat->isAutoGenerated())
|
|
if (mat->isAutoGenerated())
|
|
@@ -1042,38 +1045,17 @@ void ColladaUtils::exportColladaMaterials(TiXmlElement* rootNode, const Optimize
|
|
|
|
|
|
TiXmlElement* imageNode = new TiXmlElement("image");
|
|
TiXmlElement* imageNode = new TiXmlElement("image");
|
|
imgLibNode->LinkEndChild(imageNode);
|
|
imgLibNode->LinkEndChild(imageNode);
|
|
- imageNode->SetAttribute("id", avar("%s-Diffuse", matNames.last().c_str()));
|
|
|
|
- imageNode->SetAttribute("name", avar("%s-Diffuse", matNames.last().c_str()));
|
|
|
|
|
|
+ imageNode->SetAttribute("id", avar("%s", matNames.last().c_str()));
|
|
|
|
+ imageNode->SetAttribute("name", avar("%s", matNames.last().c_str()));
|
|
|
|
|
|
TiXmlElement* initNode = new TiXmlElement("init_from");
|
|
TiXmlElement* initNode = new TiXmlElement("init_from");
|
|
imageNode->LinkEndChild(initNode);
|
|
imageNode->LinkEndChild(initNode);
|
|
- TiXmlText* initText = new TiXmlText(avar("file://%s", diffuseMap.c_str()));
|
|
|
|
|
|
+ TiXmlText* initText = new TiXmlText(avar("file://%s", diffuseMap.c_str())); // "the file://" is needed to load the texture in some old apps (ex: 3ds Max 2009)
|
|
initNode->LinkEndChild(initText);
|
|
initNode->LinkEndChild(initText);
|
|
- }
|
|
|
|
-
|
|
|
|
- // Next the material library
|
|
|
|
- TiXmlElement* matLibNode = new TiXmlElement("library_materials");
|
|
|
|
- rootNode->LinkEndChild(matLibNode);
|
|
|
|
-
|
|
|
|
- for (U32 i = 0; i < mesh.mMaterialList.size(); i++)
|
|
|
|
- {
|
|
|
|
- BaseMatInstance* baseInst = mesh.mMaterialList[i];
|
|
|
|
-
|
|
|
|
- Material* mat = dynamic_cast<Material*>(baseInst->getMaterial());
|
|
|
|
- if (!mat)
|
|
|
|
- continue;
|
|
|
|
|
|
|
|
- TiXmlElement* materialNode = new TiXmlElement("material");
|
|
|
|
- matLibNode->LinkEndChild(materialNode);
|
|
|
|
- materialNode->SetAttribute("id", matNames[i].c_str());
|
|
|
|
- materialNode->SetAttribute("name", matNames[i].c_str());
|
|
|
|
-
|
|
|
|
- TiXmlElement* instEffectNode = new TiXmlElement("instance_effect");
|
|
|
|
- materialNode->LinkEndChild(instEffectNode);
|
|
|
|
- instEffectNode->SetAttribute("url", avar("#%s-fx", matNames[i].c_str()));
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- // Finally the effects library
|
|
|
|
|
|
+ // Next the effects library
|
|
TiXmlElement* effectLibNode = new TiXmlElement("library_effects");
|
|
TiXmlElement* effectLibNode = new TiXmlElement("library_effects");
|
|
rootNode->LinkEndChild(effectLibNode);
|
|
rootNode->LinkEndChild(effectLibNode);
|
|
|
|
|
|
@@ -1087,30 +1069,86 @@ void ColladaUtils::exportColladaMaterials(TiXmlElement* rootNode, const Optimize
|
|
|
|
|
|
TiXmlElement* effectNode = new TiXmlElement("effect");
|
|
TiXmlElement* effectNode = new TiXmlElement("effect");
|
|
effectLibNode->LinkEndChild(effectNode);
|
|
effectLibNode->LinkEndChild(effectNode);
|
|
- effectNode->SetAttribute("id", avar("%s-fx", matNames[i].c_str()));
|
|
|
|
- effectNode->SetAttribute("name", avar("%s-fx", matNames[i].c_str()));
|
|
|
|
|
|
+ effectNode->SetAttribute("id", avar("%s-effect", matNames[i].c_str()));
|
|
|
|
+ effectNode->SetAttribute("name", avar("%s-effect", matNames[i].c_str()));
|
|
|
|
|
|
TiXmlElement* profileNode = new TiXmlElement("profile_COMMON");
|
|
TiXmlElement* profileNode = new TiXmlElement("profile_COMMON");
|
|
effectNode->LinkEndChild(profileNode);
|
|
effectNode->LinkEndChild(profileNode);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* newParamNode = new TiXmlElement("newparam");
|
|
|
|
+ profileNode->LinkEndChild(newParamNode);
|
|
|
|
+ newParamNode->SetAttribute("sid", avar("%s-surface", matNames[i].c_str()));
|
|
|
|
+
|
|
|
|
+ TiXmlElement* surfaceNode = new TiXmlElement("surface");
|
|
|
|
+ newParamNode->LinkEndChild(surfaceNode);
|
|
|
|
+ surfaceNode->SetAttribute("type", "2D");
|
|
|
|
+
|
|
|
|
+ TiXmlElement* initNode2 = new TiXmlElement("init_from");
|
|
|
|
+ surfaceNode->LinkEndChild(initNode2);
|
|
|
|
+ TiXmlText* init2Text = new TiXmlText(avar("%s", matNames[i].c_str()));
|
|
|
|
+ initNode2->LinkEndChild(init2Text);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* formatNode = new TiXmlElement("format");
|
|
|
|
+ surfaceNode->LinkEndChild(formatNode);
|
|
|
|
+ TiXmlText* formatText = new TiXmlText("A8R8G8B8");
|
|
|
|
+ formatNode->LinkEndChild(formatText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* newParam2Node = new TiXmlElement("newparam");
|
|
|
|
+ profileNode->LinkEndChild(newParam2Node);
|
|
|
|
+ newParam2Node->SetAttribute("sid", avar("%s-sampler", matNames[i].c_str()));
|
|
|
|
+
|
|
|
|
+ TiXmlElement* sampler2DNode = new TiXmlElement("sampler2D");
|
|
|
|
+ newParam2Node->LinkEndChild(sampler2DNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* sourceSampler2DNode = new TiXmlElement("source");
|
|
|
|
+ sampler2DNode->LinkEndChild(sourceSampler2DNode);
|
|
|
|
+ TiXmlText* sourceSampler2DText = new TiXmlText(avar("%s-surface", matNames[i].c_str()));
|
|
|
|
+ sourceSampler2DNode->LinkEndChild(sourceSampler2DText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
|
|
TiXmlElement* techniqueNode = new TiXmlElement("technique");
|
|
TiXmlElement* techniqueNode = new TiXmlElement("technique");
|
|
profileNode->LinkEndChild(techniqueNode);
|
|
profileNode->LinkEndChild(techniqueNode);
|
|
- techniqueNode->SetAttribute("sid", "standard");
|
|
|
|
-
|
|
|
|
- TiXmlElement* phongNode = new TiXmlElement("phong");
|
|
|
|
- techniqueNode->LinkEndChild(phongNode);
|
|
|
|
-
|
|
|
|
- TiXmlElement* diffuseNode = new TiXmlElement("diffuse");
|
|
|
|
- phongNode->LinkEndChild(diffuseNode);
|
|
|
|
-
|
|
|
|
- TiXmlElement* textureNode = new TiXmlElement("texture");
|
|
|
|
- diffuseNode->LinkEndChild(textureNode);
|
|
|
|
- textureNode->SetAttribute("texture", avar("%s-Diffuse", matNames[i].c_str()));
|
|
|
|
- textureNode->SetAttribute("texcoord", "CHANNEL0");
|
|
|
|
-
|
|
|
|
- // Extra info useful for getting the texture to show up correctly in some apps
|
|
|
|
|
|
+ techniqueNode->SetAttribute("sid", "common");
|
|
|
|
+
|
|
|
|
+ TiXmlElement* blinnNode = new TiXmlElement("blinn");
|
|
|
|
+ techniqueNode->LinkEndChild(blinnNode);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* emissionNode = new TiXmlElement("emission");
|
|
|
|
+ blinnNode->LinkEndChild(emissionNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* colorEmissionNode = new TiXmlElement("color");
|
|
|
|
+ emissionNode->LinkEndChild(colorEmissionNode);
|
|
|
|
+ colorEmissionNode->SetAttribute("sid", "emission");
|
|
|
|
+
|
|
|
|
+ TiXmlText* colorEmissionNodeText = new TiXmlText("0.0 0.0 0.0 1.0");
|
|
|
|
+ colorEmissionNode->LinkEndChild(colorEmissionNodeText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* ambientNode = new TiXmlElement("ambient");
|
|
|
|
+ blinnNode->LinkEndChild(ambientNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* colorAmbientNode = new TiXmlElement("color");
|
|
|
|
+ ambientNode->LinkEndChild(colorAmbientNode);
|
|
|
|
+ colorAmbientNode->SetAttribute("sid", "ambient");
|
|
|
|
+
|
|
|
|
+ TiXmlText* colorAmbientNodeText = new TiXmlText("0.0 0.0 0.0 1.0");
|
|
|
|
+ colorAmbientNode->LinkEndChild(colorAmbientNodeText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* diffuseNode = new TiXmlElement("diffuse");
|
|
|
|
+ blinnNode->LinkEndChild(diffuseNode);
|
|
|
|
+ TiXmlElement* textureDiffuseNode = new TiXmlElement("texture");
|
|
|
|
+ diffuseNode->LinkEndChild(textureDiffuseNode);
|
|
|
|
+ textureDiffuseNode->SetAttribute("texture", avar("%s-sampler", matNames[i].c_str()));
|
|
|
|
+ textureDiffuseNode->SetAttribute("texcoord", "UVMap");
|
|
|
|
+
|
|
|
|
+ // Extra info useful for getting the texture to show up correctly in MAYA and 3DS Max
|
|
TiXmlElement* extraNode = new TiXmlElement("extra");
|
|
TiXmlElement* extraNode = new TiXmlElement("extra");
|
|
- textureNode->LinkEndChild(extraNode);
|
|
|
|
|
|
+ textureDiffuseNode->LinkEndChild(extraNode);
|
|
|
|
|
|
TiXmlElement* extraTechNode = new TiXmlElement("technique");
|
|
TiXmlElement* extraTechNode = new TiXmlElement("technique");
|
|
extraNode->LinkEndChild(extraTechNode);
|
|
extraNode->LinkEndChild(extraTechNode);
|
|
@@ -1135,7 +1173,108 @@ void ColladaUtils::exportColladaMaterials(TiXmlElement* rootNode, const Optimize
|
|
|
|
|
|
TiXmlText* extraBlendText = new TiXmlText("ADD");
|
|
TiXmlText* extraBlendText = new TiXmlText("ADD");
|
|
extraBlendNode->LinkEndChild(extraBlendText);
|
|
extraBlendNode->LinkEndChild(extraBlendText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* specularNode = new TiXmlElement("specular");
|
|
|
|
+ blinnNode->LinkEndChild(specularNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* colorSpecularNode = new TiXmlElement("color");
|
|
|
|
+ specularNode->LinkEndChild(colorSpecularNode);
|
|
|
|
+ colorSpecularNode->SetAttribute("sid", "specular");
|
|
|
|
+
|
|
|
|
+ TiXmlText* colorSpecularNodeText = new TiXmlText("0.5 0.5 0.5 1.0");
|
|
|
|
+ colorSpecularNode->LinkEndChild(colorSpecularNodeText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* shininessNode = new TiXmlElement("shininess");
|
|
|
|
+ blinnNode->LinkEndChild(shininessNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* colorShininessNode = new TiXmlElement("float");
|
|
|
|
+ shininessNode->LinkEndChild(colorShininessNode);
|
|
|
|
+ colorShininessNode->SetAttribute("sid", "shininess");
|
|
|
|
+
|
|
|
|
+ TiXmlText* colorShininessNodeText = new TiXmlText("1.0");
|
|
|
|
+ colorShininessNode->LinkEndChild(colorShininessNodeText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* reflectiveNode = new TiXmlElement("reflective");
|
|
|
|
+ blinnNode->LinkEndChild(reflectiveNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* colorReflectiveNode = new TiXmlElement("color");
|
|
|
|
+ reflectiveNode->LinkEndChild(colorReflectiveNode);
|
|
|
|
+ colorReflectiveNode->SetAttribute("sid", "reflective");
|
|
|
|
+
|
|
|
|
+ TiXmlText* colorReflectiveNodeText = new TiXmlText("0.0 0.0 0.0 1.0");
|
|
|
|
+ colorReflectiveNode->LinkEndChild(colorReflectiveNodeText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* reflectivityNode = new TiXmlElement("reflectivity");
|
|
|
|
+ blinnNode->LinkEndChild(reflectivityNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* floatReflectivityNode = new TiXmlElement("float");
|
|
|
|
+ reflectivityNode->LinkEndChild(floatReflectivityNode);
|
|
|
|
+ floatReflectivityNode->SetAttribute("sid", "reflectivity");
|
|
|
|
+
|
|
|
|
+ TiXmlText* floatReflectivityText = new TiXmlText("0.5");
|
|
|
|
+ floatReflectivityNode->LinkEndChild(floatReflectivityText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* transparentNode = new TiXmlElement("transparent");
|
|
|
|
+ blinnNode->LinkEndChild(transparentNode);
|
|
|
|
+ transparentNode->SetAttribute("opaque", "RGB_ZERO");
|
|
|
|
+
|
|
|
|
+ TiXmlElement* colorTransparentNode = new TiXmlElement("color");
|
|
|
|
+ transparentNode->LinkEndChild(colorTransparentNode);
|
|
|
|
+ colorTransparentNode->SetAttribute("sid", "transparent");
|
|
|
|
+
|
|
|
|
+ TiXmlText* colorTransparentNodeText = new TiXmlText("0.0 0.0 0.0 1.0");
|
|
|
|
+ colorTransparentNode->LinkEndChild(colorTransparentNodeText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* transparencyNode = new TiXmlElement("transparency");
|
|
|
|
+ blinnNode->LinkEndChild(transparencyNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* floatTransparencyNode = new TiXmlElement("float");
|
|
|
|
+ transparencyNode->LinkEndChild(floatTransparencyNode);
|
|
|
|
+ floatTransparencyNode->SetAttribute("sid", "transparency");
|
|
|
|
+
|
|
|
|
+ TiXmlText* floatTransparencyText = new TiXmlText("0.0");
|
|
|
|
+ floatTransparencyNode->LinkEndChild(floatTransparencyText);
|
|
|
|
+
|
|
|
|
+ // ---------------------------
|
|
|
|
+ TiXmlElement* refractionNode = new TiXmlElement("index_of_refraction");
|
|
|
|
+ blinnNode->LinkEndChild(refractionNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* colorRefractionNode = new TiXmlElement("float");
|
|
|
|
+ refractionNode->LinkEndChild(colorRefractionNode);
|
|
|
|
+ colorRefractionNode->SetAttribute("sid", "index_of_refraction");
|
|
|
|
+
|
|
|
|
+ TiXmlText* colorRefractionNodeText = new TiXmlText("1");
|
|
|
|
+ colorRefractionNode->LinkEndChild(colorRefractionNodeText);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // Finally the material library
|
|
|
|
+ TiXmlElement* matLibNode = new TiXmlElement("library_materials");
|
|
|
|
+ rootNode->LinkEndChild(matLibNode);
|
|
|
|
+
|
|
|
|
+ for (U32 i = 0; i < mesh.mMaterialList.size(); i++)
|
|
|
|
+ {
|
|
|
|
+ BaseMatInstance* baseInst = mesh.mMaterialList[i];
|
|
|
|
+
|
|
|
|
+ Material* mat = dynamic_cast<Material*>(baseInst->getMaterial());
|
|
|
|
+ if (!mat)
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ TiXmlElement* materialNode = new TiXmlElement("material");
|
|
|
|
+ matLibNode->LinkEndChild(materialNode);
|
|
|
|
+ materialNode->SetAttribute("id", avar("%s-material", matNames[i].c_str()));
|
|
|
|
+ materialNode->SetAttribute("name", matNames[i].c_str());
|
|
|
|
+
|
|
|
|
+ TiXmlElement* instEffectNode = new TiXmlElement("instance_effect");
|
|
|
|
+ materialNode->LinkEndChild(instEffectNode);
|
|
|
|
+ instEffectNode->SetAttribute("url", avar("#%s-effect", matNames[i].c_str()));
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
void ColladaUtils::exportColladaTriangles(TiXmlElement* meshNode, const OptimizedPolyList& mesh, const String& meshName, const Vector<String>& matNames)
|
|
void ColladaUtils::exportColladaTriangles(TiXmlElement* meshNode, const OptimizedPolyList& mesh, const String& meshName, const Vector<String>& matNames)
|
|
@@ -1172,27 +1311,27 @@ void ColladaUtils::exportColladaTriangles(TiXmlElement* meshNode, const Optimize
|
|
|
|
|
|
TiXmlElement* trianglesNode = new TiXmlElement("triangles");
|
|
TiXmlElement* trianglesNode = new TiXmlElement("triangles");
|
|
meshNode->LinkEndChild(trianglesNode);
|
|
meshNode->LinkEndChild(trianglesNode);
|
|
- trianglesNode->SetAttribute("material", ( i > -1 ) ? matNames[i].c_str() : "" );
|
|
|
|
|
|
+ trianglesNode->SetAttribute("material", ( i > -1 ) ? avar("%s-material", matNames[i].c_str()) : "" );
|
|
trianglesNode->SetAttribute("count", avar("%d", triangleCount));
|
|
trianglesNode->SetAttribute("count", avar("%d", triangleCount));
|
|
|
|
|
|
TiXmlElement* trianglesVertInputNode = new TiXmlElement("input");
|
|
TiXmlElement* trianglesVertInputNode = new TiXmlElement("input");
|
|
trianglesNode->LinkEndChild(trianglesVertInputNode);
|
|
trianglesNode->LinkEndChild(trianglesVertInputNode);
|
|
trianglesVertInputNode->SetAttribute("semantic", "VERTEX");
|
|
trianglesVertInputNode->SetAttribute("semantic", "VERTEX");
|
|
|
|
+ trianglesVertInputNode->SetAttribute("source", avar("#%s-mesh-vertices", meshName.c_str()));
|
|
trianglesVertInputNode->SetAttribute("offset", "0");
|
|
trianglesVertInputNode->SetAttribute("offset", "0");
|
|
- trianglesVertInputNode->SetAttribute("source", avar("#%s-Vertex", meshName.c_str()));
|
|
|
|
|
|
|
|
TiXmlElement* trianglesNormalInputNode = new TiXmlElement("input");
|
|
TiXmlElement* trianglesNormalInputNode = new TiXmlElement("input");
|
|
trianglesNode->LinkEndChild(trianglesNormalInputNode);
|
|
trianglesNode->LinkEndChild(trianglesNormalInputNode);
|
|
trianglesNormalInputNode->SetAttribute("semantic", "NORMAL");
|
|
trianglesNormalInputNode->SetAttribute("semantic", "NORMAL");
|
|
|
|
+ trianglesNormalInputNode->SetAttribute("source", avar("#%s-mesh-normals", meshName.c_str()));
|
|
trianglesNormalInputNode->SetAttribute("offset", "1");
|
|
trianglesNormalInputNode->SetAttribute("offset", "1");
|
|
- trianglesNormalInputNode->SetAttribute("source", avar("#%s-Normal", meshName.c_str()));
|
|
|
|
|
|
|
|
TiXmlElement* trianglesUV0InputNode = new TiXmlElement("input");
|
|
TiXmlElement* trianglesUV0InputNode = new TiXmlElement("input");
|
|
trianglesNode->LinkEndChild(trianglesUV0InputNode);
|
|
trianglesNode->LinkEndChild(trianglesUV0InputNode);
|
|
trianglesUV0InputNode->SetAttribute("semantic", "TEXCOORD");
|
|
trianglesUV0InputNode->SetAttribute("semantic", "TEXCOORD");
|
|
|
|
+ trianglesUV0InputNode->SetAttribute("source", avar("#%s-mesh-map-0", meshName.c_str()));
|
|
trianglesUV0InputNode->SetAttribute("offset", "2");
|
|
trianglesUV0InputNode->SetAttribute("offset", "2");
|
|
trianglesUV0InputNode->SetAttribute("set", "0");
|
|
trianglesUV0InputNode->SetAttribute("set", "0");
|
|
- trianglesUV0InputNode->SetAttribute("source", avar("#%s-UV0", meshName.c_str()));
|
|
|
|
|
|
|
|
TiXmlElement* polyNode = new TiXmlElement("p");
|
|
TiXmlElement* polyNode = new TiXmlElement("p");
|
|
trianglesNode->LinkEndChild(polyNode);
|
|
trianglesNode->LinkEndChild(polyNode);
|
|
@@ -1245,7 +1384,7 @@ void ColladaUtils::exportColladaTriangles(TiXmlElement* meshNode, const Optimize
|
|
const OptimizedPolyList::VertIndex& thirdVertIdx = mesh.mVertexList[thirdIdx];
|
|
const OptimizedPolyList::VertIndex& thirdVertIdx = mesh.mVertexList[thirdIdx];
|
|
|
|
|
|
// Note the reversed winding on the triangles
|
|
// Note the reversed winding on the triangles
|
|
- const char* tri = avar("%d %d %d %d %d %d %d %d %d",
|
|
|
|
|
|
+ const char* tri = avar("%d %d %d %d %d %d %d %d %d ",
|
|
thirdVertIdx.vertIdx, thirdVertIdx.normalIdx, thirdVertIdx.uv0Idx,
|
|
thirdVertIdx.vertIdx, thirdVertIdx.normalIdx, thirdVertIdx.uv0Idx,
|
|
secondVertIdx.vertIdx, secondVertIdx.normalIdx, secondVertIdx.uv0Idx,
|
|
secondVertIdx.vertIdx, secondVertIdx.normalIdx, secondVertIdx.uv0Idx,
|
|
firstVertIdx.vertIdx, firstVertIdx.normalIdx, firstVertIdx.uv0Idx);
|
|
firstVertIdx.vertIdx, firstVertIdx.normalIdx, firstVertIdx.uv0Idx);
|
|
@@ -1264,8 +1403,8 @@ void ColladaUtils::exportColladaMesh(TiXmlElement* rootNode, const OptimizedPoly
|
|
|
|
|
|
TiXmlElement* geometryNode = new TiXmlElement("geometry");
|
|
TiXmlElement* geometryNode = new TiXmlElement("geometry");
|
|
libGeomsNode->LinkEndChild(geometryNode);
|
|
libGeomsNode->LinkEndChild(geometryNode);
|
|
- geometryNode->SetAttribute("id", avar("%s-lib", meshName.c_str()));
|
|
|
|
- geometryNode->SetAttribute("name", avar("%sMesh", meshName.c_str()));
|
|
|
|
|
|
+ geometryNode->SetAttribute("id", avar("%s-mesh", meshName.c_str()));
|
|
|
|
+ geometryNode->SetAttribute("name", avar("%s", meshName.c_str()));
|
|
|
|
|
|
TiXmlElement* meshNode = new TiXmlElement("mesh");
|
|
TiXmlElement* meshNode = new TiXmlElement("mesh");
|
|
geometryNode->LinkEndChild(meshNode);
|
|
geometryNode->LinkEndChild(meshNode);
|
|
@@ -1273,18 +1412,18 @@ void ColladaUtils::exportColladaMesh(TiXmlElement* rootNode, const OptimizedPoly
|
|
// Save out the vertices
|
|
// Save out the vertices
|
|
TiXmlElement* vertsSourceNode = new TiXmlElement("source");
|
|
TiXmlElement* vertsSourceNode = new TiXmlElement("source");
|
|
meshNode->LinkEndChild(vertsSourceNode);
|
|
meshNode->LinkEndChild(vertsSourceNode);
|
|
- vertsSourceNode->SetAttribute("id", avar("%s-Position", meshName.c_str()));
|
|
|
|
|
|
+ vertsSourceNode->SetAttribute("id", avar("%s-mesh-positions", meshName.c_str()));
|
|
|
|
|
|
TiXmlElement* vertsNode = new TiXmlElement("float_array");
|
|
TiXmlElement* vertsNode = new TiXmlElement("float_array");
|
|
vertsSourceNode->LinkEndChild(vertsNode);
|
|
vertsSourceNode->LinkEndChild(vertsNode);
|
|
- vertsNode->SetAttribute("id", avar("%s-Position-array", meshName.c_str()));
|
|
|
|
|
|
+ vertsNode->SetAttribute("id", avar("%s-mesh-positions-array", meshName.c_str()));
|
|
vertsNode->SetAttribute("count", avar("%d", mesh.mPoints.size() * 3));
|
|
vertsNode->SetAttribute("count", avar("%d", mesh.mPoints.size() * 3));
|
|
|
|
|
|
for (U32 i = 0; i < mesh.mPoints.size(); i++)
|
|
for (U32 i = 0; i < mesh.mPoints.size(); i++)
|
|
{
|
|
{
|
|
const Point3F& vert = mesh.mPoints[i];
|
|
const Point3F& vert = mesh.mPoints[i];
|
|
|
|
|
|
- TiXmlText* vertText = new TiXmlText(avar("%.4f %.4f %.4f", vert.x, vert.y, vert.z));
|
|
|
|
|
|
+ TiXmlText* vertText = new TiXmlText(avar("%.4f %.4f %.4f ", vert.x, vert.y, vert.z));
|
|
vertsNode->LinkEndChild(vertText);
|
|
vertsNode->LinkEndChild(vertText);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1294,7 +1433,7 @@ void ColladaUtils::exportColladaMesh(TiXmlElement* rootNode, const OptimizedPoly
|
|
|
|
|
|
TiXmlElement* vertsAccNode = new TiXmlElement("accessor");
|
|
TiXmlElement* vertsAccNode = new TiXmlElement("accessor");
|
|
vertsTechNode->LinkEndChild(vertsAccNode);
|
|
vertsTechNode->LinkEndChild(vertsAccNode);
|
|
- vertsAccNode->SetAttribute("source", avar("#%s-Position-array", meshName.c_str()));
|
|
|
|
|
|
+ vertsAccNode->SetAttribute("source", avar("#%s-mesh-positions-array", meshName.c_str()));
|
|
vertsAccNode->SetAttribute("count", avar("%d", mesh.mPoints.size()));
|
|
vertsAccNode->SetAttribute("count", avar("%d", mesh.mPoints.size()));
|
|
vertsAccNode->SetAttribute("stride", "3");
|
|
vertsAccNode->SetAttribute("stride", "3");
|
|
|
|
|
|
@@ -1316,18 +1455,18 @@ void ColladaUtils::exportColladaMesh(TiXmlElement* rootNode, const OptimizedPoly
|
|
// Save out the normals
|
|
// Save out the normals
|
|
TiXmlElement* normalsSourceNode = new TiXmlElement("source");
|
|
TiXmlElement* normalsSourceNode = new TiXmlElement("source");
|
|
meshNode->LinkEndChild(normalsSourceNode);
|
|
meshNode->LinkEndChild(normalsSourceNode);
|
|
- normalsSourceNode->SetAttribute("id", avar("%s-Normal", meshName.c_str()));
|
|
|
|
|
|
+ normalsSourceNode->SetAttribute("id", avar("%s-mesh-normals", meshName.c_str()));
|
|
|
|
|
|
TiXmlElement* normalsNode = new TiXmlElement("float_array");
|
|
TiXmlElement* normalsNode = new TiXmlElement("float_array");
|
|
normalsSourceNode->LinkEndChild(normalsNode);
|
|
normalsSourceNode->LinkEndChild(normalsNode);
|
|
- normalsNode->SetAttribute("id", avar("%s-Normal-array", meshName.c_str()));
|
|
|
|
|
|
+ normalsNode->SetAttribute("id", avar("%s-mesh-normals-array", meshName.c_str()));
|
|
normalsNode->SetAttribute("count", avar("%d", mesh.mNormals.size() * 3));
|
|
normalsNode->SetAttribute("count", avar("%d", mesh.mNormals.size() * 3));
|
|
|
|
|
|
for (U32 i = 0; i < mesh.mNormals.size(); i++)
|
|
for (U32 i = 0; i < mesh.mNormals.size(); i++)
|
|
{
|
|
{
|
|
const Point3F& normal = mesh.mNormals[i];
|
|
const Point3F& normal = mesh.mNormals[i];
|
|
|
|
|
|
- TiXmlText* normalText = new TiXmlText(avar("%.4f %.4f %.4f", normal.x, normal.y, normal.z));
|
|
|
|
|
|
+ TiXmlText* normalText = new TiXmlText(avar("%.4f %.4f %.4f ", normal.x, normal.y, normal.z));
|
|
normalsNode->LinkEndChild(normalText);
|
|
normalsNode->LinkEndChild(normalText);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1337,7 +1476,7 @@ void ColladaUtils::exportColladaMesh(TiXmlElement* rootNode, const OptimizedPoly
|
|
|
|
|
|
TiXmlElement* normalsAccNode = new TiXmlElement("accessor");
|
|
TiXmlElement* normalsAccNode = new TiXmlElement("accessor");
|
|
normalsTechNode->LinkEndChild(normalsAccNode);
|
|
normalsTechNode->LinkEndChild(normalsAccNode);
|
|
- normalsAccNode->SetAttribute("source", avar("#%s-Normal-array", meshName.c_str()));
|
|
|
|
|
|
+ normalsAccNode->SetAttribute("source", avar("#%s-mesh-normals-array", meshName.c_str()));
|
|
normalsAccNode->SetAttribute("count", avar("%d", mesh.mNormals.size()));
|
|
normalsAccNode->SetAttribute("count", avar("%d", mesh.mNormals.size()));
|
|
normalsAccNode->SetAttribute("stride", "3");
|
|
normalsAccNode->SetAttribute("stride", "3");
|
|
|
|
|
|
@@ -1359,18 +1498,18 @@ void ColladaUtils::exportColladaMesh(TiXmlElement* rootNode, const OptimizedPoly
|
|
// Save out the uvs
|
|
// Save out the uvs
|
|
TiXmlElement* uv0SourceNode = new TiXmlElement("source");
|
|
TiXmlElement* uv0SourceNode = new TiXmlElement("source");
|
|
meshNode->LinkEndChild(uv0SourceNode);
|
|
meshNode->LinkEndChild(uv0SourceNode);
|
|
- uv0SourceNode->SetAttribute("id", avar("%s-UV0", meshName.c_str()));
|
|
|
|
|
|
+ uv0SourceNode->SetAttribute("id", avar("%s-mesh-map-0", meshName.c_str()));
|
|
|
|
|
|
TiXmlElement* uv0Node = new TiXmlElement("float_array");
|
|
TiXmlElement* uv0Node = new TiXmlElement("float_array");
|
|
uv0SourceNode->LinkEndChild(uv0Node);
|
|
uv0SourceNode->LinkEndChild(uv0Node);
|
|
- uv0Node->SetAttribute("id", avar("%s-UV0-array", meshName.c_str()));
|
|
|
|
|
|
+ uv0Node->SetAttribute("id", avar("%s-mesh-map-0-array", meshName.c_str()));
|
|
uv0Node->SetAttribute("count", avar("%d", mesh.mUV0s.size() * 2));
|
|
uv0Node->SetAttribute("count", avar("%d", mesh.mUV0s.size() * 2));
|
|
|
|
|
|
for (U32 i = 0; i < mesh.mUV0s.size(); i++)
|
|
for (U32 i = 0; i < mesh.mUV0s.size(); i++)
|
|
{
|
|
{
|
|
const Point2F& uv0 = mesh.mUV0s[i];
|
|
const Point2F& uv0 = mesh.mUV0s[i];
|
|
|
|
|
|
- TiXmlText* uv0Text = new TiXmlText(avar("%.4f %.4f", uv0.x, 1.0f - uv0.y)); // COLLADA uvs are upside down compared to Torque
|
|
|
|
|
|
+ TiXmlText* uv0Text = new TiXmlText(avar("%.4f %.4f ", uv0.x, 1.0f - uv0.y)); // COLLADA uvs are upside down compared to Torque
|
|
uv0Node->LinkEndChild(uv0Text);
|
|
uv0Node->LinkEndChild(uv0Text);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1380,7 +1519,7 @@ void ColladaUtils::exportColladaMesh(TiXmlElement* rootNode, const OptimizedPoly
|
|
|
|
|
|
TiXmlElement* uv0AccNode = new TiXmlElement("accessor");
|
|
TiXmlElement* uv0AccNode = new TiXmlElement("accessor");
|
|
uv0TechNode->LinkEndChild(uv0AccNode);
|
|
uv0TechNode->LinkEndChild(uv0AccNode);
|
|
- uv0AccNode->SetAttribute("source", avar("#%s-UV0-array", meshName.c_str()));
|
|
|
|
|
|
+ uv0AccNode->SetAttribute("source", avar("#%s-mesh-map-0-array", meshName.c_str()));
|
|
uv0AccNode->SetAttribute("count", avar("%d", mesh.mUV0s.size()));
|
|
uv0AccNode->SetAttribute("count", avar("%d", mesh.mUV0s.size()));
|
|
uv0AccNode->SetAttribute("stride", "2");
|
|
uv0AccNode->SetAttribute("stride", "2");
|
|
|
|
|
|
@@ -1397,14 +1536,44 @@ void ColladaUtils::exportColladaMesh(TiXmlElement* rootNode, const OptimizedPoly
|
|
// Define the vertices position array
|
|
// Define the vertices position array
|
|
TiXmlElement* verticesNode = new TiXmlElement("vertices");
|
|
TiXmlElement* verticesNode = new TiXmlElement("vertices");
|
|
meshNode->LinkEndChild(verticesNode);
|
|
meshNode->LinkEndChild(verticesNode);
|
|
- verticesNode->SetAttribute("id", avar("%s-Vertex", meshName.c_str()));
|
|
|
|
|
|
+ verticesNode->SetAttribute("id", avar("%s-mesh-vertices", meshName.c_str()));
|
|
|
|
|
|
TiXmlElement* verticesInputNode = new TiXmlElement("input");
|
|
TiXmlElement* verticesInputNode = new TiXmlElement("input");
|
|
verticesNode->LinkEndChild(verticesInputNode);
|
|
verticesNode->LinkEndChild(verticesInputNode);
|
|
verticesInputNode->SetAttribute("semantic", "POSITION");
|
|
verticesInputNode->SetAttribute("semantic", "POSITION");
|
|
- verticesInputNode->SetAttribute("source", avar("#%s-Position", meshName.c_str()));
|
|
|
|
|
|
+ verticesInputNode->SetAttribute("source", avar("#%s-mesh-positions", meshName.c_str()));
|
|
|
|
|
|
exportColladaTriangles(meshNode, mesh, meshName, matNames);
|
|
exportColladaTriangles(meshNode, mesh, meshName, matNames);
|
|
|
|
+
|
|
|
|
+ // Extra info useful for COLLADAMaya importer (OpenCOLLADA)
|
|
|
|
+ TiXmlElement* extraGeoNode = new TiXmlElement("extra");
|
|
|
|
+ libGeomsNode->LinkEndChild(extraGeoNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* extraGeoNodeTech = new TiXmlElement("technique");
|
|
|
|
+ extraGeoNode->LinkEndChild(extraGeoNodeTech);
|
|
|
|
+ extraGeoNodeTech->SetAttribute("profile", "OpenCOLLADAMaya");
|
|
|
|
+
|
|
|
|
+ TiXmlElement* mayaNode2Id = new TiXmlElement("originalMayaNodeId");
|
|
|
|
+ extraGeoNodeTech->LinkEndChild(mayaNode2Id);
|
|
|
|
+ mayaNode2Id->SetAttribute("sid", "originalMayaNodeId");
|
|
|
|
+ TiXmlText* mayaIdMesh = new TiXmlText(avar("%s", meshName.c_str()));
|
|
|
|
+ mayaNode2Id->LinkEndChild(mayaIdMesh);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* doubleSidedId = new TiXmlElement("double_sided");
|
|
|
|
+ extraGeoNodeTech->LinkEndChild(doubleSidedId);
|
|
|
|
+ doubleSidedId->SetAttribute("sid", "double_sided");
|
|
|
|
+ TiXmlText* doubleSideIdText = new TiXmlText("1");
|
|
|
|
+ doubleSidedId->LinkEndChild(doubleSideIdText);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* paramExtraNode = new TiXmlElement("param");
|
|
|
|
+ extraGeoNodeTech->LinkEndChild(paramExtraNode);
|
|
|
|
+ paramExtraNode->SetAttribute("sid", "colladaId");
|
|
|
|
+ paramExtraNode->SetAttribute("type", "string");
|
|
|
|
+
|
|
|
|
+ TiXmlText* mayaParamMesh = new TiXmlText(avar("%s-mesh", meshName.c_str()));
|
|
|
|
+ paramExtraNode->LinkEndChild(mayaParamMesh);
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
void ColladaUtils::exportColladaScene(TiXmlElement* rootNode, const String& meshName, const Vector<String>& matNames)
|
|
void ColladaUtils::exportColladaScene(TiXmlElement* rootNode, const String& meshName, const Vector<String>& matNames)
|
|
@@ -1421,11 +1590,13 @@ void ColladaUtils::exportColladaScene(TiXmlElement* rootNode, const String& mesh
|
|
visSceneNode->LinkEndChild(nodeNode);
|
|
visSceneNode->LinkEndChild(nodeNode);
|
|
nodeNode->SetAttribute("id", avar("%s", meshName.c_str()));
|
|
nodeNode->SetAttribute("id", avar("%s", meshName.c_str()));
|
|
nodeNode->SetAttribute("name", avar("%s", meshName.c_str()));
|
|
nodeNode->SetAttribute("name", avar("%s", meshName.c_str()));
|
|
-
|
|
|
|
|
|
+ nodeNode->SetAttribute("type", "NODE");
|
|
|
|
+
|
|
TiXmlElement* instanceGeomNode = new TiXmlElement("instance_geometry");
|
|
TiXmlElement* instanceGeomNode = new TiXmlElement("instance_geometry");
|
|
nodeNode->LinkEndChild(instanceGeomNode);
|
|
nodeNode->LinkEndChild(instanceGeomNode);
|
|
- instanceGeomNode->SetAttribute("url", avar("#%s-lib", meshName.c_str()));
|
|
|
|
-
|
|
|
|
|
|
+ instanceGeomNode->SetAttribute("url", avar("#%s-mesh", meshName.c_str()));
|
|
|
|
+ instanceGeomNode->SetAttribute("name", avar("%s", meshName.c_str()));
|
|
|
|
+
|
|
TiXmlElement* bindMatNode = new TiXmlElement("bind_material");
|
|
TiXmlElement* bindMatNode = new TiXmlElement("bind_material");
|
|
instanceGeomNode->LinkEndChild(bindMatNode);
|
|
instanceGeomNode->LinkEndChild(bindMatNode);
|
|
|
|
|
|
@@ -1437,10 +1608,85 @@ void ColladaUtils::exportColladaScene(TiXmlElement* rootNode, const String& mesh
|
|
{
|
|
{
|
|
TiXmlElement* instMatNode = new TiXmlElement("instance_material");
|
|
TiXmlElement* instMatNode = new TiXmlElement("instance_material");
|
|
techniqueNode->LinkEndChild(instMatNode);
|
|
techniqueNode->LinkEndChild(instMatNode);
|
|
- instMatNode->SetAttribute("symbol", avar("%s", matNames[i].c_str()));
|
|
|
|
- instMatNode->SetAttribute("target", avar("#%s", matNames[i].c_str()));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ instMatNode->SetAttribute("symbol", avar("%s-material", matNames[i].c_str()));
|
|
|
|
+ instMatNode->SetAttribute("target", avar("#%s-material", matNames[i].c_str()));
|
|
|
|
+ TiXmlElement* bindVertexNode = new TiXmlElement("bind_vertex_input");
|
|
|
|
+ instMatNode->LinkEndChild(bindVertexNode);
|
|
|
|
+ //bindVertexNode->SetAttribute("semantic", avar("%s-mesh-map-0", meshName.c_str()));
|
|
|
|
+ bindVertexNode->SetAttribute("semantic", "UVMap");
|
|
|
|
+ bindVertexNode->SetAttribute("input_semantic", "TEXCOORD");
|
|
|
|
+ bindVertexNode->SetAttribute("input_set", "0");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Extra info useful for COLLADAMax importer (OpenCOLLADA)
|
|
|
|
+ TiXmlElement* extraInsGeoNode = new TiXmlElement("extra");
|
|
|
|
+ nodeNode->LinkEndChild(extraInsGeoNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* extraInsGeoTechNode = new TiXmlElement("technique");
|
|
|
|
+ extraInsGeoNode->LinkEndChild(extraInsGeoTechNode);
|
|
|
|
+ extraInsGeoTechNode->SetAttribute("profile", "OpenCOLLADA");
|
|
|
|
+
|
|
|
|
+ TiXmlElement* castShadowsNode = new TiXmlElement("cast_shadows");
|
|
|
|
+ extraInsGeoTechNode->LinkEndChild(castShadowsNode);
|
|
|
|
+ castShadowsNode->SetAttribute("sid", "cast_shadows");
|
|
|
|
+ castShadowsNode->SetAttribute("type", "bool");
|
|
|
|
+
|
|
|
|
+ TiXmlText* castShadowsText = new TiXmlText("1");
|
|
|
|
+ castShadowsNode->LinkEndChild(castShadowsText);
|
|
|
|
+
|
|
|
|
+ //-----------------------------
|
|
|
|
+ TiXmlElement* receiveShadowsNode = new TiXmlElement("receive_shadows");
|
|
|
|
+ extraInsGeoTechNode->LinkEndChild(receiveShadowsNode);
|
|
|
|
+ receiveShadowsNode->SetAttribute("sid", "receive_shadows");
|
|
|
|
+ receiveShadowsNode->SetAttribute("type", "bool");
|
|
|
|
+
|
|
|
|
+ TiXmlText* receiveShadowsText = new TiXmlText("1");
|
|
|
|
+ receiveShadowsNode->LinkEndChild(receiveShadowsText);
|
|
|
|
+
|
|
|
|
+ //-----------------------------
|
|
|
|
+ TiXmlElement* primaryVisibiltyNode = new TiXmlElement("primary_visibility");
|
|
|
|
+ extraInsGeoTechNode->LinkEndChild(primaryVisibiltyNode);
|
|
|
|
+ primaryVisibiltyNode->SetAttribute("sid", "primary_visibility");
|
|
|
|
+ primaryVisibiltyNode->SetAttribute("type", "int");
|
|
|
|
+
|
|
|
|
+ TiXmlText* primaryVisibiltyText = new TiXmlText("1");
|
|
|
|
+ primaryVisibiltyNode->LinkEndChild(primaryVisibiltyText);
|
|
|
|
+
|
|
|
|
+ //-----------------------------
|
|
|
|
+ TiXmlElement* secondaryVisibilityNode = new TiXmlElement("secondary_visibility");
|
|
|
|
+ extraInsGeoTechNode->LinkEndChild(secondaryVisibilityNode);
|
|
|
|
+ secondaryVisibilityNode->SetAttribute("sid", "secondary_visibility");
|
|
|
|
+ secondaryVisibilityNode->SetAttribute("type", "int");
|
|
|
|
+
|
|
|
|
+ TiXmlText* secondaryVisibilityText = new TiXmlText("1");
|
|
|
|
+ secondaryVisibilityNode->LinkEndChild(secondaryVisibilityText);
|
|
|
|
+
|
|
|
|
+ // Extra info useful for COLLADAMaya importer (OpenCOLLADA)
|
|
|
|
+ TiXmlElement* extra2InsGeoNode = new TiXmlElement("extra");
|
|
|
|
+ nodeNode->LinkEndChild(extra2InsGeoNode);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* extra2InsGeoTechNode = new TiXmlElement("technique");
|
|
|
|
+ extra2InsGeoNode->LinkEndChild(extra2InsGeoTechNode);
|
|
|
|
+ extra2InsGeoTechNode->SetAttribute("profile", "OpenCOLLADAMaya");
|
|
|
|
+
|
|
|
|
+ TiXmlElement* mayaNodeId = new TiXmlElement("originalMayaNodeId");
|
|
|
|
+ extra2InsGeoTechNode->LinkEndChild(mayaNodeId);
|
|
|
|
+ mayaNodeId->SetAttribute("sid", "originalMayaNodeId");
|
|
|
|
+ mayaNodeId->SetAttribute("type", "string");
|
|
|
|
+
|
|
|
|
+ TiXmlText* mayaNodeIdMesh = new TiXmlText(avar("%s", meshName.c_str()));
|
|
|
|
+ mayaNodeId->LinkEndChild(mayaNodeIdMesh);
|
|
|
|
+
|
|
|
|
+ TiXmlElement* paramExtraNode = new TiXmlElement("param");
|
|
|
|
+ extra2InsGeoTechNode->LinkEndChild(paramExtraNode);
|
|
|
|
+ paramExtraNode->SetAttribute("sid", "colladaId");
|
|
|
|
+ paramExtraNode->SetAttribute("type", "string");
|
|
|
|
+
|
|
|
|
+ TiXmlText* mayaParamMesh = new TiXmlText(avar("%s", meshName.c_str()));
|
|
|
|
+ paramExtraNode->LinkEndChild(mayaParamMesh);
|
|
|
|
+
|
|
|
|
+ //-----------------------------
|
|
|
|
+
|
|
TiXmlElement* sceneNode = new TiXmlElement("scene");
|
|
TiXmlElement* sceneNode = new TiXmlElement("scene");
|
|
rootNode->LinkEndChild(sceneNode);
|
|
rootNode->LinkEndChild(sceneNode);
|
|
|
|
|
|
@@ -1467,7 +1713,9 @@ void ColladaUtils::exportToCollada(const Torque::Path& colladaFile, const Optimi
|
|
// Create our Collada root node and populate a couple standard attributes
|
|
// Create our Collada root node and populate a couple standard attributes
|
|
TiXmlElement* rootNode = new TiXmlElement("COLLADA");
|
|
TiXmlElement* rootNode = new TiXmlElement("COLLADA");
|
|
rootNode->SetAttribute("xmlns", "http://www.collada.org/2005/11/COLLADASchema");
|
|
rootNode->SetAttribute("xmlns", "http://www.collada.org/2005/11/COLLADASchema");
|
|
- rootNode->SetAttribute("version", "1.4.0");
|
|
|
|
|
|
+ rootNode->SetAttribute("version", "1.4.1");
|
|
|
|
+ //rootNode->SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); //T3D Collada loader complaint about this.
|
|
|
|
+
|
|
|
|
|
|
// Add the root node to the document
|
|
// Add the root node to the document
|
|
doc.LinkEndChild(rootNode);
|
|
doc.LinkEndChild(rootNode);
|