第6章 3次元形状のモデリング2 csg (constructive solid geometry) 表現 基本3...

54
6 3 次元形状のモデリング 6 3 次元形状のモデリング 畔上 秀幸 名古屋大学 情報学研究科 複雑系科学専攻 April 3, 2019 1 / 54

Upload: others

Post on 27-Feb-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

第 6章 3次元形状のモデリング

畔上 秀幸

名古屋大学 情報学研究科 複雑系科学専攻

April 3, 2019

1 / 54

Page 2: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

はじめに

§6.1 はじめに

(目標) CG で使われる 3次元形状の表現方法について理解する.

2 / 54

Page 3: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

3 次元形状表現法の種類

§6.2 3次元形状表現法の種類

1 B-Reps (boundary representation) 表現• 境界面を定義することで 3次元形状を表現する.

2 CSG (constructive solid geometry) 表現• 基本 3次元形状の集合演算によって 3次元形状を表現する.

3 ボクセル (voxel) 表現,オクトリー (octree) 表現• 3次元空間をボクセル (立方体の単位セル) に分割し,3次元形状に含まれるボクセルの集合で 3次元形状を表現する.

4 メタボール (meta-ball) 表現,CSRBF (compactly supported radial basisfunction) 表現

• 基底関数の組み合わせによって 3次元形状を表現する.

3 / 54

Page 4: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

§6.3 B-Reps 表現

定義 6.3.1 (多面体)

4つ以上の平面で囲まれた3次元有界領域を多面体 (Polyhedron) という.多面体は,複数の頂点を結ぶ辺と,その辺に囲まれた面で構成される.

4 / 54

Page 5: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

定義 6.3.2 (B-Reps 表現)

多面体を頂点 (vertex),辺 (edge),面 (face) に対する1 幾何情報

a 頂点の座標値b 辺を表す数式c 面を表す数式

2 位相情報a 辺と頂点の接続情報b 面と辺の接続情報

で表現する方法を B-Reps 表現という.

5 / 54

Page 6: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための必要条件

§ 6.3.1 多面体であるための必要条件

境界を求める演算子を ∂ と表す.図のような 4面体 P に対して,

∂P = △ABC+△CDA+△BDC+△BAD

∂ △ABC =−→AB+

−→BC+

−→CA, · · ·

∂−→AB = −A+ B, · · ·

∂A = 0

が成り立つ.

6 / 54

Page 7: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための必要条件

A

B

C

DP

図 6.1: 4面体 P

7 / 54

Page 8: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための必要条件

多面体であるならば,次の条件が成り立つ.

定理 6.3.3 (多面体であるための必要条件)

多面体 P の境界が多角形 Fi, i ∈ {1, 2, · · · , n}, で構成され, Fi の境界が線分Eij , j ∈ {1, 2, · · · ,mi}, で構成され,Eij の境界が点 Vijk, k ∈ {1, 2} で構成されるとき,P が多面体であるとき,

∂∂P = 0,

∂∂Fi = 0,

∂∂Eij = 0,

∂∂Vijk = 0

が成り立つ.

8 / 54

Page 9: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための必要条件

境界の隣接行列

I0 =(A B C D

1 1 1 1

), I1 =

−→AB

−→BC

−→CA

−→DC

−→BD

−→DA

A −1 0 1 0 0 1

B 1 −1 0 0 −1 0

C 0 1 −1 1 0 0

D 0 0 0 −1 1 −1

I2 =

△ABC △CDA △BDC △BAD−→AB 1 0 0 −1−→BC 1 0 −1 0−→CA 1 −1 0 0−→DC 0 −1 1 0−→BD 0 0 1 −1−→DA 0 1 0 −1

, I3 =

△ABC 1

△CDA 1

△BDC 1

△BAD 1

9 / 54

Page 10: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための必要条件

を用いれば

∂∂P = 0 ⇔ I0I1I2I3 = 0,

∂∂ △ABC = 0 · · · ⇔ I0I1I2 = 0TR4 ,

∂∂−→AB = 0 · · · ⇔ I0I1 = 0T

R6

とかける.

10 / 54

Page 11: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための十分条件

§ 6.3.2 多面体であるための十分条件

次の条件が成り立つならば,多面体 (polyhedron) である.

定理 6.3.4 (Euler の多面体公式)

球と位相同型な多面体では,面の数 f , 辺の数 e, 頂点の数 v に対して,

