8. テクスチャマッピング y t s x z 8.1. テクスチャマッピングの原理

Slides:



Advertisements
Similar presentations
地図の重ね合わせに伴う 位相関係の矛盾訂正手法 萬上 裕 † 阿部光敏* 高倉弘喜 † 上林彌彦 ‡ 京都大学工学研究科 † 京都大学工学部 * 京都大学情報学研究科 ‡
Advertisements

1 最終授業 試験は行いません 全課題の最終締め切りは 1/13 の 21:00 で す。 基本課題は必ず全て提出してください。 提出先に間違いがないか再度確認して ください。
自動映像生成のための パーティクルフィルタによるボールの追 跡 2007 年 3 月 21 日 神戸大学大学院自然科学研究科 矢野 一樹.
画像情報処理1 ~画像処理プログラミング~ 2015/05/01 知的画像処理研究室 M1 吉原寛樹
Determining Optical Flow. はじめに オプティカルフローとは画像内の明る さのパターンの動きの見かけの速さの 分布 オプティカルフローは物体の動きの よって変化するため、オプティカルフ ローより速度に関する情報を得ること ができる.
今回の内容 シェーディング マッピング 光の効果の表現 表面の素材の表現 オブジェクトの形状表現 光の効果の表現 表面の素材の表現
豊洲 304教室 15 JULY コンピュータグラフィックス 2008年度版.
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
図の挿入 ●方法1 ①図を挿入する位置にカーソルを置く。 ②「挿入」タブ ⇒「図」 → 「ファイルから」とクリックする。 ③挿入するファイルを選択し、「挿入」をクリックする。 ●方法2(書式までコピーされるので、ファイルサイズが大きくなる) ①挿入する図をコピーする。 ② 挿入する位置にカーソルを移動し、ツールバーまたは右クリックメニューの「貼り付け」をクリックする。
画像処理工学 2012年2月2日 担当教員 北川 輝彦.
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
本講義の目標: ・C言語とOpenGLを用いて,プログラミングによるコンピュータグラフィックス生成手法について学ぶ
情報処理入門A・B 第7回 ワープロソフト入門(2)
デジタルポートフォリオ作成支援ツール PictFolio 使用マニュアル
Power Pointの小技 付箋はがしのアニメーション.
データ構造とアルゴリズム 第10回 mallocとfree
平成23年8月 情報学群 岡田 守 このスライドは, 前川佳徳編著による「コンピュータグラフィックス」(オーム社)を基に作成されている.
地理情報システム論 第3回 コンピュータシステムおける データ表現(1)
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
画像の作成と編集.
デスクトップを画像として保存する(1) ① デスクトップの画像をクリップボードへコピーする。
CADの概要2 電子制御設計製図Ⅰ 2009年4月14日 Ⅲ限目.
レンダリングにおいて写実性を高めるための処理である,シェーディングとテクスチャマッピングについて述べる.
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
高山建志 五十嵐健夫 テクスチャ合成の新たな応用と展開 k 情報処理 vol.53 No.6 June 2012 pp
コンピュータグラフィックスS 第6回 第6回 レンダリング・パイプライン システム創成情報工学科 尾下 真樹
2014/05/02 知的画像処理研究室 M1 中津美冴 画像情報処理1 ~画像処理プログラミング~ 2014/05/02 知的画像処理研究室 M1 中津美冴
CGと形状モデリング 授業資料 長井 超慧(東京大学)
オーサリングツール&ブラウザの 技術的トピック
C 言語について 補足資料 資料および授業の情報は :
コンピュータグラフィックスS 第13回 第13回 演習(4):シェーディング、マッピング システム創成情報工学科 尾下 真樹
3D散歩ゲーム 08A2043 谷口盛海 種田研究室.
Computer Graphics 第3回 座標変換 芝浦工業大学情報工学科 青木 義満
行列による画像処理 デジタル表現論 担当者:劉 雪峰 2017年6月1日.
メタセコイアを用いた オリジナル3DCGキャラクターの作成
OpenGLを使ったプログラム作成 澤見研究室
第9回 卒業研究1
画像処理工学 2013年1月23日 担当教員 北川 輝彦.
TCanvas BCB:TCanvasクラスでグラフィックを扱う。 TFormなどもプロパティとして持っている。
OpenGLライブラリを用いた3次元フラクタルの描画
画像処理プログラムの説明.
Computer Graphics 第10回 レンダリング(4) マッピング
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
デジタル画像とC言語.
可視面・不可視面の判定方法と隠れ面(不可視面)の消去法について述べる.
DirectX勉強会 第2回.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
プログラミング基礎a 第12回 Java言語による図形処理入門(3) アニメーション入門
プログラミング基礎a 第11回 Java言語による図形処理入門(3) アニメーション入門
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
情報コミュニケーション入門e 第9回 Part1 ワープロソフト入門(2)
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
情報コミュニケーション入門e 第9回 Part1 ワープロソフト入門(2)
Wavelet係数の局所テクスチャ特徴量を用いたGraph Cutsによる画像セグメンテーション
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
アルゴリズムとプログラミング (Algorithms and Programming)
コンピュータグラフィックス 実習3: 光線追跡法
地理情報システム論(総)/ 国民経済計算論(商)
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
地理情報システム論(総)/ 国民経済計算論(商)
地理情報システム論 第4回 コンピュータシステムおける データ表現(2)
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
ソフトウェア工学 知能情報学部 新田直也.
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
マスク合成(のような処理) 出力画像 Out 入力画像1 In1 In1 In2 Out 入力画像2 In
左右反転と180度回転 [0][xsize – 1] [0][0] → i ↓ j [ysize – 1][xsize – 1]
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
Presentation transcript:

