最終課題について

最終課題1

Lattice Designerを使って3Dモデリングを行い、作品をWWWページで 見られるようにする。 しめきりは2月1日(木)18:00
それまでにURLをkusumoto と sakana宛てにメールすること。 2月1日(木)18:00-20:00くらいに採点します。

最終課題2

C言語を使ったアニメーション作品を作成する。 しめきりは2月1日(木)18:00
それまでにC言語のプログラムと必要なファイルを kusumoto と sakana宛てにメールすること。

第12回講義資料(アニメーションプログラミング)

XVLモデルのアニメーション - 2

サンプルプログラム

// アニメーション


#include <sfcgl.h>
double xa=0., ya=0., za=0.; // x,y,zの平行移動量を保存する変数. void display() { int i, j; BGColor(0, 0, 0); // 背景を黒で描画する. SGBeginEdit(); // Translate(xa, ya, za); // xa,ya,zaだけ平行移動する. DrawCube(1.0); // 立方体を描画する. SGEndEdit(); // SGSwapFrames(); // フレームを入れ替える. } void key(unsigned char c, int x, int y) { if(c == 'l') xa += 0.1; // 'l'キーが押されたらx方向に0.1移動. if(c == 'r') xa -= 0.1; // 'r'キーが押されたらx方向に-0.1移動. SGPostRedisplay(); // 画面を再描画する. } int main(int argc, char** argv) { SGInit(argc, argv); // SGライブラリを初期化する. SGOpenWindow(0,0,500,500); // ウィンドウを開く. SG3DMode(); // 3Dモードに設定する. WireFrameMode(); // 形状を線で表示する. SGSetView(60.0, 1.0, 100.0); // SGSetDisplay(display); // 描画関数を指定する. SGKeyBoard(key); // キーボード関数を指定する. SGCallBack(); // コールバック関数. return 0; }

課題1

(a) 立体に色をつけ、さらに立体が自動回転するようにしましょう。
ヒント:
        FlatShadeMode();              // フラットシェードモード
        BGColor(200,200,200);         // 背景を灰色で描画.
        DiffuseColor(255, 255, 0);    // 形状の色の属性の設定.
        SpecularColor(255, 255, 255); //
        ShininessIntensity(100.0);    //
        SGSetIdle(myRotate);          // アイドル関数を指定する.
解答例
(b) 'u'、'd'キーを押した時、立体が上下するように改造しましょう。 さらに、'f'、'c'で立体が遠ざかったり、近づいたりするようにしましょう。
ヒント:
     if(c=='f')           // 'f'キーが押されたら
     if(c=='c')           // 'c'キーが押されたら 
     if(c == 'u')         // 'u'キーが押されたら
     if(c == 'd')         // 'd'キーが押されたら
解答例

課題2

(a) もう一つ、立方体を描画しましょう。1つの立方体の中心が(2, 0, 0)に なるようにしましょう。
ヒント:以下の関数を使います。
       Translate(2., 0., 0.);     // (2,0,0)だけ平行移動する.
(b) 5×5個の立体を描きましょう。大きさと位置は自由です。 ただし、立体は自動回転させましょう。

課題3

複数個の立体が運動しているプログラムを作成しましょう。 そのうち1つは Lattice DesignerのOBJファイルを入力しましょう。 さらに、Lattice Designerからの立体は丸めて表示しましょう。
ヒント:以下の関数を使ってOBJファイルの読み込みと表示をします。
       SGReadOBJ(argv[1],1);   // ファイルから形状を読み込む. 
       DrawAllShell();         // 読み込んだ形状をすべて表示する.
s95057hy-3.exe という実行ファイルと s95057hy.obj という 形状ファイルにした場合、
       s95057hy-3 s95057hy.obj
       として、ファイルを読み込ませます。 
ヒント:以下の関数を使って形状を丸めて滑らかに表示します。 Subdivision関数は、ファイルの読み込みを行った後で利用します。
       SmoothShadeMode();      // スムースシェードモード.
       Subdivision(sg_Shell);  // 読み込んだシェルを丸める.
注意! Lattice Designer で objファイルをエクスポートするときは、 すべてのシェルを丸め形状OFFにした状態で行って下さい。そうし ないとプログラムが落ちる場合があります。