| 2501 | } |
| 2502 | |
| 2503 | void ColladaUtils::exportColladaScene(tinyxml2::XMLElement* rootNode, const String& meshName, const Vector<String>& matNames) |
| 2504 | { |
| 2505 | tinyxml2::XMLDocument* doc = rootNode->GetDocument(); |
| 2506 | |
| 2507 | tinyxml2::XMLElement* libSceneNode = doc->NewElement("library_visual_scenes"); |
| 2508 | rootNode->LinkEndChild(libSceneNode); |
| 2509 | |
| 2510 | tinyxml2::XMLElement* visSceneNode = doc->NewElement("visual_scene"); |
| 2511 | libSceneNode->LinkEndChild(visSceneNode); |
| 2512 | visSceneNode->SetAttribute("id", "RootNode"); |
| 2513 | visSceneNode->SetAttribute("name", "RootNode"); |
| 2514 | |
| 2515 | tinyxml2::XMLElement* nodeNode = doc->NewElement("node"); |
| 2516 | visSceneNode->LinkEndChild(nodeNode); |
| 2517 | nodeNode->SetAttribute("id", avar("%s", meshName.c_str())); |
| 2518 | nodeNode->SetAttribute("name", avar("%s", meshName.c_str())); |
| 2519 | nodeNode->SetAttribute("type", "NODE"); |
| 2520 | |
| 2521 | tinyxml2::XMLElement* instanceGeomNode = doc->NewElement("instance_geometry"); |
| 2522 | nodeNode->LinkEndChild(instanceGeomNode); |
| 2523 | instanceGeomNode->SetAttribute("url", avar("#%s-mesh", meshName.c_str())); |
| 2524 | instanceGeomNode->SetAttribute("name", avar("%s", meshName.c_str())); |
| 2525 | |
| 2526 | tinyxml2::XMLElement* bindMatNode = doc->NewElement("bind_material"); |
| 2527 | instanceGeomNode->LinkEndChild(bindMatNode); |
| 2528 | |
| 2529 | tinyxml2::XMLElement* techniqueNode = doc->NewElement("technique_common"); |
| 2530 | bindMatNode->LinkEndChild(techniqueNode); |
| 2531 | |
| 2532 | // Bind the materials |
| 2533 | for (U32 i = 0; i < matNames.size(); i++) |
| 2534 | { |
| 2535 | tinyxml2::XMLElement* instMatNode = doc->NewElement("instance_material"); |
| 2536 | techniqueNode->LinkEndChild(instMatNode); |
| 2537 | instMatNode->SetAttribute("symbol", avar("%s-material", matNames[i].c_str())); |
| 2538 | instMatNode->SetAttribute("target", avar("#%s-material", matNames[i].c_str())); |
| 2539 | tinyxml2::XMLElement* bindVertexNode = doc->NewElement("bind_vertex_input"); |
| 2540 | instMatNode->LinkEndChild(bindVertexNode); |
| 2541 | //bindVertexNode->SetAttribute("semantic", avar("%s-mesh-map-0", meshName.c_str())); |
| 2542 | bindVertexNode->SetAttribute("semantic", "UVMap"); |
| 2543 | bindVertexNode->SetAttribute("input_semantic", "TEXCOORD"); |
| 2544 | bindVertexNode->SetAttribute("input_set", "0"); |
| 2545 | } |
| 2546 | |
| 2547 | // Extra info useful for COLLADAMax importer (OpenCOLLADA) |
| 2548 | tinyxml2::XMLElement* extraInsGeoNode = doc->NewElement("extra"); |
| 2549 | nodeNode->LinkEndChild(extraInsGeoNode); |
| 2550 | |
| 2551 | tinyxml2::XMLElement* extraInsGeoTechNode = doc->NewElement("technique"); |
| 2552 | extraInsGeoNode->LinkEndChild(extraInsGeoTechNode); |
| 2553 | extraInsGeoTechNode->SetAttribute("profile", "OpenCOLLADA"); |
| 2554 | |
| 2555 | tinyxml2::XMLElement* castShadowsNode = doc->NewElement("cast_shadows"); |
| 2556 | extraInsGeoTechNode->LinkEndChild(castShadowsNode); |
| 2557 | castShadowsNode->SetAttribute("sid", "cast_shadows"); |
| 2558 | castShadowsNode->SetAttribute("type", "bool"); |
| 2559 | |
| 2560 | tinyxml2::XMLText* castShadowsText = doc->NewText("1"); |
nothing calls this directly
no test coverage detected