計算機圖形學2-2 並查集實現載入骨架
阿新 • • 發佈:2018-12-15
void SkeletalModel::loadSkeleton( const char* filename ) { ifstream fin; fin.open(filename); //使用並查集的思想把元素新增到樹形結構中 vector<int> JointNum; vector<Joint*> jointList;//儲存節點的陣列 string line=""; while(getline(fin,line)){ vector<string> lineData; stringstream s(line); string data=""; while(getline(s,data,' ')){ lineData.push_back(data); } float x=(float)atof(lineData[0].c_str()); float y=(float)atof(lineData[1].c_str()); float z=(float)atof(lineData[2].c_str()); int parent=(int)atof(lineData[3].c_str());//父節點 Matrix4f m4; Joint *joint=new Joint; joint->transform=m4.translation(x,y,z);//平移矩陣 jointList.push_back(joint); JointNum.push_back(parent); } //採用並查集的方式來構建樹形結構 for(int i=1;i<jointList.size();i++){ int parent=JointNum[i]; jointList[parent]->children.push_back(jointList[i]); } m_joints=jointList;//m_joints是節點列表 m_rootJoint=m_joints.front();//m_rootJoint是根節點 }
檔案格式: