スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

再帰関数は 私を2日間悩ませた

【リンク】 ◆解説系TOP◆

現在、 Frameを持つXファイルを読み込む部分を制作しています。

で、 Frameって何?と思うのですが、簡単に言うと
階層構造を実現するためのものです。
("親子関係"、"兄弟関係"を作るもの、とも言える)

下記の様な感じです。
---------------------------------------------------------

Frame Box
{

FrameTransformMatrix {  //略 } 座標変換行列
Mesh {
//頂点、法線、UV座標など表示させる物体の情報。
}
Frame Box2
{

FrameTransformMatrix {  //略 } 座標変換行列
Mesh {
//頂点、法線、UV座標など表示させる物体の情報。
}
Frame Box3
{

FrameTransformMatrix {  //略 } 座標変換行列
Mesh {
//頂点、法線、UV座標など表示させる物体の情報。
}
}
Frame Box4
{

FrameTransformMatrix {  //略 } 座標変換行列
Mesh {
//頂点、法線、UV座標など表示させる物体の情報。
}
}
}
}


---------------------------------------------------------
コレをみても分かるように、Frameには大きく下の2つの情報を含んでいます。

Frame
・座標変換する行列
・物体の情報


で、階層構造はfor文などと同じように入れ子にして実現させます。

上記では3階層になっていることが分かると思います。

Box = 1階層
Box2 = 2階層
Box3 = 3階層
Box4 = 3階層


それぞれの関係は、

Box - Box2 = 親子関係
Box2 - Box3 = 親子関係
Box2 - Box4 = 親子関係
Box3 - Box4 = 兄弟関係


です。

また、具体的にどういう動きになるのか?というと、

Boxが動くと、Box2Box3Box4も同時に動く
Box2が動くと、Box3Box4も同時に動く
Box3が動くと、Box3のみが動く
Box4が動くと、Box4のみが動く


こんな感じになります。自分よりも階層が上の物体が動くと自分も動く、という事です。


で、この階層構造を持ったファイルを、再帰関数を使って読み込ませようとしたのですが、
物凄く苦労しました。
本当に苦労しました。
(2日間 悩み続けたのである。)
-----------------------------------
※悩みましたが、一応 さっき完成しました。
 粘れば何とかなるものですね。
-----------------------------------

単純に、自分の再帰関数を作った経験が足りないからなのかもしれませんが、
コレ作ろうとすると たぶん苦労するんじゃないかと思う。

この階層構造というのが単純な2分木なら良いんですけども、
このFrameというのは 複数の子供、複数の兄弟が持てるんですよね。
これが厄介。

"情報オリンピック"ではありませんが、時間のある方は挑戦してみてください。


【問】 階層構造を持つFrameを、ポインタを持ったノードで実現させよ。

※自分は、とりあえず下記の様な構造体を使って実装しました。
----------------------------------------------------------------------

typedef struct _NODE{
public:
_NODE* Brother;
_NODE* Child;
char* Name;

_NODE()
{
//初期化させる
}
~_NODE()
{
安全にdeleteする。
}
void SetName(//文字列を受け取る)
{
//文字列をName* にセット。
}
}NODE;

----------------------------------------------------------------------

で、下記の様なテキストデータを読み込んだ場合は、
-------------------- 【Frame.txt】 ------------------------------

Frame NodeA {
Frame NodeB {

}
Frame NodeC {

}
Frame NodeD {

Frame NodeE {

}
Frame NodeF {

Frame NodeG {

}

}
}
Frame NodeH {

}

}

-----------------------------------------------------------
NODEの構造はこうなります。
階層構造


制限時間は2日です。
(あくまでも、挑戦する場合の話です)

自分自身もまだまだなので、全くもって 添削は出来ません。
(実行して、メモリリークなど 何の問題も出なければ何でもOK)
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。