Comments
Description
Transcript
2次元CG
2. 2次元CG Computer Graphics 1. 2-Dimension CG Numazu College of Technology Dept. of Computer & Control Production System Lab. Version 1.2 2006.03.31 2. 2次元CG 1. 2次元コンピュータグラフィックス 1.1 1.2 1.3 1.4 1.5 1.6 グラフィックハードウェア 座標変換 直線と円弧の描画 塗りつぶし(Filling) 2Dクリッピング 二次元座標変換 1 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.1 グラフィックディスプレイ (Cathode Ray Tube Graphic Display) グラフィックディスプレイ(CRT) ストレージ方式(Strage Tube) リフレッシュ不要 リフレッシュ方式(Refresh Tube) リフレッシュ必要 ランダム(ベクタ)スキャン方式(Random/Vector Scan) ラスタースキャン方式(Raster Scan) 現在主流 [ その他 ] PDP:プラズマディスプレイ(ガス放電)Æ大型TV用・高速応答 液晶ディスプレイ(液晶)Æ小型ディスプレイ用・低応答性 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.1.1 ストレージ方式 CRT 電子ビーム 価格が安い ちらつきが少ない 分解能が高い 図形の一部消去が困難 カラー化が難しい 特殊な蛍光層 1度の描画で電荷 として保持 2 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.1.2 ランダムスキャン方式 リフレッシュ (リフレッシュ方式) CRT 電子ビーム ディスプレイリストメモリ [リフレッシュバッファ] 表示される線が美しい 図形が多いとフリッカー (ちらつき)が生じる 面表示が難しい 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.1.3 ラスタースキャン方式 Bi t Pl ane (リフレッシュ方式) リ フ レッ シュ 電子ビーム CRT フレームバッ ファ (Vi d eo RAM) 価格が安い 豊富な色表示が可能 Jugが生じるためAnti-Aliasing が必要 現在の主流 3 1. 2次元コンピュータグラフィックス 2. 2次元CG インターレス/ノンインターレス (ラスタースキャンディスプレイ) CRT-TVのもこれ インターレス(Interlace) (512本) 1 3 5 7 9 2 4 6 8 10 Odd Even 1/60 1/60 ノンインターレス(Non-Interlace) 1 2 34 56 7 8 9 10 1/30 (1画面全体の描画) 1/60 1/60 (1画面全体の描画) ちらつきが生じる 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.1.4 液晶ディスプレイ 液晶ディスプレイ 2枚のガラス板の間に特殊な液体を封入し、電圧をかけることによって液晶分子の向き を変え、光の透過率を増減させることで像を表示する構造になっている。液晶自体は発 光せず、明るいところでは反射光を、暗いところでは背後に仕込んだ蛍光燈の光を使っ て表示を行なう。 単純マトリックス(STN,DSTN) X軸方向とY軸方向の2方向に導線が張り巡らされていて、XとYの2方向から電圧をか けると交点の液晶が駆動する方式。 アクティブマトリックス 単純マトリクス型液晶の構造に加えて、各液晶ごとに「アクティブ素子」を配置したもの。 4 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.1.5 描画におけるデータの流れ(ラスタースキャンディスプレイ) シンプルな構成 グラフィ ッ ク ボード PIXE L 幾何情報 面・ 球・ 光 Fram e Buffer 描画SW CRT RAMDAC 高機能な構成 グラフ ィ ッ ク アク セレータ(エンジン) 幾何情報 Geometric Engine 描画SW Rendering Engine Fram e Buffer CRT RAMDAC PIXE L 面・ 球・ 光 Z-Buffer 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.1.6 表示色とフレームバッファ容量 2bi t 3bi t 4bi t B 2bi t 3bi t 1bi t 4b i t G 4b i t R 8 21 22 2 2 12 = 2色 = 4色 = 256色 = 4096色 5bi t 4bi t 6bi t 8bi t 5b i t 5bi t 6bi t Bi t-Pl ane 2 16 2 = 32768色 = 65536色 15 8bi t 8b i t 2 24 = 16777216色 5 1. 2次元コンピュータグラフィックス 2. 2次元CG 画面サイズとフレームバッファ容量 640 800 1280 1024 1600 480 600 メモリ容量計算式 SIZEX*SIZEY*n 8*1024*1024 [Mbyte] where 768 SIZEX,SIZEY : 画面サイズ n : Bit-Plane数 1024 1200 1Kbyte=1024(210)byteとする 1. 2次元コンピュータグラフィックス 2. 2次元CG 画面サイズとフレームバッファ容量 画面サイズ 色数 横 縦 256(2 8 )色 32768(2 1 5 )色 16777216(2 2 4 ) 640 480 0.29 0.55 0.88 800 600 0.46 0.86 1.37 1M 1024 768 0.75 1.41 2.25 2M 1280 1024 1.25 2.34 3.75 3M 1600 1200 1.83 3.43 5.49 4M 6 1. 2次元コンピュータグラフィックス 2. 2次元CG 画面サイズと呼称 1M 2M 3M 4M 1. 2次元コンピュータグラフィックス 2. 2次元CG ダブルバッファ(Double Buffer) Frame Buffer 描画SW CRT 切替 RAMDAC 切替 Frame Buffer 二つのフレームバッファを交互に使う(Animation) 7 1. 2次元コンピュータグラフィックス 2. 2次元CG フレームバッファの用途 RGB RGB フ レームバッ ファ フ レームバッ フ ァ RGB RGBα + フ レームバッ ファ + Texture Mem ory Texture Mem ory + フ レームバッ フ ァ Texture Mem ory いろいろな組み合わせが用いられる 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.1.7 課題1:フレームバッファの容量計算 (1)1024×1024の画面サイズのディス プレイに対し、512色表示したい場合 に必要となるフレームバッファの大き さを求めよ 1024 1024 (2)1024×1024の画面サイズのディス プレイに対し、1Mbyte(220)のフレー ムバッファを用いた場合、何色表示 できるか 8 1. 2次元コンピュータグラフィックス 2. 2次元CG 課題2:フレームバッファの容量計算 2Mbyteのフレームバッファを用いた場合、 1600×1200の画面では理論上、何色ま で表示できるか 1200 1600 1. 2次元コンピュータグラフィックス 2. 2次元CG 課題3:まとめ(グラフィックディスプレイ) グラフィックディスプレイには大きく分けて、リフレッシュが必要な (a)方式と不要な(b)方式に分類できる。(a)方式はさらに(c)方式と (d)方式に分けることができる。 ここで、(d)方式は、TVにも利用されている方式で現在主流と なっている。また、(d)方式は、スキャンの仕方によって(e)と(f)に分 けられる。 (e)は全画面を2回スキャンして描画しており、(f)は1回で全画面 を描画している。その時間は(g)である。 9 1. 2次元コンピュータグラフィックス 2. 2次元CG 課題4:まとめ(色表現とフレームバッファ) グラフィックの画面出力としては、(a)ディスプレイが主流となっ ている。これらの画面のひとつの点を(b)と呼ぶ。この(b)毎に与 えられたビット数により画面に表示できる色数が決まる。 例えば、6bitであれば(c)色の表示が可能となる。コンピュータ 内における色の表現には(d)の三原色が使われ三色混合(全色 0xFF)により(e)色が表現される。一般にフルカラーと呼ばれてい る表現色は、これらの原色を(f)ビットで表現した場合をいう。 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.2 座標変換 フレームバッファアドレス ディスプレイ座標 スクリーン座標 VRAM ディスプレイ座標 スクリーン座標 10 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.2.1 2次元座標(ディスプレイ座標とスクリーン座標) ディスプレイ座標 (H/W座標) スクリーン座標 (デカルト座標) 数学の 世界 Ys Xd Xs Yd 1. 2次元コンピュータグラフィックス 2. 2次元CG 画面のサイズとディスプレイ座標の関係 640 0 Screen Size 640×480(VGA) 480 479 639 Xd 0 SX Xd SX-1 Screen Size SY×SX SY SY-1 Yd Yd 一般に画面サイズは偶数であるので、以後は偶数に限定する 11 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.2.2 ディスプレイ座標とフレームバッファアドレス オフセットアドレス Frame Buffer SX RGB Xd SY RGB Yd SX: X方向のスクリ ーンサイズ SY: Y方向のスクリ ーンサイズ 1. 2次元コンピュータグラフィックス 2. 2次元CG 画面のサイズとディスプレイ座標の関係(具体例) 10 Xd 6 PIXEL( 画素) Yd オフセットアドレス = 10*4 + 7 = 47 また、逆に 4 = 47/10(但し 整数) 7 = 47- 10*4 12 1. 2次元コンピュータグラフィックス 2. 2次元CG 画面のサイズとディスプレイ座標の関係(具体 例) 10 Xd 6 PIXE L( 画素) Yd ピクセル座標 (xd,yd) のオフセットアドレスは Add = SX* yd + xd オフセットアドレス(Add)のピクセル座標 (xd,yd) は Add : オフセットアドレス yd = Int(Add / SX) xd = Add – SX * yd SX :画面のXサイズ 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.2.3 座標変換(ディスプレイ座標とスクリーン) Display Coordinate (0,0) SX SY Screen Coordinate Xd SY Yd Ys Xs (0,0) SX (xd,yd) 注)点は移動しない 座標の読み方が異なるだけ (xs,ys) 画面サイズとスクリーン 座標の関係 13 1. 2次元コンピュータグラフィックス 2. 2次元CG スクリーン座標と画面のサイズ(具体例) 8 Ys Xd 6 Xs Yd 画面サイズが偶数のときに限定 +X : 3(=8/2-1) - X : - 4(=-8/2) +Y : 3(=6/2) - Y : - 2(=-6/2+1) 1. 2次元コンピュータグラフィックス 2. 2次元CG スクリーン座標における画面のサイズ (0,0) SX SY Ys Xd SY SY 2 SX -1 2 -SX 2 (0,0) Xs SY +1 2 SX Yd 画面サイズとスクリーン座標の関係 +X : SX/2-1 - X : - SX/2 +Y : SY/2 - Y : - SY/2+1 14 1. 2次元コンピュータグラフィックス 2. 2次元CG Display→Screen座標変換の具体例 Display Coordinate Screen Coordinate Ys 8 Xd Xs 6 Yd (xs、ys)=fs(xd,yd) xs = 6 – 8/2 ys = -4 + 6/2 (6,4) xd = 2 + 8/2 yd = -(-1) + 6/2 (xd、yd)=fd(xs,ys) (2,-1) 1. 2次元コンピュータグラフィックス 2. 2次元CG 座標変換式(ディスプレイ座標とスクリーン) Display Coordinate (0,0) SY SX Screen Coordinate Ys Xd SY Yd Display to Screen (xs、ys)=fs(xd,yd) Screen to Display (xd、yd)=fd(xs,ys) (0,0) Xs SX xs = xd – SX/2 ys = -yd + SY/2 xd = xs + SX/2 yd = -ys + SY/2 15 1. 2次元コンピュータグラフィックス 2. 2次元CG Display座標とScreen座標の変換式 注)点は移動しなくて座標の読み方が異なるだけである yd = Int(Add/SX) xd = Add – SX * yd オフセットアドレス Frame Buffer RGB (0,0) xs = xd – SX/2 ys = -yd + SY/2 Ys Xd SX SY SY (0,0) Xs RGB SX Yd Add = SX * yd + xd xd = xs + SX/2 yd = -ys + SY/2 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.2.4 課題:まとめ(2次元座標) コンピュータの画面は(a)にある色情報を画面の対応する画素 (pixel)におけるアナログ色に変換することにより描画されている。 (a)のハードウェア的な要因によって、画面の(b)にある画素が(a) の先頭番地となり、次の番地は先頭の画素の(c)の位置にくる。こ れを(d)座標という。この座標は画面の(b)を原点とし、右横方向にX 軸、(e)方向にY軸を取る。 しかし、この座標はディスプレイのH/Wに起因する座標であり、一 般的に用いるには数学で用いられる座標に変換した方が便利であ る。このように、数学的な座標を画面に適用したのが(f)座標であり、 画面の(g)を原点とし、右横方向にX軸、(h)方向にY軸を取る。 (a)フレームバッファ(VRAM) (b)左上 (d)ディスプレイ(H/W) (e)下 (g)中心 (h)上 (c)右横 (f)スクリーン(デカルト) 16 1. 2次元コンピュータグラフィックス 2. 2次元CG 課題:まとめ(2次元座標変換式) yd = Int(Add/SX) xd = Add – SX * yd オフセットアドレス Frame Buffer RGB (0,0) SX SY xs = xd – SX/2 ys = -yd + SY/2 Xd SY Ys (0,0) Xs RGB SX Yd Add = SX * yd + xd xd = xs + SX/2 yd = -ys + SY/2 1. 2次元コンピュータグラフィックス 2. 2次元CG 課題:まとめ(2次元座標変換) VRAMにおけるオフセットアドレスが5000である時、ディスプ レ座標値とスクリーン座標値を求めよ。 ただし、スクリーンの大きさは640×480とする。 5000 Offset Address yd = Int(5000/640)=7 xd = 5000 – 640*7=520 SX=640 SY=480 Display xs = 520 -640/2=200 ys = -7 + 480/2=233 17 1. 2次元コンピュータグラフィックス 2. 2次元CG 課題:まとめ(2次元座標変換) スクリーン座標値が(-50,-30)である時、ディスプレ座標値と VRAMのオフセット値を求めよ。 ただし、スクリーンの大きさは640×480とする。 SX=640 SY=480 (xs,ys) =(-50、-30) Offset Address Add = 640*270 + 270 =173070 Display xd = -50 + SX/2=270 yd = -(-30) + SY/2=270 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.3 直線と円弧の描画 スクリーンに直線を描画する Y 数学の世界での直線の式 y2-y1 y= x2-x1 (x-x1) +y1 (x2,y2) (x1,y1) 傾き : m= X 直線の式 y=mx+b x1,y1の代入 y2-y1 x2-x1 bを代入 y1=mx1+b y=mx+y1-mx1 b=y1-mx1 Y=m(x-x1) +y1 18 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.3.1スクリーンへの直線の描画 スクリーンに直線を描画する Y 格子上にしか点を打てない (x2,y2) どこに点を打つか (x1,y1) X 1. 2次元コンピュータグラフィックス 2. 2次元CG 直線の描画のプログラミング Xsをx1 Ysをy1とする スクリーンに直線を描画する Xs=X2なら終了 Y Xsを+1する (x2,y2) ypを求める yp=m(Xs-x1) +y1 E (x1,y1) Ys Eを求める E=Yp-Ys Yp Xs 不具合が生じるケースがある X E>=0.5なら Ys=Ys+1 (Xs,Ys)に点を描画 19 1. 2次元コンピュータグラフィックス 2. 2次元CG 直線の描画の問題点 不具合が生じるケースがある Y 傾きが45度以上の場合 Y (x2,y2) (x1,y1) (x2,y2) (x1,y1) X X 1. 2次元コンピュータグラフィックス 2. 2次元CG 傾き45度以上の直線の描画 Ys=m(Xs-x1) +y1 傾きが45度以上の場合 Y 式の変形 (x2,y2) Xs=(Ys-y1 )/m+x1 XではなくY方向に+1していく (x1,y1) X 20 1. 2次元コンピュータグラフィックス 2. 2次元CG 高速化(Bresenham Algorithm) Ys=m(Xs-x1) +y1 Y Xs=(Ys-y1 )/m+x1 (x2,y2) 計算に浮動小数点計算が必要 処理速度の著しい低下 少数を使わない ようにする (x1,y1) X Bresenham Algorithm H/W化 Bresenhamの参考:Cアルゴリズム全科 : 千葉則茂著 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.3.2 円の描画 数学の世界での円の式 Y (x-x0)2+(y-y0)2=R2 少数を使わない ようにする (x0,y0) R Bresenham Algorithm H/W化 X Bresenhamの参考:Cアルゴリズム全科 : 千葉則茂著 21 1. 2次元コンピュータグラフィックス 2. 2次元CG 課題:まとめ(Bresenham Algorithm) 1.ブレゼンハムアルゴリズムが用いられる理由を述べよ ・処理が高速 ・ハードウェア化しやすい 2.ブレゼンハムアルゴリズムは計算時間の短縮 化のためにどのような考え方を導入しているか 述べよ ・小数点演算を極力除いている 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.4 塗りつぶし(Filling) 直線の描画ができるようになった 塗りつぶす Filling 22 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.4.1三角形の塗りつぶし Y X (xmin,ymin) A(x0s,y0s) A(x0,y0) 左回り C(x2,y2) B(x1s,y1s) B(x1,y1) C(x2s,y2s) (xmax,ymax) X ス ク リ ーン 座標 ディ ス プ レ イ 座標 Y 塗りつぶす三角形 ディスプレイ座標に変換 min,maxの算出 頂点は左回りにつける 1. 2次元コンピュータグラフィックス 2. 2次元CG 三角形の塗りつぶし方 X ymin ys xs xe LS Ysをymin -> ymaxまで+1 しながら以下の処理を繰り返す (1)ysにおけるLSの設定 (2)三辺について以下の処 理を繰り返す (2-1)LSと辺の交点を求める ymax Y (3)求めた交点の小さい方 をXs、大きいほうをxeと してこの間を直線で結ぶ 23 1. 2次元コンピュータグラフィックス 2. 2次元CG 辺との交点算出 辺の式 X=(Y-y0 ) * m+x0 但し、m=(x1-x0)/(y1-y0) LSの式 y=ys A(x0,y0) LSの式を辺の式に代入して交点を求める X=(ys-y0) * m+x0 =(ys-y0) * (x1-x0)/(y1-y0)+x0 =(ys-y0)/(y1-y0) * (x1-x0)+x0 Y軸に関する部分をまとめる X=d * (x1-x0)+x0 但し、d=(ys-y0)/(y1-y0) dにより交点の判別が出来る O<=d<=1 交点あり(x,ys) d<0 or d>1 交点なし Y1-y0=0 交点なし(LSと平行) LS B(x1,y1) 1. 2次元コンピュータグラフィックス 2. 2次元CG 辺との交点算出例 X X A(x0,y0) ys ys ys-y0 y1-ys A(x0,y0) LS LS y1-ys B(x1,y1) B(x1,y1) y2-y1 C(x2,y2) Y 辺 ABの 場 合 d=(ys-y0)/(y1-y0) 0<=d<=1なので交差する x=d * (x1-x0)+x0 y=ys Y C(x2,y2) 辺 BCの 場 合 d=(ys-y1)/(y2-y1) d<0なので交差しない 24 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.4.2ポリゴンの塗りつぶし X ymin (xmin,ymin) Ysをymin -> ymaxまで+1 しながら以下の処理を繰り返す ys xs xe LS ymax (1)ysにおけるLSの設定 (2)全辺について以下の処 理を繰り返す (2-1)LSと辺の交点を求める (xmax,ymax) Y ディ ス プ レ イ 座標 (3)求めた交点の小さい方 をXs、大きいほうをxeと してこの間を直線で結ぶ 1. 2次元コンピュータグラフィックス 2. 2次元CG ポリゴンの塗りつぶしにおける注意点 凹形ポリゴンの場合には対応できない 凸形ポリ ゴ ン 凹形ポリ ゴ ン 25 1. 2次元コンピュータグラフィックス 2. 2次元CG ポリゴンの凹凸判定 180以 上 あ り (1)各頂点の内側の角度を 求める 180以 内 ひとつでも180度以上の 頂点があると凹 凸形ポリ ゴ ン 凹形ポリ ゴ ン (2)辺上の点から他の辺上 の点へ直線を引く 直線が外側を通ると凹 凸形ポリ ゴ ン 凹形ポ リ ゴ ン 1. 2次元コンピュータグラフィックス 2. 2次元CG ポリゴンの三角形分割 凹形ポリゴンの場合には対応できない 多角形を三角形に分割し、三角形毎に塗りつぶし処理を行う 凸形ポリ ゴ ン 凹形ポリ ゴ ン 26 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.5 2Dクリッピング(Clipping) Ys 不要 Ys 不要 SCREEN SCREEN 不要 Xs Xs 不要 不要 クリッピング 点のクリッピング スクリーンの外にある図形を 除去する 点がスクリーン座標内 にあるか判定する 処理の高速化の為 1. 2次元コンピュータグラフィックス 2. 2次元CG 直線のクリッピング(Cohen-Sutherland) 1001 1000 1010 上 側: 1 0001 0000 0010 下 側: 1 左 側: 1 右 側: 1 0101 0100 0110 スクリーンを中心に9の部分に分割し、各部を4bitであらわす 線の端点これらのコードを与える(Pa,Pb) Pa | pb = 0000 : 線全体がウインドウ内 Pa & pb = 0000 : 一部が入っている可能性あり 27 1. 2次元コンピュータグラフィックス 2. 2次元CG Cohen-Sutherland(順次クリッピング) 別の判定必要 AND=0000 1000 Ys 1000 1010 SCREEN AND 0010 0000 0001 不要 0000 Xs 0001 0010 別の判別必要 不要 0000 0100 0100 不要 0110 Pa | pb = 0000 : 線全体がウインドウ内 Pa & pb = 0000 : 一部が入っている可能性あり 1. 2次元コンピュータグラフィックス 2. 2次元CG 1.6 二次元座標変換(幾何学変換) Y 平行移動・回転・圧縮 Y 図形 or 座標 X X 幾何学変換と座標変換 幾何学変換 :点や線自体が移動や変形する 座標変換 :点や線自体が移動せず座標系が変形する 28 1. 2次元コンピュータグラフィックス 2. 2次元CG 同次座標系(Homogeneous Coordinate) 座標変換を簡単に行う為、行列を用いる 座標変換を簡単に行う為、次元を上げる 2Dならば、通常の座標 (x,y)を(wx,wy,1)とする。 ただし、w!=0 通常 w=1として扱うので、座標(x,y)は同次座標系 では(x,y,1)となる 2Dでは 3×3の行列となる 1. 2次元コンピュータグラフィックス 2. 2次元CG 平行移動(Translation) (xt,yt) ty xt = x + tx yt = y + ty 移動 行列式で書くと (x,y) xt yt 1 1 0 tx = 0 1 ty 0 0 1 x y 1 tx 平行移動を行列であらわすには同次座 標を用いなければならない 29 1. 2次元コンピュータグラフィックス 2. 2次元CG 拡大・縮小(Scaling):原点中心 (xs,ys) xs = x × sx ys = y × sy 拡大・ 縮小 行列式で書くと sy × y (x,y) xs ys 1 sx 0 0 = 0 sy 0 0 0 1 x y 1 sx × x 1. 2次元コンピュータグラフィックス 2. 2次元CG 回転(Rotation):原点中心 xr = R cos(θ+α) yr = R sin (θ+α) (xr,yr) xr = R cosθcosα - R sinθsinα yr = R cosθsinα + R cosαsinθ 回転 x = Rcosα, y =Rsinα θ R α 回転は左まわりを正とする xr = x cosθ - y sinθ yr = x sinθ + y cosθ (x,y) 行列式で書くと xr yr 1 cosθ -sinθ 0 = sinθ cosθ 0 0 0 1 x y 1 30 1. 2次元コンピュータグラフィックス 2. 2次元CG せん断(Shear) X軸のせん断 xc = x + cx × y yc = y せ ん 断 (x-axis) (x,y) (xc,yc) Y軸のせん断 xc = x yc = y + cy × x 行列式で書くと xc yc 1 cx × y Y軸のせん断 a c 0 = b d 0 0 0 1 1 0 0 b 1 0 0 0 1 x y 1 X軸のせん断 1 c 0 0 1 0 0 0 1 1. 2次元コンピュータグラフィックス 2. 2次元CG 幾何変換と座標変換 幾何学変換 (Geometric Transformation) 座標変換 (Coordinate Transformation) (xr,yr) 回転 回転 θ R θ (x,y) (x,y) (xr,yr) α 点をθ回転 座標系を-θ回転 動作が反対(逆変換) 結果としては同じ 31 1. 2次元コンピュータグラフィックス 2. 2次元CG 幾何変換と座標変換の関係 幾何学変換 (Geometric Transformation) 点を原点中心にtx,ty移動 平行移動 1 0 tx 0 1 ty 0 0 1 拡大・縮小 座標系を-tx,-ty移動 0 0 1 座標系を原点中心に 1/sx,1/sy倍 1/sx 0 0 逆行列 0 0 1 0 0 1/sy 0 0 1 座標系を原点中心に-θ回転 点を原点中心にθ回転 cosθ -sinθ sinθ cosθ 0 0 1 0 -tx 0 1 -ty 0 0 1 逆変換 点を原点中心にsx,sy倍 Sx 0 0 sy 0 0 回転 座標変換 (Coordinate Transformation) 逆行列 cosθ sinθ -sinθ cosθ 0 0 0 0 1 1. 2次元コンピュータグラフィックス 2. 2次元CG 合成変換 平行移動、拡大・縮小、回転等を組み合わせる事に よって様々な図形の変形が可能となる これらの変形を順番に A1,A2, ….. Anの順に行ったとき、こ れらをひとつの変形(変換)にまとめたものを合成変換という。 また、まとめた変換行列の事を合成マトリックスという。 変換を A1,A2, …. Anの順に行い、その行列を T1,T2, …. Tnとすると合成変換は An, …. A2,A1そして、合成マトリック スは Tn ・・・T2・T1となる 32 1. 2次元コンピュータグラフィックス 2. 2次元CG 合成変換の例(幾何変換) 回転・縮小 処理を分解 1. 2次元コンピュータグラフィックス 2. 2次元CG 合成変換の例(座標変換) 回転・縮小 処理を分解 33 1. 2次元コンピュータグラフィックス 2. 2次元CG 平行移動と回転(幾何変換) x1 1 0 -tx y1 = 0 1 -ty 1 0 0 1 x y 1 Translate x2 y2 = 1 Sx 0 0 0 sy 0 0 0 1 x1 y1 1 1. 2次元コンピュータグラフィックス 2. 2次元CG 縮小・平行移動(幾何変換) X3 y3 = 1 cosθ -sinθ 0 sinθ cosθ 0 0 0 1 x2 y2 1 注)回転は左回転を正とする x4 1 0 tx y4 = 0 1 ty 1 0 0 1 x3 y3 1 Translate 34 1. 2次元コンピュータグラフィックス 2. 2次元CG 合成マトリックス(幾何変換) 平行移動 x1 y1 1 = 1 0 - tx 0 1 -ty 0 0 1 回転 x2 y2 1 = cosθ -sinθ sinθ cosθ 0 0 縮小 X3 y3 1 平行移動 x4 y4 1 合成変換 = = x y 1 = x1 y1 1 0 0 1 Sx 0 0 0 sy 0 0 0 1 x2 = y2 1 1 0 tx 0 1 ty 0 0 1 x3 y3 1 T1 X = T2 X1 T3 X2 = T4 X3 X4 = T4 X3 = T4 T3 T2 T1 X = T X T:合成マトリックス 変換の逆順 1. 2次元コンピュータグラフィックス 2. 2次元CG 合成マトリックスと逆変換(幾何変換) X4 = T4T3T2T1X = T X X X4 X = T-1 X4=T1-1T2-1T3-1T4-1X4 合成マトリックスの逆行列を用いることで、逆の変換も出来る 35 1. 2次元コンピュータグラフィックス 2. 2次元CG アフィン変換(Affine Transformation) 合成変換 X4 = T4 X3 = T4 T3 T2 T1 X = T X 変換の逆順 T:合成マトリックス T= 1 0 tx 0 1 ty 0 0 1 Sx 0 0 0 sy 0 0 0 1 cosθ -sinθ sinθ cosθ 0 0 0 0 1 1 0 -tx 0 1 - ty 0 0 1 (注)変換の順は重要で、 T1 T2 != T2 T1である Affine Transformation このように、平行移動、回転等による変換をアフィン変換という x’ y’ = 1 a b e c d f 0 0 1 x y 1 アフィン変換では、直線は直線に、平行は平行に、直線上の比 は維持される。 1. 2次元コンピュータグラフィックス 2. 2次元CG 行列の表記について CGに関する書籍を見ると、平行移動や回転が下の行列ではなく 1 0 tx 0 1 ty 0 0 1 cosθ -sinθ sinθ cosθ 0 0 0 0 1 下のようになっている事がある。これは、行列の表記の仕方による もので、意味は同じである。 1 0 0 0 1 0 tx ty 1 cosθ sinθ -sinθ cosθ 0 0 0 0 1 例えば、平行移動 x1 y1 1 = x y 1 1 0 0 0 1 0 tx ty 1 VS x1 y1 = 1 1 0 tx 0 1 ty 0 0 1 x y 1 36 1. 2次元コンピュータグラフィックス 2. 2次元CG まとめ1(直線の描画、塗りつぶし) 二次元座標において、直線や円弧を高速に描画する為に (a)アルゴリズムが用いられる。この手法はハードウェア化 しやすいように計算の中に(b)演算が無いように工夫され ている。この手法を用いて直線を描画するとき、そのアル ゴリズムは(c)によって大きく二つに分けられる。 1. 2次元コンピュータグラフィックス 2. 2次元CG まとめ2(直線の描画、塗りつぶし) 多角形を塗りつぶすには、まず多角形を(a)と(b)に区別し なければならない。多角形が(b)の場合には、この多角形 を三角形に分けて、三角形毎に塗りつぶしを行う。(a)の場 合には、直接塗りつぶす事が可能である。その手順として まず、各点を左回りに定義し、各点をスクリーン座標から (c)座標に変換する。そして、(c)座標における最大、最小 値を求め、(d)軸に平行な直線LSをyminからymaxまで変 化させながらLSと各辺との(e)を求め、求まった小さい値か ら大きい値まで直線を引くことにより塗りつぶしが行われる 37 1. 2次元コンピュータグラフィックス 2. 2次元CG まとめ3(座標変換) 図に示すように、 (rx,ry)中心に与点(x,y)をθ回転させた後、(tx,ty)d だけ平行移動させたときの、合成マトリックスを求めよ。 Y (x2,y2) (x1,y1) 移 動 量 (tx,ty) (rx,ry) θ (x,y) X 回転移動、平行移動には以下 の行列を用いる 1 0 tx 0 1 ty 0 0 1 cosθ -sinθ sinθ cosθ 0 0 0 0 1 1. 2次元コンピュータグラフィックス 2. 2次元CG まとめ4(クリッピング、座標変換) ・クリッピングが必要な理由を述べよ ・クリッピングがとは何か。また、その代表的なCohenSutherland アルゴリズムについて説明せよ ・アフィン変換とは何か ・幾何変換と座標変換の違いを述べよ ・アフィン変換に同次座標を用いる理由を述べよ 38 1. 2次元コンピュータグラフィックス 2. 2次元CG まとめ5(ビューイング変換) 次の変換を「幾何変換」により変換した後の四角形の座標値を求めよ。 計算過程では、合成行列を作成すること。 Y Y 45度 70 60 50 60 40 50 60 X 65 55 30 50 70 X 39