Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
1
2. 2次元CG
Computer Graphics
Numazu College of TechnologyDept. of Computer & Control
Production System Lab.
2. 3-Dimension CG
Version 1.1 2006.03.31
2. 2次元CG
2. 3次元コンピュータグラフィックス
2.1 3次元座標系
2.2 座標変換(幾何変換)
2.3 座標変換の基礎知識
2.4 座標変換(Viewing)
2.5 3Dクリッピング
2
3. 3次元CG
2.1 3次元座標系
右手座標系 左手座標系
数学の世界CGの世界
(XY:スクリーン、Z:奥行き)
X XY
YZ
Z
違いはZ軸の方向が逆
3. 3次元CG
2.2 座標変換(幾何変換)
平行移動
回転(X軸)
拡大・縮小
x’y’z’1
1000
0100
0010
txtytz1
xyz1
=
x’y’z’1
sx000
0sy00
00sz0
0001
xyz1
=
x’y’z’1
1000
0cosαsinα
0
0-sinαcosα
0
0001
xyz1
=
3
3. 3次元CG
平行移動(幾何変換:図)
移動前 移動後移動量tx,ty,tz
X XY Y
Z Z
x x
x1 y1
z1
y y
z z
P(x,y,z) P(x,y,z)P1(x1,y1,z1)
tx ty
tz
3. 3次元CG
平行移動(幾何変換:変換式)
x’y’z’1
1000
0100
0010
txtytz1
xyz1
=
x’ = x + txy’ = y + tyz’ = z + tz
= Tt(tx,ty,tz)xyz1
4
3. 3次元CG
拡大・縮小(幾何変換:図)
変換前 変換後拡大・縮小率sx,sy,sz
X XYY
Z Z
x xsx*x
sy*y
sz*z
y y
zz
P1(x,y,z)
P2(x,y,z)
P1(x,y,z)
原点中心
3. 3次元CG
拡大・縮小(幾何変換:変換式)
x’y’z’1
sx000
0sy00
00sz0
0001
xyz1
=
原点中心の回転
= Ts(sx,sy,sz) xyz1
5
3. 3次元CG
回転(幾何変換:回転軸)
軸中心の回転移動
回転の方向は、軸先端からみて左回り
X軸中心 YZ平面内Y軸中心 ZX平面内Z軸中心 XY平面内
X Y
Z
xy
z
3. 3次元CG
回転(幾何変換:X軸回り)
X軸回りの回転
x’y’z’1
1000
0cosαsinα
0
0-sinαcosα
0
0001
xyz1
=
= Tr(α) xyz1
回転の方向は、軸先端からみて左回り
X Y
Z
x y
z
αP(x,y,z)
Pr(xr,yr,zr)
6
3. 3次元CG
回転(幾何変換:Y軸回り)
Y軸回りの回転
x’y’z’1
cosβ0
-sinβ0
sinβ0
cosβ0
0100
0001
xyz1
=
= Tr(β) xyz1
回転の方向は、軸先端からみて左回り
X Y
Z
x
y
z
βP(x,y,z)
Pr(xr,yr,zr)
3. 3次元CG
回転(幾何変換:Z軸回り)
Z軸回りの回転x’y’z’1
0010
cosγsinγ
00
-sinγcosγ
00
0001
xyz1
=
= Tr(γ) xyz1
回転の方向は、軸先端からみて左回り
X Y
Z
xy
zγ
P(x,y,z)
Pr(xr,yr,zr)
7
3. 3次元CG
合成変換
・2次元と同様に同次座標系を用いる・これらの変換はアフィン変換である・直線は直線に、直線上の点の比も維持される
・2次元と同様に一連の変換は、変換行列で表すことができる
・変換の例
任意点(x0,y0,z0)を中心とする拡大(幾何変換)X’=Tt(x0,y0,z0) Ts(sx,sy,sz) Tt(-x0,-y0,-z0)X
任意点(x0,y0,z0)を通り、x軸に平行な直線を中心とした回転(幾何変換)
X’=Tt(x0,y0,z0) Tr(α) Tt(-x0,-y0,-z0)X
3. 3次元CG
任意直線まわりの回転
1点(x0,y0,z0)を通り、単位ベクトルが(l,m,n)の直線回りにθ回転させる変換
T=Tt(x0,y0,z0)・Trx(-α)・Try(-β)・Trz(θ)・Try(β)・Trx(α)・Tt(-x0,-y0,-z0)
22cos
nmn+
=α22 nm
msin+
=α
22cos nm +=β l−=βcos
ここで
8
3. 3次元CG
2.3座標変換の基礎知識
2.3.1 モデル座標とワールド座標
2.3.2 ワールド座標とビュー座標
2.3.3 ビュー座標とスクリーン座標
2.3.4 投影法
3. 3次元CG
2.3.1 モデル座標とワールド座標
X Y
Z
X
X
X
Y
Y
Y
Z Z
Z
Cone Cube
CylinderSphere
各プリミティブ毎に定めた座標
モデル座標(オブジェクト座標)
9
3. 3次元CG
モデル座標とワールド座標
実際に表示を行う3次元空間
ワールド座標
World Coordinate
Object Coordinate 1
Object Coordinate 2
Object Coordinate 3
X2
Y2
Z2
X3
X1
Y3
Y1
Z3
Z1
Xw Yw
Zw
3. 3次元CG
2.3.2 ワールド座標とビュー座標
ワールド座標(右手座標系) ビュー座標(左手座標系)[カメラ座標ともいう]
10
3. 3次元CG
ワールド座標とビュー座標
ワールド座標(右手座標系) ビュー座標(左手座標系)[カメラ座標ともいう]
3. 3次元CG
2.3.3 ビュー座標とスクリーン座標
Xv
Xs
Ys
Yv
Zv
ScreenScreen
視点
ビュー座標(左手座標系) スクリーン座標(2次元)
11
3. 3次元CG
2.3.4 投影法
並行投影(正射影) 透視投影
機械設計製図用(長さが正確)
遠近感がありデザイン用(長さが正確ではない)視点
Screen Screen
3. 3次元CG
投影法の比較
並行投影(正射影)
透視投影
camera
12
3. 3次元CG
2.4 座標変換
2.4.1 モデリング変換
2.4.2 視野変換
2.4.3 投影変換
2.4.4 Viewing
3. 3次元CG
座標変換(Viewing)
モデリング座標系からワールド座標系へ
ワールド座標系から視点(View)座標系へ
視点(View)座標系からスクリーン座標へ
描画までの座標変換(Viewing)の手順
モデリング変換
視野変換(視界変換、ビューイング変換)
空間と形状の定義
投影変換(射影変換)
視点、目標点、スクリーンサイズ
(スクリーン座標からディスプレイ座標へ)
13
3. 3次元CG
モデリング変換
X1
Y1
Z1
Xw Yw
Zw
(Cx,Cy,Cz)
α
β
γ
H:高さRx,Ry:半径
World Coordinate
Model Coordinate
モデル座標
ワールド座標
3. 3次元CG
視野変換、投影変換
ワールド座標
ビュー座標
スクリーン座標
視野変換 投影変換
座標の読替 座標の移動
Xw
Xv
Zv
Yv
Yw
Zw
World Coordination
View Coordination
視軸
目標点
視点
ViewPoint
TargetPoint
Screen
P0wP0s
P2w
P2s
P1w
P1s
14
3. 3次元CG
2.4.1 モデリング変換
X1
Y1
Z1
Xw Yw
Zw
(Cx,Cy,Cz)
α
β
γ
H:高さRx,Ry:半径
World Coordinate
Model Coordinate
各軸回りの回転角:α,β,γモデル座標原点の位置:Cx,Cy,Cz
3. 3次元CG
モデリング変換(変換パラメータ)
Pw(Pxw,Pyw,Pzw)
Xm
Ym
Zm
Xw XmYw
Ym
Zw Zm
Cm
α
β
γ
World Coordinate
Model Coordinate
Model Coordinate
Pm(Pw)
Pm
Pm(Pxm,Pym,pzm)
15
3. 3次元CG
モデリング変換(2次元でのイメージ)
配置後は見る座標系の原点が異なる
3. 3次元CG
モデリング変換(平行移動)
Xm
Xm
Ym
Ym
Zm
Zm
Xw Yw
Zw
Cm
モデル座標原点をワールド座標の原点にあわせる
x1y1z11
1000
0100
0010
-Cx-Cy-Cz1
PxmPymPzm1
=
X1=Tt Pm
16
3. 3次元CG
モデリング変換(Y軸回りの回転)
x2y2z21
cosβ0
sinβ0
0100
-sinβ0
cosβ0
0001
x1y1z11
=
Ym軸をβ回転させZm軸をZwYm平面にあわせる
X2=T(β) X1β
Xm
Xm
YmYm
Zm
Zm
XwYw
Zw
3. 3次元CG
モデリング変換(X軸回りの回転)
x3y3z31
0 cosα-sinα
0
1000
0sinαcosα
0
0001
x2y2z21
=
Xm軸をα回転させZm軸をZw軸にあわせる
X3=T(α) X2
α
XmXm
Ym
Ym
Zm
Zm
XwYw
Zw Xm,YmはXwYw平面内に移動する
17
3. 3次元CG
モデリング変換(Z軸回りの回転)
γ
Xm
Xm
Ym
Ym
Zm
Zm
XwYw
Zw
PxwPywPzw1
cosγsinγ
00
0010
-sinγcosγ
00
0001
x3y3z31
=
Zm軸をγ回転させモデリング座標をワールド座標にあわせる
Pw=T(γ) X3
3. 3次元CG
モデリング変換(変換式)
Xm
Ym
Zm
Xw Yw
Zw
Cm
α
β
γ
World Coordinate
Model Coordinate
Pm(Pw)
Pw(Pxw,Pyw,Pzw)
Pm(Pxm,Pym,pzm)X1=Tt PmX2=T(β) X1X3=T(α) X2Pw=T(γ) X3
Pw=T(γ) T(α)T(β) Tt Pm=Tmw Pm
Pm= Tt-1 T(β) -1 T(α) -1 T(γ) -1 Pw=Tmw -1 Pw
18
3. 3次元CG
2.4.2 視野変換
視点:V(Vx,Vy,Vz)w 目標点:T(Tx,Ty,Tz)wスクリーンサイズ:SX,SY 画面の傾き:γ 画角:φ
Xw
Xv
Zv
Yv
Yw
Zw
World Coordination
View Coordination
視軸
目標点
視点
ViewPoint
TargetPoint
Screen
P0wP0s
P2w
P2s
P1w
P1sφ
3. 3次元CG
視野変換と投影変換概要(2次元イメージ)
視野変換World View
投影変換View Screen画角:φ
19
3. 3次元CG
視野変換(World to View)
ワールド座標の値をビュー座標で読む
Xw
Xv
Zv
Yv
Yw
Zw
World Coordination
View Coordination
視軸
目標点
視点
ViewPoint(Vx,Vy,Vz)w
TargetPoint(Tx,Ty,Tz)w
Pw(Pxw,Pyw,Pzw)Pv(Pxv,Pyv,Pzv)
γ
3. 3次元CG
視野変換(平行移動)
Xw
XvXv
Xv
ZvZv
Zv
YvYv
YvYv
Yw
Zw
World Coordination
視点x1y1z11
1000
0100
0010
-Vx-Vy-Vz1
PxwPywPzw1
=
X1=Tt Pw
視点の原点をワールド座標原点に移動する
20
3. 3次元CG
視野変換(Y軸回りの回転)
x2y2z21
cosα0
-sinα0
0100
sinα0
cosα0
0001
x1y1z11
=
X2=T(α) X1
Yw軸回りの角度αの回転により、Zv軸をYwZw平面に重ねる
Xw
Xw
XvXv
Zv
YvYv
Yw
Zw
Zw
α
3. 3次元CG
Y軸まわりの回転角
22 )()(cos
TzVzTxVxTzVz
−+−
−=α
22 )()()(sinTzVzTxVx
TxVx−+−
−−=α
ここで、αはYwの先端から原点方向を見た場合の右回りを正とする
Tv=VxかつTz=Vxの場合(真上から物体を見る)は分母がZEROとなり計算不能となるこの場合cosα=1 sinα=0
とする。
21
3. 3次元CG
視野変換(X軸回りの回転)
Xw軸回りの角度βの回転により、-Zv軸をZw軸に合わせる
x3y3z31
0 cosβsinβ
0
1000
0-sinβcosβ
0
0001
x2y2z21
=
X3=T(β) X2
Xw
XvXv
Zv
Yv
Yw
Yw
Zw
Zw
β
3. 3次元CG
X軸まわりの回転角
222
22
)()()(
)()(cos
TzVzTyVyTxVx
TzVzTxVx
−+−+−
−+−=β
222 )()()(sin
TzVzTyVyTxVxTyVy
−+−+−
−=β
ここで、βはXwの先端から原点方向を見た場合の右回りを正とする
Tv=VxかつTy=VyかつTz=Vzの場合(視点と目標点が同じ)は分母がZEROとなり計算不能となるこの場合、目標点を視軸上に移動させる
22
3. 3次元CG
視野変換(Z軸回りの回転)
x4y4z41
cosγSinγ
00
0010
-sinγcosγ
00
0001
x3y3z31
=
Zw軸回りの角度γの回転により、Xv軸をXw軸に合わせる
X4=T(γ) X3
Xw
Xw XvXv
Zv
YvYw
Yw
Zw
γ
3. 3次元CG
視野変換(Z軸の反転)
1000
00-10
0100
0001
x4y4z41
=
Pv=T(-z) X4
右手座標から左手座標に変換する
PxvPyvPzv1
Xw XvXv
Zv
YvYw
Zw Z
w
23
3. 3次元CG
視野変換(World to View:変換式)
Pv(Pxv,Pyv,Pzv)
Pw(Pxw,Pyw,pzw)
X1=Tt PwX2=T(β) X1X3=T(α) X2
Pv=T(-z) X4
Pv=T(-z)T(γ) T(α)T(β) Tt Pw=Twv PwPw= Tt-1 T(β) -1 T(α) -1 T(γ) -1 T(-z)-1 Pw=Twv -1 Pv
Xw
Xv
Zv
Yv
Yw
Zw
World Coordination
View Coordination
視軸
目標点
視点
ViewPoint(Vx,Vy,Vz)w
TargetPoint(Tx,Ty,Tz)w
Pw(Pxw,Pyw,Pzw)Pv(Pxv,Pyv,Pzv)
γ
X4=T(γ) X2
3. 3次元CG
視野変換(参考)
ワールド座標とビュー座標が同じ右手座標系ならT(-z)は不要である
Pw= Tt(z)-1 T(β) -1 T(α) -1 T(γ) -1 T(-z)-1 Pw=Twv -1 Pv
視野変換は、座標を読み替えるだけであり、点は移動しない
World to View
Pv=T(-z)T(γ) T(α)T(β) Tt(z) Pw=Twv Pw
View to World
24
3. 3次元CG
2.4.3 投影変換
Xw
Xv
Zv
Yv
Yw
Zw
World Coordination
View Coordination
視軸
目標点
視点
ViewPoint(Vx,Vy,Vz)w
TargetPoint(Tx,Ty,Tz)w
Screen(SX,SY)
P0w
P0v
P0s
P2w
P2s
P1w
P1s
γ
Pv(Pxv,Pyv,Pzv) Ps(Pxs,Pys,Pzs)Pw(Pxw,Pyw,Pzw)
3. 3次元CG
投影変換(View to Screen)
Pv(Pxv,Pyv,Pzv) Ps(Pxs,Pys,Pzs)
Pv
Xv
Zv
YvScreen
Ps
SX
SY
25
3. 3次元CG
投影変換(スクリーンまでの距離)
スクリーンまでの距離depth = SX/tanφ
XvXv
Zv
YvYvScreen
PsPs
SX
SY
depth
φ
SX:画面のXサイズΦ:画角(広角、望遠)
3. 3次元CG
投影変換(求め方)
Pys = Pyv×depth/Pzv
Pxs = Pxv×depth/Pzv
SCREEN
SCREEN
Pv
Pv
depth
depth
Pzv
Pzv
SY
SX
Pys
Pxs
Pyv
Pxv
Ps
Ps
Ys
Xs
26
3. 3次元CG
投影変換(行列表現)
depth/Pzv000
00
depth/Pzv0
0depth/Pzv
00
0001
PxvPyvPyz1
=
PxsPvsPzs1
PxvPyvPyz1
depth/Pzv
1000
0010
0100
0001
=
但し、スクリーン座標は2次元なので、Pzsは省略する
Depth=0 または Pzv=0 とならないように注意
3. 3次元CG
投影変換(View to Screen:変換式)
Ps = Tvs Pv
Pv = Tvs-1 Ps
Tvs = depth/Pzv
1000
0010
0100
0001
Tvs-1 = Pzv / depth
1000
0010
0100
0001
World to Screen
Screen to World
Pzv=depthとする
27
3. 3次元CG
2.4.4 Viewing(Model-World-View-Screen)
Model座標:Pm(pxm,pym,pzm)
World座標:Pw(pxw,pyw,pzw)
View座標:Pv(pxv,pyv,pzvw)
Screen座標:Ps(pxv,pyv)
display座標:Pd(pxd,pyd)
Pw=Tmw PmPm= Tmw -1 Pw
Pv=Twv PwPw= Twv -1 Pv
Ps = Tvs PvPv = Tvs-1 Ps
モデリング変換
視野変換
投影変換
pxd = xs + SX/2pyd = -ys + SY/2
pxs = xd – SX/2pys = -yd + SY/2
3. 3次元CG
Viewing(Model-World-View)
Model座標:Pm(pxm,pym,pzm)
Screen座標:Ps(pxv,pyv)
display座標:Pd(pxd,pyd)
Pv= Tmw-1 Twv-1 Tvs-1 Ps Ps = Tvs Twv Tmw Pv
pxd = xs + SX/2pyd = -ys + SY/2
pxs = xd – SX/2pys = -yd + SY/2
Xw
Xv
Zv
Yv
Yw
Zw
World Coordination
View Coordination
視軸
目標点
視点
ViewPoint
TargetPoint
Screen
P0wP0s
P2w
P2s
P1w
P1sφ
28
3. 3次元CG
2.5 3Dクリッピング
2次元のクリッピングと同様に描画する必要のない形状を除去する
手順1. View Volumeを求める2. Bounding Boxを求める3. 交差判定を行う4. 交差したBounding Box内の形状とクリップ面との交差面を取り出す
[交差面計算は、処理系(OpenGLなど)が行う]
3. 3次元CG
View Volume (視体積)
Xv
Zv
Yv
視軸
Screen
前面クリッピング面
背面クリッピング面
View Volume
対象形状がビューボリューム内に有るか無いか判定する
29
3. 3次元CG
Bounding Box
対象形状を球あるいは直方体(バウンディングボックス)でつつみ、ビューボリュームとの交差を判定する
Xv
Zv
Yv
視軸
Screen
前面クリッピング面
背面クリッピング面
View VolumeBounding Box
3. 3次元CG
Cohen-Sutherland Algorithm(順次クリッピング)
Xv
Zv
Yv
視軸
Zmin
前面クリッピング面
標準ビューボリューム
(1,1,1)
(1,-1,1)
(-1,-1,1)
(-1,1,1)
(0,0,0)
背面クリッピング面 ビューボリュームの前 (Z<Zmin)
ビューボリュームの後 (Z>1)
ビューボリュームの左 (X<-Z)
ビューボリュームの右 (X>Z)
ビューボリュームの下 (Y<-Z)
ビューボリュームの上 (Y>Z)
P1 or P2 = 000000
P1 & P2 != 000000
If
then
thenelse
else if
線分全体が標準ボリューム内
線分全体が標準ボリューム外
線分の一部が標準ボリューム内の可能性有り
30
3. 3次元CG
BSP(Binary Space-Partioning)-Tree
対象形状(面の集合)を視点の前後の面に分解するBSP-Treeは隠面処理にも利用される
3. 3次元CG
BSP(Binary Space-Partioning)-Tree
領域を区切ることにより、領域が限定され、前後関係も構築されるゲームやCG描画に多用されている技術である
31
3. 3次元CG
課題1:まとめ(座標変換)
次の文章はコンピュータグラフィックスにおける3次元座標変換について説明したものである。文中に入る適切な語句を記述せよ。
コンピュータグラフィックスに用いられる座標は(1)円柱や球など形状毎に決められた座標である<A>座標(2)実際の描画対象となる3次元空間座標である<B>座標(3)視点を原点とし、<C>をZ軸とする<D>座標(4)スクリーン中心を原点とし<C>に直交する<E>座標がある。一般に形状を定義する空間は右手、左手座標のうち<F>座標が用いられ、スクリーンに投影する<D>座標は、<G>座標が用いられる。<A>座標に定義された形状を<B>座標に変換する手順を<H>変換という。また、<B>座標に対して設定した、視点、目標点、画角、画面の傾き、スクリーンサイズを与えて、<D>座標に変換する手順を<I>変換という。そして、<D>座標で表された形状を<E>座標に変換する手順を<J>変換という。この変換には遠近感を出さずに投影する<K>投影と、通常使われる遠近感を出す<L>投影がある。この変換により、3次元立体を2次元に映し出すことができる。<I>変換における演算手順を行列で表すと(1)平行移動(Tp), (2)Yw軸回りの回転(Tα),(3)Xw軸回りの回転(Tβ), (4)Zw軸回りの回転(Tγ),(5)Zw軸の反転(Tinv)となり,これらの変換を順に行い、両座標の座標軸を一致させればよい。故に、<B>座標の点Pwを<D>座標の点Pvに変換するには、上述の行列を用いてPv = <M>Pw で表すことができる。逆に、PvをPwに変換するには、上述の行列を用いてPw = <N>Pv で表すことができる。
3. 3次元CG
課題1:座標変換
Xw
Xv
Xv
Zv
Zv
Yv
Yv
Yw
Zw
視軸
目標点
目標点
視点 ScreenScreen
P0wP0s
P2w
P2s
P1w
P1sφ
次に、<J>変換では、視点からスクリーンまでの距離dが必要となる。画角φとスクリーンの画面サイズ2×SXが与えられたとき、dは d=<O>
で求めることができる。この関係より<D>座標で表された点Pv(xv,yv,zv)は、<E>座標Ps(xs,ys)ではdを用いて
xs = <P>xv ys = <P>yv
で表すことができる。この過程を経て、<B>座標の点をスクリーン上の点に映し出すことが可能となる。
32
3. 3次元CG
課題2:まとめ(手計算)
問.モデル座標上の点(9,5,5)が各座標変換や投影により座標値がどのように変
化するかを示せ
モデル座標原点のワールド座標での位置 C(50,60,30)、回転は無し
視点 (100,100,100)、スクリーンまでの距離 70、目標点 (100,100,0)画面サイズ(SX/2=SY/2=100)、画面の傾き(左回りに90度)
Ans モデル座標(9,5,5) ワールド座標[ ]ビュー座標(スクリーンの回転前)[ ]ビュー座標(スクリーンの回転後)[ ]スクリーン座標 [ ]
XmYm
Zm
Cylinder
(50,60,30)
Xw XwYw
Ys
Xs
Yv
Xv
Zw Zw
ScreenYw
3. 3次元CG
課題3:まとめ(行列計算)
問.モデル座標上の点(9,5,5)が各座標変換や投影により座標値がどのように変化するかを示せ。ただし、変換マトリックス(合成マトリックス)を用いて解くこと。
モデル座標原点のワールド座標での位置 C(50,60,30)、回転は無し
視点 (100,100,100)、スクリーンまでの距離 70、目標点 (100,100,0)画面サイズ(SX/2=SY/2=100)、画面の傾き(左回りに90度)
Ans モデリング変換行列Tmと変換後の座標[ ]ビューイング変換行列Tv
ビュー座標(スクリーンの回転前)[ ]ビュー座標(スクリーンの回転後)[ ]スクリーン座標 [ ]
XmYm
Zm
Cylinder
(50,60,30)
Xw XwYw
Ys
Xs
Yv
Xv
Zw Zw
ScreenYw