CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)

Slides:



Advertisements
Similar presentations
初年次セミナー 第13回 2次元グラフィックス(1).
Advertisements

情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
初年次セミナー 第14回 2次元グラフィックス(2).
プログラミング演習3 李 亜民クラス 第2回 ラスタライズ.
CGアニメーションの原理 基本技術 対象物体の動きや変形の設定方法 レンダリング技術
11章 ボリュームレンダリングを学ぶ 本来は目に見えない内部情報をレンダリングし可視化する技術
豊中高校土曜講座「数学セミナー2003」 プラトン多面体の数学 なぜ正多面体は5種類しかないのか 大阪府立豊中高等学校 深川 久.
ラベル付き区間グラフを列挙するBDDとその応用
プログラミング言語としてのR 情報知能学科 白井 英俊.
形状を平行移動や回転移動させて位置を変えたり,拡大・縮小して変形させる方法を説明する.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
平成23年8月 情報学群 岡田 守 このスライドは, 前川佳徳編著による「コンピュータグラフィックス」(オーム社)を基に作成されている.
エクセル(2)の目次 セル範囲の指定方法 データの消去法 アクティブセルの移動 セル内容の複写と移動 セル幅の変更方法
第4回:ボールを画面内で弾ませよう! (オブジェクトの移動、二次元)
形状モデリングにおいて,任意の自由曲面を定義する必要のある場合がある.自由曲面の表現法について説明する.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
システム開発実験No.7        解 説       “論理式の簡略化方法”.
透視投影(中心射影)とは  ○ 3次元空間上の点を2次元平面へ投影する方法の一つ  ○ 投影方法   1.投影中心を定義する   2.投影平面を定義する
高山建志 五十嵐健夫 テクスチャ合成の新たな応用と展開 k 情報処理 vol.53 No.6 June 2012 pp
(ラプラス変換の復習) 教科書には相当する章はない
3次元での回転表示について.
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
第7回 条件による繰り返し.
CGと形状モデリング 授業資料 長井 超慧(東京大学)
C 言語について 補足資料 資料および授業の情報は :
3D散歩ゲーム 08A2043 谷口盛海 種田研究室.
CGと形状モデリング 授業資料 長井 超慧(東京大学)
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
プログラミング応用 printfと変数.
電界中の電子の運動 シミュレータ作成 精密工学科プログラミング基礎 資料.
ポリゴンメッシュ (1) - データ構造とレンダリングに必要な計算 -
CAD曲線 (ベジエ曲線・Bスプライン曲線)
人工知能特論 9.パーセプトロン 北陸先端科学技術大学院大学 鶴岡 慶雅.
OpenGLライブラリを用いた3次元フラクタルの描画
第14章 モデルの結合 修士2年 山川佳洋.
前回の練習問題.
流体の粘性項を 気体分子運動論の助けを借りて、 直感的に理解する方法
第7回 条件による繰り返し.
6. ラプラス変換.
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
3次元での回転表示について.
デジタル画像とC言語.
CAD曲面 東京大学 精密工学専攻 大竹豊 資料および授業の情報は :
25. Randomized Algorithms
ポリゴンメッシュ (2) - 変形と簡略化- 東京大学 精密工学専攻 大竹豊 資料および授業の情報は :
関数への道.
学 正多角形のどんな性質を使えば,プログラミングで正多角形を描くことができるだろうか。
プログラミング 3 2 次元配列.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
地理情報システム論(総)/ 国民経済計算論(商)
地理情報システム論 第4回 コンピュータシステムおける データ表現(2)
アルゴリズムとデータ構造1 2009年6月15日
バネモデルの シミュレータ作成 精密工学科プログラミング基礎 資料.
精密工学科プログラミング基礎 第7回資料 (11/27実施)
アルゴリズム入門 (Ver /10/07) ・フローチャートとプログラムの基本構造 ・リスト ・合計の計算
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
Cプログラミング演習 ニュートン法による方程式の求解.
アルゴリズムとデータ構造 2010年6月17日
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
市松模様を使用した カメラキャリブレーション
プログラミング入門2 第5回 配列 変数宣言、初期化について
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所) ポリゴンメッシュ (2) - 変形と簡略化- CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所) 資料および授業の情報は : http://www.den.t.u-tokyo.ac.jp/ohtake/CG/

今回の授業の目的 ポリゴンメッシュに関して以下を学ぶ 頂点を移動することによる形の変形 三角形の数を減らすことによる簡略化

話の流れ 変形 モーフィング 簡略化

メッシュの変形とは? 頂点を動かすことにより実現される 頂点移動 変形

変形方法の分類 表面形状を直接変形する方法 表面形状と関係なく空間を変形する方法 考え方のみ説明します 簡単なものについてプログラミングをしてみます

曲面を直接変形する手法 形がなるべく変わらないように、 ユーザが指定した制御点の移動を反映する 変形 デモ入ります

最も単純な変形手法 ラプラシアンを曲面の局所的な形状として 変形の前後でなるべく同じになるようにする ラプラシアン: 局所的な凹凸情報 ラプラシアンを曲面の局所的な形状として 変形の前後でなるべく同じになるようにする ラプラシアン:   局所的な凹凸情報 制御点 (頂点の部分集合)

空間変形による変形方法 空間を歪めることにより, 結果として空間に存在する頂点が移動する 元の頂点と空間 変形後の頂点と空間

空間変形の関数 入力 : 変形前の頂点の位置 出力 : 変形後の頂点の位置

単純な変換の例 平行移動 回転移動

単純な空間変形 回転変換や平行移動を 空間の位置によって変える 回転角を増やす 局所的に 平行移動する つまみ変形 ねじり変形

