SharedModel(shared_ptr<IStorm3D_Model> model_, shared_ptr<IStorm3D_Model> fadeModel_, const std::string &bones_, const std::string &idleAnimation_)
		:	model(model_),
			fadeModel(fadeModel_),
			bones(bones_),
			idleAnimation(idleAnimation_),
			radius(0),
			radius2d(0)
		{
			boost::scoped_ptr<Iterator<IStorm3D_Model_Object *> > objectIterator(model->ITObject->Begin());
			for(; !objectIterator->IsEnd(); objectIterator->Next())
			{
				IStorm3D_Model_Object *object = objectIterator->GetCurrent();
				if(!object)
					continue;

				IStorm3D_Mesh *mesh = object->GetMesh();
				if(!mesh)
					continue;

				VC3 objectPosition = object->GetPosition();
				float objectDistance = objectPosition.GetLength();
				float distance = objectDistance + mesh->GetRadius();
				if(distance > radius)
					radius = distance;

				float meshRadius = mesh->GetRadius();
				if(meshRadius + objectDistance > radius2d)
					radius2d = meshRadius + objectDistance;
			}

			if(!bones.empty())
				model->LoadBones(bones.c_str());
		}
Example #2
0
void CollisionModel::clone(CollisionModel &rhs)
{
	data->model = boost::shared_ptr<IStorm3D_Model> (data->storm.storm->CreateNewModel());
	IStorm3D_Model_Object *object = data->model->Object_New("uh");

	IStorm3D_Model_Object *rhsObject = rhs.data->model->SearchObject("uh");
	if(rhsObject)
		object->SetMesh(rhsObject->GetMesh());

	QUAT rotation = getRotation(data->rotation);
	//rotation.MakeFromAngles(0, data->yAngle, 0);

	data->model->SetPosition(data->position);
	data->model->SetRotation(rotation);

	data->model->CastShadows(false);
	data->addScene();
}
void ChangeToUncompressed(IStorm3D *storm3d, IStorm3D_Model *model)
{
	Iterator<IStorm3D_Model_Object *> *object_iterator;
	for(object_iterator = model->ITObject->Begin(); !object_iterator->IsEnd(); object_iterator->Next())
	{
		IStorm3D_Model_Object *object = object_iterator->GetCurrent();
		IStorm3D_Material *material = object->GetMesh()->GetMaterial();
		if(material == NULL)
			continue;

		IStorm3D_Texture *t = material->GetBaseTexture();
		if(t == NULL)
			continue;

		const char *fname = t->GetFilename();
		IStorm3D_Texture *nt = storm3d->CreateNewTexture(fname, TEXLOADFLAGS_NOCOMPRESS);

		t->Release();
		material->SetBaseTexture(nt);
		material->SetSelfIllumination(Color(1,1,1));
	}
	
	delete object_iterator;
}