Beziex自由曲面バーチャル研究室
(C)1999-2012 EISHIN All Rights Reserved.

Beziex Ts (Home)
 & ダウンロード


Beziex LG (Home)
 & ダウンロード




マニュアル目次

1章 前知識
2章 新ベジェ境界曲面
3章 プログラムについて
4章 サンプル・アプリケーション
5章 自由曲面関数ライブラリ
6章 bxCore.h
7章 bxDB.h
8章 bxProc.h
9章 数値関数
10章 サンプル・ベースファイル



Copyright 1999-2011 EISHIN

2章 新ベジェ境界曲面

1. 概要

この章では、当研究室で考案した新しい自由曲面の構造について説明する。
この自由曲面は、「1章 前知識」で述べたベジェ境界曲面の一種であり、3角と4角の2種類がある。そして専門的になるが、3、4角とも4次以上の有理式で、境界は3次ベジェ曲線と同形状となっている。以後、この曲面を
新ベジェ境界曲面
と呼ぶことにする。
新ベジェ境界曲面は1章で述べた通り、
a1)  (頂点、ハンドル以外の)複数の制御点がプログラム内で類推されて決定している。この値をそのまま使用することもできるが、ユーザーが操作することもできる。この制御点は「境界非共有制御点」で視覚的である。そして移動させても隣接曲面との滑らかさを保つ。
a2)  共有頂点が「直線化ハンドル対」状態でなくても、この頂点から伸びるすべてのハンドルが「頂点平面」上にあれば、隣接曲面との滑らかさを保つ。
a3)  3角曲面であっても、すべての頂点の性質が同じである。
といった利点を持つ。また
a4)  3、4角ともNURBS曲面に変換可能(逆変換は条件が満たされている場合のみ可能)。ただし現バージョンには、この変換関数ライブラリは含まれない。
といった特長も持つ。
しかしながら、
b1)  共有頂点から伸びるハンドルが「直線化ハンドル対」状態でない場合で、ハンドル対の角度が180°から大きく離れている時、思い通りの接続状態にはならないことがある。また「直線化ハンドル対」状態であっても、共有ハンドルと非共有ハンドルの角度が90°から大きく離れた場合、思い通りの繋がり方にならないことがある。ただし両パターンとも滑らかには繋がる。
という性質もあり、これの解消は今後の課題である。また専門的になるが、
b2)  NURBS曲面に変換の際、頂点が特異点になる。また頂点での偏微分値がゼロとなる場合がある。つまり変換データを他の3Dソフトに持っていった場合、それらのソフトがこの問題を解決できるようになっているかが問題になる。
b3)  3角曲面をNURBS変換した場合、縮退の影響により、ある1頂点上で偏微分値がゼロとなることがある。ただしトリムをサポートしている3Dソフトに対しては、対処可能である。
といったことも欠点となる場合も出てくるだろう。


2. 要素

2-1. コントロールバー

新ベジェ境界曲面の(頂点、ハンドル以外の)制御点の数はハンドル数と同じで、3角曲面で6個、4角曲面で8個ある。そこで制御点をより視覚的に表現する為に、当研究室では同数である
ハンドル点と制御点を結んだ直線
を考え、これを
コントロールバー
と呼んでいる。なお、ハンドル点とはハンドルの両端のうち、頂点とは反対側の方をいう。
すなわちコントロールバーも3角曲面で6本、4角曲面で8本となる。この対応するハンドルとコントロールバーの成す角度は90°から大きく離れていない場合が多い。


2-2. 要素の種類

新ベジェ境界曲面に関して、当研究室では大きく主要素と補助要素に分けている。
a1)  主要素
常にデータとして記憶しておくべき要素
a2)  補助要素
計算時に必要に応じ、主要素から作られる要素。計算時のみ存在する。
また主要素は2種類の要素レベルに分けられる。
b1)  レベル1
1枚の曲面を構成するのに必要な要素を示す
b2)  レベル2
隣接する曲面が滑らかに繋がるために必要な要素を示す
モデリングソフトを作成する場合、どちらのレベルの要素も必要である。そしてユーザーに対しては最低限、レベル1の要素を操作できるようになっていなければならない(初期値として既に値が類推されていて、そのまま使っても良いものも含む)。ユーザーがレベル1要素しか操作できない場合、ユーザーがレベル1要素を操作すると即、レベル2要素が正しく変更されるようになっている必要がある。
このレベル2要素の全部または一部がユーザー側で操作できるようにするかどうかは、モデリングソフト作成者の考え方次第である。当ホームページのサンプル・アプリケーションでは、レベル1のみが操作できるようになっている。
また各要素には必要個数が決まっている。ただしレベル1要素の場合、1枚の曲面を構成するのに必要な数と、隣接する曲面が滑らかに繋がるために必要な数が異なる。そこで必要個数といえば、(どのレベルの要素でも)曲面が滑らかに繋がるために必要な数であるものとする。
ところで今回、レベル2で示す要素は滑らかに繋げるためのものだけを示す。隣接する曲面と折れ曲がって(ただしスキマはなく)繋がる場合もあるが、現時点では触れないものとする(現在の関数ライブラリではサポートしていない。またT節点なども考慮しない)。


2-3. 要素レベル1

要素レベル1には次の3要素がある。

1) 頂点
1枚の曲面に対し、3角曲面の場合は3個、4角曲面の場合は4個の頂点がある。曲面が隣接している場合、1共有頂点を1個と数えるため、1頂点の回りに複数の曲面が存在することになる。

2) ハンドル
1枚の曲面内において、1頂点に付き2本のハンドルがある。すなわち3角曲面の場合は6本、4角曲面の場合は8本となる。曲面が隣接している場合、1共有ハンドルで1本と数えるため、1ハンドルの片側もしくは両側に曲面が存在することになる。

3) コントロールバー
1枚の曲面内において、1ハンドルに付き1本のコントロールバーがある。このため3角曲面の場合は6本、4角曲面の場合は8本となる。曲面が隣接している場合は、1共有ハンドルの両側に曲面が存在する。この時、1ハンドルに2曲面分のコントロールバー、すなわち2本のコントロールバーが付くことになる。よって1ハンドルに対するコントロールバーの数は1本または2本である。


2-4. 要素レベル2

要素レベル2には次の4要素がある。

1) ループ頂点/非ループ頂点
1共有頂点の回りに4枚の曲面(曲面0〜3)が存在する場合を考え、曲面0と1、曲面1と2、曲面2と3が接続しているものとする。次に曲面3と0の関係を見た場合、
a)  曲面3と0が接続している(共有頂点を中心に1周している)
b)  曲面3と0が接続していない(扇形のようになっている)
の2通りの場合がある。この時、aの共有頂点をループ頂点、bを非ループ頂点と呼ぶことにする。このループ頂点/非ループ頂点は、4枚以外の場合も同様に考えることができるだろう。
また曲面0と1、曲面2と3が接続しているが、曲面1と2、曲面3と0が接続していないという場合もあるが、これは2個の非ループ共有頂点が同位置にあるものと考えることにする。
そして曲面が隣接指定ない時は、その頂点は非ループ頂点ということになる。
この要素は主として、あるハンドルの両側に曲面があるかどうか判定するために使用される。すなわちループ頂点の場合、すべてのハンドルの両側に曲面があるわけである。非ループ頂点の場合、共有頂点から伸びるハンドルの内、2本は非共有ハンドルとなるが、この非共有ハンドルは片側にのみ曲面を持つ。

2) 頂点平面、頂点法線
1章で述べた通り、共有頂点から伸びるハンドルはすべて頂点平面にある。またこの頂点平面の垂線を頂点法線という。

3) ハンドル点回転軸
当曲面の境界曲線は3次式で表すことができるが、これを4次に次数上げしたものを考える。これにより5個の制御点(頂点、ハンドル含む)が求まるが、これをp0〜p4とおく。そしてp1-p2間の直線、およびp2-p3間の直線方向のベクトルを得る。
さらにこのベクトルをハンドル点上に移動させると、これがハンドル点回転軸である。この要素は、次項で述べるハンドル点平面の定義等に使われる。