8. テクスチャマッピング y t s x z 8.1. テクスチャマッピングの原理 8.   テクスチャマッピング 8.1. テクスチャマッピングの原理 狭義には,図のように,与えられた画像を物体に貼り付ける方法. マッピングには投影法,極座標変換,パラメータマッピングなどがある(CG入門). 広義にはバンプマッピングなども含まれる. y t s x z

glPixelStorei(GL_UNPACK_ALIGNMENT,1); 8.2. テクスチャマッピングの設定方法 全体の流れ 1)原図ビットマップデータを内部形式に変換 2)ラッピング方法の設定 3)テクスチャの設定 4)対応空間の指定 8.2.1. アラインメント設定 コンピュータ上のメモリアクセス実装方法によって,画像が格納されているメモリ領域の番地が1,2,4,8の倍数のいずれかに限られるときがある.大きい単位でアクセス(取り出す)できるほうが効率的であるが,その単位を指定する(defaultは4).→最近のコンピュータではあまり意識する必要はない. glPixelStorei(GL_UNPACK_ALIGNMENT,1);

glTexParameteri(GL_TEXTURE_2D,座標方向,繰り返し設定); 8.2.2. テクスチャパラメータの設定 テクスチャによるラップ方法,フィルタの指定,境界の色指定などを行なうことができる. ラップの設定 貼り付けるテクスチャイメージに比べ貼り付けられる面のサイズが大きいとき,イメージを繰り返す必要がある.この際,最小限のイメージを記憶させて繰り返して使用すればメモリを節減できる. テクスチャイメージの(s,t)座標それぞれに画像の繰り返し指定ができる. glTexParameteri(GL_TEXTURE_2D,座標方向,繰り返し設定); 座標方向:GL_TEXTURE_WRAP_Sまたは_T 繰り返し設定:GL_REPEAT→繰り返しdefault          GL_CLAMP→画像の最終部をそのまま維持する テクスチャーマッピングサンプルプログラムc8-1.c y t x s z

repeat clamp-s clamp-t clamp-st

8.2.3. テクスチャ環境設定 テクスチャを,貼り付けられる物体(ベース)の持つ表面属性とどのように混ぜ合わせるかを設定する. 8.2.3. テクスチャ環境設定 テクスチャを,貼り付けられる物体(ベース)の持つ表面属性とどのように混ぜ合わせるかを設定する. glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,モード); モード GL_MODULATE:テクスチャとベースの面の色(RGBA)を掛け合わせた色に なる GL_DECAL:ステッカを貼るイメージ.透明でなければテクスチャの色.透  明なら透明度に応じた混合色になる GL_REPLACE:ベースの面の色を無視してテクスチャの色になる. GL_BLEND:あらかじめglBlendFunc()で指定した色と面のベースの混合.テクスチャの色をもとにして,テクスチャの色がこいほどあらかじめ定義した色を強く混合し,そうでないときはベース面の色を強く混合する.default 

例: glBlendFunc(ソース混合割合関数指定 ,デスティネーション混合割合関数指定); 第1パラメータ: GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_SRC_ALPHA_SATURATE 第2パラメータ: GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA 例: glClearColor(1.0,1.0,1.0,1.0); glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(0.0,1.0,1.0,1.0); [デスティネーション多角形描画] glColor4f(1.0,0.0,0.0,0.5); [ソース多角形描画] glFlush(); glDisable(GL_BLEND);

decal mod. repl. blend

