2010/09/30

補足・チャプター3

前回の投稿で「次は4章でデバイスに流すぞ」発言してましたがちょっと気になるトコがあったので追加。

.sio2ファイルを書き出すときに設定するオプションと、書き出されたファイルの形式について。(卒論に書けそうなのでネタとして記述w)



前述の通り、.sio2ファイルを書き出す際にはオプションを設定できる。
そのオプションが「UP、N、O、V、IP」の5つ。

ちなみに、それぞれ設定する項目の頭文字をとっておるようです。


・UP (UPdate)
これは、既に出力されている.sio2ファイルに上書きする形で書き出す場合に有効なオプション。そのまま書き出すと重複するデータが出てくるので、新たに出力すべき最低限のファイルだけを書き出すようにする。そうすることによって書き出し時間の短縮になる。(今回のチュートリアルのファイルは数秒で終わったが^^;)


・N (Normal direction)
チュートリアルで設定したオプション。これは、通常の座標形式を書き出すようにするための設定する・・・らしい。よーわからんが。適切な照明効果を発揮するためには、SIO2側で全てのfaceの正確な方向を認識しておく必要がある。(どっちが表でどっちが裏?的な意味かな。反射に関わってくるからな。)
これを設定しないと正しい照明効果が得られないので、照明を使っているチュートリアルでは必要なオプションになる。

てか、大抵のモデリングでは照明効果使うでしょうに。
とにかく、オンにしてれば無難なオプションてことにしておこう。


・O (Optimization)
四角形のmeshを三角形に2等分する場合に設定するオプション。そうすることで、よりキメ細やかなモデルになるんですな。
あれ?OpenGL ESって三角形のmeshじゃないと扱わないんじゃないっけ?チュートリアルでは設定しなかったけど良かったのかなァ。


・V (Vertex color)
meshに対して照明効果が適用された状態の色情報を保存するためのオプション。これを使うと「照明→反映→色の変化」っていう手順が簡略化されるらしい。


・IP (Ipo curve)
Ipoカーブを書き出すためのオプション。
イロイロ突っ込みどころ満載だけど、今の英語&3Dの知識ではこれで限界。
Ipoカーブってのは色の状態を示すカーブみたいなんだけど、、、それを保存するオプションなのか?よく分からんかった。



さて。
お次はファイルの構造について。

スクリプトにより書き出されたものは、Hello3DWorldという名前のフォルダとHello3DWorld.sio2という名前のファイル。
これらの中身は同じものであり、フォルダとそれを.sio2にアーカイブした結果がこの2つ。

中には「camera、image、ipo、lamp、material、object、script」といったフォルダが存在し、それぞれの中にSIO2向けに変換された3Dシーンの要素となるファイルが入っている。
このファイルはテキストエディタで開けるようになっている。
まずはカメラオブジェクトの説明から。


camera( "camera/Camera")
{
l( 0 -3.594 0 )
r( 0.0 360.0 360.0 )
d( 0 1 0 )
f( 49.134 )
cs( 0.1 )
ce( 100 )
}


たったこれだけの要素でカメラの情報が構成されている。
l:Blenderで設定していたカメラが位置する座標
r:同じく角度
d:カメラの位置と角度から計算される、カメラの基準となるベクトルの方向。(X, Y, Zのどの方向に+でどの方向に−なのかってことか?)←要行列の勉強
f:カメラの向いている方向から計算されるアングル。レンズの値が小さいほど広角。
cs, ce:カメラのからの視点の有効範囲


そして3DオブジェクトのPlaneの中身がコチラ。
注意書きとして「今は四角形だけどこれから2つの三角形に分割するよ」みたいな記述があった。


object( "object/Plane" )
{
l( 0 5.9 0 )
r( 90 0 0 )
s( 3.35 3.35 3.35 )
ra( 5.84 )
di( 1.233 1.233 0 )
vb( 128 48 0 96 0 )
v( 1.233 1.233 0 )
v( -1.233 1.233 0 )
v( -1.233 -1.233 0 )
v( 1.233 -1.233 0 )
n( 0 0 1 )
n( 0 0 1 )
n( 0 0 1 )
n( 0 0 1 )
u0( 0 1 )
u0( 1 1 )
u0( 1 0 )
u0( 0 0 )
ng( 1 )
g( "null" )
mt( "material/Material.002" )
ni( 6 4 )
i( 3 0 1 2 )
i( 3 0 2 3 )
}



l:Blender上で設定されていた位置座標
r:同じく角度
ここまではカメラ同じ。
ra, di:これらの値は物理演算をするときの衝突が発生した際に用いる
vb:vertex bufferを決定するために必要な値(Appendix Bに詳細)
v:x,y,zそれぞれのvertex
u0:UVマッピングのvertex
n:不明
ng:meshで宣言されているvertexグループの数
g:上記グループの名称
i:ポリゴンを組み立てるために必要なリストの数

途中でNオプションを有効にすることで発生した項目もあるらしいのだが、どうもそれについてわからない。。。
後半戦は3Dの知識不足のせいでよー分からん内容になってしまったし。。。

ま、今は特に使わないからスルーで!←

SIO2のディレクトリ構造について、Appndix Cで詳しく記載されてるらしい。
どうしても必要ならそこから情報をいただくとしよう。


帰宅する。

0 件のコメント:

コメントを投稿