χ = f − e+ v = 2

が成り立つ.貫通する穴の数 g,面上の穴 (リング) の数 h に対して,

χ = f − e+ v − h = 2− 2g

が成り立つ.

χ は Euler 標数 (Euler characteristic) とよばれる.

11 / 54

Page 12: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための十分条件

定理 6.3.4 より,次のことがいえる.

1 多面体の数 b, 面の数 f , 辺の数 e, 頂点の数 v, 貫通する穴の数 g,面上の穴(リング) の数 h に対して,定理 6.3.4 より

z (x) = a · x = 0 (6.3.1)

が成り立つ.ただし,

a =(1 −1 1 −1 2 −2

)T,

x =(v e f h g b

)Tである.したがって,定理 6.3.4 を満たす x は,上式を満たす 6次元上の超平面上の整数値ベクトル (格子点) の集合である.

2 式 (6.3.1) を満たす独立な x のベクトルは5つである.それらを di,i ∈ {1, 2, · · · , 5}, とかき,Euler 作用素とよぶ.

3 di, i ∈ {1, 2, · · · , 5}, は,式 (6.3.1) を満たす超平面内にあることから,dz/dx = a と直交する.

12 / 54

Page 13: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための十分条件

4 したがって,x は,整数 ni, i ∈ {1, 2, · · · , 5}, に対して

x = n1d1 + n2d2 + n3d3 + n4d4 + n5d5

とかける.

5 例えば

A =(mev mfe mbfv mehg me-kh

d1 d2 d3 d4 d5

)

=

1 0 1 0 01 1 0 1 10 1 1 0 00 0 0 1 −10 0 0 1 00 0 1 0 0

13 / 54

Page 14: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための十分条件

と選べば,

x = An

とかける.ただし,n = (n1, n2, · · · , n5)T である.また,記号

mev, · · · ,me-kh は Euler 作用素に対するニーモニックコード (mnemoniccodes) である.m, k はそれぞれ ”make”, ”kill”, v, e, f, h, g, b はそれぞれ”vertex”, ”edge”, ”face”, ”hole”, ”ring”, ”body” を表す.

4面体を作成する場合は次のようになる.

14 / 54

Page 15: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

多面体であるための十分条件

mbfv mev mev

mfe mev mfe mfe

図 6.2: ニーモニックコードによる 4面体の作成

15 / 54

Page 16: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

集合演算

§ 6.3.3 集合演算

B-Reps 表現における多面体の集合演算は次のように行われる.

1 多面体 A のすべての面と多面体 Bi, i ∈ {1, 2, · · · ,m}, のすべての面の交線を求める.

2 A, Bi, i ∈ {1, 2, · · · ,m}, のすべての辺と求めた交線の交点を求め,交点と辺と面のデータを保存する.

3 集合演算を行い,不要となる頂点,辺,面に消去のマークをつける.

4 消去マークの頂点,辺,面を削除する.

16 / 54

Page 17: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

集合演算

図 6.3: B-Reps 表現における多面体の集合演算

17 / 54

Page 18: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

局所演算

§ 6.3.4 局所演算

B-Reps 表現では次のような局所演算が使われる.

1 挿引演算 (sweep, swing)

2 反転演算 (reflection)

3 面取りa chamfer: 頂点あるいは辺を平面で置き換える.b fillet: 頂点あるいは辺を球面あるいは円筒面で置き換える.

4 せん断 (shear)

5 曲げ (bend)

6 角度付け (angle)

18 / 54

Page 19: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

局所演算

sweep swing reflection

chamfer shear

図 6.4: B-Reps 表現における多面体の集合演算

19 / 54

Page 20: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

位相データベース

§ 6.3.5 位相データベース

位相情報のデータベースには,次のような構造が使われる.1 リスト構造 (list structure)

a 多面体,面,辺は,それぞれを構成する要素のデータをもつ.b 構造は単純であるが,同じデータを重複して記憶する点が不利である.

P

F1 F2 Fn

E1 E2 Em...

V1 V2

...

図 6.5: リスト構造

20 / 54

Page 21: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

位相データベース

2 リング構造 (ring structure)

a 多面体は,それを構成する面を一つ指定する.指定された面はその多面体を構成する面を順に指定して,最初の面に戻るリングを構成する.

