7. 3次元形状モデル

7. 3次元形状モデル
形状モデルのデータ構造
2. 多角形(ポリゴン)
1.
多角形の種類
2. 多角形の法線ベクトル
3. 多角形の三角形分割
1.
3. 多角形メッシュによる形状モデリング
1.
2.
3.
4.
多角形メッシュによる物体の近似
多角形メッシュのデータ構造
陰面消去
多角形メッシュと曲面パッチ
4. 多角形メッシュ表現の平滑化
多角形メッシュのシェーディング
2. グローシェーディング
3. フォンシェーディング
1.
5. サンプルプログラム
7.1形状モデルのデータ構造
1. 形状モデル
3次元物体の形状をモデル化した数学・幾何学モデル
2. 様々な形状モデル
多角形や多面体を基礎にした形状モデル(主流)
2. ボクセルを基礎とした形状モデル(物体の内部の表現が可)
3. ポテンシャル場の概念を基礎とした形状モデル
1.
3. 基本的な形状要素
1.
ワイヤーフレームモデル
1.
2.
3.
2.
サーフェースモデル
1.
2.
3.
形状要素: 点,線,面,立体
3次元物体: 稜線
ワイヤーフレームモデル: 点と稜線で構成する
3次元物体: 面
サーフェースモデル: 頂点,稜線,面(多角形)で構成する
ソリッドモデル
1.
2.
3.
3次元物体: 多面体
CSG方法: 円柱や直方体などの基本形状要素を組み合わせる方法
境界表現方法: 物体を構成する面や境界を,稜線や頂点で表現する方法
頂点
稜線
7.1 形状モデルのデータ構造
 データ構造:
座標値などの幾何情報 + 頂点,線分,多角形などの接続関係の位相情報
 CSG方式:
形状プリミティブを半空間Sijの集合積Sj=∩Sijで表す
半空間の境界は,曲面式f(x,y,z)=0で表現する
形状プリミティブSjを組み合わせて生成される物体Sは,和集合S=∪Sjで表現する
7.1 形状モデルのデータ構造
 境界表現法のデータ構造
 多面体を構成する局面群
 曲面を構成する稜線群
 稜線を構成する頂点群との間
の接続関係
(位相関係)
7.1 形状モデルのデータ構造
 立体の表現
オブジェクトの各面にある4つの直線が,それぞれの四角形の面の境界であ
ると仮定すると,この図は立方体である
2. 同じ直線の組み合わせで,部分的またはすべての面が欠けている(穴が開
いた)図を書くこともできる
図の右側は,全ての面と「ぶら下がる」余分な面を含んで,立体の境界でな
いオブジェクトになっている
この理由で,更にいくつかの束縛条件が必要
1.
7.1 形状モデルのデータ構造
 多面体とオイラーの公式:
多面体は各エッジが偶数個の多角形の一部である多角形の集まりで境界されるソリッド立体
である
多面体にはトーラスと異なり穴が無い
単純な多面体の境界表現は,次のオイラーの公式の条件を満たす
V–E+F=2
V;頂点の数, E;エッジの数, F;面の数

更にオイラーの式を一般化する
V – E + F – H = 2(C – G)
G;オブジェクトを貫通する穴の数,
C;オブジェクトの切り離された部品数
7.1形状モデルのデータ構造
 ウィングドエッジデータ構造:
単純な表現方法を用いると,例えば,1エッジが共有する2つの面をさがすには,全ての面の
エッジリストを検索する必要がある,など計算コストが高くなる場合がある
ウィングドエッジ構造の各稜線は,次の要素で表現される
1) エッジの2つの終点
2) エッジを共有する2つの面
3) エッジの端点から広がる4つの追加エッジへのポインター
各端点では,そこから広がるエッジの1つに対して,逆向きのポインターを持つ
各面は,そのエッジの1つを示すポインターを持っている
⇒エッジの2つの面の各頂点を時計回りに辿ると,それぞれ反対方向にエッジの端点をめぐる
ことになる
面を基にした立体形状モデル
面の幾何情報:面法線と原点からの距離
面の位相情報:隣接する面の情報(面ループ/面リスト)
1.
2.
面名
法線vector
距離
面名
面ループ
F1
(0,-1,0)
0
F1
f2 - f6 - f4 - f5
F2
(1,0,0)
1
F2
f3 - f6 – f1 - f5
F3
(o,1,0)
1
F3
f4 - f6 – f2 - f5
F4
(-1,0,0)
0
F4
f1 - f6 – f3 - f5
F5
(0,0,-1)
0
F5
f1 – f4 – f3 – f2
F6
(0,0,1)
1
F6
f1 – f2 – f3 – f4
立体形状モデルの操作
3.
1.
2.
3.
稜線情報⇒稜線の名前(面名,面名)
f1: f2-f6-f4-f5 の場合の稜線は (f1,f2),(f1,f6),(f1,f4),(f1,f5)
頂点情報⇒頂点の名前(面名,面名,面名)
f1: f2-f6-f4-f5 の場合の頂点は (f1,f2,f6),(f1,f6,f4),(f1,f4,f5),(f1,f5,f2)
頂点の計算


面の単位法線ベクトル n  n x , n y , n z
面の陰関数表現 nx x  n y y  nz z  r  0
この面は距離を d とすると P  dnx , dn y , dnz