4) ハンドル点平面、ハンドル点法線
曲面が隣接している場合、共有ハンドルの両側にそれぞれコントロールバーが付く。この2本のコントロールバーは同一平面上にないと、隣接する曲面を滑らかに繋げることはできない。そこでこの平面をハンドル点平面と呼ぶことにする(共有ハンドル点とハンドル点平面の関係は、頂点と頂点平面の関係に良く似ている)。
当曲面では、ハンドル点平面は常にハンドル点回転軸上にあると定義している。すなわちハンドル点平面の向きを変えるということは、このハンドル点平面をハンドル点回転軸を中心に回転させることを意味する。
またハンドル点平面の垂線をハンドル点法線と呼ぶ。このハンドル点法線はハンドル点回転軸と垂直であり、またこの軸を中心として回転することになる。


2-5. 補助要素

以下に主要な補助要素を紹介する。

1) 頂点間距離
境界曲線両端にある頂点どうしを直線で結んだ時の距離である。

2) 対向頂点
境界曲線のどちらかの頂点から見た場合、もう一方の頂点のことを対向頂点と呼ぶ。1曲面のある頂点からは2本の境界曲線が伸びているので、その頂点に対する対向頂点は2個存在する。

3) ウイングハンドル
ある共有頂点上の1本のハンドルを基準ハンドルとおく。基準ハンドルが非ループ頂点の非共有ハンドルである場合を除き、基準ハンドルの両側には曲面がある。そしてそれぞれの曲面の(共有)頂点には2個のハンドルがあるため、2曲面上において共有頂点上には3本のハンドルが存在することになる(基準ハンドルは共有しているので1本と数える)。
このうち基準ハンドルを除いた2本をウイングハンドルと呼ぶ 。

4) ウイング頂点
ウイングハンドルはある頂点から伸びている。この頂点からウイングハンドルの方向にある境界曲線を考え、これに対する対向頂点をウイング頂点と呼ぶ。


2-6. 要素ベース値

「1.概要」で述べた通り、当曲面の要素の一部はプログラム内で類推されて決定されている。そしてユーザーが操作しない限り、この値が使用されることになる。ここでは、この類推された値を要素ベース値と呼んでいる。
要素ベース値には、次の2種類がある。

1) ハンドル点平面ベース値、ハンドル点法線ベース値
ユーザーが操作しない場合のハンドル点平面、ハンドル点法線の値である。このベース値はあくまでもハンドル点平面の向きを定義しているだけである。この平面上にあるコントロールバーの向き、長さのベース値は、次項のコントロールバーベース値で定義している。

2) コントロールバーベース値
あるハンドル点平面上にあるコントロールバーの向き、長さについて、ユーザーが操作していない時の値を定義する。
さて共有ハンドルから伸びるコントロールバーは2本あるが、コントロールバーベース値は常に1つで良い。これは仮に2本のコントロールバーともベース値に準拠したい場合でも、一方のベクトルを(定義ベース値の)反対方向にすれば対処できるからである。


2-7. 要素パラメータ

当曲面の要素は、それぞれ3次元座標系の位置座標やベクトル値などで表現することができる。しかしすべての要素を3次元座標値で表すと、計算誤差、バグなどによって異常なデータ群となることがある。例えば、ある共有頂点から伸びるハンドルどうしが同一平面上にない、という場合等である。
これを防ぐためには、値を3次元座標値として保持しない、という手がある。例えば、ある共有頂点から伸びる各ハンドルを3次元座標値として持たないということである。その代わり、頂点平面をベクトル値として持ち、各ハンドルをその平面上の座標として定義する(専門的には冗長性をなくすという)。そして3次元座標値として取り出したい時は、その都度変換することにする。
これにより、曲面の整合性が維持できることになる。

1) 頂点
この値は、3次元座標系の位置座標である。

2) 頂点平面
平面上に存在する任意に定めた単位ベクトル(メイン軸)と、そのベクトルを平面上で90°回転させた単位ベクトル(サブ軸)の計2本のベクトルで表す。

3) ハンドル
頂点平面上において、「メイン軸からの角度」と「頂点間距離に対する長さ比率」によって定義する。ベクトル値となるので、ハンドル点は頂点とこのハンドルベクトルから求める。

