.Xの階層メッシュアニメーションを読み込んでみる1

では、手始めに .X の階層メッシュを読み込んで階層付きでコンソール出力してみます。
今回は複雑な階層を再帰関数で再現するために新しく sample.x というファイルを作成
しています。


この sample.x は以下のような階層構造を持っています。


それでは以下のプログラムでコンソール出力してみましょう。

#include <windows.h>
#include <stdio.h>
#include <string>

//階層メッシュクラス
class HIERARCHY{
public:
 bool Load_Hierarchy(char* FileName); //階層メッシュ読み込み
 bool Load_Frame(FILE& fp,int& hierarchy);  //フレーム読み込み
 HIERARCHY();
 HIERARCHY(char* FileName);
};
HIERARCHY::HIERARCHY(){
}
HIERARCHY::HIERARCHY(char* FileName){
 Load_Hierarchy(FileName);
}
//フレーム読み込み
bool HIERARCHY::Load_Frame(FILE& fp,int& hierarchy){
 int current=hierarchy;
 char key[255];
 while(!feof(&fp))
 {
  //キーワード 読み込み
  ZeroMemory(key,sizeof(key));
  fscanf_s(&fp,"%s ",key,sizeof(key));
  if(strcmp(key,"{")==0){
   hierarchy++;
  }
  if(strcmp(key,"}")==0){
   hierarchy--;
   if(hierarchy==current-1)return true;//呼び出された階層に戻ったらreturnする
  }
  if(strcmp(key,"Frame")==0){
   fscanf_s(&fp,"%s ",key,sizeof(key));
   for(int i=0;i<hierarchy;i++)printf("\t");
   printf("Frame:%s\n",key);
   Load_Frame(fp,hierarchy);//再帰呼び出し
  }
 }
 return true;
}
//階層メッシュ読み込み
bool HIERARCHY::Load_Hierarchy(char* FileName){
 //Xファイルを開いて内容を読み込む
 int hierarchy=0;
 FILE* fp=NULL;
 fopen_s(&fp,FileName,"rt");
  //読み込み
 fseek(fp,SEEK_SET,0);
 while(!feof(fp))
 {
   Load_Frame(*fp,hierarchy);
 }
 fclose(fp);
 return true;
}

HIERARCHY* X_MODEL;

void main()
{
 X_MODEL = new HIERARCHY("sample.x");
 getchar();
}

 

最終更新:2011年06月06日 00:32