b 面は,その面を構成する辺を一つ指定する.指定された辺はその面を構成する辺を順に指定して,最初の辺に戻るリングを構成する.

c 辺は,その辺を構成する頂点を一つ指定する.その頂点はもう一つの頂点を指定して,最初の頂点に戻るリングを構成する.

21 / 54

Page 22: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

位相データベース

P

F1 F2 Fn

E1 E2 Em

V1 V2

...

...

図 6.6: リング構造

22 / 54

Page 23: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

B-Reps 表現

位相データベース

3 ウィングド・エッジ・データ構造 (winged edge data structure)

a 各辺から,2つの頂点,2つの面,4つの辺へのポインタをもつ.b 各頂点は辺の一つに対してポインタをもつ.c 各面は辺の一つへのポインタをもつ.d 特徴:構造体の特徴を生かしたデータ構造である.この構造を用いて,時計回り,反時計回りにすべての辺を追跡できる.両方向の追跡により,B-Reps 表現の必要条件をチェックできる.

E pfacenface

pvt

nvt

pcw

ncw

nccw

pccw

E

pfacenface

pvt

nvt

pcw

ncw

nccw

pccw

図 6.7: ウィングド・エッジ・データ構造

23 / 54

Page 24: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

§6.4 CSG 表現

定義 6.4.1 (CSG 表現)

3次元形状をプリミティブ (primitive) とよばれる基本形状の集合演算により表現する方式を CSG 表現という.

24 / 54

Page 25: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

プリミティブの表現

§ 6.4.1 プリミティブ

プリミティブは制約条件を満たす3次元領域として表現される.例えば,円柱は

P (r, h) ={x ∈ R3

∣∣ x21 + x2

2 − r2 ≤ 0, x3 − h ≤ 0, x3 ≤ 0}

と表現される.一般に,プリミティブ Pi, i = 1, 2, · · · ,m, は

Pi ={x ∈ R3

∣∣ fij (x) ≤ 0, j ∈ {1, 2, · · · , ni}}

のように表現される.

25 / 54

Page 26: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

プリミティブの表現

x3

x1

x2

r

h

図 6.1: 円柱

26 / 54

Page 27: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

プリミティブの集合演算

§ 6.4.2 プリミティブの集合演算

3次元形状はプリミティブの集合演算 (Boolean operations) によって表現される (図 6.2 参照.ただし,\ は集合の差演算).

n

n

