Beispiel #1
0
void gkBlenderSceneConverter::convertObject(Blender::Object* bobj, gkGameObject* gobj)
{
	if (!m_gscene)
		return;

	GK_ASSERT(validObject(bobj));

	if (gobj == 0)
	{
		gkHashedString name(GKB_IDNAME(bobj));
		switch (bobj->type)
		{
		case OB_EMPTY:      gobj = m_gscene->createObject(name);    break;
		case OB_LAMP:       gobj = m_gscene->createLight(name);     break;
		case OB_CAMERA:     gobj = m_gscene->createCamera(name);    break;
		case OB_MESH:       gobj = m_gscene->createEntity(name);    break;
		case OB_ARMATURE:   gobj = m_gscene->createSkeleton(name);  break;
		case OB_CURVE:      gobj = m_gscene->createCurve(name);     break;
		}

	}


	// all game object property types
	if (gobj)
	{
		gkScalar animfps = m_bscene->r.frs_sec / m_bscene->r.frs_sec_base;
		
		convertObjectGeneral(gobj, bobj);
		convertObjectProperties(gobj, bobj);
		convertObjectPhysics(gobj, bobj);
		convertObjectConstraints(gobj, bobj);
		convertObjectLogic(gobj, bobj);
		convertObjectAnimations(gobj, bobj, animfps);

		// object data
		switch (bobj->type)
		{
		case OB_LAMP:       convertObjectLamp(gobj, bobj);        break;
		case OB_CAMERA:     convertObjectCamera(gobj, bobj);      break;
		case OB_MESH:       convertObjectMesh(gobj, bobj);        break;
		case OB_ARMATURE:   convertObjectArmature(gobj, bobj);    break;
		case OB_CURVE:		convertObjectCurve(gobj, bobj);		  break;
		}

		convertObjectParticles(gobj, bobj); //need mesh info
	}
}
Beispiel #2
0
void akBLoader::loadFile(const utString &filename, bool sortByMat, bool openglVertexColor)
{
	fbtBlend fp;

	if (fp.parse(filename.c_str(), fbtFile::PM_COMPRESSED) != fbtFile::FS_OK)
	{
		return;
	}
	
	// current scne
	Blender::Scene* bscene = fp.m_fg->curscene;
	
	//animations
	akAnimationLoader animLoader(m_demo);
	animLoader.convertActions(fp.m_action, fp.getVersion() <= 249, bscene->r.frs_sec);
	
	//convert camera
	convertCameraObject(bscene->camera);
	
	//objects of the active scene
	for (Blender::Base* base = (Blender::Base*)bscene->base.first; base; base = base->next)
	{
		if (!base->object)
			continue;

		Blender::Object* bobj = base->object;

		// test for usable object type
		if(bobj->type == OB_MESH)
		{
			convertObjectMesh(bobj);
			
			akEntity* entity = m_demo->getEntity(AKB_IDNAME(bobj));
			animLoader.convertObject(entity, bobj, fp.getVersion() <= 249, bscene->r.frs_sec);
		}
	}
}