예제 #1
0
void Exporter::validateData()
{
	info += "\r\n";

	removeRedundantMaterials();
	buildBoneHierarchy();

	// Calculate bone id (prevents mixing wrong types)
	boneId = 0;
	for(unsigned int i = 0; i < bones.size(); ++i)
	{
		// Sum of child index * parent index
		for(unsigned int j = 0; j < i; ++j)
		if(bones[i].getParentName() == bones[j].getName())
			boneId += i*j;
	}

	if(model.getObjects().size() > 1)
	{
		model.buildObjectHierarchy();
		printInfo("Resorted object hierarchy");
	}

	if(model.getHelpers().size() > 1)
	{
		model.buildHelperHierarchy();
		printInfo("Resorted helper hierarchy");
	}

	if(boneId >= 0)
	{
		char number[20] = { 0 };
		_itoa(boneId, number, 10);

		info += "\r\n";
		printInfo("Calculated bone id: " + std::string(number));
	}

	model.setCollisionFlags();
	// !!!!!!!!!!!!!!!!!!
	//if(boneId <= 0)
	//	model.chopObjects();
}
	//-----------------------------------------------------------------------------
	const AxisAlignedBox& XsiSkeletonExporter::exportSkeleton(const String& skeletonFileName, 
		DeformerMap& deformers, float framesPerSecond, AnimationList& animList)
	{
		LogOgreAndXSI(L"** Begin OGRE Skeleton Export **");

		copyDeformerMap(deformers);

		SkeletonPtr skeleton = SkeletonManager::getSingleton().create("export",
			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
		// construct the hierarchy
		buildBoneHierarchy(skeleton.get(), deformers, animList);

		// progress report
		ProgressManager::getSingleton().progress();

		establishInitialTransforms(deformers);

		// create animations 
		mAABB.setNull();
		createAnimations(skeleton.get(), deformers, framesPerSecond, animList, mAABB);
		// progress report
		ProgressManager::getSingleton().progress();

		// Optimise
		skeleton->optimiseAllAnimations();

		SkeletonSerializer ser;
		ser.exportSkeleton(skeleton.get(), skeletonFileName);
		// progress report
		ProgressManager::getSingleton().progress();

		LogOgreAndXSI(L"** OGRE Skeleton Export Complete **");

		cleanup();

		return mAABB;

	}