[

\

図 6.2: CSG 表現

27 / 54

Page 28: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

正規化された集合演算

§ 6.4.3 正規化された集合演算

開領域 A,B ⊂ R2 の集合演算は図 6.3 のようになる.ただし,A = ∂A∪A とする.また,same, diff はそれぞれ外向き法線が同方向,逆方向の違いを表す.

28 / 54

Page 29: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

正規化された集合演算

A B A ∩ B A \ B

B \ A ∂A ∩ B ∂B ∩A ∂A \ B

∂B \ A ∂A ∩ ∂B same ∂A ∩ ∂B diff

図 6.3: 集合演算

29 / 54

Page 30: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

正規化された集合演算

集合演算の誤りを防ぐために,正規化された集合演算が使われる.開あるいは閉領域 A,B ⊂ R2, □ ∈ {∪,∩, \} に対して,

A□∗B = closure (interior (A□B))

で定義される □∗ ∈ {∪∗,∩∗, \∗} を正規化された集合演算という.ただし,closure は境界を含める,interior は境界を除く演算子を表す.

A B A ∩ B A ∩∗ B = A ∩∗ B

図 6.4: 正規化された集合演算

30 / 54

Page 31: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

データベース

§ 6.4.4 データベース

プリミティブのデータベースには,次のような構造が使われる.

1 ID (識別番号)

2 種類

3 幾何正規化データ

4 属性データ

31 / 54

Page 32: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

データベース

図 6.5: プリミティブデータベースの例

32 / 54

Page 33: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

データベース

演算順序のデータベースには,次のような構造が使われる.

1 演算の種類

2 演算を受ける 3次元形状の構成順序へのポインタ

3 演算に入るプリミティブ IDへのポインタ

4 次に演算を受ける構成順序へのポインタ

33 / 54

Page 34: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

アルゴリズム

§ 6.4.5 アルゴリズム

プリミティブのデータベースから必要な情報は次のようにして計算される.

1 あるプリミティブ

Pi ={x ∈ R3

∣∣ fij (x) ≤ 0, j ∈ {1, 2, · · · , ni}}

に対して,ある点 y ∈ R3 の内外判定は

Ifni∩j=1

(fij (y) ≤ 0) is true then 1 else 0

によって行われる.

34 / 54

Page 35: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

アルゴリズム

図 6.6: 内外判定のアルゴリズム

35 / 54

Page 36: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

アルゴリズム

2 ある点 y ∈ R3 からあるプリミティブ

Pi ={x ∈ R3

∣∣ fij (x) ≤ 0, j ∈ {1, 2, · · · , ni}}

の境界までの符号付き距離は

Bi (y) = maxj=1,2,··· ,ni

fij (y)

で求められる.ここで,Bi (x) を境界評価関数 (boundary evaluator)という.

3 ある点 y ∈ R3 からプリミティブ Pk = Pi□Pj , □ ∈ {∪,∩, \}, の境界までの符号付き距離は

Bk (y) =

min {Bi (y) , Bj (y)} for Pk = Pi ∪ Pj

max {Bi (y) , Bj (y)} for Pk = Pi ∩ Pj

max {Bi (y) ,−Bj (y)} for Pk = Pi \ Pj

によって計算される.ただし,Bi (y), Bj (y) は Pi, Pj の境界評価関数とする.

36 / 54

Page 37: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

CSG 表現

アルゴリズム

4 Pk の境界 ∂Pk は,すべての j ∈ {1, 2, · · · , nk} に対して

∂Pk ={x ∈ R3

∣∣ Bk (x) = 0, fkj (x) = 0}

で与えられる.

5 fkj (x) と fkl (x), j, l ∈ {1, 2, · · · , nk}, の交線は{x ∈ R3

∣∣ Bk (x) = 0, fkj (x) = 0, fkl (x) = 0}

で与えられる.

6 fkj (x), fkl (x), fkm (x), j, l,m ∈ {1, 2, · · · , nk}, の交点は{x ∈ R3

∣∣ Bk (x) = 0, fkj (x) = 0, fkl (x) = 0, fkm (x) = 0}

で与えられる.

37 / 54

Page 38: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

ボクセル表現

§6.5 ボクセル表現

定義 6.5.1 (ボクセル表現)

3次元形状を小さな立方体 (ボクセル, voxel) の集合で表現する方式をボクセル表現と表現という.

図 6.1: ピクセル (左) とボクセル (右)

38 / 54

Page 39: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

ボクセル表現

ボクセル表現のデータ量を節約のために次の表現が考案された.

定義 6.5.2 (オクトリー表現)

3次元形状を小さな立方体 (ボクセル, voxel) の集合で表現する.ただし,各ボクセルごとに,次のいずれかに分類する.

1 3次元形状の内部にある(A)

2 3次元形状の外部になる(B)

3 3次元形状の内部と外部にまたがっている(C)

(C) のボクセルに対して,各辺 2等分により 8分割 (オクトリー:8分木) し,上記の分類を (C) のボクセルがなくなるまで繰り返す.

39 / 54

Page 40: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

ボクセル表現

図 6.2: オクトリー表現

開発例 : ボリューム CAD(V-CAD), 理化学研究所

40 / 54

Page 41: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

メタボール表現

§6.6 メタボール表現

定義 6.6.1 (メタボール表現)

基底関数の組み合わせにより濃度分布を作成し,その閾値による等高面で 3次元形状を表現する方式をメタボール表現という.

図 6.1: メタボール表現

41 / 54

Page 42: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

メタボール表現

CSRBF (compactly supported radial basis function) 表現も同様に定義される.開発例 : DigiMeta

42 / 54

Page 43: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

§6.7 OpenGL におけるプリミティブ関数

プリミティブを描く.

program6 1.c

void display(void)

...

/* 光源 */

glLightfv(GL_LIGHT0, GL_POSITION, light0_position);

...

glEnable(GL_LIGHTING); /* ライト ON */

...

/* プリミティブ */

glutSolidTorus(0.3, 0.9, 50, 50);

...

43 / 54

Page 44: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

glLightfv()

void glLightfv(GLenum light, GLenum pname,

const GLfloat *params);

• glEnable(GL LIGHTING), glDisable(GL LIGHTING) で光源を設定を有効,無効とする.

• light に光源の番号(GL LIGHT0~GL LIGHTn,n はシステム依存)を設定する

• pname に GL POSITION を指定したとき, params は光源を同次座標(x1, x2, x3, w) で設定する.w = 0 のとき (x1, x2, x3) 方向の平行光線となる.GL DIFFUSE を指定すれば光源の拡散反射光強度(色)が設定可能となる.

• pname に GL DIFFUSE を指定したとき, params は拡散反射光強度を設定する.光源の拡散反射光強度が (R,G,B) なら params の各要素には(R,G,B, 1) を設定する.初期値は (1111).

44 / 54

Page 45: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

glutInitDisplayMode()

void glutInitDisplayMode(unsigned int mode);

• ディスプレイの表示モードを設定する.• mode に GLUT DEPTH を指定して glEnable(GL DEPTH TEST) を指定することで隠面消去が有効となる.

45 / 54

Page 46: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

1 丸型オブジェクト

glutWireCone(), glutSolidCone()

void glutWireCone(radius, height, slices, stacks)

void glutSolidCone(radius, height, slices, stacks)

円錐

glutWireSphere(), glutSolidSphere()

void glutWireSphere(radius, slices, stacks)

void glutSolidSphere(radius, slices, stacks)

球体

46 / 54

Page 47: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

2 特殊型オブジェクト

glutWireTorus(), glutSolidTorus()

void glutWireTorus(innerRadius, outerRadius, nsides, rings)

void glutSolidTorus(innerRadius, outerRadius, nsides, rings)

トーラス

glutWireTeapot(), glutSolidTeapot()

void glutWireTeapot(size)

void glutSolidTeapot(size)

ティーポット

47 / 54

Page 48: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

3 面体オブジェクト

glutWireTetrahedron(),glutSolidTetrahedron()

void glutWireTetrahedron(void)

void glutWireTetrahedron(void)

4面体

glutWireCube(), glutSolidCube()

void glutWireCube(width)

void glutSolidCube(width)

6面体 (立方体)

48 / 54

Page 49: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

glutWireOctahedron(),glutSolidOctahedron()

void glutWireOctahedron(void)

void glutSolidOctahedron(void)

8面体

glutWireDodecahedron(),glutSolidDodecahedron()

void glutWireDodecahedron(void)

void glutSolidDodecahedron(void)

12面体

glutWireIcosahedron(),glutSolidIcosahedron()

void glutWireIcosahedron(void)

void glutSolidIcosahedron(void)

20面体

49 / 54

Page 50: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

ロボットアームを描く.

program6 2.c

void display(void)

...

/* 第 1腕 */

glPushMatrix();

glScalef(0.5, 0.1, 0.1);

glutSolidCube(1.0);

glPopMatrix();

glTranslatef(0.5/2+0.05, 0.0, 0.0);

/* 第 1関節 */

glutSolidSphere(0.05, 10, 10);

...

50 / 54

Page 51: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

図 6.1: ロボットアームの組み立て

51 / 54

Page 52: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

OpenGL におけるプリミティブ関数

演習 6.7.1 (ロボットの製作)

プログラム program6 2.c を参考にして図 6.2 のようなロボットを製作せよ.

図 6.2: ロボット

52 / 54

Page 53: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

まとめ

§6.8 まとめ

CG で使われる 3次元形状の表現方法についてみてきた.

1 B-Reps 表現では境界面によって多面体が表現される.

2 CSG 表現ではプリミティブの集合演算によって 3次元形状が表現される.

3 ボクセル表現,オクトリー表現では,3次元空間をボクセルの集合で 3次元形状が表現される.

4 メタボール表現,CSRBF 表現では,基底関数の組み合わせによって 3次元形状が表現される.

53 / 54

Page 54: 第6章 3次元形状のモデリング2 CSG (constructive solid geometry) 表現 基本3 次元形状の集合演算によって3 次元形状を表現する. 3 ボクセル(voxel)

第 6 章 3 次元形状のモデリング

参考文献

参考文献

[1] 嘉数侑昇, 古川正志.

CAD/CAM/CGのための形状処理工学入門.

森北出版, 1995.

[2] James D. Foley, Steven K. Feiner, Andries van Dam, John F. Hughes, 佐藤義雄 (訳).

コンピュータグラフィックス 理論と実践.

オーム社, 2001.

[3] 千葉則茂, 土井章男.

3次元 CGの基礎と応用.

サイエンス社, 2004.

54 / 54