点・線分・多角形を レンダリングする方法 東京大学 精密工学専攻 大竹豊.

Slides:



Advertisements
Similar presentations
Computer graphics 入門 VRML を使用したCG. 2 1.1 Computer の歴史 (1)自動計算システム ブール代数(1854年)+2進法 +スイッチ回路 ⇒ 1940年後半 (2)プログラム内臓式 computer (現在の もの) 集合論(1895年、カントール)+ ラッセルのパラドックス+ヒルベルトの.
Advertisements

ファーストイヤー・セミナーⅡ 第13回 2次元グラフィックス(1). 2次元グラフィックス Ultra-C では、これまで利用してきた「標準入出力」 以外に「グラフィックス画面」があり、図形などを 表示できる C 言語のグラフィックスには細かな規定がなく、こ れから学ぶ内容が他の環境、システムでは利用でき.
計測情報処理論(4) レンズの基礎.
ゲーム開発者向け最新技術論文の解説・実装講座
初年次セミナー 第13回 2次元グラフィックス(1).
今回の内容 シェーディング マッピング 光の効果の表現 表面の素材の表現 オブジェクトの形状表現 光の効果の表現 表面の素材の表現
豊洲 304教室 15 JULY コンピュータグラフィックス 2008年度版.
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
プログラミング演習3 李 亜民クラス 第2回 ラスタライズ.
パノラマ動画像モデルによる 仮想空間表現システムの研究
図の挿入 ●方法1 ①図を挿入する位置にカーソルを置く。 ②「挿入」タブ ⇒「図」 → 「ファイルから」とクリックする。 ③挿入するファイルを選択し、「挿入」をクリックする。 ●方法2(書式までコピーされるので、ファイルサイズが大きくなる) ①挿入する図をコピーする。 ② 挿入する位置にカーソルを移動し、ツールバーまたは右クリックメニューの「貼り付け」をクリックする。
影付け,映り込み,光の屈折・反射などが表現でき,リアルな画像を生成できるレイトレーシング法について説明する.
Computer Graphics 第9回 レンダリング(3) シェーディング 大域照明モデル
第3回  CVにおけるエピポーラ幾何
本講義の目標: ・C言語とOpenGLを用いて,プログラミングによるコンピュータグラフィックス生成手法について学ぶ
3DCG技法についての 調査報告 ○○県立○○高等学校 1年は組 グループ0.
今日の内容 前回の演習の復習 前回の復習 ポリゴンの描画方法(復習) 基本オブジェクトの描画 ポリゴンモデルの描画 演習課題.
今日の内容 前回の復習 前回の演習の復習 視点操作の実現方法(復習) 視点操作の拡張 変換行列によるアニメーション 演習課題.
形状を平行移動や回転移動させて位置を変えたり,拡大・縮小して変形させる方法を説明する.
平成23年8月 情報学群 岡田 守 このスライドは, 前川佳徳編著による「コンピュータグラフィックス」(オーム社)を基に作成されている.
第四回 VB講座 画像とタイマー.
第4回:ボールを画面内で弾ませよう! (オブジェクトの移動、二次元)
地理情報システム論 第3回 コンピュータシステムおける データ表現(1)
画像の作成と編集.
CADの概要2 電子制御設計製図Ⅰ 2009年4月14日 Ⅲ限目.
WWW上の3次元空間表現 A three-dimesional space expression on WWW
形状モデリングにおいて,任意の自由曲面を定義する必要のある場合がある.自由曲面の表現法について説明する.
レンダリングにおいて写実性を高めるための処理である,シェーディングとテクスチャマッピングについて述べる.
透視投影(中心射影)とは  ○ 3次元空間上の点を2次元平面へ投影する方法の一つ  ○ 投影方法   1.投影中心を定義する   2.投影平面を定義する
第11回 オブジェクト(ベクトル,頂点,面)のクラス化とフラットシェーディング
コンピュータグラフィックスS 第6回 第6回 レンダリング・パイプライン システム創成情報工学科 尾下 真樹
CGと形状モデリング 授業資料 長井 超慧(東京大学)
オーサリングツール&ブラウザの 技術的トピック
C 言語について 補足資料 資料および授業の情報は :
コンピュータグラフィックスS 第13回 第13回 演習(4):シェーディング、マッピング システム創成情報工学科 尾下 真樹
グラフィックス、その1 色の表示 フォントを変えて文字を表示 直線、四角形、楕円形の描画 円弧の描画 多角形の描画
3D散歩ゲーム 08A2043 谷口盛海 種田研究室.
Computer Graphics 第3回 座標変換 芝浦工業大学情報工学科 青木 義満
CGと形状モデリング 授業資料 長井 超慧(東京大学)
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
Computer Graphics 第4回 投影・ビューイングパイプライン モデリング 芝浦工業大学情報工学科 青木 義満
電界中の電子の運動 シミュレータ作成 精密工学科プログラミング基礎 資料.
ポリゴンメッシュ (1) - データ構造とレンダリングに必要な計算 -
OpenGLを使ったプログラム作成 澤見研究室
CAD曲線 (ベジエ曲線・Bスプライン曲線)
第9回 卒業研究1
点・線分・多角形を レンダリングする方法 東京大学 精密工学専攻 大竹豊.
OpenGLライブラリを用いた3次元フラクタルの描画
5章  3次元形状を2次元面に投影する 3次元空間内に定義した形状を,2次元面上(ディスプレイのスクリーン面,プリンタの紙面など)に投影して表示するために必要になる変換について説明する.
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
可視面・不可視面の判定方法と隠れ面(不可視面)の消去法について述べる.
Minoのブロック配置のデータ構造 K.Yonezawa.
CAD曲面 東京大学 精密工学専攻 大竹豊 資料および授業の情報は :
DirectX勉強会 第2回.
ポリゴンメッシュ (2) - 変形と簡略化- 東京大学 精密工学専攻 大竹豊 資料および授業の情報は :
階層的境界ボリュームを用いた 陰関数曲面の高速なレイトレーシング法
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
SystemKOMACO Jw_cad 基本操作(3) Ver.1
プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4
資料 線型変換のイメージ 固有値、固有ベクトル 平賀譲(209研究室) 資料
第3回 基礎作図 基本的な作図法をしっかりと学ぶ! 本日の課題.
コンピュータグラフィックス 実習3: 光線追跡法
地理情報システム論(総)/ 国民経済計算論(商)
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
地理情報システム論(総)/ 国民経済計算論(商)
地理情報システム論 第4回 コンピュータシステムおける データ表現(2)
大阪工業大学 情報科学部 情報システム学科 学生番号 B02-014 伊藤 誠
ライティング メディアデザイン演習.
バネモデルの シミュレータ作成 精密工学科プログラミング基礎 資料.
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
Presentation transcript:

