Exemplo n.º 1
0
void ModelViewer::updateUiAnimList()
{
	_uiPage->setFriendlyName(_viewTargetList.at(_currViewTargetIdx)->getFriendlyName());
	_uiPage->setModelName(_viewTargetList.at(_currViewTargetIdx)->getModelName());

	auto animMap = _viewTargetList.at(_currViewTargetIdx)->getAnimMap();
	for (auto itr = animMap.begin(); itr != animMap.end();	++itr){
		_uiPage->addAnimToViewList(itr->first);
	}

	changeAnim(DataHandler::s_DefaultAnim);
	_uiPage->setAnimData(DataHandler::s_DefaultAnim, 0, _viewTargetList.at(_currViewTargetIdx)->getFramesCount());
}
Exemplo n.º 2
0
Mesh::Mesh(char* ogrematerialfilename, char* ogremeshfilenamexml, unsigned int program, char* ogreskeletonfilenamexml)
	: mProgram(program)
	, mbSkin(false)
	, mCurrentLod(0)
{
	init();
	mProgram = program;
	mSkinLoc = glGetUniformLocation(mProgram, "use_skin");
	mBoneMatLoc = glGetUniformLocation(mProgram, "bone_mat");
	
	if(ogreskeletonfilenamexml)
	{
		mAnimation.LoadSkeletonXML(ogreskeletonfilenamexml);
		if(mAnimation.animations.size() > 0)
		{
			mbSkin = true;
			mAnimIndex = mAnimation.animations.size()-1;
			changeAnim();
		}	
	}
	
	LoadOgreXML(ogrematerialfilename, ogremeshfilenamexml);
	buildGeometry();
}
Exemplo n.º 3
0
void Mesh::LoadObjXML(char* name_object)
{
	std::string ogreskeletonfilenamexml = "../media/role/role.Skeleton.xml";
	mAnimation.LoadSkeletonXML(ogreskeletonfilenamexml.c_str());
	if(mAnimation.animations.size() > 0)
	{
		mbSkin = true;
		mAnimIndex = mAnimation.animations.size()-1;
		changeAnim();
	}

	std::vector<std::pair<std::string, std::string> > string_list;
	string_list.push_back(std::make_pair("../media/role/桃花男_02_头发.material", "../media/role/桃花男_02_头发.mesh.xml"));
	string_list.push_back(std::make_pair("../media/role/男主角_鸡蛋脸_01.material", "../media/role/男主角_鸡蛋脸_01.mesh.xml"));
	string_list.push_back(std::make_pair("../media/role/桃花男_02_双手.material", "../media/role/桃花男_02_双手.mesh.xml"));
	string_list.push_back(std::make_pair("../media/role/桃花男_02_身体.material", "../media/role/桃花男_02_身体.mesh.xml"));
	string_list.push_back(std::make_pair("../media/role/桃花男_02_双脚.material", "../media/role/桃花男_02_双脚.mesh.xml"));
	
	std::vector<ObjectSubEntity > objContainer;

	std::vector<std::pair<std::string, std::string> >::const_iterator it = string_list.begin();
	
	// 要加载 material 才行
	while(it != string_list.end())
	{
		LoadOgreXML((*it).first.c_str(), (*it).second.c_str());
		//LoadMesh((*it).c_str());
		ObjectSubEntity objSubEntity;
		objSubEntity.lod_meshes = lod_meshes;
		objSubEntity.materials = materials;
		objSubEntity.vertices = vertices;
		objContainer.push_back(objSubEntity);
		lod_meshes.clear();
		vertices.clear();
		materials.clear();
		it++;
	}

	std::vector<ObjectSubEntity >::const_iterator lodIt = objContainer.begin();
	int cur_vertex_start = 0;
	int cur_material_start = 0;
	lod_meshes.clear();
	vertices.clear();
	materials.clear();

	while(lodIt != objContainer.end())
	{
		ObjectSubEntity obj = *lodIt;
		vertices.insert(vertices.end(), obj.vertices.begin(), obj.vertices.end());
		materials.insert(materials.end(), obj.materials.begin(), obj.materials.end());

		std::vector<LOD>::iterator sublodit = obj.lod_meshes.begin();
		for(int i = 0; i < obj.lod_meshes.size(); i++)
		{
			while(lod_meshes.size() <= i)
			{
				LOD l;
				lod_meshes.push_back(l);
			}
			std::vector<Triangle>::iterator sublodtriit = obj.lod_meshes[i].triangles.begin();
			while(sublodtriit != obj.lod_meshes[i].triangles.end())
			{
				(*sublodtriit).index[0] += cur_vertex_start;
				(*sublodtriit).index[1] += cur_vertex_start;
				(*sublodtriit).index[2] += cur_vertex_start;
				(*sublodtriit).material += cur_material_start;
				sublodtriit++;
			}
			lod_meshes[i].triangles.insert(lod_meshes[i].triangles.end(), obj.lod_meshes[i].triangles.begin(), obj.lod_meshes[i].triangles.end());
		}
		//lod_meshes.insert(lod_meshes.end(), obj.lod_meshes.begin(), obj.lod_meshes.end());
		cur_vertex_start += obj.vertices.size();
		cur_material_start += obj.materials.size();
		lodIt++;
	}
}