示例#1
0
	void Skeleton::_relate()
	{
		for (BoneNodeMap::iterator it = _boneNodes.begin(); it != _boneNodes.end(); ++it)
		{
			BoneNode* node = it->second;
			if (node)
			{
				Bone* bone = node->getBone();
				if (bone)
				{
					int parentID = bone->parent;
					BoneNode* parentNode = _getBoneNode(parentID);
					if (parentNode)
					{
						parentNode->addChild(node);
					}
					else
					{
						_roots.push_back(bone->name);
					}
				}
			}
		}
		if (_roots.empty())
		{
			throw Zen::Exception("no bone root found!");
		}
// 		if (roots.size() > 1)
// 		{
// 			for (size_t i = 0; i != roots.size(); ++i)
// 			{
// 				std::string name = roots[i];
// 				std::transform(name.begin(), name.end(), name.begin(), std::tolower);
// 				if (name == "root")
// 				{
// 					_rootName = roots[i];
// 					break;
// 				}
// 			}
// 			if (_rootName.empty())
// 			{
// 				_addRootNode();
// 				_relate();
// 			}
// 		}
// 		else
// 		{
// 			_rootName = roots[0];
// 		}
		
		//
		_matrices.resize(_boneNodes.size());
		_matricesFull.resize(_boneNodes.size());
	}
示例#2
0
	BoneNode* Skeleton::_getBoneNode( int id )
	{
		for (BoneNodeMap::iterator it = _boneNodes.begin(); it != _boneNodes.end(); ++it)
		{
			BoneNode* node = it->second;
			Bone* bone = node->getBone();
			if (id == bone->id)
			{
				return node;
			}
		}
		return NULL;
	}
示例#3
0
	void Skeleton::destroy()
	{
		for (BoneNodeMap::iterator it = _boneNodes.begin(); it != _boneNodes.end(); ++it)
		{
			BoneNode* r = it->second;
			if (r)
			{
				Bone* b = r->getBone();
				delete b;
				r->detachObject();
				delete r;
			}
		}
		
		_clear();
	}