点・線分・多角形を レンダリングする方法 東京大学 精密工学専攻 大竹豊

今回の授業の目的 3次元形状を表示するための 仕組みを理解する OpenGL というライブラリを使うための 計算機環境を整える

話の流れ レンダリングの原理 投影変換 ラスタライズ 陰面消去 OpenGL プログラミング 形状の描画 アフィン変換 その他の設定

レンダリングとは? 形状データをディスプレイに表示すること 点・線分・多角形を表示することが出来れば、 ほとんどの場合は事足りる 点・線分・多角形を表示することが出来れば、 ほとんどの場合は事足りる データ (0,0,0) (1,0,0) (0,1,0) レンダリング ※ 広義のレンダリングの意味 :計算機上の数値データを 人間の五感で感じることが出来るように変換すること

レンダリングで 点・線分・多角形を使う理由 細かくすれば    あたかも曲線・曲面のようにみえるから 線分による曲線の描画 細かさ 多角形による曲面の描画

投影変換とは? 空間内の点(の集合)を スクリーンに投影すること 3次元空間内の オブジェクト (楕円体) 視線 空間内の点(の集合)を スクリーンに投影すること 3次元空間内の オブジェクト (楕円体) 視線 スクリーン (ディスプレイ) 視点

2次元の場合の投影変換の計算 三角形の相似を使う 視点 スクリーン ※ 上記の設定は、座標系の回転・平行移動を許すことにより、一般性を失わない

3次元の場合の投影変換の計算 スクリーンの縦・横方向に それぞれ2次元の場合を適用する 視点 スクリーン