の点を通る
面を基にした立体形状モデル
ワイヤーフレームでの表示
a.
立体の描画
面隣接情報→点情報→計算すべき点 ⇒ 点座標計算
面幾何情報→面の陰関数表現
b.
点情報と点座標情報から実際の描画
x1, y 
f1:f2-f3-f4
(f1,f2,f3),(f1,f3,f4),(f1,f4,f2)
面ループ
頂点リスト
c.
頂点座標計算
(fn,fm,fk)の座標
法線ベクトル: n  n x , n y , n z
距離:d
陰関数表現: n x x  n y y  n z z  d  0

面:
 a1 x  b1 y  c1 z  d1  0

 a 2 x  b2 y  c2 z  d 2  0
a x  b y  c z  d  0
3
3
3
 3

 x1 , y1 , z1 

点:  x2 , y2 , z2 
 x , y , z 
 3 3 3
f3
f1
f4
f2
7.1 形状モデルのデータ構造
 ウィングドエッジデータ構造
 稜線Edgeは,頂点PVTと頂点NVTから構成される
 稜線Edgeは,曲面Nfaceと曲面Pfaceの稜線
 稜線NCCWと稜線PCWは,頂点PVTに接続
 稜線NCWと稜線PCCWは,頂点NVTに接続
7.1形状モデルのデータ構造
7.2多角形(ポリゴン)
 多角形の種類
同一平面上にある点群を,互いに交差しない一連の線分で結んで,1つの領域を囲んだもの
• 頂点:多角形を構成する点
• 稜線:頂点間を結ぶ線
•
•
•
凸多角形:多角形の内部に任意の2点を与えたとき,多角形の外側に出ることなく,その2
点を結ぶ線分が作れる多角形
凹多角形:凸多角形では,全ての隣り合う稜線のなす角が180°未満であるが,凹多角形
では180°以上のものが1つ以上ある
穴のある多角形:多角形の内部に多角形を含むもの
外側の多角形の頂点と内側の多角形の頂点を結ぶ稜線を付加して,凹多角形とみなし,
三角形分割により,複数の凸多角形に分割できる
7.2多角形(ポリゴン)
 多角形の法線ベクトル
平面の陰関数表現式
ax  by  cz  d  0

s  a b c
2
2

1
2 2
単位法線ベクトルN
a b c
N 

s s s
E  E1
N 0
E0  E1
7.2 
7.3
7.2多角形(ポリゴン)
 多角形の三角形分割
多角形は,三角分割により複数の凸多面体である三角形に分割できる
穴のある多角形は,複数の凸多角形である三角形に分割できる
7.3 多角形メッシュによる形状モデリング
 多角形近似による物体の近似
3次元空間に定義された2次曲面や自由
局面は,多角形(ポリゴン)メッシュを用い
て近似して表示される
多角形メッシュの特別な場合
四角形メッシュ・・・多角形メッシュでは
粗い場合
三角形メッシュ・・・四角形の4頂点が
同一平面内にない場合
7.3 多角形メッシュによる形状モデリング
•
多角形メッシュの1つの頂点は,複数の多
角形に重複して属するので,同じ座標値を
もつ頂点ブロックが重複して存在する
•
改良
稜線ブロックを加えて,多角形リストと稜線
リストを作り,同じ頂点の座標値を持つ頂
点ブロックの重複を防いでいる
但し,稜線ブロックは多角形リスト間で重複
する
7.3 多角形メッシュによる形状モデリング
 陰面消去
多角形の単位法線ベクトルN
多角形の1点から視線へ向かうベクトルV
v  n  v  n cos 
1.10
内積の値が0以上の場合,多角形は表面で可視
負の場合,裏面で不可視
この結果から,可視の多角形のみを表示すると,
多角形で構成された凸多面体の陰面消去された
表示となる
頂点の座標値によって,多角形の視点からの最
大値と最小値を計算し,視点から遠い多角形か
ら順に表示すると,深さ方向にソート(デプスソー
ト)して表示する陰面消去ができる
7.4 多角形メッシュ表現の平滑化
 多角形メッシュのシェーディング
5章で論じたシェーディングモデルを多角形メッシュの各多角形に適応する
 コンスタントシェーディング
照明光は無限遠点からの平行光線で,同じ多角形ではあらゆる点で同じ単位法
線ベクトルを用い,多角形上の点の光は,環境光と拡散反射光のみを考慮する
従って,1つの多角形上のあらゆる点の光の強さは同じ
隣接する多角形の境界部分が強調され物体がごつごつして見える
 グローシェーディング
多角形メッシュで表現された物体を滑らかに見せる方法
多角形の各頂点での法線ベクトルは,その頂点を共有する全ての多角形の法線
ベクトルの平均値が与えられる
I e  1   I b  I a
I f  1   I a  I d
0  ,   1
I  1   I e  I f
0   1
7.4
7.5
7.6
7.4 多角形メッシュ表現の平滑化
 フォンシェーディング
より高品質に表示する方法
多角形の各頂点での法線ベクトルを求める
稜線AB上の点Eでの法線ベクトルNe
稜線AD上の点Fでの法線ベクトルNf
線分EF上の点での法線ベクトルN
N e  1   N b  N a
N f  1   N a  N d
N  1   N e  N f
7.7
7.8
7.9 
多角形の各点での法線ベクトルによって,
各点の光の強さを計算する
隣接する多角形の法線ベクトルの平均値として
計算された多角形の頂点での法線ベクトルを,
多角形全体に混ぜ合わせる方法