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()); }
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(); }
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++; } }