平行・回転移動について (メモ) 投影変換をする座標系への移動の方法 スクリーンの中心を原点へ平行移動 視線方向を z 軸と一致するように回転移動 スクリーン上方向を y 軸と一致するように回転移動 縦 視線 横 縦 視線 縦 視線 横 横

ラスタライズとは? 投影後のスクリーン上の図形を 画素の集まりにする ラスタライズ 画素と同じ細かさの 格子に埋め込む 投影後のスクリーン上の図形を                画素の集まりにする 画素と同じ細かさの 格子に埋め込む ラスタライズ 中心が図形内にある 画素を塗りつぶす

※ 実際には小数の丸め誤差を防ぐために横方向の増分を掛け算して 整数演算のみで行う (ブレゼンハムのアルゴリズムを参照) 線分のラスタライズ 増分の緩やかな方向を縦にする 横に1づつ進みながら傾きを足していき,   足された値を含む画素を塗りつぶす 右を 塗りつぶす 右上を 塗りつぶす 終点まで 繰り返す ※ 実際には小数の丸め誤差を防ぐために横方向の増分を掛け算して 整数演算のみで行う (ブレゼンハムのアルゴリズムを参照)

三角形のラスタライズ 3本の線分をラスタライズ 内側を塗りつぶす 内側を 塗りつぶす

アンチエイリアシング(メモ) ギザギザに見えるのを 避けるための方法 格子を細かくしてラスタライズ 対応する画素での平均値を使う あり なし ギザギザに見えるのを       避けるための方法 格子を細かくしてラスタライズ 対応する画素での平均値を使う あり なし 2×2に分割して でラスタライズ 足して4で割った値で 塗りつぶす

陰面消去とは? 奥にある面は、手前の面に隠される 奥 手前 スクリーン 視点

Z(深度)-バッファ法 A A B B 各画素で深度値をバッファして(覚えて)おき, 手前の場合のみに描画を行う A をレンダリング 各画素で深度値をバッファして(覚えて)おき,   手前の場合のみに描画を行う 深度値 スクリーンの 画素 深度値 A A 深度値が 大きい ので無視 B B A をレンダリング B をレンダリング

レイトレーシング法 (メモ) 視点から各画素に向かって光線を追跡する A B 影を付けたりするなど、 よりリアルにレンダリングする時に用いられる A シャドウ レイ B セルフ シャドウ

話の流れ レンダリングの原理 投影変換 ラスタライズ 陰面消去 OpenGL プログラミング 形状の描画 アフィン変換 その他の設定

OpenGL とは? 3次元形状を描画するためのライブラリ 点の座標を渡すのみでよい OpenGL 射影変換 + ラスタライズ + 陰面消去 座標 (0,0,0) (1,0,0) (0,1,0)

多角形の描画の命令 glBegin と glEnd で囲む glBegin には描画する図形の種類を渡す Vertex とは、多角形の頂点のこと 3f はx,y,z 座標の3つの float の値 座標の指定は反時計回り 凹んだ多角形は正確に描かれない可能性がある 3角形 4角形 glBegin(GL_POLYGON); glVertex3f(0,0,0); glVertex3f(1,0,0); glVertex3f(0,1,0); glEnd(); glBegin(GL_POLYGON); glVertex3f( 1, 1,0); glVertex3f(-1, 1,0); glVertex3f(-1,-1,0); glVertex3f( 0,-1,0); glEnd();

描画できる図形の種類 glBegin の引数を変えれば色々描画できる 線分2本を描画 3点を描画 glLineWidth(2.5); glPointSize(3); glBegin(GL_POINTS); glVertex3f(0,0,0); glVertex3f(1,0,0); glVertex3f(0,1,0); glEnd(); glLineWidth(2.5); glBegin(GL_LINES); glVertex3f(0,0,0); glVertex3f(1,0,0); glVertex3f(0,1,0); glVertex3f(1,1,0); glEnd(); 1本目 2本目 描画される点(線分)の 大きさ(太さ)の設定

色の設定 glColor3f で、(R, G, B) を指定する 値は 0.0~1.0 まで glBegin(GL_POINTS); glVertex3f(0,0.5,0); glColor3f(0,1,0); glVertex3f(0,0,0); glColor3f(0,0,1); glVertex3f(0.5,0,0); glEnd();

