1 / 17

ICG08 Modeler-3

ICG08 Modeler-3. TA : 大森・後藤・魏. Modeler プログラム概要. スケルトンのコンパイル プリミティブの追加 スライダーの追加 階層モデル アニメーション. 3D モデルを作ろう. 前回までに作成したプリミティブを積み木のように組み合わせて、自分の 3D モデルを作ろう 先生配布の課題内容を読むこと! プリミティブを「どの場所に」「どの向きで」「どんな大きさで」配置するかを 座標系の変換 で指定しよう. 座標系の変換. glTranslated(double x, double y, double z)

sheryl
Télécharger la présentation

ICG08 Modeler-3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ICG08 Modeler-3 TA : 大森・後藤・魏

  2. Modelerプログラム概要 • スケルトンのコンパイル • プリミティブの追加 • スライダーの追加 • 階層モデル • アニメーション

  3. 3Dモデルを作ろう • 前回までに作成したプリミティブを積み木のように組み合わせて、自分の3Dモデルを作ろう • 先生配布の課題内容を読むこと! • プリミティブを「どの場所に」「どの向きで」「どんな大きさで」配置するかを座標系の変換で指定しよう

  4. 座標系の変換 • glTranslated(double x, double y, double z) それぞれx, y, zだけ平行移動する • glScaled(double x, double y, double z) それぞれの軸方向にx, y, z倍スケーリングする • glRotated(double theta, double x, double y, double z) ベクトル(x, y, z)方向にtheta度だけ回転する • glPushMatrix() 現在の座標系の状態をスタックに記録する • glPopMatrix() スタックから座標系の状態を読み込む

  5. 3Dモデルを作ろう • 例えば以下のような3Dモデルを作りたい

  6. 階層モデリング • ジョイントで繋がっている部分で階層的に考えよう ①floor ②arm ③neck ④head(1) ⑤head(2) ⑥nail(1) ⑦nail(2) ⑧nail(3) ⑨nail(4) ④head(1) ⑤head(2) ③neck ⑧nail(3) ⑥nail(1) ⑦nail(2) ⑨nail(4) ②arm ①floor

  7. y y x O O x 階層モデリング • 動かない部分(低階層部分)から作ろう! • 座標系を常に意識しよう! 左図のように配置したいが、drawBoxは「原点を一端とした直方体」

  8. y y y O O x x O x 階層モデリング • 座標系をスタックに保存 • 座標系を平行移動 • 直方体を配置 • 座標系をスタックから読む glPushMatrix(); glTranslated(-2.5,0,-2.5); drawBox(5,0.01f,5); glPopMatrix();

  9. y O x 階層モデリング • 後は同じ要領で! // draw arm glRotated(VAL(ROOT_ROT), 0.0, 0.0,-1.0); drawBox( 0.3, 3.0, 0.3); // draw neck glTranslated( 0.0, 3.0, 0.0); glRotated(VAL(NECK_ROT), 0.0, 0.0, 1.0); drawBox( 0.3, VAL(NECK_LENGTH), 0.3); ・・・(以降省略) ソースファイルhttp://www.cavelab.cs.tsukuba.ac.jp/icg/RobotArm.cpp

  10. アニメーション • 恐竜の歩行アニメーションのサンプルを見てください ソースファイルhttp://www.cavelab.cs.tsukuba.ac.jp/icg/t_rex.cpp

  11. アニメーション • 基本はパラパラ漫画 • draw関数内で描いている3Dモデルのパラメータを少しずつ変えていこう • 基本機能はスケルトンで実装されている • メニュー 「Animate」を「Enable」にすると、1秒に約30回draw関数を呼び出してくれる

  12. アニメーション • draw関数の直前にVALの定義が書いてあるので、そこに2行追加しよう • draw関数内で、アニメーションのフレーム番号を管理しよう #define VAL(x) (ModelerApplication::Instance()->GetControlValue(x)) #define SVAL(x,y) (ModelerApplication::Instance()->SetControlValue(x,y)) #define ANIMATION (ModelerApplication::Instance()->GetAnimating())

  13. フレーム番号の管理 • 方法その1 • フレーム番号を表すスライダーを追加する • (前回のスライドを参照) • 方法その2 • フレーム番号を表すスタティック変数を作る void T_RexModel::draw() { static int anim_counter = 0; ・・・(以下略)

  14. アニメーション • アニメーション時と非アニメーション時は以下で判別できます if(ANIMATION) { // アニメーション時の処理を書く SVAL(XPOS, 0.3*cos(anim_counter*PI/180.0)); // (中略) // フレーム番号を更新 anim_counter++; anim_counter %= 360; } else { // 非アニメーション時の処理を書く } 方法その2の場合の例

  15. アニメーション • スライダーで追加した変数の値はSVALを用いて変更しよう • フレーム番号を方法その1で実装した場合もSVALで • if文内ではパラメータ設定だけをして、モデル描画はif文の外で行うのがオススメ

  16. アニメーション作成のコツ • 歩行などの周期的な動作の場合は、sinやcosをうまく使おう • 関節の多いモデルについて • 各関節毎にパラメータを設定した方がモデル作成は簡単 • 少ないパラメータ数で多くの関節を動かす方がアニメーション作成は楽かも • 動作を予め記述する方法以外にも、物理の方程式を解いて動かす事もできる • 振り子 • バネ • ボールの落下 etc. • リアルな動作に凝るも良し、ネタに走るも良し。頑張って下さい

  17. Modeler課題提出方法 • 以下のスケルトンコードをダウンロードして使用してください http://130.158.80.141/~cai/Project/Project3/Project3-Modeler08.html • この資料はここにあります http://www.cavelab.cs.tsukuba.ac.jp/icg/modeler2008-3.ppt • 締め切りの日:2008-07-04 • 提出:cai@cs.tsukuba.ac.jp CC: icg-report@aoi3.cs.tsukuba.ac.jp • 件名式:kadai3(学籍番号) • Wordドキュメントにはオリジナルプリミティブと自分の3Dモデルの説明を書く

More Related