以下、図面を参照して開示技術の具体的な実施形態を説明する。図1Aは開示技術の実施形態によるモデル分割方法の概要を示すフローチャートで、図1Bは開示技術の実施形態によるモデル分割装置の概要を示す構成ブロック図である。
図1Aに示すように、開示技術の三次元モデル分割装置は、平面検出ステップS101と、輪郭図形抽出ステップS102と、輪郭図形分割ステップS103とを含む三次元モデル分割方法を実行する。三次元モデル分割装置が実行する平面検出ステップS101は、入力されるモデルのデータに基づき、該三角形モデルを含む全ての平面に関する情報を検出する。三次元モデル分割装置が実行する輪郭図形抽出ステップS102は、検出された三角形状の平面に関する情報に基づき、入力されるモデルに対応する輪郭線を得る。例えば、輪郭図形抽出ステップS102は、多角形からなる有界平面内部の接続線を削除して各平面の輪郭線を得る。そして、三次元モデルの頂点をノード、輪郭線を辺として三次元モデルの輪郭情報を図の形式で表現する。三次元モデル分割装置が実行する輪郭図形分割ステップS103は、入力されるモデルの幾何情報に基づき、輪郭図形を複数の重ならない子図形に分割した後に、子図形毎にそれぞれの対応する三角形メッシュで表現される三次元実体を再構成する。
開示技術の実施形態によれば、入力されるモデルは三角形メッシュで表現される。ここで、提供される三次元モデルは、基本データの要素に頂点の座標及び各三角形を構成する頂点のインデックスを有してもよい。これは、スキャニングによる点群(Point-Clouds)モデルは、予め三角化処理により三角形メッシュで表現される三次元モデルに変換することができるからである。また、各種のモデリングツールによるパラメータ化モデル、又は三角形ではない多角形メッシュで表現されるモデルも同様に、予め三角化処理により三角形メッシュで表現される三次元モデルに変換することができる。
一方、図1Bに示すように、開示技術の一実施形態による三次元モデル分割装置は、平面検出部101、輪郭図形抽出部102及び輪郭図形分割部103を有する。ここで、平面検出部101は、例えば法線方向算出部1011、子平面取得部1012及び平面取得部1013を有してもよい。また、輪郭図形抽出部102は、辺取得部1021、辺分類部1022及び辺削除部1023を有してもよい。
一実施形態では、輪郭図形分割部103は子図形取得部1031と再構成部1034を有する。また、別の実施形態では、輪郭図形分割部103は子図形取得部1031、穴処理部1032及び再構成部1034を有する。また、別の実施形態では、輪郭図形分割部103は子図形取得部1031、切断面処理部1033及び再構成部1034を有する。また、別の実施形態では、輪郭図形分割部103は子図形取得部1031、穴処理部1032、切断面処理部1033及び再構成部1034を有する。以下、図面を参照して三次元モデル分割装置の構成及び三次元モデル分割方法の処理手順を説明する。
[平面検出]
図1Aに示すように、開示技術の一実施形態では、まずステップS101で、平面検出部101は三次元モデルを構成する平面を検出する。平面検出部101に三角形メッシュで表現される三次元モデルが入力されると、該モデルから頂点の三次元座標及び各三角形の頂点のインデックスを含むデータを提供する。これらのデータから、三角形を含む全ての平面が検出される。ここでの平面は有界平面のことであり、単一の多角形又は複数の多角形からなるものであってもよい。
図2は開示技術の三次元モデル分割装置が実行する図1Aの平面検出ステップS101の概要を示すフローチャートである。図2に示すように、まず三次元モデル分割装置は、ステップS201で、三角形毎に法線方向に関する情報を算出する。次に、三次元モデル分割装置は、ステップS202で、三角形同士の接続情報を取得すると共に、互いに接続されかつ方向が共通又は相反する三角形を集めることにより、一連の子平面を得る。最後に、三次元モデル分割装置は、ステップS203で、条件を満足する子平面を集めて、最終的な平面を得る。以下、本フローに係る各ステップを説明する。
説明の便宜上、まず入力モデルの幾何データを示すいくつかの変数を定義する。Vi=(xi,yi,zi),(i=1,...,nv)は、モデルの頂点に関する情報を示す。ただし、nvは、頂点の数を示し、Viは、i番目の頂点を示し、(xi,yi,zi)は、頂点の三次元座標を示す。
Fi=(vi1,vi2,vi3),(i=1,...,nf)は、モデルの三角形状の平面に関する情報を示す。ただし、nfは、三角形状の平面の数を示し、Fiは、i番目の三角形を示し、(vi1,vi2,vi3)は、三角形の3つの頂点のインデックスを示す。
NDi=(nix,niy,niz),(i=1,...,nf)は、モデルの三角形状の平面の法線方向を示す。ただし、NDiは、i番目の三角形状の法線方向を示し、(nix,niy,niz)は、三角形の法線方向の3つの成分を示す。
まず、三次元モデル分割装置が実行するステップS201の法線方向算出ステップを説明する。該ステップは各三角形状の平面の法線方向を算出する。現在、三角形状の平面の法線方向の算出には様々な算出方法が開示されている。本実施形態では、例えば、法線方向算出部1011は、次の手順に従って所定の三角形状の平面の法線方向と面積を算出する。図3は開示技術の一実施形態による三角形状の平面の法線方向と面積の算出の概要を示す説明図である。三角形の頂点の順番をA→B→Cと仮定する。まず、(式1)によりベクトルABとベクトルACを算出する。
続いて、ベクトルABとベクトルACとのベクトル積を(式2)より算出する。
三角形の面積を(式3)より算出する。ただし、|ベクトルP|はベクトルPのノルムを示す。
三角形の法線方向を(式4)より算出する。
なお、三角形の面積は他の方法で算出してもよい。例えば、三角形の3つの辺の長さをla、lb、lcとすると、三角形の面積は(式5)で得られる。ただし、s=(la+lb+lc)/2である。
全ての三角形に対して上記処理を終了すると、三角形毎に法線方向と面積が得られる。ここで、各三角形の法線方向のベクトルは共に単位ベクトルである。
次に、三次元モデル分割装置が実行するステップS202の子平面取得ステップでは、子平面取得部1012は各三角形状の平面を対象とし、それと接続されかつ方向が相同又は相反する三角形状の平面を集めて一連の平面を取得する。本明細書では、方向が相同するとは、両方向の差が所定の閾値以下であることを意味する。方向がほぼ相反するとは、両方向の差とπとの差が所定の閾値以下であることを意味する。
まず、三角形状の平面毎に、それと接続される三角形状の平面を求める。本実施形態では、2つの三角形状の平面は1本の共通した辺を有し、かつ2つの三角形状の平面における辺の方向が全く相反する場合、それらの平面が互いに接続されると判定する。この原則に基づき、各三角形Fiの場合、それと接続される三角形状の平面が3つある。ここでLi={li1,li2,li3},{i=1,2,...,nf}で示す。
図4は三次元モデルにおける三角形状の平面の隣接関係を模式的に示す説明図である。図4では、三角形Fと接続される3つの三角形状の平面をL1、L2、L3とする。三角形同士の相互接続関係は、上述した方法以外にも他の方法で判定してもよい。例えば、2つの三角形状の平面は共通した点を有する場合には、かかる平面が互いに接続されると判定する。この方法によれば、最終的な結果は、上述した方法による平面に関するデータと同じである。しかしながら、かかる法を採用した場合には、三角形毎に接続される三角形の数が増えるので、以降の処理における演算量が増大する。
次に、各三角形状の平面Fiについて、これと接続される三角形状の平面それぞれとFiとがなす角度Angi={Angi1,Angi2,Angi3}を(式6)により算出する。ここで、ベクトルa・ベクトルbはベクトルaとベクトルbとの内積を表す。図4の場合では、三角形状の平面Fと三角形状の平面L1、L2、L3とがなす角度はそれぞれ0、0とπ/2であることがわかる。
次に、適正な閾値を設定し、Fiと接続され、かつ以下の条件を満足する三角形を集めて、三角形状の平面Fiを対象とする子平面を取得する。ここでいう条件とは、三角形状の平面Fiの法線方向と相同又は相反することを意味する、すなわち、Ang<=ath1又はAng>=ath2、ただし、ath1の数値が0に近く、ath2の数値がπに近い。図4の場合では、三角形Fを対象として取得された子平面は、F自体、L1及びL2という3つの三角形を含む。
全ての三角形に対して上記処理を終了すると、三角形状の平面毎にこれを対象として集めて作成した子平面に関する情報が得られ、SubPi={Fi,spi1,...,spij},(i=1,2,...,nf,0≦j≦3)と示す。
最後に、三次元モデル分割装置が実行するステップS203の平面取得ステップでは、平面取得部1013は以下の条件を満足する子平面を集めることにより、最終的な平面に関するデータを得る。前のステップで得られた各子平面からなる集合の大きさが1ないし4の範囲内であるが、このステップでは、子平面を合併するに伴って、子平面は広げられなくなるまで徐々に広げる。
2つの子平面の法線方向は相同又は相反すると共に、以下の条件のいずれかを満足すると、2つの子平面が一つの新しい子平面に合併される。全ての子平面がさらに合併できなくなるまで、この処理が繰り返される。
2つの子平面における三角形状の平面からなる集合に、共通する三角形が存在する。子平面を合併可能と判定する条件を図5に示す。図5は、開示技術の実施形態による子平面の合併可能な条件の概要を示す説明図である。図5に示すように、F1とF2それぞれを対象として作成した子平面には、共通する三角形Fが存在している。
2つの子平面の頂点からなる集合には、それぞれが2つの子平面に属する頂点をつなげる辺が少なくとも1本あり、かつ該辺が子平面の法線ベクトルに直交している。図5は子平面を合併可能とするという条件も模式的に示している。図5のように、F3とF4を対象として作成した子平面の頂点の間に接続を存在し、例えば2つの中空でない四角形をつなげる線が存在している。
2つの子平面の三角形状の平面からなる集合には、それぞれが2つの異なる子平面に属し、かつ相互接続される三角形が少なくとも1対ある。図6は子平面を合併可能とするという他の条件を模式的に示している。図6のように、F1とF2それぞれを対象として作成した子平面に、2つの隣接する三角形状の平面であるF11とF21が存在している。このステップが終了すると、最終的な平面に関するデータを得る。最終的な平面に関するデータは、平面毎に、平面の面積、平面の法線方向、含まれる三角形からなる集合及び頂点からなる集合というデータを含む。
上記の平面検出方法は一例であり、他の平面検出方法であってもよい。例えば次の方法も適用できる。すなわち、全ての三角形状の平面に対する処理が終了するまで、以下の処理が繰り返される。まず、非共線の3つの頂点(或いは任意の三角形の3つの頂点)を選択して平面を作成する。次に、残りの頂点が該平面に入るか否かを判定する。そして、各三角形状の平面が該平面に入るか否かを判定する。この平面検出方法は前述した方法と比較すると、演算量が多くなる。
[輪郭図形抽出]
図1Aに戻り、以下、三次元モデル分割装置が実行する輪郭図形抽出ステップS102を説明する。このステップでは、輪郭図形抽出部102は平面検出ステップS101で検出した平面に関するデータからモデルの輪郭情報を抽出する。このために、まず、平面毎の輪郭情報を抽出することにより、モデル全体の輪郭情報を得る。
各平面について、以下の処理を実行して平面の輪郭情報を得る。まず、辺取得部1021は平面における全ての辺からなる集合を取得する。ここで、辺からなる集合は平面における各三角形の3本の辺を含む。図7は開示技術の実施形態による平面の内部辺と境界辺を示す説明図である。図7に示す平面に、13本の辺が含まれる。なお、1本の辺を取得する度に、下記の辺分類部1022で分類してもよい。
次に、辺分類部1022は辺の種類を分類する。ここで、有界平面における辺は、内部辺と境界辺との2種類に分けられる。本実施例では、簡単な方法で辺の分類を行う。ある辺が該平面における2つの三角形に共通しているなら、該辺を内部辺に分類し、そうでなければ、該辺を境界辺に分類する。例えば、図7の三角形F1とF2とが共通する辺は内部辺であり、同じ理由により、他の数本の細線(点線を含む)も内部辺である。一方、太い線で示す辺は平面における一つの三角形のみに属するので、それらの辺は境界辺である。
最後に、辺削除部1023は平面における全ての内部辺を削除し、境界辺を保留する。それら境界辺同士は首尾接続でクローズド領域を構成する。それら境界辺は平面の輪郭情報を表している。
全ての平面について上記処理を終了すると、全ての平面の境界辺に基づいてモデルの輪郭を構成する。図8は三次元モデルの輪郭図形を示す。本実施形態では、輪郭情報を図形の形式で記述し、モデルの頂点(黒い四角形で示す)を図形のノードとし、モデルの輪郭線を図形の辺とする。輪郭図形抽出方法として、類似する凸包(convex hull)を求める方法を用いて、平面における各三角形からなる領域のエッジを決定することもできる。この方法によれば、比較的に簡単なモデルでも正確な輪郭を得られる。
[輪郭図形分割]
図1Aに戻り、三次元モデル分割装置が実行するステップS103で輪郭図形を分割する。一実施形態では、このステップは、子図形取得部1031が入力される輪郭図形を複数の重ならない子図形に分割する子図形取得ステップと、再構成部1034が各子図形の輪郭を再構成する、すなわち、子図形毎に相応する三次元実体を再構成する再構成ステップとを含む。すなわち、本実施形態では、輪郭図形分割部103は子図形取得部1031と再構成部1034で構成される。
本実施形態では、ステップS103で、まず、子図形取得部1031は、全ての頂点(輪郭図形の頂点と入力されるモデルの頂点とは一対一に対応しているので、特に区分する必要がない時に、それらを頂点と言う)を複数の子集合に割り当てる。ここで、一つの子集合における頂点と他の子集合における頂点とは繋がらない。言い換えれば、相互接続される頂点を一つの集合に割り当て、相互接続されない頂点を異なる集合に割り当てる。詳しくは、例えば、以下の手順1〜6を実行する。
手順1では、子集合の数をn=0に初期化し、ノードの処理マークをPi=0(i=1,2...,nV)にする。ここで、nVはノードの数を示し、各頂点の処理マークを全て0に初期化する。つまり、すべての頂点が処理されていない旨を示す。
手順2では、未処理のノードがあれば、子図形の数をn=n+1に更新し、一つの未処理のノードNodenを始点としてランダムに選択し、一つの集合Sn={Noden}を初期化する。
手順3では、集合Snにおけるノードと接続され、かつ集合に存在しない全てのノードを集合Snに合併する。手順4では、Snが変わらないまで上記の手順3を繰り返す。手順5では、ノードの処理マークを更新し、Snに含まれる全てのノードの処理マークを1に設定する。つまり、それらのノードが処理された旨を示す。手順6では、全てのノードが処理されると、上記手順を終了し、そうでなければ、上記の手順2に移行する。
次に、各子集合について、該子集合におけるノード及びノード同士の辺により新しい子図形を構成する。図9に示す輪郭図形は、3つの子図形に分割され、各ノードを菱形、星型、円形に示し、そのうち、黒い四角形で示すノードはそれらの子図形を作成する3つの始点である。次に、再構成部1034は子図形毎に相応する三次元実体を再構成する。三次元実体を再構成することは、三次元実体モデルを再構成することであり、本明細書ではこれらを区分しないことにする。
[第2の輪郭図形分割方法]
開示技術の三次元モデル分割装置が実行する別の輪郭図形分割方法では、前記ステップS103は更に穴処理部1032で行われる穴処理ステップを含む。開示技術の一実施形態では、穴処理部1032は例えば穴判定部と穴モデル校正部を有する。それに対応して、穴処理ステップは穴判定ステップと穴モデル校正ステップを含む。
具体的には、三次元モデル分割装置は、穴判定ステップでは、まず、再構成部1034で再構成された各子図形の対応する三次元実体モデルは最初の三次元物体において一つの穴に対応するか否かを判定する。本実施形態では、穴であれば、面の方向が物体の内部に向かい、穴でなければ、面の方向が物体の外部に向かうという基本的な判断ルールが適用される。
この判断ルールを適用し、以下の手順により、入力される三次元実体モデルが穴であるか否かを判定する。手順1では、それぞれが物体の表面の外側に向かう平面の面積及び物体の表面の内側に向かう平面の面積を表す2つの変数Cnt1=0,Cnt2=0を初期化する。手順2では、該輪郭図形におけるすべての平面に対して上記の手順1を実行し、Cnt1とCnt2の数値を更新する。
各平面plに対して以下の処理を実行する。平面plにおける頂点と接続されかつ該平面に存在しない頂点は全て該平面の一側にあるか否かを判定する。該平面の一側にない場合には、Cnt1とCnt2の数値を更新しない。全て該平面の一側にあると判断すれば、さらにそれらの点が該平面のプラス側にあるか又はマイナス側にあるかを判定する。本実施形態では、それらの点が平面に対する関係を(式7)により判定する。
(式7)では、ベクトルnPは該平面の法線方向を、ベクトルPは該平面における一つの点を、ベクトルLはベクトルPと接続されるが該平面plに存在しない一つの点をそれぞれ示す。d>0であれば、該点が該平面のプラス側にある、すなわち、平面と直接接続される頂点が該平面のプラス側にあると判定される。該平面が物体の表面の外方に向かうと、Cnt1=Cnt1+αplに更新する。ここで、αplは平面plの面積を示す。
d<0であれば、該点が該平面のマイナス側にある、すなわち、平面と直接接続される頂点が該平面のマイナス側にあると判定される。該平面が物体の表面の内方に向かうと、Cnt2=Cnt2+αplに更新する。ここで、αplは平面plの面積を示す。
全ての平面について上記処理を終了すると、Cnt1とCnt2の大きさにより、該図形の対応する物体は穴であるか否かを決定する。Cnt1>Cnt2であれば、入力される図形の対応する物体は穴ではないと判定される。一方、Cnt1<Cnt2であれば、穴であると判定される。
次に、該実体が穴と判定されると、穴モデル校正部によりM1及びM2(穴モデル校正部により該実体の全ての三角形の法線方向を変更する。すなわち、各三角形の場合、法線方向を相反する方向に変更する。)における全ての三角形の法線方向を変更する。それによって、モデルをレンダリング・表示しやすいようにモデルの表面の方向を外方に向かわせる。
[第3の輪郭図形分割方法]
開示技術の三次元モデル分割装置が実行する別の輪郭図形分割方法では、輪郭図形分割部は子図形取得部1031、切断面処理部1033、再構成部1034を有する。言い換えれば、本実施形態のステップS103は、子図形取得ステップと、再構成ステップと、切断面処理ステップとを含む。子図形取得ステップでは、子図形取得部1031が入力された輪郭図形を複数の重ならない子図形に分割する。再構成ステップでは、再構成部1034が各子図形の対応する三次元実体を再構成する、すなわち、子図形毎に相応する三次元実体を再構成する。切断面処理ステップでは、再構成部1034で再構成された各子図形の対応する三次元実体に切断面が含まれるか否かを判定し、切断面が含まれれば、切断面処理を行う。
本実施例では、切断面処理部1033は、入力される輪郭図形における全ての切断面を判定する切断面判定部と、切断面判定部で判定された切断面に基づき、該切断面を含む輪郭図形を分割し新しい子図形を得る輪郭図形再分割部とを有する。輪郭図形再分割部は分割部と、分割部で分割された子図形が適正であるか否かを判定する適正判定部とをさらに有する。
以下、まず切断面処理部1033による切断面判定基準を説明し、一実施例では、一つの平面を切断面と判定する最も重要な条件は、現在の平面上の頂点を除き、他の頂点が現在の平面の両側に分布されることである。ある平面において、平面上の頂点を除き、他の頂点が共に平面の同一の側にあれば、該平面を切断面ではないと判定する。
図10は、切断面判定条件を例示する説明図である。図10に示す輪郭図形の場合では、黒い平面を例にする。この平面には、円形で示す2つの頂点及び四角形で示す2つの頂点、合計4つの頂点がある。四角形で示す2つの頂点については、それぞれと接続されかつ黒い平面に属しない頂点が1つあり、この2つの頂点が黒い平面のプラス側にある。一方、円形で示す2つの頂点については、それぞれと接続されかつ黒い平面に属しない頂点が1つあり、この2つの頂点が黒い平面のマイナス側にある。以上が、該平面が切断面としての最も重要な条件である。
上述した最も重要な条件に加えて、以下(1)〜(3)という補助条件を設定してもよい。
(1)該平面の面積とモデル表面積との比がある設定される閾値を下回ってはいけない。閾値は一般的には1以下である。
(2)平面上のいかなる頂点も、それと接続される頂点同士の辺と平面とがなす角度は、ある設定される閾値を下回ってはいけない。閾値は一般的には0以上である。
(3)平面上のいかなる頂点も、これと接続される頂点同士の長さはある設定される閾値を下回ってはいけない。閾値は一般的には0を超える。更に、経験に基づき、新しい条件を選択又は設定してもよい。
以下、輪郭図形再分割部の処理を説明する。前述したように、輪郭図形再分割部は取得された切断面により、入力される輪郭図形を複数の子図形に分割する。入力される輪郭図形は、一般的に、一つの以上の切断面を有する。本実施例では、入力される輪郭図形を複数の子図形に分割しきるまで各切断面を順次に処理する。別の実施例では、全ての平面に対する処理が終了するまで処理する、すなわち、全ての切断面を処理したが、入力された輪郭図形がまだ分割されていない場合には、入力された輪郭図形を分割をしないまま処理を終了する。
図11は輪郭図形再分割部による処理の概要を示すフローチャートである。図11に示すように、本実施例では、輪郭図形再分割部による処理は主に、以下の2つの処理からなる。
(1)ある選定された切断面により、入力される輪郭図形を複数の子図形に分割する。
(2)分割結果が適正かどうかを判定する。
また、切断面の処理順序について、以下(1)〜(3)のルールを適用することができる。もちろん、処理中では、経験に基づきルールを選択する又は新しいルールを設定することができる。
(1)切断面の面積により順序付けて、面積が広い切断面の処理を優先する。
(2)切断面の頂点の数により順序付けて、頂点の数が多い切断面の処理を優先する。
(3)切断面の外部から切断面と直接接続される辺と切断面とがなす角度により順序付けて、角度が大きい平面の処理を優先する。
図11に示すように、まず、三次元モデル分割装置は、ステップS1101で、変数iをi=1に初期化し、最初に選定された切断面から処理を開始する。次に、三次元モデル分割装置は、ステップS1102で、i番目の切断面候補により、入力される輪郭図形を分割する。次に、三次元モデル分割装置は、ステップS1103で、分割結果が適正かどうかを判定し、適正であれば(ステップS1104、Yes)、ステップS1106で分割結果を出力する。一方、三次元モデル分割装置は、分割結果が適正でなければ(ステップS1104、No)、ステップS1105で、次の切断面候補をiで示す。すなわち、三次元モデル分割装置は、i=i+1とする。次に、三次元モデル分割装置は、ステップS1107で、全ての切断面が処理されたか否かを判定する。具体的には、三次元モデル分割装置は、iは切断面の数nより大きいか否かを判定する。全ての切断面が処理されたら(ステップS1107、Yes)、三次元モデル分割装置は、ステップS1108で分割が成功しない旨の通知や報告を出力する。例えば、三次元モデル分割装置は、通知や報告は、テキストや音声や映像の形態で出力される。まだ全ての切断面が処理されていなければ(ステップS1107、No)、三次元モデル分割装置は、ステップS1102に戻る。
開示技術の実施形態では、三次元モデル分割装置は、分割されるモデル又は子図形に複数の切断面が含まれる場合に、該モデルに対応する輪郭図形を複数の子図形に適正に分割するまでそれらの切断面を順次に処理する。適正判定を通して、全ての切断面候補による分割結果が共に適正ではなければ、分割されるモデルは、分割をあきらめ、そのまま最終的な分割結果の一部として出力する。また、ある切断面の場合では、分割結果が適正ではなければ、該切断面による分割結果を放棄すると共に、その他の切断面により入力される輪郭図形の分割を行う。
以下、選定された切断面により輪郭図形を分割する処理を説明する。図12は輪郭図形再分割部における分割部による動作を示すフローチャートである。説明の便宜上、次のことを仮定する。切断面をCpi(i=1,2,...,nC)とする。nCは検出された切断面の数を示し、該切断面には、切断面における頂点情報PCi={pvi1,pvi2,...,pvin}と切断面の法線方向ベクトルNC、及び場合によって切断面の面積αCiなどのデータ情報が含まれる。また、C1とC2は、切断面にある2種類の頂点からなる集合を示す。また、S1とS2は、切断面の外部にある2種類の頂点からなる集合を示す。また、proデータ配列は、点の処理マークを示す。
本実施例では、まず、分割部は、切断面の左側(一側)にある点を探し、次に切断面の右側(他側)にある点を探す。分割部は、左側の点及び切断面にある点を複数の子図形にカプセル化し、右側の点及び切断面にある点を複数の子図形にカプセル化する。
別の実施例では、輪郭図形再分割部は、輪郭を複数の子図形に適正に分割するまで各切断面候補を順次に処理する。ある所定の切断面について、まず、切断面にある頂点及び切断面にある頂点と直接接続される頂点を含む切断面付近の頂点を、2つの子集合に割り当てる。次に、切断面付近の頂点以外の頂点について、それら頂点を2つの子集合に割り当てる。例えば、それらの頂点と2つの子集合における頂点との接続関係、及びそれらの頂点と切断面との位置関係に基づき、2つの子集合における頂点同士に切断面に亘る接続がないように割り当てる。
以下、図12を参照し、本実施例による分割部の処理を詳しく説明する。図12に示すように、まず、分割部は、ステップS1201で、頂点の処理マークをprok=false,k=1,2,...,nkに初期化する。ここで、nkは輪郭図形における頂点の数であり、全ての頂点がまだ処理されていないことを表す。
次に、分割部は、ステップS1202で、切断面にある頂点を分類する。分割部は、ステップS1202では、切断面にある各頂点と切断面以外の頂点との接続関係により、切断面にある頂点を第1向き頂点と第2向き頂点との2種類に分類し、それぞれをC1とC2で表す。C1={ベクトルC11,ベクトルC12,...,ベクトルCn1}であり、C2={ベクトルC21,ベクトルC22,...,ベクトルCn2}である。ここで、n1、n2は2つの集合の大きさを示す。このために、分割部は、次の3つの手順を実行する。
分割部は、手順1では、第1向き集合C1と第2向き集合C2という2つの空集合を初期化する。分割部は、手順2では、切断面にある各頂点を順次処理して分類する。切断面にある一つの頂点をベクトルPとし、該頂点と直接接続されるが該切断面に入らない頂点からなる集合をS={ベクトルL1,ベクトルL2,...,ベクトルLnl}とする。ここで、nlは点の数である。集合Sにおける各頂点ベクトルLj(ここで、j=1,2,...,nl)について、辺ベクトルP→ベクトルLjと切断面の法線方向との内積dj=(ベクトルLj−ベクトルP)・ベクトルNCを算出する。djは0より大きければ、該頂点を第1向き集合C1に入れる一方、djは0より小さければ、該頂点を第2向き集合C2に入れる。すなわち、一部の頂点が2つの集合に包含される可能性がある。
分割部は、手順3では、切断面にある各頂点の処理マークをそれら頂点が処理された旨を示すtrueに更新する。図10に示すように、黒い切断面にある4つの頂点が2種類に分けられ、そのうち、C1は四角形で示す2つの頂点を、C2は円形で示す2つの頂点をそれぞれ含む。
次に、分割部は、ステップS1203で、切断面にある頂点と直接接続されるが該切断面に入らない頂点を、第1向き側頂点と第2向き側頂点に分類する。このステップでは、平面における頂点と直接接続されるが切断面に入らない頂点は2種類に分けられ、それぞれをS1とS2で表す。S1={ベクトルs11,ベクトルs12,...,ベクトルssl}であり、S2={ベクトルs21,ベクトルs22,...,ベクトルss2}である。ここで、s1、s2はそれぞれ2つの集合の大きさを表す。分割部は、次の手順によりこの2つの頂点からなる集合を得られる。
分割部は、手順1では、第1向き側集合S1と第2向き側集合S2という2つの空集合を初期化する。分割部は、手順2では、集合C1における各頂点ベクトルc1i(ここで、i=1,2,...,nl)を順次に処理する。例えば、分割部は、頂点ベクトルc1iについて、頂点ベクトルc1iと接続されるが該切断面に属しない頂点からなる集合をT1={ベクトルt11,ベクトルt12,...,ベクトルttl}とする。ここで、tlは、点の数を表す。T1の各頂点ベクトルt1j(ここで、j=1,2,...,tl)を順次に処理し、辺ベクトルc1i→ベクトルt1jと切断面の法線方向との内積がプラスであり、かつ集合S1にベクトルt1jが含まなければ、ノードベクトルt1jを集合S1に入れる。
分割部は、手順3では、集合C2における各頂点ベクトルc2i(ここで、i=1,2,...,n2)を順次に処理する。分割部は、頂点ベクトルc2iについて、頂点ベクトルc2iと接続されるが該切断面に属しない頂点からなる集合をT2={ベクトルt21,ベクトルt22,...,ベクトルtt2}とする。ここで、t2は、点の数を表す。T2の各頂点ベクトルt2j(ここで、j=1,2,...,tl)を順次に処理し、辺ベクトルc2i→ベクトルt2jと切断面の法線方向との内積がプラスであり、かつ集合S2にベクトルt2jが含まなければ、ノードベクトルt2jを集合S2に入れる。
分割部は、手順4では、集合S1と集合S2における各頂点の処理マークをそれらの頂点が処理された旨を示すtrueに更新する。なお、上記4つの手順は必ずしも説明の順に実行されるものではなく、幾つかの手順は同時に実行されてもよく、また、順序通りに実行される場合でも、実行される順序を説明の順とは変更してもよい。
図10に示すように、黒い切断面にある4つの頂点と直接接続される4つの頂点が2種類に分けられる。そのうち、集合S1は2つの頂点を含み、図10に示すように、この2つの頂点は破線により円形で示す2つの頂点と接続される。一方、集合S2は2つの頂点を含み、この2つの頂点は実線により四角形で示す2つの頂点と接続される。次に、分割部は、ステップS1204で、残りの頂点を分類する。最後に、分割部は、ステップS1205で、分類の結果に基づき、輪郭図形を分割する。
分割部は、ステップS1204において、頂点がどの側にあるかに基づき、頂点を直接分類することで実施形態を簡略化することができる。この実施形態は構造の簡単なモデルに適用できる。以下、ステップS1204の簡略化した実施形態の処理手順を詳しく説明する。分割部は、ステップS1204では、残りの頂点を分類する。ここで残りの頂点は、未処理の頂点、すなわち、切断面の外部にあり、かつ切断面にある頂点と接続される辺がない部分の頂点を意味する。かかる処理には、三次元モデル分割装置は、図13に示す各ステップを実行する。図13は残りの頂点を分類する処理の概要を示すフローチャートである。
図13に示すように、まず、三次元モデル分割装置は、ステップS1301で、全ての未処理頂点を2つの集合X1とX2に割り当てる。ここで、X1は集合S1の頂点を始点として展開して得られる点からなる集合を有する。また、X2は集合S2の頂点を始点として展開して得られる点からなる集合を有する。このような(X1とX2)2つの集合を得るために、下記の手順1〜4を実行する。手順1では、X1とX2という2つの空集合を初期化する。手順2では、集合S1の頂点と接続され、かつ処理されない頂点をすべて集合X1に分類し、集合S2の頂点と接続され、かつ処理されない頂点をすべて集合X2に分類する。手順3では、X1が変更しなくなるまで、X1の頂点を始点として展開し、X1の頂点と接続され、かつ処理されない頂点をすべてその内部に包含する。また、X2が変更しなくなるまで、X2の頂点を始点として展開し、X2の頂点と接続され、かつ処理されない頂点をすべてその内部に包含する。手順4では、X1とX2の各頂点が1回しか現れないようにX1とX2を処理する。
次に、三次元モデル分割装置は、ステップS1302で、集合X1とX2との共通の点を求めて集合XC=X1∩X2={ベクトルxc1,ベクトルxc2,...,ベクトルxcnc}を構成する。ここで、ncは共通の点の数を表す。
次に、三次元モデル分割装置は、ステップS1303で、集合XCは空であるか否かを判定する。具体的には、三次元モデル分割装置は、ncは0であるか否かを判定する。XCは空であると判定されると(ステップS1303、Yes)、三次元モデル分割装置は、ステップS1304に移行し、集合X1とX2それぞれを第1向き側集合S1と第2向き側集合S2に合併する。一方、XCは空ではないと判定されると(ステップS1303、No)、三次元モデル分割装置は、ステップS1305に移行し、集合XCから頂点候補を求めると共に、未処理頂点を分類してから、ステップS1301に移行する。三次元モデル分割装置は、全ての頂点について上記処理を終了するまで上記手順を繰り返す。
三次元モデル分割装置が実行するステップS1305は、共通の点からなる集合XCから適正の頂点を求め、未処理頂点を更に分類する。このために、本実施形態では、図14に示す手順によって処理される。図14は、図13のステップS1305の処理を詳しく示す図である。図14に示すように、まず、三次元モデル分割装置は、ステップS1501で集合XCから全ての頂点候補からなる集合を求める。次に、三次元モデル分割装置は、ステップS1502で集合候補から最適な頂点を求め、最後にステップS1503で、ステップS1502で選定された頂点により適当な処理を実行し、未処理頂点を更に分類する。つまり、共通の頂点があれば、すなわち、XCが空でなければ、集合X1と集合X2の頂点同士に切断面に亘る接続が存在することを意味する。したがって、三次元モデル分割装置は、それら頂点を求めると共に、新しい頂点を適当に追加し、残りの頂点を継続分類することにより、それら頂点を2つの子集合に割り当てる。
以下、三次元モデル分割装置が実行する全ての頂点候補からなる集合CVを求めるステップS1501の処理を詳しく説明する。三次元モデル分割装置が実行するこのステップは、以降の処理に備えるステップである。三次元モデル分割装置は、集合XCから全ての頂点候補からなる集合を求め、求められた集合をCV={ベクトルcv1,ベクトルcv2,...,ベクトルcvnc}で表す。ここで、ncは頂点候補の数を示す。本実施形態による方法では、三次元モデル分割装置は、ある特別な条件を満足する頂点のみを頂点候補とする。集合XCにおけるいずれかの頂点ベクトルPを例にし、それと接続される頂点からなる集合をL={ベクトルL1,ベクトルL2,...,ベクトルLnl}とする。該頂点がノード候補であるか否かを判定するために、三次元モデル分割装置は、切断面における頂点からいずれかの頂点ベクトルCを補助ノードと選択する。次に、三次元モデル分割装置は、dとdkを(式8)より算出する。
ここで、|ベクトルa|はベクトルaのノルムを示し、ベクトルa・ベクトルbは2つのベクトルの内積をそれぞれ示す。頂点ベクトルPは、以下に示す3つの条件のうち、いずれか1つを満足した場合に、頂点候補だと考えられる。
(条件1)|d|≦εとし、εは0に近い値であり、かつ∋k、dk>0又はdk<0を満足する条件である。すなわち、条件1では、頂点ベクトルPは切断面にあり、該点を境にし、それと接続されかつ切断面の両側にある各頂点を2つの集合に割り当てる。
(条件2)|d|>λかつd>0とし、λは0以上1以下の値であり、かつ∋k、|dk|≦ε又はdk<0かつ|dk|>λを満足する条件である。すなわち、条件2では、頂点ベクトルPは切断面のプラス側にあり、該点と接続される頂点には切断面のマイナス側にある頂点が存在する。この場合、いくつかの頂点を追加して分類しなければならない。それら頂点は切断面に亘る接続線と切断面との交点であり、それら交点を境にし、ベクトルP及びベクトルPと接続されかつ切断面のマイナス側にある頂点を2つの集合に割り当てる。
(条件3)|d|>λかつd<0とし、λは0以上1以下の値であり、かつ∋k、|dk|≦ε又は|dk|>λかつd>0を満足する条件である。すなわち、条件3では、ベクトルPは切断面のマイナス側にあり、該点と接続される頂点には切断面のプラス側にある頂点が存在する。この場合、いくつかの頂点を追加して分類しなければならない。それら頂点は切断面に亘る接続線と切断面との交点であり、それら交点を境にし、ベクトルP及びベクトルPと接続されかつ切断面のプラス側にある頂点を2つの集合に割り当てる。
以下、三次元モデル分割装置が実行する集合候補から最適な頂点を選択するステップS1502の処理を詳しく説明する。三次元モデル分割装置が実行するこのステップは集合候補から最適な一つの頂点を求め、以降の処理に備えるステップである。本実施形態では、S=S1∪S2の頂点から最も距離が近い頂点ベクトルspが最適な頂点とする。本実施形態では、三次元モデル分割装置は、輪郭図形の全ての辺の長さを1とし、頂点間の最も短い経路で2つの頂点間の距離を測定する。三次元モデル分割装置は、下記の手順により頂点ベクトルspを決定する。
三次元モデル分割装置は、CVの各頂点ベクトルcvk(ここで、k=1,2,...,nc)から集合Sまでの距離を算出する。ここで、三次元モデル分割装置は、ベクトルcvkからSまでの距離を(式9)により算出する。ここで、dis(ベクトルcvk,ベクトルs)は頂点ベクトルcvkからベクトルsまでの最も短い距離を表す。
ベクトルspを(式10)により決定する。
以下、三次元モデル分割装置が実行するステップ1503で選定された頂点について、未処理頂点の種類情報の決定を説明する。選定された頂点候補は上記の3つの条件のいずれかを満足する可能性がある。三次元モデル分割装置は、異なる条件を満足する頂点に対して異なる処理を実行する。処理手順の説明に先立って、選択された頂点をベクトルPとし、それと接続される頂点からなる集合をL={ベクトルL1,ベクトルL2,...,ベクトルLnl}とする。次に、三次元モデル分割装置は、算出されたd及びdk(ここで、k=1,2,...,nl)により下記の処理1〜3を実行する。
(処理1)頂点が条件1を満足すれば、三次元モデル分割装置は、下記の動作をする。
(1)三次元モデル分割装置は、頂点ベクトルPを集合C1とC2に追加し、該ノードの点処理マークをtrueに更新する。
(2)三次元モデル分割装置は、これと接続される各頂点を分類する。ここで、k=1,2,...,nlである。if(|dk|≦ε)の場合には、三次元モデル分割装置は、頂点ベクトルcvkを集合C1、C2に追加する。elseif(dk<0)の場合には、三次元モデル分割装置は、頂点ベクトルcvkを集合S2に追加する。elseの場合には、三次元モデル分割装置は、頂点ベクトルcvkを集合S1に追加する。
(3)三次元モデル分割装置は、集合Lの各頂点の処理マークをtrueに更新する。
(処理2)頂点が条件2を満足すれば、三次元モデル分割装置は、下記の動作をする。
(1)三次元モデル分割装置は、頂点ベクトルPを集合S1に追加し、該ノードの点処理マークをtrueに更新する。
(2)三次元モデル分割装置は、これと接続される各頂点を分類する。ここで、k=1,2,...,nlである。if(|dk|≦ε)の場合には、三次元モデル分割装置は、頂点ベクトルcvkを集合C1、C2に追加する。elseif(dk<0)の場合には、三次元モデル分割装置は、頂点ベクトルcvkを集合S2に追加する。三次元モデル分割装置は、辺ベクトルP→ベクトルcvkと切断面との交点ベクトルcを算出する。三次元モデル分割装置は、ベクトルP、ベクトルcvk、ベクトルcの間の接続関係及び関係する平面情報を更新する。三次元モデル分割装置は、ベクトルcを集合C1、C2に追加する。
(3)三次元モデル分割装置は、集合Lの各頂点の処理マークをtrueに更新する。
(処理3)頂点が条件3を満足すれば、三次元モデル分割装置は、下記の動作をする。
(1)三次元モデル分割装置は、頂点ベクトルPを集合S2に追加し、該ノードの点処理マークをtrueに更新する。
(2)三次元モデル分割装置は、これと接続される各頂点を分類する。ここで、k=1,2,...,nlである。if(|dk|≦ε)の場合には、三次元モデル分割装置は、頂点ベクトルcvkを集合C1、C2に追加する。elseif(dk>0)の場合には、三次元モデル分割装置は、頂点ベクトルcvkを集合S1に追加する。三次元モデル分割装置は、辺ベクトルP→ベクトルcvkと切断面との交点ベクトルcを算出する。三次元モデル分割装置は、ベクトルP、ベクトルcvk、ベクトルcの間の接続関係及び関係する平面情報を更新する。三次元モデル分割装置は、ベクトルcを集合C1、C2に追加する。
(3)三次元モデル分割装置は、集合Lの各頂点の処理マークをtrueに更新する。
以上からわかるように、処理2と処理3で説明した処理手順は共に接続及び関係する平面情報を更新する必要がある。三次元モデル分割装置は、選定されたノード候補をベクトルPとし、ベクトルPと接続されるk番目の頂点をベクトルcvkとし、d、dkの記号が相反であれば、辺ベクトルP→ベクトルcvkと切断面との交点ベクトルcを算出する。そして、三次元モデル分割装置は、交点を新規のノードとして輪郭図形に追加すると共に、接続情報及び関係する平面情報を更新する。
まず、三次元モデル分割装置は、次の手順に従って接続情報を更新する。
(1)三次元モデル分割装置は、頂点ベクトルPとベクトルcvkの間のつながりをカットする。
(2)三次元モデル分割装置は、ベクトルPとベクトルc,ベクトルcvkとベクトルcの間のつながりを加える。
(3)三次元モデル分割装置は、ベクトルPとベクトルcvkと共に接続される全ての頂点を求め、それら頂点とベクトルcの間のつながりを加える。
次に、三次元モデル分割装置は、以下の処理に従って関係する平面情報データを更新する。まず、三次元モデル分割装置は、新規追加された頂点ベクトルcを切断面に追加する。次に、三次元モデル分割装置は、ベクトルP及びベクトルcvkを共に含む全ての平面を求め、それら平面に頂点ベクトルcを追加する。
図13と図14に示す手順を併せて参照して、一つの頂点候補の処理が終了し、関係情報の更新が終了する度に、三次元モデル分割装置は、ステップS1301で集合X1とX2を取得し、X1とX2には共通の点があるか否かを判定する。共通の点があれば、三次元モデル分割装置は、ステップS1305で、全ての頂点の処理を終える又はX1とX2には共通の点がないまで分割を続行する。三次元モデル分割装置が実行する前記ステップS1204の処理により、平面上の頂点がC1とC2の2種類に分けられ、平面の外部にあるノードがS1とS2の2種類に分けられる。
以下、三次元モデル分割装置が実行するステップS1205を詳しく説明する。図15は頂点分類結果に基づき子図形を作成する手順の概要を示すフローチャートである。三次元モデル分割装置は、ステップS1205で、まずC1とS1を合併して第1分割部分の点集合CS1を得て、C2とS2を合併して第2分割部分の点集合CS2を得る。次に、三次元モデル分割装置は、図15に示すステップに従って、2つの点集合CS1、CS2を個別に処理して、複数の新しい子図形を得る。図15では、(C、S、CS)は(C1、S1、CS1)又は(C2、S2、CS2)のいずれかを示す。
図15に示すように、まず、三次元モデル分割装置は、ステップS1601で、CSにおける頂点を複数の子集合に割り当てる。このステップで、まず、CSの頂点をノードとし、切断面に属しない頂点同士のつながりにより、切断面における頂点と切断面の外部にある頂点との接続線を辺とし、一つの構造図Gを構成する。つまり、構造図Gには切断面における各頂点同士の接続線が含まれない。
次に、子図形取得部1031によって、構造図Gを複数の分離する子図形に分割し、CSの全ての頂点を複数の子集合に分割する。分割された子集合をSubSi={ベクトルpi1,ベクトルpi2,...,ベクトルpni}(i=1,2,...,ns)で表す。ここで、nsは、子集合の数を示し、niはi番目の子集合の頂点の数を示す。これに伴って、SubCi={ベクトルpci1,ベクトルpci2,...,ベクトルpcni}、SubPSi={ベクトルpsi1,ベクトルpsi2,...,ベクトルpsni}が得られる。ここで、ciはi番目の子図形の切断面にある頂点の数を示し、siはi番目の子図形の切断面の外部にある頂点の数を示す。
次に、三次元モデル分割装置は、ステップS1602及びステップS1603で、子集合毎に、切断面に属する頂点同士の接続関係を更新して、新しい子図形を構成する。所定の切断面によって、入力される輪郭図形の頂点はCS1とCS2の2種類に分けられ、各種頂点は共に複数の部分からなるので、その接続情報に基づき、更に複数の子図形に分割する必要がある。このような場合は、実際にも存在し、例えば、切断面の上方に2つ以上の直方体が存在する場合などが挙げられる。
三次元モデル分割装置が実行するこのステップは、子集合SubSi(i=1,2,...,ns)毎に相応する図Giを作成する。このために、三次元モデル分割装置は、まず、SubSiの各頂点をノードとしてGiに追加し、SubSiの各頂点の間にある辺をGiに追加する。
次に、三次元モデル分割装置は、下記の処理より、SubCiの頂点の間に必要とする辺を追加することにより、有界な閉平面を構成する。まず、三次元モデル分割装置は、SubCiと共通の頂点を有し、かつ、この数が2以上である全ての平面(切断面を含まない)を求め、求めた平面をplk(ここで、k=1,2,...,nk)で表し、nkはそのような平面の数を表す。
次に、三次元モデル分割装置は、各平面plk(ここで、k=1,2,...,nk)について、該平面とSubCiと共通の点が2つあれば、それら点をベクトルc1とベクトルc2で表す。この対となる頂点の間にそれらをつなげる辺がなければ、三次元モデル分割装置は、その辺を構造図Giに追加する。
適正判定部は図形を分割して得る一連の子図形が適正であるか否かを判定する。本実施形態では、各子図形が三次元実体を作成する条件を有するか否かを判定するルールを次のように設定する。ある子図形Gを例にして、該子図形の全ての頂点を含む平面をPL={pl1,pl2,...,plk}(ここで、k=1,2,...,np)とする。ここで、npは平面の数を示す。PV={v1,v2,...,vk}(ここで、k=1,2,...,nv)は頂点を示す。Gは下記の条件1〜4を全部満足して始めて、該子図形は三次元実体を作成する条件を有するようになる。
(条件1)頂点の数は4以上、平面の数は4以上である。
(条件2)各平面に少なくとも3つの非共線の頂点が含まれる。
(条件3)各輪郭線は少なくとも2つの異なる平面に属する。
(条件4)各平面上の頂点は首尾接続で閉領域を構成しなければならない。
前述したように切断面により分割されなかった子図形については、上記の判定を行わない。輪郭図形を複数の分離する子図形に分割する際に、一つ目の条件で判定してもよく、主に自由な点又は自由な平面を処理するためである。
以下、再構成部及び再構成ステップを説明する。再構成部及び再構成ステップは、入力される輪郭図形について対応する三次元実体を再構成する。かかる処理は、主に2つのステップを有する。まず、再構成部は、図形分割中で変化を生じた平面に三角化処理を実施して新しい三角形を作成する。次に、再構成部は、三次元物体の表面の法線方向を一致させるように、新たに作成された三角形の法線方向を校正する。
三次元モデルを再構成する方法は様々あり、例えば、序列画像、深さデータ、スケルトンや輪郭などに基づく再構成方法がある。好ましくは、実施例では、次の再構成方法が適用される。
図形分割中では、各平面は変化有りの平面と変化無しの平面という2種類に分類される。三角化処理では、再構成部は、変化有りの平面のみに三角化アルゴリズムを適用して、新しい三角形状の平面を作成し、最終の三次元物体の完全性(閉合性)を確保する。一方、変化無しの平面について、再構成部は、本実施例では従来の三角形データを適用する。以下、変化有りの平面を三角化する方法を中心に説明する。図16は開示技術の実施形態による平面を三角化する処理を示すフローチャートである。
改めて三角化処理を行う平面をpli(ここで、i=1,2,...,nl)と定義する。ここで、nlは変化有りの平面の数を示し、ベクトルvik,(ここで、k=1,2,...,nk)はpli番目の平面上の点の数を示す。まず、三次元モデル分割装置が実行するステップS1601で、該平面にある全ての多角形を求める。平面上の各頂点は終始間違いなく接続されているので、三次元モデル分割装置は、次の手順に従って全ての多角形を検出し、検出された多角形をLi={li1,li2,...,liin}(ここで、i=1,2,...,n)で表す。nは多角形の数を示し、Liにおける頂点序列は各多角形の頂点序列を示す。
三次元モデル分割装置は、多角形の数nを0に初期化し(n=0)、頂点の処理マークpk=false(ここで、k=1,2,...,nk)は全ての頂点がまだ処理されていない旨を示す。三次元モデル分割装置は、多角形の数をn=n+1に更新し、未処理の頂点ベクトルvrを始点としてランダムに選択し、それと接続される頂点のうちのいずれかに沿って徐々に延出し、頂点ベクトルvrに戻るまで延出する。三次元モデル分割装置は、その得られた頂点序列をLn={l1,l2,...,lnn}とし、n番目の多角形の頂点序列を表す。三次元モデル分割装置は、Ln={l1,l2,...,lnn}の頂点処理マークをそれら頂点が処理された旨を示すtrueに更新する。全ての頂点は共に処理されたら終了する。そうでなければ、三次元モデル分割装置は、上記手順の2に移行する。
次に、三次元モデル分割装置が実行するステップS1602では、多角形同士の包含関係を決定し、多角形を改めて構成する。前述した三次元モデル分割装置が実行するステップにより、平面上の各多角形が検出され、検出されたn個の多角形をLi={li1,li2,...,liin}(ここで、i=1,2,...,n)とする。多角形の数が1の場合に、三次元モデル分割装置は、該多角形の頂点の順序が反時計方向か時計方向かを判定し、時計方向であれば反時計方向に変換する。
多角形の数が1より大きければ、三次元モデル分割装置は、多角形同士の包含関係行列としてINi,j,i,j,...,nを算出する。INi,j=trueであれば、i番目の多角形にj番目の多角形が包含まれる。本実施例では、多角形Ljの全ての頂点が、すべて別の多角形Liの内部にあれば、多角形Liは多角形Ljを包含するという。以下、行列INi,j,i,j,...,nに基づきそれら多角形を構成し直すことを説明する。
まず、三次元モデル分割装置は、全ての簡単な多角形Polyi(ここで、i=1,2,...,ni)を求める。ここでいう簡単な多角形とは、他の多角形を包含しない、かつ他の多角形に包含されない多角形である。外部多角形を求め、求めた多角形をPolyk(ここで、k=1,2,...,nk)で表す。nkは外部多角形の数を示す。ここでいう外部多角形とは、いかなる他の多角形にも包含されないが、他の多角形を包含する多角形である。
三次元モデル分割装置は、各外部多角形を対象として一連の複雑な多角形を構成する。ここでいう各複雑な多角形は、一つの外部多角形及び該外部多角形に囲まれる多角形を含む。外部多角形Polyk(ここで、k=1,2,...,nk)を例にし、該外部多角形に囲まれる多角形をLPk={lpk1,lpk2,...lpkn}とする。knはPolykに囲まれる多角形の数を表し、そうすると、複雑な多角形をCPolyk={Polyk,LPk}(ここで、k=1,2,...,nk)で表す。
三次元モデル分割装置は、各簡単な多角形の頂点序列を反時計方向で並べる。三次元モデル分割装置は、複雑な多角形毎に、外部多角形を反時計方向で並べ、内部多角形を時計方向で並べる。次に、三次元モデル分割装置は、ステップS1603で、多角形を三角化する。一つの多角形を一連の多角形に変換する方法は様々である。まず、三次元モデル分割装置は、入力される多角形から一連の台形を得て、次に台形に適当な対角線を追加して、入力される多角形を一連の簡単な多角形に変換する。最後に、三次元モデル分割装置は、簡単な多角形を三角化するアルゴリズムにより一連の重ならない三角形を得る。開示技術の実施形態では、前段のステップで説明した簡単な多角形(単一の凹多角形又は凸多角形)及び複雑な多角形(すなわち、穴のある場合)を処理する方法を用いる。この方法では、三次元モデル分割装置は、走査線方法によりまず多角形を一連の台形に変換し、次に、ある台形に対角線を追加する。そして、三次元モデル分割装置は、対角線により多角形を一連の簡単な多角形に変換し、最後に簡単な多角形を三角化して最終の三角形序列を得る。
以下、三次元モデル分割装置が実行する方向校正ステップを説明する。三次元モデル分割装置が実行する該ステップは、三次元実体の表面の方向を一致するように新たに作成された三角形の方向を校正する。平面検出部の説明と同様に、三角形メッシュで表現される三次元モデルでは、各辺が2つの三角形に共通であり、かつ2つの三角形における方向が全く相反している。該ステップは上記制限条件に基づき新たに作成された多角形の法線方向を校正するものである。全ての三角形をFi={ベクトルvi1,ベクトルvi2,ベクトルvi3}(ここで、i=1,2,...,nF)とする。
具体的な手順は次の通りとする。手順1では、三次元モデル分割装置は、三角形状の平面の処理マークをproi=true(ここで、i=1,2,...,nF)に初期化する。手順2では、三次元モデル分割装置は、新たに作成された三角形状の平面の処理マークをfalseに設定する。手順3では、三次元モデル分割装置は、全ての未処理の三角形状の平面UF={Fu1,Fu2,...,Fun}を求めて、unは未処理の平面の数を表す。手順4では、三次元モデル分割装置は、集合UFは空であれば終了し、そうでなければ次の手順5に移行する。手順5では、三次元モデル分割装置は、次の手順に従って、UFの各三角形状の平面Fukを順次処理する。処理が終了すると、三次元モデル分割装置は、上記の手順3に移行する。
三次元モデル分割装置は、三角形状の平面Fukと共通の辺を有しかつ処理済みの三角形状の面F*を求める。F*が求められなかったら、三次元モデル分割装置は、次の未処理の三角形を処理する。三角形Fuk及びF*において共通の辺の方向が同じであれば、三次元モデル分割装置は、この2つの三角形において共通の辺の方向を相反するようにFukの頂点の順位を変更し、該三角形状の平面の処理マークをtrueに更新する。
手順6では、三次元モデル分割装置は、全ての三角形状の平面の処理マークがtrueになるまで上記の手順3に移行する。
[第4の輪郭図形分割方法]
最後に、図17を参照して、開示技術の三次元モデル分割装置が実行する他の実施形態による輪郭図形分割方法を説明する。三次元モデル分割装置が実行するこの実施形態による輪郭図形分割方法は、穴処理ステップだけでなく、切断面処理ステップも含む。しかし、図面では穴処理を実施した後に切断面処理を実施するが、二者の処理順序には特に制限がなく、同時に実行してもよく、また、切断面処理を実行した後に穴処理を実行してもよい。
図17に示すように、まず、ステップS1701で、輪郭図形をいくつかの分離する子図形に分割し、その詳しい処理は前述した子図形分離ステップを参照し説明を省略する。次に、ステップS1702で、子図形毎に対応する三次元実体を再構成する。次に、ステップS1703で、各子図形について、該子図形の対応する実体は穴であるか否かを判定し、穴であれば(ステップS1704、Yes)、ステップS1710でモデルの法線方向を変更し、該子図形の対応する三次元実体を出力する(ステップS1711)。穴でなければ(ステップS1704、No)、次に可能性のある全ての切断面(又は分割面という)を検出する(ステップS1705)。ステップS1703とS1704は穴処理ステップに対応し、その詳しい処理は前述した処理手順を参照し、説明を省略する。
切断面が検出されると(ステップS1706、No)、ステップS1707で、切断面により子図形を複数のより小さい子図形に分割する。次に、ステップS1708で、適正判定を行う、すなわち、ステップS1707で行われた分割は成功したか否かを判定する。成功したと判定されると(ステップS1708、Yes)、ステップS1709で、新たに作成された子図形に対応する三次元実体を再構成する。また、ステップS1703に戻り、新しい三次元実体について穴処理及び切断面処理を継続実施する。一方、ステップS1708で分割は成功しなかったと判定されると、該三次元実体を出力し、それ以上分割しないようにする(ステップS1711)。
もちろん、図17に示すフローチャートでは、切断面処理を複数回実施してもよく、各切断面について順次実施し、一つの切断面は分割が成功しなかったと判定されると(ステップS1708、No)、該子図形の対応する三次元実体をそのまま出力せず、未処理の切断面がない又は分割が成功するまで、次の切断面により分割を続行する。
しかし、図17に示す実施形態では、子図形を分離すると、すなわち、ステップS1701が終了した次第、各子図形に三次元実体を構成する(ステップS1702)。しかし、まず各子図形に穴処理及び切断面処理を実施し、最後に各子図形に三次元実体をまとめて再構成することもできる。
開示技術の三次元モデル分割装置が実行する実施形態では、モデル分割中では複雑な演算及び処理がないので、効率が高い。また、再構成ステップが導入され、再構成された各三次元実体モデルを三角形メッシュで表現するので、出力結果が三次元実体となっている。また、分割結果に適正判定を導入するので、耐ノイズ性が更に強化される。
[適用例]
以下、一例を用いて、三次元モデル分割装置が実行する三次元モデルの分割処理を説明する。図18は入力される三次元モデルの例を示す図である。該モデルは52個の頂点と108個の三角形で物体の表面を構成する。この入力されるモデルには2つの穴がある。
まず、三次元モデル分割装置は、モデルに関係するデータに基づき、各三角形状の平面の面積や法線方向などのデータを算出する。次に、三次元モデル分割装置は、互いに接続され、かつ方向が相同又は相反する三角形を組み合わせて、該モデルを構成する平面データを得る。本実施例では、2つの三角形の法線でなす角度は0.001より小さければ、2つの三角形状の平面の方向が相同と判断される。一方、2つの三角形の法線でなす角度はπ-0.001より大きければ、2つの三角形状の平面の方向が相反と判断される。
図19は入力されるモデルから検出された平面の構造を示す。図18に示す入力されるモデルから合計29個の平面が検出され、各平面には、平面上の頂点のインデックス、三角形状の平面のインデックス、平面の面積及び平面の法線方向に関係する情報が含まれる。最終に得られた平面データは次の表1に示す。検出された12番目の平面を例にし、その平面に関係するデータを図19に示す。12番目の平面には、インデックスがそれぞれ55と58である三角形状の平面が2つ、インデックスがそれぞれ19、20、33、34である頂点が4つ含まれる。
次に、三次元モデル分割装置は、得られた平面データから、入力されるモデルの対応する輪郭図形を抽出する。各平面の内部の直線を削除し、図20(a)に示す結果を得る。図20(b)は三次元モデルの頂点をノードとし、各平面の輪郭線を辺として構成する輪郭図形を示す。入力されるモデルの対応する輪郭図形に52個のノードと78本の辺が含まれる。
(輪郭図形を分割する各ステップ)
次に、三次元モデル分割装置は、得られた輪郭図形に基づき、入力されたモデルを複数の部分に分割する。次に、三次元モデル分割装置が実行する輪郭図形を分割する各ステップを説明する。
(ステップ1:輪郭図形を複数の分離する子図形に分割する)三次元モデル分割装置が実行するこのステップでは、相互接続されるノードを集めて複数の分離する子図形を得る。図21に示すように、入力されるモデルの対応する輪郭図形は4つの分離する子図形に分割され、各子図形の頂点を菱形、五角の星型、円形、星型でそれぞれ示す。ここで、四角形で示す頂点は、各子図形を作成する時にランダムに選択された始点を表す。各子図形のノードからなる集合を以下に示す。各数字は三次元モデルの対応する頂点のインデックスを表す。S1={7,8,9,10,11,12,13,14}、S2={39,40,41,42,43,44,45,46}、S3={1,2,3,4,5,6,47,48,49,50,51,52}、S4={15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38}。
(ステップ2:各子図形の対応する三次元実体を再構成する)三次元モデル分割装置が実行するこのステップでは、各子図形の対応する三次元実体がそれぞれ再構成され、かつ再構成された三次元実体は三次元実体の形状を三角形メッシュで表現するものである。まず、各子図形について、それぞれの全ての頂点を含む平面を求め、これら平面に変化があるか否かを判定する。ある平面に2つ以上の子図形の頂点が含まれれば、該平面を変化有りの平面とする。結果を表2に示す。
次に、三次元モデル分割装置は、各子図形について、変化有りの全ての平面を三角化する。子図形1の場合では、平面{24,25,26,27}は三角化を必要としないので、そのまま従来の三角形で集合{83,84,85,86,87,88,89,90}を構成できる。しかし、平面{4,7}は新たに三角化される必要があり、新たに作成された三角形として(7,9,13)と(7,13,10)と(8,11,14)と(8,14,12)とがある。したがって、子図形1の対応する三次元実体は8個の頂点及び12個の三角形で構成される。
子図形2の場合では、平面{20,21,22,23}は三角化を必要としないので、そのまま従来の三角形で集合{75,76,77,78,79,80,81,82}を構成できる。しかし、平面{4,7}は新たに三角化される必要があり、新たに作成された三角形として(39,41,45)と(39,45,42)と(40,43,46)と(40,46,44)とがある。したがって、子図形2の対応する三次元実体は8個の頂点及び12個の三角形で構成される。
子図形3の場合では、平面{1,2,3,5,6,28}は三角化を必要としないので、従来の三角形状の平面をそのまま利用して、三角形からなる集合{1,2,3,4,5,6,12,14,21,22,30,31,35,36,91,93}を構成できる。しかし、平面{4,7}は新たに三角化され、三角形として(1,2,48)と(1,48,47)と(5,6,52)と(5,52,51)とを新たに得る必要がある。したがって、子図形3の対応する三次元実体は12個の頂点及び20個の三角形で構成される。
子図形4の場合では、平面{8,9,10,11,12,13,14,15,16,17,18,19,29}は三角化を必要としない。すなわち、そのまま従来の三角形で集合{46,47,48,50,51,52,54,55,56,57,58,59,60,62,63,65,66,67,69,70,71,72,73,74}を構成できる。しかし、平面4は新たに三角化される。そして、三角形として(16,18,20)、(16,20,34)、(16,34,36)、(16,36,38)、(16,38,32)、(16,32,30)、(16,30,28)、(16,28,26)、(16,26,24)と(16,24,22)を新たに作成する必要がある。したがって、子図形4の対応する三次元実体は24個の頂点及び34個の三角形で構成される。
最後に、三次元モデル分割装置は、新たに作成された三角形の方向を校正する。子図形1の場合では、最初の三角形において、83番目の三角形は(10,13,14)であり、モデルの表面の方向の一致性を保証するために、新たに作成された三角形(7,13,10)の方向を変えない。同じ理由で、(7,9,13)の方向も変えない。90番目の三角形は(11,9,8)であり、新たに作成された三角形(8,11,14)の方向を(8,14,11)に変える必要がある。同じ理由で、(8,14,12)の方向も(8,12,14)に変える必要がある。
上記と同様な方法により、三次元モデル分割装置は、子図形2、子図形3と子図形4について新たに作成された三角形の方向を変える。図22は図21の4つの子図形から再構成された三次元モデルの結果を示す説明図である。図22に再構成された三次元実体M1、M2、M3、M4を示す。
(ステップ3:再構成された実体を分割できなくなるまで継続分割する)三次元モデル分割装置が実行するこのステップでは、再構成された三次元実体を全てのモデルが共に分割できなくなるまで継続分割する。まず、三次元モデル分割装置は、この4つのモデルは穴であるか否かを判定する。判定結果はM1とM2が穴であり、他の2つのモデルが穴ではないとする。M1とM2における全ての三角形の方向を変えることにより、モデルの表面の方向を外方に向かわせ、この2つのモデルを出力し、それ以上分割しないようにする。
次に、三次元モデル分割装置は、モデルM3とモデルM4に切断面候補があるか否かを判定する。このステップでは、ある平面が切断面であるか否かを判定する際に、以下のルールを適用する。
(1)モデルの頂点が該切断面の両側にある、
(2)切断面の面積が表面積の百分の一より小さくない、
(3)切断面にある頂点と切断面の外部にある頂点をつなげてなる全ての辺と切断面とがなす角度は30度以上である。
三次元モデル分割装置は、上記条件に基づき判定を行うと、モデルM3に2つの切断面がある可能性があれば、続いて分割をする。一方、M4に切断面がないので、該モデルをそのまま出力し、それ以上分割しないようにする。
次に、三次元モデル分割装置は、モデルM3を分割する。前段のステップで得られたモデルM3に含まれる頂点序列はS3={1,2,3,4,5,6,47,48,49,50,51,52}である。分割するに先立って、頂点、三角形の各頂点のインデックス及び平面データ情報を更新する。その結果、頂点序列はS1={1,2,3,4,5,6,7,8,9,10,11,12}となり、三角形状の平面に関するデータは次に示す表3の通りとする。
平面に関するデータは次に示す表4の通りとする。
図23は、切断面の頂点及び切断面と直接接続する頂点の分類結果を示す説明図である。図23に示すように、P8とP3は切断面候補と検出される。本実施例では、面積の最も広い平面、すなわち、平面P8を優先に処理する。
まず、三次元モデル分割装置は、12個の頂点の処理マークをfalseに初期化する。prok=false(ここで、k=1,2,...12)は全ての頂点が処理されないことを表す。次に、三次元モデル分割装置は、切断面における4つの頂点をC1={4,10}とC2={5,11}との2種類に分ける。図23に示すように、C1を四角形、C2を円形で示す。点の処理マークをprox=true,x∈C1∪C2に更新する。
三次元モデル分割装置は、切断面における4つの頂点と直接接続され、かつ切断面に入らない頂点をX1={3,9}とX2={6,12}との2種類に分ける。図23に示すように、X1を星型、X2を菱形で示す。点の処理マークをprox=true,x∈X1∪X2に更新する。
三次元モデル分割装置は、他の頂点を2種類に分ける。X1={3,9}の頂点を始点として延出し、未処理の頂点で集合PX1={1,2,7,8}を構成すると共に、X2={6,12}の頂点を始点として延出し、未処理の頂点で集合PX2={7,8,1,2}を構成する。三次元モデル分割装置は、PX1∩PX2の結果としてPX={1,2,7,8}を算出する。
三次元モデル分割装置は、集合PXから適当なノードを選択し、他の頂点を更に分類する。判定を通して、この4つの頂点が共に頂点候補とされてもよく、かつ各頂点からX1又はX2までの最も短い距離は共に1である。そこで、三次元モデル分割装置は、一つの頂点を任意に選択して処理することができる。本実施例では、1つ目の頂点である頂点1が選択され処理される。頂点1と接続される未処理頂点は2と7とがあり、直線1→2は切断面と交わり、直線1→7は切断面と平行する。三次元モデル分割装置は、直線1→2と切断面との交点を13番目の頂点として算出する。図24に示すように、頂点1、2を五角の星型で、交点を上方へ向かう三角形でそれぞれ示す。三次元モデル分割装置は、頂点の分類情報を更新することにより、頂点1を切断面のプラス側に位置させ、頂点1を集合X1に追加してX1={1,3,9}を得る。また、三次元モデル分割装置は、頂点2を集合X2に追加してX2={2,6,12}を得る。また、三次元モデル分割装置は、新規追加された13番目の頂点を集合C1とC2に追加した結果、C1={4,10,13}とC2={5,11,13}とを得る。頂点1、2と13に関する点の処理マークがtrueに更新される。三次元モデル分割装置は、頂点同士の接続関係及び平面データを次のように更新する。頂点1と2の間のつながりを削除し、頂点1と13の間及び頂点2と13の間のつながりを追加し、切断面である8番目の平面に頂点13を追加し、平面2、4に頂点13を追加する。
三次元モデル分割装置は、X1={1,3,9}とX2={2,6,12}に基づき延出し、未処理の頂点で集合PX1={7,8}とPX2={8,7}構成し、PX1∩PX2の結果としてPX={7,8}を算出する。三次元モデル分割装置は、判定を通して、この2つの頂点が共に頂点候補として次の処理をすることがわかる。本実施例では、頂点8を選択する。頂点8と直接接続される未処理頂点は7しかなく、直線8→7は平面の両側に亘る。三次元モデル分割装置は、直線8→7と切断面との交点を14番目の頂点として算出する。図24に示すように、頂点7、8を下方へ向かう三角形で、交点を上方へ向かう三角形でそれぞれ示す。次に、三次元モデル分割装置は、頂点7、8と14の分類情報を更新することにより、8番目の頂点を切断面のマイナス側に位置させ、頂点8を集合X2に追加してX2={2,6,8,12}を得る。また、三次元モデル分割装置は、7番目の頂点をX1に追加してX1={1,3,9}を得る。また、三次元モデル分割装置は、新規追加された13番目の頂点を集合C1とC2に追加した結果、C1={4,10,13,14}とC2={5,11,13,14}とを得る。頂点7、8と14に関する点の処理マークをtrueに更新する。三次元モデル分割装置は、頂点同士の接続関係及び平面データを次のように更新する。頂点7と8の間のつながりを削除し、頂点7と14の間及び頂点8と14の間のつながりを追加する。切断面である8番目の平面に頂点14を追加し、平面4、5に頂点14を追加する。以上により、全ての頂点に関する点の処理マークがtrueに更新される。この場合の平面データは次に示す表5の通りとする。
三次元モデル分割装置は、集合C1={4,10,13,14}及びC2={5,11,13,14}それぞれをX1={1,3,7,9}及びX2={2,6,12}と合併する。三次元モデル分割装置は、平面P8を切断面として全ての頂点を分類した結果である集合CX1={4,10,13,14,1,3,7,9}及びCX2={5,11,13,14,2,6,8,12}を得る。
次に、三次元モデル分割装置は、CX1={4,10,13,14,1,3,7,9}とCX2={5,11,13,14,2,6,8,12}に基づき、子図形を作成する。集合CX1の頂点4及び13の場合、切断面と2番目の平面との交点が4及び13しかないので、三次元モデル分割装置は、4と13の間のつながりを追加する。同様に、三次元モデル分割装置は、頂点13と14の間、及び頂点14と10の間のつながりをそれぞれ追加する。三次元モデル分割装置は、子図形2について、頂点5と13の間、頂点13と14の間及び頂点11と14の間のつながりをそれぞれ追加する。次に、三次元モデル分割装置は、各集合の頂点及び接続関係に基づき2つの子図形を作成する。ここで、各子図形に8個の頂点と12本の辺が含まれる。
次に、三次元モデル分割装置は、該分割結果が有効だと判定され、2つの三次元実体を再構成する。図25に示すように、2つの三次元実体をそれぞれをM5とM6で表す。この2つの実体は共に8個の頂点と12本の三角形状の平面を含むので、2つの直方体である。次に、三次元モデル分割装置は、M5とM6は共に切断面候補を有しないと判定で分かり、以上で入力されるモデルへの分割を終了する。結果、三次元モデル分割装置は、M1、M2、M4、M5、M6の計5つの部分を得る。
当然、当業者は開示技術を下記のように理解すべきである。本明細書のフローチャート又は他の形態で記述される如何なる処理又は方法記述又はブロックは共に、単純なハードウエアで実現する部材、要素、装置、部等と理解できる。また該処理の具体的な論理機能又は手順が1つ以上の実行可能な指令を実現するコードモジュール、コードセグメント、コード部をも含む。すなわち、ソフトウエアで実現することもできる。また、ソフトウエアとハードウエアを組み合わせて実現することもできる。
本明細書のフローチャート又は他の形態で記述されるロジック及び/又は手順は、例えば、ロジック機能を実現するための実行可能な指令の記載だと理解できる。指令実行システムや設備や装置に用いられる任意なコンピュータ読み取り可能な媒体によりそれらロジック及び/又は手順を実現することもできる。例えば、コンピュータ・システム、プロセッサーを備えるシステム、又は、指令実行システムや設備や装置から該指令を呼び出して実行する他のシステムである。
本明細書の記載では、「コンピュータ読み取り可能な媒体」は、指令実行システムや設備や装置に用いられるプログラムを記憶・送信・伝送・配信することができるいずれかの装置である。コンピュータ読み取り可能な媒体は電気・磁気・光学・電磁気・赤外線又は半導体システム、設備、装置又は伝送媒体であってもよいが、それらに限らない。
コンピュータ読み取り可能な媒体の具体的な実施例として、1本以上のリード線を有する電気的接続(電気)、フレキシブルディスク(磁気)、ランダムアクセスメモリ(RAM)(電気)、読出し専用メモリ(ROM)(電気)、消去可能なプログラミング読出し専用メモリ(EPROM又はフラッシュメモリ)(電気)、光ファイバー(光学)、携帯型光ディスク読出し専用メモリ(CD-ROM)(光学)などが挙げられる。
コンピュータ読み取り可能な媒体はプログラムが印刷された紙材又は他の媒体であってもよい。なぜなら、例えば、紙材又は他の媒体を光学的に走査して該プログラムを取得してから、コンパイリング・解釈する或いは必要に応じて適当の形態で該プログラムに他の処理を実施することにより、該プログラムをコンピュータのメモリに記憶することができるからである。
前述した明細書では、実施例を参照して開示技術を記載している。しかし、特許請求の範囲に限られる開示技術の範囲を逸脱しない前提で種々の変形や変更を実施できることが当業者は理解できる。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)三次元モデル分割装置が、
入力された三角形メッシュで表現される三次元モデルに含まれる、三角形同士が接続し、且つ、該三角形の法線方向が共通または相反する三角形を集めた平面を検出する平面検出ステップと、
前記平面検出ステップによって検出された平面から、該平面の各三角形の各辺のうち、1つの三角形のみに属する境界辺同士を接続して前記三次元モデルの輪郭である輪郭図形を抽出する輪郭図形抽出ステップと、
前記輪郭図形抽出ステップによって抽出された輪郭図形を重ならない複数の子図形に分割する輪郭図形分割ステップと、
前記輪郭図形分割ステップによって分割された子図形毎に、それぞれが三角形メッシュで表現される三次元実体を再構成する三次元実体再構成ステップと
を実行することを特徴とする三次元モデル分割方法。
(付記2)前記三次元モデル分割装置が、
前記平面検出ステップで、前記三角形の法線方向が共通または相反する三角形を集めた平面同士が、少なくとも、共通する三角形を有する場合、または、頂点をつなげる辺が少なくとも1本有り且つ該辺が法線ベクトルに直交している場合、あるいは、異なる2平面に属し且つ相互接続される三角形が1対以上ある場合、のいずれかである場合に、該平面同士を合併することを特徴とする付記1に記載の三次元モデル分割方法。
(付記3)前記三次元モデル分割装置が、
前記三次元実体再構成ステップによって再構成された三次元実体モデル又は前記各子図形の対応する三次元実体が穴であるか否かを、表面の外側に向かう平面の面積と内側に向かう平面の面積の大小から判定する穴判定ステップと、
前記穴判定ステップによって前記三次元実体再構成ステップで再構成されたいずれかの三次元実体モデルが穴であると判定されると、この再構成された三次元実体モデルの全ての三角形の法線方向を相反する方向に変更する、或いは、いずれかの子図形の対応する三次元実体が穴であると判定されると、子図形の対応する三次元実体の全ての三角形の法線方向を相反する方向に変更する穴モデル校正ステップと
を更に実行することを特徴とする付記1に記載の三次元モデル分割方法。
(付記4)前記三次元モデル分割装置が、
前記三次元実体再構成ステップによって再構成された三次元実体モデルに切断面が含まれるか否かを、四角形の平面の2つの頂点の各々が該平面に属さない一つの頂点を持ち、且つ四角形の平面の異なる2つの頂点の各々が該平面に属さない一つの頂点を持ち、それらの該平面に属さない頂点の位置が該四角形の平面から相対する側にあるか否かで判定する、或いは、前記各子図形の対応する前記三次元実体に切断面が含まれるか否かを判定する切断面判定ステップと、
前記切断面判定ステップによって前記三次元実体再構成ステップで再構成されたいずれかの三次元実体モデルに切断面が含まれると判定されると、該切断面により該切断面を含む三次元実体モデルを2つ以上の子図形に分割する一方、前記切断面判定ステップでは、いずれかの子図形に切断面が含まれると判定されると、該切断面により該切断面を含む子図形を2つ以上の子図形に分割する輪郭図形再分割ステップと
を更に実行することを特徴とする付記1に記載の三次元モデル分割方法。
(付記5)前記三次元モデル分割装置が、
前記輪郭図形再分割ステップによって分割された子図形が適正であるか否かを判定し、適正でなければ、該切断面を放棄する適正判定ステップを更に実行することを特徴とする付記4に記載の三次元モデル分割方法。
(付記6)前記三次元モデル分割装置が、
前記輪郭図形再分割ステップによって分割された子図形が、頂点の数が4以上、平面の個数が4以上、かつ、各平面に少なくとも3つの非共線の頂点が含まれる、かつ、各輪郭線が少なくとも2つの異なる平面に属する、かつ、各平面上の頂点が首尾接続で一つの閉領域を構成しなければならない、という条件を全て満足した場合に、該子図形を適正と判定する付記5に記載の三次元モデル分割方法。
(付記7)前記平面検出ステップは、
前記入力される三次元モデルにおける各三角形状の平面の法線方向を算出する法線方向算出ステップと、
前記法線方向算出ステップによって算出された各三角形状の平面の法線方向に基づき、互いに接続されかつ方向が相同又は相反する三角形状の平面を集めて子平面を取得する子平面取得ステップと、
前記子平面取得ステップによって取得された子平面を集めて平面を取得する平面取得ステップと
を含むことを特徴とする付記1に記載の三次元モデル分割方法。
(付記8)前記平面取得ステップは、
前記2つの子平面の法線方向が相同又は相反し、かつ、前記2つの子平面の間には共通の三角形、又は共通の辺、又はこの2つの子平面のそれぞれに属する頂点を接続してなりかつ前記2つの子平面の法線方向に直交する直線が存在する、という条件を満足する2つの子平面を平面に合併する付記7に記載の三次元モデル分割方法。
(付記9)前記輪郭図形抽出ステップは、
各平面における全ての辺の集合を取得する辺取得ステップと、
前記辺取得ステップによって取得された各辺を内部辺又は境界辺に分類する辺分類ステップと、
前記辺分類ステップによって分類された境界辺を保留し、内部辺を削除する辺削除ステップと
を含むことを特徴とする付記1に記載の三次元モデル分割方法。
(付記10)前記切断面判定ステップは該平面上の頂点以外の頂点がそれぞれ該平面の両側にある平面を切断面と判定する付記4に記載の三次元モデル分割方法。
(付記11)前記輪郭図形再分割ステップは、
切断面における頂点を第1向き頂点集合と第2向き頂点集合に割り当てて、前記第1向き頂点集合における頂点はそれを切断面以外の頂点と接続してなる接続線が第1方向にあるものであり、前記第2向き頂点集合における頂点はそれを切断面以外の頂点と接続してなる接続線が第2方向にあるものである切断面頂点割当ステップと、
切断面以外の頂点を第1向き側頂点集合と第2向き側頂点集合に割り当てて、前記第1向き側頂点集合における頂点は第1向き頂点集合における頂点と直接又は間接に接続するものであり、前記第2向き側頂点集合における頂点は第2向き頂点集合における頂点と直接又は間接に接続するものである切断面以外頂点割当ステップと、
第1向き頂点集合における頂点と直接接続しない前記第1向き側頂点集合における頂点と、第2向き頂点集合における頂点と直接接続しない前記第2向き側頂点集合における頂点との接続関係に基づき、前記第1向き側頂点集合と第2向き側頂点集合との間に切断面に亘る接続がないように前記切断面に頂点を追加する切断面頂点追加ステップと、
前記第1向き頂点集合と第2向き頂点集合及び前記第1向き側頂点集合と第2向き側頂点集合とに基づき、切断面を含む前記三次元実体モデル又は切断面を含む前記子図形を2つ以上の子図形に分割する子図形分割ステップと
を含むことを特徴とする付記4に記載の三次元モデル分割方法。
(付記12)前記切断面頂点追加ステップは、前記第1向き側頂点集合の第1向き頂点集合における頂点と直接接続しない頂点と、前記第2向き側頂点集合の第2向き頂点集合における頂点と直接接続しない頂点との直接接続は前記切断面に交差するか否かを判定し、交差すれば、切断面に新規の頂点を追加すると共に、新規に追加された前記頂点を利用し、前記第1向き側頂点集合の第1向き頂点集合における頂点と直接接続しない頂点と、前記第2向き側頂点集合の第2向き頂点集合における頂点と直接接続しない頂点との間に直接接続する関係をなくすようにして、更に新規に追加された前記頂点それぞれを第1向き頂点集合と第2向き頂点集合に組み入れることを特徴とする付記11に記載の三次元モデル分割方法。
(付記13)入力された三角形メッシュで表現される三次元モデルに含まれる、三角形同士が接続し、且つ、該三角形の法線方向が共通または相反する三角形を集めた平面を検出する平面検出部と、
前記平面検出部によって検出された平面から、該平面の各三角形の各辺のうち、1つの三角形のみに属する境界辺同士を接続して前記三次元モデルの輪郭である輪郭図形を抽出する輪郭図形抽出部と、
前記輪郭図形抽出部によって抽出された輪郭図形を重ならない複数の子図形に分割する輪郭図形分割部と、
前記輪郭図形分割部によって分割された子図形毎に、それぞれが三角形メッシュで表現される三次元実体を再構成する三次元実体再構成部と
を有することを特徴とする三次元モデル分割装置。