8.2.4. ポリゴンへのテクスチャのマッピング方法 t s 8.2.4. ポリゴンへのテクスチャのマッピング方法 下図のように,面全体にマッピングする場合や一部へのマッピングして繰り返すなどの方法がある. テクスチャ画像は縦サイズと横サイズが0~1.0に正規化された座標系なので,(b)のように繰り返す場合はテクスチャサイズを逆に大きく指定する(次ページプログラム) (a)正方形の面全体にマッピング (1,1) (b)正方形の面全体にマッピング (0,0) (5,5) (1,1) t (0,0) s (0,0)

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, texColor); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS);/* (a)正方形の面全体にマッピング glTexCoord2f(0.0,0.0);glVertex3f(1.0,0.0,1.0); glTexCoord2f(0.0,1.0);glVertex3f(1.0,0.0,-1.0); glTexCoord2f(1.0,1.0);glVertex3f(-1.0,0.0,-1.0); glTexCoord2f(1.0,0.0);glVertex3f(-1.0,0.0,1.0); glEnd(); glBegin(GL_QUADS);/* (b)正方形の面の一部にマッピング glTexCoord2f(0.0,0.0);glVertex3f(1.0,0.0,1.0); glTexCoord2f(0.0,5.0);glVertex3f(1.0,0.0,-1.0); glTexCoord2f(5.0,5.0);glVertex3f(-1.0,0.0,-1.0); glTexCoord2f(5.0,0.0);glVertex3f(-1.0,0.0,1.0); glEnd(); GL_BLEND を指定したときは画像のアルファ値は用いられず,かわりに画像の RGB 値が別に設定した色と下地の色との混合比として用いられる. テクスチャーマッピングサンプルプログラム  c8-1integ.c

練習問題8-1: 1)p113の練習問題-1: 2)c8-1.cをコピーして環境パラメータを変更  c8-1modulate  c8-1decal  c8-1blend  c8-1replace 3)bitmap2を表示  c8-1blend2

glTexParameter(GL_TEXTURE_2D,拡大縮小,設定値); 8.3 フィルタ 8.3.1 拡大フィルタと縮小フィルタ テクスチャのビットマップデータを面に貼り付けるときに1対1に対応させると面の大きさにより不都合が生じるため,貼り付ける面の大小に応じて拡大・縮小写像する. glTexParameter(GL_TEXTURE_2D,拡大縮小,設定値); 拡大縮小:GL_TEXTURE_MAG_FILTERまたはGL_TEXTURE_MIN_FILTER 設定値:GL_NEAREST 画素にもっとも近いテクスチャを拡大・縮小して使用      GL_LINEAR→周辺テクスチャを平均化して拡大・縮小

nearest linear

glTexParameteri(GL_TEXTURE_2D,拡大縮小,設定値); 8.3.2 ミップマップ テクスチャマッピングされた面が遠方に移動するとテクスチャの縮小処理が必要だが,処理が重く,CGアニメーションではちらつきの原因になる. →あらかじめ縮小したテクスチャを複数持っておき面の大きさに応じて適宜選択する. glTexParameteri(GL_TEXTURE_2D,拡大縮小,設定値); 拡大縮小:GL_TEXTURE_MAG_FILTERまたはGL_TEXTURE_MIN_FILTER 設定値:GL_NEAREST_MIPMAP_NEAREST      GL_LINEAR_MIPMAP_LINEAR

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); gluBuild2DMipmaps(GL_TEXTURE_2D, 4, imagewidth, imageheight, GL_RGBA, GL_UNSIGNED_BYTE, image);

練習問題8-2: p116の練習問題-2 (1)GL_NEAREST→GL_LINEAR (2)Mipmap設定c8-2mipmap サンプルプログラムc8-2.c

例 8.4テクスチャ座標の自動生成 glTexGenf(座標軸の選択,モード選択 ,設定値) テクスチャ座標を設定せずに自動的にマッピングの対応づけを行なう 8.4.1 設定方法 glTexGenf(座標軸の選択,モード選択 ,設定値) 座標軸:GL_SまたはGL_T モード選択:GL_TEXTURE_GEN_MODE 設定値:  GL_OBJECT_LINEAR :オブジェクトに固定した輪郭表示→     オブジェクトが移動や回転すると一緒に移動する  GL_EYE_LINEAR:テクスチャが視点の座標系に固定されて物体がテク      スチャの中を動くように見える  GL_SPHERE_MAP:反射マッピング 例 glTexGenf(GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP); glTexGenf(GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP); glEnable(TEXTURE_GEN_S); glEnable(TEXTURE_GEN_T);

GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_LINEAR 練習問題8-3: 1)p117の練習問題-3   c8-3.cを修正して違いを確認する

glBindTexture(GL_TEXTURE_2D,Texture番号); テクスチャのバインド:指定した名前のテクスチャを有効にする命令. ・初めて使われたテクスチャ名が指定された場合は,自動的にオブジェクトが生成される. ・すでに宣言された番号であれば,以降,それが有効となる. このコマンドの後で, glTexImage2D 等でテクスチャを設定する. サンプルプログラムc8-4.c

readBitmapData( )の利用例 c8-4.cのinitTexure2をコピーして,以下のように,テクスチャ番号3を設定した initTexture3を作成して,initializeの中でcallする. 2)display関数のglBindTextureの適当な面のところのテクスチャ番号を変更する. void initTexture3(void) { unsigned char *image3[1]; int imageHeightb,imageWidthb; if(!ReadBitMapData("YCCampus-rr.bmp",&imageWidthb,&imageHeightb,image3)){ printf("error\n") ; exit(0) ; } glBindTexture(GL_TEXTURE_2D,3); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, 4,imageWidthb ,imageHeightb,0,GL_RGBA, GL_UNSIGNED_BYTE, *image3); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); #include <stdio.h> #include "read_bitmap.h“ int ReadBitMapData(); 注意:事前に右記の宣言をしておくこと