ZINDAIJI カメラワークファイル文法 ver0.985版

テキストの更新(2005/4/4)
この文章は他のZINDAIJI(ver0.985)で使っているカメラワーク保存ファイルの文法の解説です。
機能拡張するとそのうち変わるかも知れません。

文法は非常にシンプルなテキストファイルになっています。n番目のスナップショットデータに対応するカメラ位置等の情報がn行目に書き込まれています。データとデータを分けるセパレータは空白文字です。

プログラミングの出来る人であれば、つらつらと文法の説明をするよりも、コードを見れば一目瞭然でしょう。
カメラワークの書き込みのコード部分は
for (int i=0;i<=GCStep.index_last;i++){
    fprintf(lpFile, "%d %d %e %e %e %e %e %e %e %e %e %d %e %e %e %d %e %e %e %e %e %e %e %e %e\n",
	    i, mCCamera.mAbKey[i],
	    mCCamera.mACPos[i].mPos[X],
	    mCCamera.mACPos[i].mPos[Y],
	    mCCamera.mACPos[i].mPos[Z],
	    mCCamera.mACPos[i].mCDir.target[X],
	    mCCamera.mACPos[i].mCDir.target[Y],
	    mCCamera.mACPos[i].mCDir.target[Z],
	    mCCamera.mACPos[i].mCDir.top[X],
	    mCCamera.mACPos[i].mCDir.top[Y],
	    mCCamera.mACPos[i].mCDir.top[Z],
	    mCAnchor.mAbKey[i],
	    mCAnchor.mACPos[i].mPos[X],
	    mCAnchor.mACPos[i].mPos[Y],
	    mCAnchor.mACPos[i].mPos[Z],
	    mCCamera.mAbKey[i],
	    mCCamera.mACPos[i].mVel[X],
	    mCCamera.mACPos[i].mVel[Y],
	    mCCamera.mACPos[i].mVel[Z],
	    mCCamera.mACPos[i].mCDDirDt.target[X],
	    mCCamera.mACPos[i].mCDDirDt.target[Y],
	    mCCamera.mACPos[i].mCDDirDt.target[Z],
	    mCCamera.mACPos[i].mCDDirDt.top[X],
	    mCCamera.mACPos[i].mCDDirDt.top[Y],
	    mCCamera.mACPos[i].mCDDirDt.top[Z] ); }
となっています。
機能拡張の度に長くなっているので、順番とか綺麗ではありませんね。(^ ^;

以下、それぞれの変数の説明です。

i行そのものの番号をあらわします。無駄といえば無駄ですが、そのうちコメントを無視する機能とかつけると必要になるかも。
mCCamera.mAbKey[i]カメラ位置のキーフレームかどうかの判定です。
0:キーフレームではない。1:キーフレームである。
mCCamera.mACPos[i].mPos[xyz]カメラの位置のxyzです。
mCCamera.mACPos[i].mCDir.target[xyz]カメラの向いている方向の単位ベクトルをxyzで表したものです。
mCCamera.mACPos[i].mCDir.top[xyz]カメラの上方向の定義をxyzで表したものです
mCAnchor.mAbKey[i]アンカー位置のキーフレームかどうかの判定です。
mCAnchor.mACPos[i].mPos[xyz]アンカーの位置のxyzです。
mCCamera.mAbKey[i]2番目の要素と同じものを2つ書き出しているけど…。
実はこちらは、速度情報を使うか前後のキーフレームの位置から速度情報を補完するか、やはり01で選択するものです。
読み込み時では2番目の値とちゃんと区別しています。
mCCamera.mACPos[i].mVel[xyz]カメラの移動速度をxyzで表したものです。上の値が1で無ければ、自動的に前後のキーフレームのカメラ位置から補完されます。
mCCamera.mACPos[i].mCDDirDt.target[xyz]カメラの向いている方向の単位ベクトルの時間変化の速度をxyzで表したものです。
mCCamera.mACPos[i].mCDDirDt.top[xyz]カメラの上方向を定義した単位ベクトルの時間変化の速度をxyzで表したものです。

カメラワークの補間方法は、粒子の補間と同様のルーチンを使用しているので、速度情報は時間の情報を含んだものです。
1ステップ目でx1にあるカメラが、2ステップ目にx2にあるような場合の速度は、
スナップショットデータのステップごとの時間間隔が1だったならば、(x2-x1)/1になります。
もしステップごとの時間間隔が100だったならば、速度は(x2-x1)/100になります。

戻る