最終課題について
最終課題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にした状態で行って下さい。そうし
ないとプログラムが落ちる場合があります。