10. ファイルからの3DCGモデル読込

【計算機序論2・実習(2012年度)】 目次, 計算機序論2, 授業科目, www.kameda-lab.org 2012/11/19a

2節でもファイルのオープン・クローズの簡単なテストを行いましたが、ここでは、3DCGのフォーマットを決定してその情報をファイルから読み込めるようにします。
ファイルからデータを読み込んでメモリ上に展開するまでのところは、9節までのプログラムとは直接関係しないので、本節のプログラムはここで初めから書き起こします。


10.01. ファイルのオープン・クローズ

3DCGモデルのファイル読込は、ライブラリ状にして9節の本体プログラムに統合するという見通しなので、初めからファイルを分割してプログラミングするのがよいことになります。
10.01節ではファイルの中にまで踏み込まないので、モデルファイルは存在さえしていれば内容は空でも構いません。

【プログラム10-01】

  1. 10-01-MainFunction.c
  2. 10-01-ReadModel.c
  3. ic2_DefaultModel.txt

演習
10-01-ex1: 与えるモデルファイルが存在しない場合と、存在しても開けない場合との両方についてエラートラップが実際に発生することを確認しなさい。
10-01-ex2: Cコンパイラにおいて、#define文で導入された文字列がどのようにメモリ上に展開されるか、eclipseを用いて確認してみなさい。


10.02. モデルデータのファイルからの読込

3DCGモデルファイルのデータフォーマット

1行は三角形ポリゴン1つを表現します。
X0 Y0 Z0 X1 Y1 Z1 X2 Y2 Z2 R G B

ファイル内の構文
[1] 要素の間は1つ以上のスペース
[2] 3頂点を0,1,2の順に(右ネジに)なぞったときに反時計回りに見える側を表とする(右ネジの先端側が表)
[3] RGBは0.0〜1.0の範囲
[4] 空行、スペースのみの行は無視
[5] 先頭が#で始まる行はコメント行として無視

構造体の利用
上記のデータ構造に合わせて、ic2PATCH構造体を用意します。
ic2PATCH構造体はic2POINT構造体とic2COLOR構造体から構成されます。
また、リンクトリストで複数のパッチを一括管理するために、ポインタを含んでいます。

ヘッダファイル (ic2-ModelHeaders.h)
ライブラリ的利用をするために、共通部分をヘッダファイル化します。

【プログラム10-02】

  1. ic2-ModelHeaders.h
  2. 10-02-MainFunction.c (10-01からの差分)
  3. 10-02-ReadModel.c (10-01からの差分)
  4. ic2_DefaultModel.txt (10-01と同じ)

演習
10-02-ex1: ic2_InsertPATCH()関数の(5)のプログラムソースについて、各変数とアドレスとの関係を図で示しながら、当該部分が新しいパッチをリストの先頭に挿入できていることを示しなさい。
10-02-ex2: ic2_InsertPATCH()関数の(5)のプログラムソースについて、新しいパッチがリンクトリストの最後尾に挿入されるように改造しなさい。
10-02-ex3: 上記ファイル内の構文の制約[1] - [5]がプログラムソースでどのように実現されているか、それぞれ当該部分を示しながら説明しなさい。


kameda[at]iit.tsukuba.ac.jp.