また1〜3の値によって、「ハンドル点回転軸」、「ハンドル点平面ベース値/ハンドル点法線ベース値」が求まる。

4) ハンドル点法線
ハンドル点回転軸を中心としたハンドル点法線ベース値からの角度で定義している。

この1〜4により、「コントロールバーベース値」が定まる。

5) コントロールバー
ハンドル点平面上において、コントロールバーベース値との角度と長さ比率によって定義する。ベクトル値であり、コントロールバー先端の位置はハンドル点位置とこのコントロールバーベクトルによって求まる。

1〜5により、ある1曲面に対するすべてのレベル1要素の3次元座標値を求めることができる。そしてこれにより、その曲面の表示等を行うことが可能になるのである。


2-8. 要素番号

1曲面上の複数の頂点、1共有頂点上の複数のハンドルなどには、あるルールに基づいて番号が振られている。この番号ルールを要素、条件別に述べる。

1) 頂点番号(単一曲面上)
ある曲面を表面から眺めた時に、任意の頂点より右回りに番号が付けられている。すなわち3角曲面の場合、頂点0〜2、4角曲面の場合、頂点0〜3となる。

2) 境界曲線番号(単一曲面上)
ある曲面を表面から眺めた時に、頂点0-1(単一曲面上)間を境界曲線0とし、右回りに番号が付けられている。すなわち3角曲面の場合、境界曲線0〜2、4角曲面の場合、境界曲線0〜3となる。

3) 頂点番号(単一境界曲線上)
任意で頂点0と頂点1を決定する。

4) 対向頂点番号(単一曲面の1頂点上)
ある曲面の任意の頂点に対する対向頂点のうち、曲面を表面から眺めた時に、左回り側を対向頂点0、右回り側を対向頂点1とする。

5) ハンドル番号(単一曲面の1頂点上)
1曲面上の、ある頂点には2本のハンドルがある。このうち対向頂点0の方向にあるものをハンドル0、対向頂点1の方向にあるものをハンドル1とする。

6) ハンドル番号(共有頂点上)
ある共有頂点を曲面の表面側から眺めるものとする。そしてループ頂点の場合は、任意のハンドルをハンドル0とおく。非ループ頂点の場合、共有頂点から伸びるハンドル内の2非共有ハンドルのうち、左側に曲面が存在しないものをハンドル0とする。さらにハンドル0から右回りに番号を付けていく。つまり共有頂点にn本のハンドルがあるものとすると、ハンドル0〜(n-1)となる。

7) 境界曲線番号(共有頂点上)
共有頂点から伸びるハンドルを持つ境界曲線に対して、ハンドル番号(共有頂点上)と同じ番号を付けたもの。

8) 曲面番号(共有頂点上)
ある共有頂点を曲面の表面側から眺め、ハンドル0-1(共有頂点上)の間の曲面を曲面0とおく。そして曲面0から右回りに番号を付けていく。共有頂点にn本のハンドルがある時、非ループ頂点の場合はハンドル(n-2)-(n-1) (共有頂点上)間の曲面が最終となる。対し、ループ頂点の場合、ハンドル(n-1)-0 (共有頂点上)間の曲面が最終である。 よって番号は、非ループ頂点の場合、曲面0-(n-2)、ループ頂点の場合、曲面0-(n-1)となる。

9) ウイングハンドル番号(共有頂点内の基準ハンドル上)
曲面を表面側から眺めた場合、基準ハンドルの左側にあるウイングハンドルをウイングハンドル0、右側にあるウイングハンドルをウイングハンドル1とする。

10) ウイング頂点番号(共有頂点内の基準ハンドル上)
ウイングハンドル0に対するウイング頂点をウイング頂点0、ウイングハンドル1に対するウイング頂点をウイング頂点1とおく。

11) コントロールバー番号(共有頂点内の基準ハンドル上)
ある共有頂点上の1本のハンドルを基準ハンドルとおく。基準ハンドルの左側の曲面に向かって基準ハンドル点より伸びているコントロールバーをコントロールバー0とする。また右側の曲面に向かって伸びているコントロールバーをコントロールバー1とする。





(C)1999-2012 EISHIN All Rights Reserved.