//--------------------------------------------------------------- ExportNode * ExportSceneGraph::create ( INode *iNode, ExportNode* parent, bool& isInVisualScene) { ExportNode * exportNode = new ExportNode ( iNode, parent ); isInVisualScene = isNodeInVisualScene(iNode); int numberOfChildren = iNode->NumberOfChildren(); for ( int i = 0; i < numberOfChildren; ++i ) { INode * child = iNode->GetChildNode ( i ); bool isChildInVisualScene; ExportNode * childExportNode = create ( child, exportNode, isChildInVisualScene ); exportNode->add( childExportNode ); if ( isChildInVisualScene ) isInVisualScene = true; } exportNode->setId ( mNodeIdList.addId ( NativeString(iNode->GetName()) ) ); mINodeExportNodeMap[iNode] = exportNode; exportNode->createControllerList(); //createBones(exportNode); exportNode->setIsInVisualScene(isInVisualScene); return exportNode; }
void ControllerExporter::determineReferencedJoints(ExportNode* exportNode, SkinController* skinController) { ISkinInterface* skinInterface = getISkinInterface( exportNode, skinController); int jointCount = skinInterface->getNumBones(); ExportNodeSet referencedJoints; for (int i = 0; i < jointCount; ++i) { // there should not be any null bone. // the ISkin::GetBone, not GetBoneFlat, function is called here. INode* boneNode = skinInterface->getBone(i); assert(boneNode); ExportNode* jointExportNode = mExportSceneGraph->getExportNode(boneNode); assert(jointExportNode); jointExportNode->setIsInVisualScene( true ); referencedJoints.insert(jointExportNode); } determineSkeletonRoots(referencedJoints, exportNode->getControllerList()); skinInterface->releaseMe(); }