// Introduction Computing II // 2007/09/10b kameda // 2007/09/19b kameda // // ----------------------------------------------------------------- // [description] // スクリプトで3次元グラフィックスを制御するためのスクリプト仕様書 // // 1行で1つのデータを表現する.2行以上に跨るデータ表現はないものとする. // 以下,各行のフォーマットについて説明する. // // --- space and comment --- // // 空白行 // 空白行は何も実行に影響しない. // // #: // コメント (その行は行端まで無視される) // # You can write any comments after #. // // --- object --- // // O: [Object] // O // 物体のデータのはじまりを宣言 // 登録順に基いて1からObjectIDを付与 // (ObjectID=0は「直前の物体」を示す特別予約番号) // // L: [Line] // L x0 y0 z0 x1 y1 z1 r g b w // 線分の登録 // x0, y0, z0: 始点 // x1, y1, z1: 終点 // r,g,b : 色(R,G,B)は0.0-1.0で指定 // 線の太さはwで指定(基本は1.0) // // P: [Patch] // P x0 y0 z0 x1 y1 z1 x2 y2 z2 r g b // 三角形の登録 // x0, y0, z0: 頂点0 // x1, y1, z1: 頂点1 // x2, y2, z2: 頂点2 // パッチの外側は0,1,2の順で右ネジの法則 // // --- object animation --- // // A: [Animation] // A ObjectID step interval tx ty tz rx ry rz sx sy sz // 世界座標系に対する物体座標系の移動・回転・伸縮の操作を示す // tx,ty,tz: 平行移動 // rx,ry,rz: 回転(軸回り) [degree] // sx,sy,sz: 拡大縮小 // step : アニメーションにかける回数 // interval: // 同時指定した場合の演算はプログラム上の出現順序で // 平行移動、回転(X,Y,Z軸周りの順),拡大縮小 // の通り // (物体座標系から世界座標系への変換は逆順) // // C: [animation Continued] // C ObjectID step interval tx ty tz rx ry rz sx sy sz // 世界座標系に対する物体座標系の移動・回転・伸縮の操作に加えて、 // 物体の変形を表現する // (1) 移動・回転・伸縮 // A:と同じ // (2) 変形 // ObjectIDが前のAnimation(A行ないしC行)と異なる場合は、 // 変形操作を表す // 変形操作時の物体間の対応関係は、LとPのそれぞれの出現順 // なお、この(1)(2)は同時に行われる。 // // + 移動/回転/伸縮変更を任意順で実現するには? // + 複数物体の同時アニメーション操作は? // + スリープ (usleep [msec]) ... 運用で実現可能 // + 画面をクリア ... 運用で実現可能 // // --- 拡張 --- // // S: [light Source] // S px py pz dr dg db sr sg sb // 光源を規定する(OpenGLの仕様によりここでは最大で8個まで) // px,py,pz 世界座標内の光源位置 // dr,dg,db 拡散反射光の強さ(Red,Green,Blue)で0.0-1.0 // sr,sg,sb 鏡面反射光の強さ(Red,Green,Blue)で0.0-1.0 // ----------------------------------------------------------------- // [description] // 世界座標系とカメラの初期位置およびカメラのキーによる操作 // // y xy平面はそのままディスプレイ上の座標系と一致 // | (ただし原点と縮尺は異なる) // | // | カメラは c = (0,0,1) の位置に設置される。 // | カメラは (0,0,-1)の方向に向けられる。 // +-------- x →プログラム上では初期位置をc=(0,0,10)に。 // / // c // / // z // // カメラの方向は常に世界座標系原点に向けられる。 // Cursor-Left 世界座標系原点に対して左廻り(y axis, x to z) // Cursor-Right 世界座標系原点に対して右廻り(y axis, z to x) // Cursor-Up 世界座標系原点に対して接近 // Cursor-Down 世界座標系原点に対して離脱 // a 世界座標系原点に対して上廻り(xz plane to y) // z 世界座標系原点に対して下廻り(xz plane to -y) //