Beispiel #1
0
void MeshLoader_v1::ReadSkelAnim(MeshPtr mesh, DataStreamPtr & stream)
{
	Skeleton * skel = mesh->GetSkeleton();
	int version = -1;

	stream->Read(&version, sizeof (int));

	d_assert (version == K_SkelAnim_Version);

	char name[128];

	stream->Read(name, 128);

	Animation * anim = mesh->CreateAnimation(name);

	int numAnims = 0;
	stream->Read(&numAnims, sizeof(int));

	for (int i = 0; i < numAnims; ++i)
	{
		int boneId, count;

		stream->Read(&boneId, sizeof(int));
		stream->Read(&count, sizeof(int));

		if (count == 0)
			continue;

		SkeletonAnimation * skel_anim;
		skel_anim = anim->CreateSkeletonAnimation(boneId);

		KeyFrame * kf;
		float time;
		Vec3 trans;
		Quat rotate;
		Vec3 scale;

		for (int i = 0; i < count; ++i)
		{
			stream->Read(&time, sizeof(float));
			stream->Read(&trans, sizeof(float) * 3);
			stream->Read(&rotate, sizeof(float) * 4);
			stream->Read(&scale, sizeof(float) * 3);

			kf = skel_anim->CreateKeyFrame();
			kf->SetTime(time);
			kf->SetTranslate(trans);
			kf->SetRotation(rotate);
			kf->SetScale(scale);
		}
	}

	anim->_calcuLength();
}
Beispiel #2
0
void MeshLoader_v1::ReadSkeleton(MeshPtr mesh, DataStreamPtr & stream)
{
	Skeleton * skel = mesh->GetSkeleton();
	int version = -1;

	stream->Read(&version, sizeof (int));

	d_assert (version == K_Skeleton_Version);

	int boneCount = 0;

	stream->Read(&boneCount, sizeof (int));

	for (int i = 0; i < boneCount; ++i)
	{
		char Name[128];
		int flag;
		Vec3 Position;
		Quat Orientation;
		Vec3 Scale;

		stream->Read(&Name[0],  128);
		stream->Read(&flag, sizeof(int));
		stream->Read(&Position, sizeof(Vec3));
		stream->Read(&Orientation, sizeof(Quat));
		stream->Read(&Scale, sizeof(Vec3)); // equal ratio scale.

		joint * bn = skel->CreateJoint(Name);

		bn->flag = flag;
		bn->position = Position;
		bn->orientation = Orientation;
		bn->scale = Scale;
	}

	for (int i = 0; i < boneCount; ++i)
	{
		short parent;
		short child;

		stream->Read(&parent, sizeof(short));
		stream->Read(&child, sizeof(short));

		skel->SetupHiberarchy(parent, child);
	}
}
Beispiel #3
0
void MeshLoader_v0::ReadSkeleton(MeshPtr mesh, DataStreamPtr & stream)
{
    String sSkeletonName;
    stream->ReadString(sSkeletonName);
	
	TString128 Source = mesh->GetSourceName();
	Source = File::GetFileDir(Source);

	if (Source == "")
	{
		Source = sSkeletonName.c_str();
	}
	else
	{
		Source += "\\";
		Source += sSkeletonName.c_str();
	}

	SkeletonLoader::Load(mesh->GetSkeleton(), Source);
    //mesh->SetSkeletonName(sSkeletonName.c_str());
}