示例#1
0
void akBLoader::convertObjectMesh(Blender::Object *bobj)
{
	if(!bobj->data)
		return;

	akEntity* entity = new akEntity();
	m_demo->addEntity(AKB_IDNAME(bobj), entity);
	
	float* bmat = (float*)bobj->obmat; 
	akMatrix4 mat(akVector4(bmat[4*0+0], bmat[4*0+1], bmat[4*0+2], bmat[4*0+3]),
				akVector4(bmat[4*1+0], bmat[4*1+1], bmat[4*1+2], bmat[4*1+3]),
				akVector4(bmat[4*2+0], bmat[4*2+1], bmat[4*2+2], bmat[4*2+3]),
				akVector4(bmat[4*3+0], bmat[4*3+1], bmat[4*3+2], bmat[4*3+3]));
				
				
	akTransformState trans;
	akMathUtils::extractTransform(mat, trans.loc, trans.rot,trans.scale );
	entity->setTransformState(trans);
	
	Blender::Mesh* bmesh =  (Blender::Mesh*)bobj->data;
	
	if (!m_demo->getMesh(AKB_IDNAME(bmesh)))
	{
		akMesh* mesh = new akMesh();
		akMeshLoader meconv(m_demo, mesh, bobj, bmesh);
		meconv.convert(false, true);
		m_demo->addMesh(AKB_IDNAME(bmesh), mesh);
	}
	
	akMesh* mesh = m_demo->getMesh(AKB_IDNAME(bmesh));
	entity->setMesh(mesh);
	
	if(mesh && bobj->parent != 0 && bobj->parent->type == OB_ARMATURE)
	{
	
		Blender::bArmature* bskel = (Blender::bArmature*)bobj->parent->data;
		if(!m_demo->getSkeleton(AKB_IDNAME(bskel)))
			convertSkeleton(bskel);
		
		akSkeleton* skel = m_demo->getSkeleton(AKB_IDNAME(bskel));
		entity->setSkeleton(skel);
		
		if(bskel->deformflag & BLENDER_ARM_DEF_QUATERNION)
			entity->setUseDualQuatSkinning(true);

		mesh->generateBoneWeightsFromVertexGroups(skel, true);
	}
}
示例#2
0
void gkBlenderSceneConverter::convertObjectMesh(gkGameObject* gobj, Blender::Object* bobj)
{
	GK_ASSERT(gobj->getType() == GK_ENTITY && bobj->data);
	gkEntity* obj = static_cast<gkEntity*>(gobj);

	gkEntityProperties& props = obj->getEntityProperties();



	Blender::Mesh* me =  (Blender::Mesh*)bobj->data;


	// this is shared for faster conversion times
	// and better efficiency
	if (!m_gscene->hasMesh(GKB_IDNAME(me)))
	{
		props.m_mesh = m_gscene->createMesh(GKB_IDNAME(me));

		gkBlenderMeshConverter meconv(props.m_mesh, bobj, me);
		meconv.convert();
	}
	else
		props.m_mesh = m_gscene->getMesh(GKB_IDNAME(me));


	props.m_casts = gobj->getProperties().m_physics.isRigidOrDynamic() || !gobj->getProperties().isPhysicsObject();

	Blender::Material* matr = BlenderMaterial(bobj, 0);
	if (matr)
		props.m_casts = (matr->mode & MA_SHADBUF) != 0;

	// if it has an action save the initial pose / animation name
	if (bobj->parent)
	{
		Blender::Object* par = bobj->parent;
		Blender::bAction* act = par->action;
		if (!act && par->proxy_from)
			act = par->proxy_from->action;

		if (act) props.m_startPose = (GKB_IDNAME(act));
	}
}