ねじり変形の詳細

つまみ変形の詳細 2次元の場合 移動ベクトル 影響半径 影響の強さ 変形中心

複数でつまむ すべてのつまみ変形を足す

変形の関数 変形のためのデータ //変形ベクトルの数 float (*ver0)[3] ; //変形前の頂点 #define N 2 float t[N][3] = {{0,0,0.75}, {0.5,0,0} }; //変形領域の中心の座標 float c[N][3] = { {0,0,1}, {1,0,0} }; //変形領域の半径 float r[N] = {1.5, 0.4}; float (*ver0)[3] ; //変形前の頂点 float (*ver)[3]; //変形後の頂点 void deform(){ for(int i=0; i<verN; i++){ float s[3] = {0,0,0}; for(int j=0; j<N; j++){ // ここでこの式が計算される } ver[i][0] = ver0[i][0] + s[0]; ver[i][1] = ver0[i][1] + s[1]; ver[i][2] = ver0[i][2] + s[2];

課題 1 prog3-2 を使う 変形を試してみよ 変形後に口と鼻が付くように 変形のデータ変更せよ ‘d’ キーを押すと変形後が表示される 変形後に口と鼻が付くように    変形のデータ変更せよ

話の流れ 変形 モーフィング 簡略化

メッシュモーフィング 2つのメッシュを時間軸において補間する モーフィング前の メッシュ モーフィング後の メッシュ 0.25 0.5 0.25 0.5 0.75 1 時間

単純なモーフィング法 対応するメッシュの頂点を直線的に移動する 三角形は同じであると仮定する t 1-t

プログラム float (*ver0)[3] ; //モーフィング前のメッシュ アニメーションの仕組み void morphing(float t){ } 時間 t を増やす/減らす 全ての頂点に関して を計算する 頂点位置の変更 繰り返す メッシュのレンダリング

課題 2 prog3-3 を使う モーフィングの関数 “morphing” を完成させよ #define されている値 NUM_FRAME は t が 0~1 に変わる間に何コマに分けるかを表す. この値を変更するとどうなるか観察せよ. 時間 t の変化の範囲を -1 ~ 2 に変更すると   どのように変わるか観察せよ

話の流れ 変形 モーフィング 簡略化

メッシュ簡略化 なるべく形が変わらないように、    メッシュの三角形の数を減らす 約4分の1の三角形数

最も良く用いられる手法 (Garland-Heckbert 法, 1997) 辺を潰すことを繰り返していく 辺を潰す (頂点が1個、三角形2個 が消える) 繰り返し数

単純な手法 格子を使って、頂点をまとめる 単位格子 (セル) に入っている複数の頂点を                ひとつの頂点へまとめる 一つに まとめる

計算方法 各三角形 (A,B,C) において以下を行う 関数 cellVertexID(A) の返り値を A’ へ代入 関数 cellVertexID(B) の返り値を B’ へ代入 関数 cellVertexID(C) の返り値を C’ へ代入 もし A’≠ B’ かつ B’≠ C’ かつ C’≠ A’ ならば     三角形 (A’,B’,C’) を簡略化メッシュへ追加する 関数 cellVertexID(v) : 頂点 v を含むセル C を見つける もしセル C に簡略化後の頂点が未割当なら 簡略化後のメッシュへ 頂点 v を追加する セル C へ 頂点 v を割り当てる セル C に割り当てられている頂点を返す サブ関数

簡略化をする前のデータの初期化 データ 簡略化の処理 次 ページ //セルとその数 verN = 0; #deinfe CELLN 50 int cell[CELLN][CELLN][CELLN] //簡略化前のメッシュ int ver0N; float (*ver0)[3] ; int tri0N; int (*tri0)[3]; //簡略化後のメッシュ int verN; float (*ver)[3] ; int triN; int (*tri)[3]; verN = 0; triN = 0; for(int i=0; i<CELLN; i++) for(int j=0; j<CELLN; j++) for(int k=0; k<CELLN; k++) cell[i][j][k] = -1; 簡略化の処理 for(int i=0; i<tri0N; i++){ int* t0 = tri0[i]; int a = cellVertexID( t0[0] ); int b = cellVertexID( t0[1] ); int c = cellVertexID( t0[2] ); if(a != b && b != c && c != a) addTriangle(a, b, c ); } 次 ページ

サブ関数 int cellVertex(int id){ float* p = ver0[id]; //格子全体の大きさは [-1,1]3 int cx = (int)(CELL*(p[0] + 1.0f)/2.0f); int cy = (int)(CELL*(p[1] + 1.0f)/2.0f); int cz = (int)(CELL*(p[2] + 1.0f)/2.0f); if(cells[cz][cy][cx] < 0){ cells[cz][cy][cx] = numVertices; addVertex( p ); } return cells[cz][cy][cx]; void addTriangle(int a, int b, int c){ } 課題 : 三角形 (a,b,c) を 簡略化後の三角形 tri へ追加 void addVertex(float p[3]){ } 課題 : 頂点 p を 簡略化後の頂点 ver へ追加

課題 3 prog3-4 を使う 簡略化後の頂点・三角形を 追加する関数を完成させよ 簡略化後の頂点・三角形を 追加する関数を完成させよ ‘s’ キーで簡略化後のメッシュが表示される ‘o’ キーで簡略化前のメッシュが表示される 現在の簡略化の計算法においては、各セルに含まれる頂点群のうちで番号が最初のものが簡略化後の頂点になる.改良して、簡略化後の頂点が各セルに含まれる頂点群の平均になるようにせよ. 必要な変数は追加してよい