※ 任意の軸の回転行列の算出については4元数 (quaternion) を使う場合が多い 座標系へのアフィン変換 平行移動 移動ベクトルを足す 拡大・縮小 各軸方向に拡大率を掛ける (原点が中心) 回転 指定した軸の周りに回転する (回転軸は原点を通る) (tx,ty,tz) glTranslatef(tx,ty,tz); (sx,sy,sz) (1,1,1) glScalef(sx,sy,sz); (rx,ry,rz) a° glRotatef(a,rx,ry,rz); ※ 任意の軸の回転行列の算出については4元数 (quaternion) を使う場合が多い

スタックによるアフィン変換の管理 現在の状態を覚える 直前に覚えた状態に戻る スタック 利用例 彗 地球 太陽 月 火星 Pop Push glPushMatrix(); glPopMatrix(); 太陽 を描く; Push; (太陽を描いた状態を覚える) アフィン変換; 地球 を描く; Push; (地球を描いた状態を覚える) アフィン変換; 月 を描く; Pop; (地球を描いた状態に戻る) Push; (地球を描いた状態を覚え直す) アフィン変換; 彗星 を描く; Pop; (太陽を描いた状態に戻る) アフィン変換; 火星 を描く; 利用例 彗 地球 太陽 月 火星

その他のOpenGLへの設定 視界の設定 オブジェクトの光の反射特性 光源 視点、視線方向、スクリーンの大きさ 拡散反射、鏡面反射、環境光 数、方向、位置、種類 (点光源,平行光源)

視界の設定 透視投影 平行投影 (視点が∞遠点) gluPerspective(angle,w/h,near,far); gluLookAt(ex,ey,ez,ox,oy,oz,ux,uy,uz); (ex,ey,ez) (ux,uy,uz) near far (ox,oy,oz) w h angle bottom near right left far top (ux,uy,uz) (ox,oy,oz) (ex,ey,ez) 視線 glOrtho(left, right,     bottom, top,     near, far);

オブジェクトの光の反射特性 Phong の近似モデル 拡散反射 鏡面反射 環境反射 光源は手前 全方位への反射 glMaterialfv(GL_FRONT, GL_DIFFUSE,色RGBAの配列); 光源は手前 てかてか度 glMaterialfv(GL_FRONT, GL_SPECULAR,色RGBAの配列); glMaterialf(GL_FRONT, GL_SHININESS,0~128); 照明と関係ない色 glMaterialfv(GL_FRONT, GL_AMBIENT,色RGBAの配列);

光源の設定 ライトを点ける (複数可能) ライトの位置と方向 ライトの色 8個ぐらいまで配置できる 平行光源(w=0)と点光源(w=1)の2種類がある ライトの色 拡散反射光・鏡面反射光・環境光 glEnable(GL_LIGHT0); (GL_LIGHT0~GL_LIGHT7) glLightfv(GL_LIGHT0,GL_POSITION,位置xyzwの配列); glLightfv(GL_LIGHT0,GL_DIRECTION,方向xyzの配列); glLightfv(GL_LIGHT0,GL_DIFFUSE,色RGBAの配列); glLightfv(GL_LIGHT0,GL_SPECULAR,色RGBAの配列); glLightfv(GL_LIGHT0,GL_AMBIENT,色RGBAの配列);

プログラミング課題 1 prog1-1 を使う 以下のような図を描け 中心は(0,0).枠の大きさは2×2. ② ① ③ いびつでもOK ④ 以下のような図を描け 中心は(0,0).枠の大きさは2×2. ② ① ③ いびつでもOK ④ ⑤ 六角形以上の 多角形

プログラミング課題 2 prog1-2 を使う ティーポットを上から見下ろせ ティーポットの三面図を表示せよ ティーポットの色を金色にせよ 青色の点光源を増やせ 平行投影から透視投影へ変更せよ

数学に興味のある人向けの 追加の課題 2つの座標系を一致させる手続きについて 数式を使って詳しく考えよ 2つの座標系を一致させる手続きについて 数式を使って詳しく考えよ アフィン変換や投影変換は 4×4の行列により表されることを確認せよ 4元数と回転変換の関係について調査せよ Zバッファ法とレイトレーシング法の 計算量を比較せよ