2節でもファイルのオープン・クローズの簡単なテストを行いましたが、ここでは、3DCGのフォーマットを決定してその情報をファイルから読み込めるようにします。
ファイルからデータを読み込んでメモリ上に展開するまでのところは、9節までのプログラムとは直接関係しないので、本節のプログラムはここで初めから書き起こします。
3DCGモデルのファイル読込は、ライブラリ状にして9節の本体プログラムに統合するという見通しなので、初めからファイルを分割してプログラミングするのがよいことになります。
10.01節ではファイルの中にまで踏み込まないので、モデルファイルは存在さえしていれば内容は空でも構いません。
【プログラム10-01】
演習
10-01-ex1: 与えるモデルファイルが存在しない場合と、存在しても開けない場合との両方についてエラートラップが実際に発生することを確認しなさい。
10-01-ex2: Cコンパイラにおいて、#define文で導入された文字列がどのようにメモリ上に展開されるか、eclipseを用いて確認してみなさい。
1行は三角形ポリゴン1つを表現します。
X0 Y0 Z0 X1 Y1 Z1 X2 Y2 Z2 R G B |
構造体の利用
上記のデータ構造に合わせて、ic2PATCH構造体を用意します。
ic2PATCH構造体はic2POINT構造体とic2COLOR構造体から構成されます。
また、リンクトリストで複数のパッチを一括管理するために、ポインタを含んでいます。
ヘッダファイル (ic2-ModelHeaders.h)
ライブラリ的利用をするために、共通部分をヘッダファイル化します。
【プログラム10-02】
演習
10-02-ex1: ic2_InsertPATCH()関数の(5)のプログラムソースについて、各変数とアドレスとの関係を図で示しながら、当該部分が新しいパッチをリストの先頭に挿入できていることを示しなさい。
10-02-ex2: ic2_InsertPATCH()関数の(5)のプログラムソースについて、新しいパッチがリンクトリストの最後尾に挿入されるように改造しなさい。
10-02-ex3: 上記ファイル内の構文の制約[1] - [5]がプログラムソースでどのように実現されているか、それぞれ当該部分を示しながら説明しなさい。