...

2次元CG

by user

on
Category: Documents
4

views

Report

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
Fly UP