7章 隠れ面の消去を行う

7章
隠れ面の消去を行う
可視面・不可視面の判定方法と隠れ面(不可視
面)の消去法について述べる.
7.1 ベクトルの内積と外積

省略
7.2 空間における平面の決定(その1)
平面上の点P1(x1,y1,z1)とP1における法線ベクトルから決定する方法
法線ベクトルをN=(a,b,c),平面上の任意の点Q(x,y,z)
y
N  P1Q  N  (OQ  OP1 )
N=(a,b,c)
 (a i  b j  c k ) {i ( x  x1 )  j ( y  y1 )  k ( z  z1 )}
P1(x1,y1,z1)
0
 a ( x  x1 )  b ( y  y1 )  c ( z  z1 )  0
x
Q(x,y,z)
平面の式
ax  by  cz  d  0
の形に書き直すことができる.
z
7.2 空間における平面の決定(その2)
y
ax1  by1  cz1  d  0
ax2  by2  cz2  d  0
P3(x3,y3,z3)
N
ax3  by3  cz3  d  0
a  y1 ( z2  z3 )  y2 ( z3  z1 )  y3 ( z1  z2 )
0
x
b  z1 ( x2  x3 )  z2 ( x3  x1 )  z3 ( x1  x2 )
c  x1 ( y2  y3 )  x2 ( y3  y1 )  x3 ( y1  y2 )
z
P2(x2,y2,z2)
d  x1 ( z3 y2  z2 y3 )  y1 ( z2 x3  x2 z3 )  z1 ( x2 y3  y2 x3 )
i
j
k
N  x2  x1 y2  y1 z2  z1
x3  x1 y3  y1 z3  z1
7.2 空間における平面の決定(その3)
y
ax+by+cz=1
1/b
v2
1
1
i k
a
c
1
1
v2  j  k
b
c
v1 
i
1/c
n
v1
1/a
x
z
単位法線ベクトルnは3次元CGにお
いて,陰影づけなどの処理で重要な
役割を果たす.
j
k
1
1
1
v1  v 2  1 / a 0  1 / c  i  j  k
bc ca ab
0 1/ b 1/ c
v1  v 2 a b c
n
 i  j k
v1  v 2 s s s
s  a2  b2  c2
7.3 隠面消去
単位法線
ベクトル:n
単位法線ベクトルnとベクトルvの内積値n・vが
≧0 ならば, 多角形は表の面(見える)
<0 ならば, 多角形は裏の面(見えない)
となる.
ベクトル:v
単位法線
ベクトル:n
視点
可視の(見える)多角形のみを表示すると,
多角形で構成された凸多面体の隠面消去
された表示を得る.
視点(表面が見える)
多面体の表面
視点(表面が見えない)
7.4 Zバッファ法
隠面処理とデプスバッファ
y

P2
z
P1



x

射影を行うとき,射影中心から放
射する直線上にあるすべての点
は,同じ場所に射影される.
この場合P1はP2に隠されている
ので,P1は描画する必要はない.
問題は,P1がP2に隠されている
のをどのようにして判断するか?
同じ射影の場合,遠い点が近い
点に隠される.
遠さが計算できれば問題の判断
ができる.
7.4 Zバッファ法
デプス
後面
far plane
錐台のことをビューボリュームという.
6つの面はクリップ面とよばれ,投影変換で
ビューボリューム以外のものが除去される.
前面
near plane
投影面
透視射影の場合,後面(far plane)
と前面(near plane)を定義すれば,
射影方式は一義的に決まる.
7.4 Zバッファ法
デプス



距離を表現するために,デプス(depth)という指標を使う.
デプスは頂点の遠さを[-1,1]の範囲で正規化した指標である.
デプスを投影点の第3の座標として次のように定義する.
z
aPz  b
 Pz
頂点はnear planeにあるときはz=-1,far planeにあるときはz=1になるように,
a,bを決める.
Nは視点とnear plane間の距離
2 FN
F N
Fは視点とfar plane間の距離
F N
F N
a
b
( Px , Py , Pz ) が射影変換によって新たな3次元空間の点 ( x, y, z) にマッピングされる.
( x, y , z )  ( N
Px
 Pz
,N
Py
 Pz
, aPzPz b )
7.4 Zバッファ法
デプスバッファ




3Dオブジェクトが投影面に投影され,必ず一部の面(線)
が重なる.重なる面を意識し,描画しなしないように処理
することを隠面(線)処理という.
隠面処理はCGの現実感の大いに関係する.また,CG
の処理高率にも大きく影響する.
このアルゴリズムにはいくつかあるが,デプスバッファま
たはz-bufferという方法を使う.
フレームバッファはピクセルごとに輝度または色を記憶し
ている.デプスバッファはピクセルごとにデプス値を記憶
している.
7.4 Zバッファ法
手順





初期化時にデプスバッファの値はすべて1で初期化される
(一番遠くに設定する).
ピクセルに新たに投影されるとき,フレームバッファのその
ピクセルにある輝度または色を更新するかどうかテストを
行う.(デプステストという.)
デプス値が現在値より小さければ(視点に近ければ),その
バッファ(フレームバッファとデプスバッファ)の値を更新す
る.
処理が終わるときに,デプスバッファの値は一番近い点の
デプス値が保存される.
その結果,隠面が除去され,見える部分だけが描画される.
7.5 スキャンライン法
y
スキャンライン
面1を
表示
面2
面1
0
x
スクリーン平面
z
スキャンライン面
z
面2を
表示
x