図形処理装置
【課題】図形ブーリアン演算の演算誤差の発生を抑制して、3次元形状オブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができる図形処理装置を得ることを目的とする。
【解決手段】ポリゴン形状出力部7が、遮蔽判定処理部6によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定処理部6によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力する。
【解決手段】ポリゴン形状出力部7が、遮蔽判定処理部6によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定処理部6によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力する。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、3次元空間内の視点から複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、そのオブジェクトの見える部分を構成しているポリゴンの形状を抽出する図形処理装置に関するものである。
【背景技術】
【0002】
複数のポリゴンで構成されている3次元形状のオブジェクトを描画する一般的な図形処理装置には、3次元空間内の視点(例えば、ユーザにより指定された位置)から3次元形状のオブジェクトを見たときに、そのオブジェクトの見える部分を構成しているポリゴンの形状を抽出する処理を実施する機能が備えられている。
このようなポリゴンの形状抽出処理では、3次元形状のオブジェクトを構成しているポリゴンが、例えば、ポリゴンAとポリゴンBである場合、ポリゴンAとポリゴンBの遮蔽関係を判定する必要がある。
【0003】
視点から3次元形状のオブジェクトを見たときに、ポリゴンAがポリゴンBに完全に遮蔽されている場合、そのオブジェクトの見える部分を構成しているポリゴンはポリゴンBだけであり、ポリゴンAは該当しない。
一方、ポリゴンBがポリゴンAに完全に遮蔽されている場合、そのオブジェクトの見える部分を構成しているポリゴンはポリゴンAだけであり、ポリゴンBは該当しない。
【0004】
視点から3次元形状のオブジェクトを見たときに、ポリゴンAの一部がポリゴンBに遮蔽されている場合、ポリゴンBに遮蔽されていない部分のポリゴンAの形状を算出する必要がある。
一方、ポリゴンBの一部がポリゴンAに遮蔽されている場合、ポリゴンAに遮蔽されていない部分のポリゴンBの形状を算出する必要がある。
例えば、ポリゴンBに遮蔽されていない部分のポリゴンAの形状の算出には、図形ブーリアン演算(ポリゴンA−ポリゴンB)などを利用することができる。
【0005】
ここでは、3次元形状のオブジェクトがポリゴンAとポリゴンBから構成されている場合について示したが、3次元形状のオブジェクトがN個のポリゴンから構成されている場合、ポリゴン間の遮蔽関係を判定する処理をN×(N−1)回実施して、一部遮蔽していることが判明すれば、図形ブーリアン演算を実施して、遮蔽されていない部分のポリゴンの形状を算出する必要がある。
以下、ポリゴンの一部が他のポリゴンに遮蔽されている場合に、他のポリゴンに遮蔽されていない部分のポリゴンの形状を算出する処理の具体例を説明する。
【0006】
図10はポリゴンC1,C2,C3,C4によって一部が遮蔽されているポリゴンAの抽出処理を示す説明図である。
この場合、ポリゴンAとポリゴンC1間で図形ブーリアン演算を実施し、その演算結果(ポリゴンC1に遮蔽されていない部分のポリゴンA)とポリゴンC2間で図形ブーリアン演算を実施する。
また、その演算結果(ポリゴンC1,C2に遮蔽されていない部分のポリゴンA)とポリゴンC3間で図形ブーリアン演算を実施し、その演算結果(ポリゴンC1,C2,C3に遮蔽されていない部分のポリゴンA)とポリゴンC4間で図形ブーリアン演算を実施する。
これにより、ポリゴンC1,C2,C3,C4に遮蔽されていない部分のポリゴンAが生成される。
このように、前の図形ブーリアン演算の演算結果が、次の図形ブーリアン演算に用いられる。
【0007】
この演算の過程で、ポリゴンとポリゴンの図形ブーリアン演算を実施した結果、非常に小さな形状や極端に細長い形状のポリゴン(他のポリゴンに遮蔽されていない部分のポリゴン)が生成される場合がある。
このとき、非常に小さな形状や極端に細長い形状のポリゴンと、他のポリゴンとの間で図形ブーリアン演算を実施する場合、演算誤差によって、正しい形状のポリゴンを生成することができない場合がある。
例えば、ポリゴンの頂点データは、浮動小数点で表現されることが多いが、微少ポリゴンや極端に細長いポリゴン(例えば、ポリゴンの頂点間が非常に小さい場合など)が図形ブーリアン演算の対象になると、情報落ちなどの誤差が発生して、幾何学的な状態が崩れる場合がある。
【0008】
具体的には、例えば、図11に示すように、非常に細長い三角形Bが三角形Aにより遮蔽されている場合、点線の丸で囲まれている2つの部分が図形ブーリアン演算(三角形B−三角形A)により求まる。
しかし、頂点1,頂点2,頂点3で構成される三角形Cにおいて、頂点1と頂点2の位置が非常に接近している場合、頂点1及び頂点2を算出する過程の計算で、浮動小数点演算の誤差が発生する。例えば、Ax+Byにおいて、A,Bの値が大きく、x,yが非常に小さい値の場合に誤差が発生する。
【0009】
この演算誤差によって、三角形Cの頂点1と頂点2の位置が逆転するような演算結果になると、三角形Cの形状が崩壊する。
この場合、本来、頂点1,頂点2,頂点3が反時計回りになる形状が、演算誤差によって、時計回りの形状になる。
このような現象によって、ポリゴンの表裏の関係や、ポリゴンの内部・外部の判定を間違うことになる。
【0010】
なお、以下の特許文献1には、複数のポリゴン間で共有する辺を削除することで、3次元形状オブジェクトの輪郭形状を抽出する技術が開示されているが、浮動小数点演算の誤差の発生を抑制する技術については開示されていない。
【先行技術文献】
【特許文献】
【0011】
【特許文献1】特開平6−266819号公報(段落番号[0006]から[0011]、図1)
【発明の概要】
【発明が解決しようとする課題】
【0012】
従来の図形処理装置は以上のように構成されているので、3次元形状のオブジェクトを構成しているポリゴン単位で、図形ブーリアン演算を繰り返し実施する場合、その図形ブーリアン演算の途中で、微少ポリゴンや極端に細長いポリゴンが生成されて、そのポリゴンが次の図形ブーリアン演算の対象になると、演算誤差が発生して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができなくなる課題があった。
【0013】
この発明は上記のような課題を解決するためになされたもので、図形ブーリアン演算の演算誤差の発生を抑制して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができる図形処理装置を得ることを目的とする。
【課題を解決するための手段】
【0014】
この発明に係る図形処理装置は、3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出手段と、表面ポリゴン抽出手段により抽出された1以上のポリゴンを2次元平面上に投影変換する投影変換手段と、投影変換手段により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する輪郭形状抽出手段と、表面ポリゴン抽出手段により抽出されたポリゴン毎に、当該ポリゴンの面が輪郭形状抽出手段により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定手段とを設け、ポリゴン形状出力手段が、遮蔽判定手段によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定手段によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力するようにしたものである。
【発明の効果】
【0015】
この発明によれば、3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出手段と、表面ポリゴン抽出手段により抽出された1以上のポリゴンを2次元平面上に投影変換する投影変換手段と、投影変換手段により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する輪郭形状抽出手段と、表面ポリゴン抽出手段により抽出されたポリゴン毎に、当該ポリゴンの面が輪郭形状抽出手段により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定手段とを設け、ポリゴン形状出力手段が、遮蔽判定手段によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定手段によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力するように構成したので、図形ブーリアン演算の演算誤差の発生を抑制して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができる効果がある。
【図面の簡単な説明】
【0016】
【図1】この発明の実施の形態1による図形処理装置を示す構成図である。
【図2】この発明の実施の形態1による図形処理装置を構成しているコンピュータを示す構成図である。
【図3】この発明の実施の形態1による図形処理装置の処理内容を示すフローチャートである。
【図4】複数のポリゴンで構成されている3次元形状のオブジェクトの一例を示す説明図である。
【図5】ポリゴンを平行投影変換することで、ポリゴンが2次元平面上に投影変換された例を示す説明図である。
【図6】ポリゴン形状出力部7から出力されるポリゴンの形状を示す説明図である。
【図7】オブジェクトの輪郭形状の抽出例を示す説明図である。
【図8】この発明の実施の形態3による図形処理装置を示す構成図である。
【図9】オブジェクトの輪郭形状の抽出例を示す説明図である。
【図10】ポリゴンC1,C2,C3,C4によって一部が遮蔽されているポリゴンAの抽出処理を示す説明図である。
【図11】図形ブーリアン演算により求まる三角形の一例を示す説明図である。
【発明を実施するための形態】
【0017】
実施の形態1.
図1はこの発明の実施の形態1による図形処理装置を示す構成図である。
図1において、視点受付部1は例えばキーボードやマウスなどのマンマシンインタフェース等から構成されており、複数のポリゴンで構成されている3次元形状のオブジェクトを見る3次元空間内の視点の位置を受け付ける処理を実施する。
データ記憶部2は3次元形状のオブジェクトを構成している複数のポリゴンのデータを記憶しているメモリである。
【0018】
表面ポリゴン抽出部3は視点受付部1により位置が受け付けられた3次元空間内の視点から、3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する処理を実施する。なお、表面ポリゴン抽出部3は表面ポリゴン抽出手段を構成している。
投影変換処理部4は表面ポリゴン抽出部3により抽出された1以上のポリゴンを2次元平面上に投影変換する処理を実施する。なお、投影変換処理部4は投影変換手段を構成している。
【0019】
輪郭形状抽出部5は投影変換処理部4により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する処理を実施する。なお、輪郭形状抽出部5は輪郭形状抽出手段を構成している。
遮蔽判定処理部6は表面ポリゴン抽出部3により抽出されたポリゴン毎に、当該ポリゴンの面が輪郭形状抽出部5により抽出された輪郭形状に遮蔽されているか否かを判定する処理を実施する。なお、遮蔽判定処理部6は遮蔽判定手段を構成している。
【0020】
ポリゴン形状出力部7は遮蔽判定処理部6によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定処理部6によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力する処理を実施する。なお、ポリゴン形状出力部7はポリゴン形状出力手段を構成している。
【0021】
図1の例では、図形処理装置の構成要素である視点受付部1、データ記憶部2、表面ポリゴン抽出部3、投影変換処理部4、輪郭形状抽出部5、遮蔽判定処理部6及びポリゴン形状出力部7のそれぞれが専用のハードウェア(例えば、CPUを実装している半導体集積回路、あるいは、ワンチップマイコンなど)で構成されているものを想定しているが、図形処理装置がコンピュータで構成される場合、視点受付部1、データ記憶部2、表面ポリゴン抽出部3、投影変換処理部4、輪郭形状抽出部5、遮蔽判定処理部6及びポリゴン形状出力部7の処理内容を記述しているプログラムをコンピュータのメモリに格納し、当該コンピュータのCPUが当該メモリに格納されているプログラムを実行するようにしてもよい。
【0022】
図2はこの発明の実施の形態1による図形処理装置を構成しているコンピュータを示す構成図である。
図2において、アプリケーションメモリ11はコンピュータに内蔵されているRAMやハードディスクなどの記録媒体であり、図形処理装置の構成要素である視点受付部1、データ記憶部2、表面ポリゴン抽出部3、投影変換処理部4、輪郭形状抽出部5、遮蔽判定処理部6及びポリゴン形状出力部7の処理内容を記述しているプログラムであるアプリケーションを格納している。
システムメモリ12は演算プロセッサ13に実行される命令コードや、3次元形状のオブジェクトを構成している複数のポリゴンのデータなどを保持しているRAMやハードディスクなどの記録媒体である。
【0023】
演算プロセッサ13は例えばCPUなどから構成されており、システムメモリ12に保持されている命令コードを参照しながら、アプリケーションメモリ11に格納されているアプリケーションを実行する。
なお、演算プロセッサ13には、OSなどが実装されており、このOS上で、アプリケーションメモリ11に格納されているアプリケーションやタスクが動作することで、3次元形状オブジェクトの見える部分を構成しているポリゴンだけを正確に抽出する処理を実施する。
図3はこの発明の実施の形態1による図形処理装置の処理内容を示すフローチャートである。
【0024】
次に動作について説明する。
ここでは、説明の便宜上、複数のポリゴンで構成されている3次元形状のオブジェクトが、図4に示すように、頂点A,B,C,D,E,F,G,H,I,J,Kを有する物体Aであるものとする。
この3次元形状のオブジェクトは、XZ平面における断面が図4のような形状を有している。
この3次元形状のオブジェクトのY軸は図4の奥行き方向であり、図4の○印の位置が視点であるとすると、その視点から3次元形状のオブジェクトを見た場合、図4の太線で表されている面が見える面になり、細線で表されている面が見えない面になる。
【0025】
視点受付部1は、3次元形状のオブジェクトを見る視点の位置を受け付けて、その視点の位置を示す位置情報を表面ポリゴン抽出部3に出力する。
表面ポリゴン抽出部3は、視点受付部1から位置情報を受けると、データ記憶部2により記憶されている3次元形状のオブジェクトを構成している複数のポリゴンのデータを取得する。
表面ポリゴン抽出部3は、視点受付部1から出力された位置情報が示す視点の位置から、3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する(ステップST1)。
【0026】
表面を構成しているポリゴンの抽出方法としては、次のような方法を用いることができる。
ポリゴン面の法線が定義されている場合は(例えば、法線ベクトルが、X軸を起点にして、Z軸に平行な方向である場合)、他の面にぶつかることなく、法線ベクトルがあたる面は3次元形状のオブジェクトの表面であり、他の面にぶつかってから、法線ベクトルがあたる面は3次元形状のオブジェクトの裏面であると判断すれば、3次元形状のオブジェクトの表面を構成しているポリゴンを抽出することができる。
一方、ポリゴン面の法線が定義されていない場合は、3次元形状のオブジェクトの形成時に決められた頂点の並び順と表裏の関係を考慮して、3次元形状のオブジェクトの面が表面であるか否かを判定すれば、3次元形状のオブジェクトの表面を構成しているポリゴンを抽出することができる。
【0027】
図4の例では、頂点F−頂点G、頂点H−頂点I、頂点J−頂点K、頂点K−頂点Aの間のポリゴンの面が3次元形状のオブジェクトの裏面と判定されて削除され、他の頂点間のポリゴンの面が3次元形状のオブジェクトの表面として抽出される。
即ち、頂点A−頂点B−頂点C−頂点D−頂点E−頂点F、頂点G−頂点H、頂点I−頂点Jの間のポリゴンの面が3次元形状のオブジェクトの表面として抽出される。
【0028】
投影変換処理部4は、表面ポリゴン抽出部3が3次元形状のオブジェクトの表面を構成している1以上のポリゴンを抽出すると、それらのポリゴンを2次元平面上に投影変換する(ステップST2)。
ポリゴンを2次元平面上に投影変換する方法としては、一般的に、ポリゴンを平行投影変換する方法や、ポリゴンを透視投影変換する方法などが考えられる。
ポリゴンを平行投影変換する場合、ポリゴンデータの奥行き情報を切り捨てる作業を実施することになる。例えば、図4に示す視点からZ軸方向を見る場合において、Z軸と垂直な面への投影であれば、Z座標の情報を切り捨てることになる。
一方、ポリゴンを透視投影変換する場合、ポリゴンのX座標及びY座標をZ座標で割り算することで変換することができる。
【0029】
ここで、図5はポリゴンを平行投影変換することで、ポリゴンが2次元平面上に投影変換された例を示す説明図である。
ポリゴンが平行投影変換されている場合、ポリゴンデータの奥行き情報がなくなっているが、図5の例では、仮想的に奥行きの順番で並べられている。
【0030】
輪郭形状抽出部5は、投影変換処理部4が1以上のポリゴンを2次元平面上に投影変換すると、それらのポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する(ステップST3)。
例えば、投影変換処理部4により投影変換された1以上のポリゴンの面が、頂点A−頂点B−頂点C−頂点D−頂点E−頂点Fの間のポリゴンの面であれば、最初に、頂点A−頂点Bのポリゴンと、頂点Bの位置の辺を共有している隣接のポリゴンである頂点B−頂点Cのポリゴンを調べることで、頂点A−頂点B−頂点Cからなる面は、連続している表面であると認識する。
次に、頂点B−頂点Cのポリゴンと、頂点Cの位置の辺を共有している隣接のポリゴンである頂点C−頂点Dのポリゴンを調べることで、頂点A−頂点B−頂点C−頂点Dからなる面は、連続している表面であると認識する。
次に、頂点C−頂点Dのポリゴンと、頂点Dの位置の辺を共有している隣接のポリゴンである頂点D−頂点Eのポリゴンを調べることで、頂点A−頂点B−頂点C−頂点D−頂点Eからなる面は、連続している表面であると認識する。
最後に、頂点D−頂点Eのポリゴンと、頂点Eの位置の辺を共有している隣接のポリゴンである頂点E−頂点Fのポリゴンを調べることで、頂点A−頂点B−頂点C−頂点D−頂点E−頂点Fからなる面は、連続している表面であると認識する。
これにより、図5の例では、頂点A−頂点B−頂点C−頂点D−頂点E−頂点Fからなる面を輪郭形状(1)として抽出する。
【0031】
投影変換処理部4により投影変換されたポリゴンの面が、頂点G−頂点Hの間のポリゴンの面であれば、頂点G−頂点Hのポリゴンと、頂点Hの位置の辺を共有している3次元形状のオブジェクトの表面であるポリゴンがなく(頂点H−頂点Iのポリゴンは、頂点Hの位置の辺を共有しているが、3次元形状のオブジェクトの裏面であるため除外される)、また、頂点G−頂点Hのポリゴンと、頂点Gの位置の辺を共有している3次元形状のオブジェクトの表面であるポリゴンがないので(頂点F−頂点Gのポリゴンは、頂点Gの位置の辺を共有しているが、3次元形状のオブジェクトの裏面であるため除外される)、図5の例では、頂点G−頂点Hからなる面を輪郭形状(2)として抽出する。
【0032】
投影変換処理部4により投影変換されたポリゴンの面が、頂点I−頂点Jの間のポリゴンの面であれば、頂点I−頂点Jのポリゴンと、頂点Iの位置の辺を共有しているオブジェクトの表面であるポリゴンがなく(頂点H−頂点Iのポリゴンは、頂点Iの位置の辺を共有しているが、オブジェクトの裏面であるため除外される)、また、頂点I−頂点Jのポリゴンと、頂点Jの位置の辺を共有しているオブジェクトの表面であるポリゴンがないので(頂点K−頂点Jのポリゴンは、頂点Jの位置の辺を共有しているが、オブジェクトの裏面であるため除外される)、図5の例では、頂点I−頂点Jからなる面を輪郭形状(3)として抽出する。
【0033】
遮蔽判定処理部6は、輪郭形状抽出部5がオブジェクトの輪郭形状(1)(2)(3)を抽出すると、表面ポリゴン抽出部3により抽出されたポリゴン毎に、当該ポリゴンの面と輪郭形状抽出部5により抽出された輪郭形状(1)(2)(3)間の遮蔽関係を検証する(ステップST4)。
遮蔽判定処理部6は、当該ポリゴンの面と輪郭形状(1)(2)(3)間の遮蔽関係を検証することで、当該ポリゴンの面の一部が輪郭形状(1)(2)(3)に遮蔽されているか、当該ポリゴンの面が輪郭形状(1)(2)(3)に遮蔽されていないか(または、当該ポリゴンの面が輪郭形状(1)(2)(3)と同一面であるのか)、当該ポリゴンの面が輪郭形状(1)(2)(3)に完全に遮蔽されているかを判別する(ステップST5,ST6)。
【0034】
具体的には、以下の通りである
最初に、遮蔽判定処理部6は、オブジェクトの表面を構成しているポリゴンの中で、頂点A−頂点Bのポリゴンの面と、輪郭形状(1)の間の遮蔽関係を検証する(ステップST4)。
頂点A−頂点Bのポリゴンの面と輪郭形状(1)は同一面であるため、頂点A−頂点Bのポリゴンの面が輪郭形状(1)に遮蔽されていないと判別され(ステップST5,ST6)、遮蔽関係の検証対象が輪郭形状(2)に変更される(ステップST8,ST9)。
【0035】
これにより、遮蔽判定処理部6は、頂点A−頂点Bのポリゴンの面と、輪郭形状(2)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(2)は頂点A−頂点Bのポリゴンの面の奥側に存在しているため、頂点A−頂点Bのポリゴンの面は、輪郭形状(2)に遮蔽されていないと判別され(ステップST5,ST6)、遮蔽関係の検証対象が輪郭形状(3)に変更される(ステップST8,ST9)。
これにより、遮蔽判定処理部6は、頂点A−頂点Bのポリゴンの面と、輪郭形状(3)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(3)は頂点A−頂点Bのポリゴンの面の奥側に存在しているため、頂点A−頂点Bのポリゴンの面は、輪郭形状(3)に遮蔽されていないと判別される(ステップST5,ST6)。
【0036】
図5の例では、この段階で、全ての輪郭形状が遮蔽関係の検証対象にされているので(ステップST8,ST9)、頂点A−頂点Bのポリゴンの面に対する遮蔽関係の検証処理を終了する。
以上より、遮蔽判定処理部6によって、頂点A−頂点Bのポリゴンの面が、輪郭形状(1)(2)(3)に遮蔽されていないと判別されているので、ポリゴン形状出力部7が、頂点A−頂点Bのポリゴンの形状を出力する(ステップST10)。
【0037】
次に、遮蔽判定処理部6は、オブジェクトの表面を構成しているポリゴンの中で、頂点B−頂点Cのポリゴンの面を遮蔽関係の検証対象に選択し(ステップST11,ST12)、頂点B−頂点Cのポリゴンの面と、輪郭形状(1)の間の遮蔽関係を検証する(ステップST4)。
頂点B−頂点Cのポリゴンの面と輪郭形状(1)は同一面であるため、頂点B−頂点Cのポリゴンの面が輪郭形状(1)に遮蔽されていないと判別され(ステップST5,ST6)、遮蔽関係の検証対象が輪郭形状(2)に変更される(ステップST8,ST9)。
【0038】
これにより、遮蔽判定処理部6は、頂点B−頂点Cのポリゴンの面と、輪郭形状(2)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(2)は頂点B−頂点Cのポリゴンの面の奥側に存在しているため、頂点B−頂点Cのポリゴンの面は、輪郭形状(2)に遮蔽されていないと判別され(ステップST5,ST6)、遮蔽関係の検証対象が輪郭形状(3)に変更される(ステップST8,ST9)。
これにより、遮蔽判定処理部6は、頂点B−頂点Cのポリゴンの面と、輪郭形状(3)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(3)は頂点B−頂点Cのポリゴンの面の奥側に存在しているため、頂点B−頂点Cのポリゴンの面は、輪郭形状(3)に遮蔽されていないと判別される(ステップST5,ST6)。
【0039】
図5の例では、この段階で、全ての輪郭形状が遮蔽関係の検証対象にされているので(ステップST8,ST9)、頂点B−頂点Cのポリゴンの面に対する遮蔽関係の検証処理を終了する。
以上より、遮蔽判定処理部6によって、頂点B−頂点Cのポリゴンの面が、輪郭形状(1)(2)(3)に遮蔽されていないと判別されているので、ポリゴン形状出力部7が、頂点B−頂点Cのポリゴンの形状を出力する(ステップST10)。
【0040】
3次元形状オブジェクトの表面を構成しているポリゴンの中で、頂点C−頂点Dのポリゴンの面、頂点D−頂点Eのポリゴンの面、頂点E−頂点Fのポリゴンの面についても、頂点A−頂点Bのポリゴンの面や、頂点B−頂点Cのポリゴンの面と同様に検証される。
頂点C−頂点Dのポリゴンの面、頂点D−頂点Eのポリゴンの面、頂点E−頂点Fのポリゴンの面についても、輪郭形状(1)(2)(3)によって遮蔽されていないと判別されるので、ポリゴン形状出力部7が、頂点C−頂点Dのポリゴンの形状、頂点D−頂点Eのポリゴンの形状、頂点E−頂点Fのポリゴンの形状を出力する(ステップST10)。
【0041】
次に、遮蔽判定処理部6は、3次元形状オブジェクトの表面を構成しているポリゴンの中で、頂点G−頂点Hのポリゴンの面を遮蔽関係の検証対象に選択し(ステップST11,ST12)、頂点G−頂点Hのポリゴンの面と、輪郭形状(1)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(1)は頂点G−頂点Hのポリゴンの面の手前側に存在しており、頂点G−頂点Hのポリゴンの面の一部が輪郭形状(1)に遮蔽されていると判別される(ステップST5)。
【0042】
ポリゴン形状出力部7は、遮蔽判定処理部6により頂点G−頂点Hのポリゴンの面の一部が輪郭形状(1)に遮蔽されていると判別されると、頂点G−頂点Hのポリゴンの面と輪郭形状(1)の間で図形ブーリアン演算を実施することで、その輪郭形状(1)に遮蔽されている面が除かれているポリゴンを生成する(ステップST7)。
即ち、ポリゴン形状出力部7は、図形ブーリアン演算として、頂点G−頂点Hのポリゴンの面と輪郭形状(1)の間の差分演算を実施することで、図6に示すように、新たな頂点GHを算出して、頂点GH−頂点Hのポリゴンを生成する。
図形ブーリアン演算の演算方法としては、既存のブーリアン演算方法を適用することができる。例えば、「General Polygon Clipper(GPC)」と呼ばれるライブラリなどを使用することができる。
【0043】
ポリゴン形状出力部7は、頂点GH−頂点Hのポリゴンを生成すると、そのポリゴンの形状を出力する(ステップST10)。
ただし、最終的には、頂点GH−頂点Hのポリゴンから3次元形状のオブジェクトを生成するため、新たに算出した頂点GHの奥行き情報を計算する必要がある。
新たに算出した頂点GHは、頂点G−頂点Hのポリゴンの上に存在しているため、ポリゴン形状出力部7は、頂点G−頂点Hのポリゴンの3次元空間の平面方程式を用いて、頂点GHにおける3次元空間内の奥行き情報を計算し、3次元空間のデータに復元する。
【0044】
なお、遮蔽判定処理部6は、上記のようにして、頂点G−頂点Hのポリゴンの面と輪郭形状(1)の間で遮蔽関係を検証すると、遮蔽関係の検証対象を輪郭形状(2)に変更して(ステップST8,ST9)、頂点G−頂点Hのポリゴンの面と輪郭形状(2)の間で遮蔽関係を検証する。
このとき、輪郭形状(2)は、頂点G−頂点Hのポリゴンの面の一部を遮蔽しているが、頂点GH−頂点Hのポリゴンの面は、輪郭形状(2)に遮蔽されていないので、ポリゴン形状出力部7による図形ブーリアン演算は行われない。
【0045】
また、遮蔽判定処理部6は、遮蔽関係の検証対象を輪郭形状(3)に変更して(ステップST8,ST9)、頂点G−頂点Hのポリゴンの面と輪郭形状(3)の間で遮蔽関係を検証する。
このとき、輪郭形状(3)は、頂点G−頂点Hのポリゴンの面と同一面であるため、ポリゴン形状出力部7による図形ブーリアン演算は行われない。
したがって、頂点G−頂点Hのポリゴンの面が遮蔽関係の検証対象である場合、ポリゴン形状出力部7から出力されるポリゴンの形状は、頂点GH−頂点Hのポリゴンの形状のみとなる。
【0046】
次に、遮蔽判定処理部6は、3次元形状オブジェクトの表面を構成しているポリゴンの中で、頂点I−頂点Jのポリゴンの面を遮蔽関係の検証対象に選択し(ステップST11,ST12)、頂点I−頂点Jのポリゴンの面と、輪郭形状(1)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(1)は頂点I−頂点Jのポリゴンの面の手前側に存在しており、頂点I−頂点Jのポリゴンの面の一部が輪郭形状(1)に遮蔽されていると判別される(ステップST5)。
【0047】
ポリゴン形状出力部7は、遮蔽判定処理部6により頂点I−頂点Jのポリゴンの面の一部が輪郭形状(1)に遮蔽されていると判別されると、頂点I−頂点Jのポリゴンの面と輪郭形状(1)の間で図形ブーリアン演算を実施することで、その輪郭形状(1)に遮蔽されている面が除かれているポリゴンを生成する(ステップST7)。
即ち、ポリゴン形状出力部7は、図形ブーリアン演算として、頂点I−頂点Jのポリゴンの面と輪郭形状(1)の間の差分演算を実施することで、図6に示すように、新たな頂点IJを算出して、頂点I−頂点IJのポリゴンを生成する。
【0048】
ポリゴン形状出力部7は、頂点I−頂点IJのポリゴンを生成すると、そのポリゴンの形状を出力する(ステップST10)。
ただし、最終的には、頂点I−頂点IJのポリゴンから3次元形状のオブジェクトを生成するため、新たに算出した頂点IJの奥行き情報を計算する必要がある。
新たに算出した頂点IJは、頂点I−頂点Jのポリゴンの上に存在しているため、ポリゴン形状出力部7は、頂点I−頂点Jのポリゴンの3次元空間の平面方程式を用いて、頂点IJにおける3次元空間内の奥行き情報を計算し、3次元空間のデータに復元する。
【0049】
なお、遮蔽判定処理部6は、上記のようにして、頂点I−頂点Jのポリゴンの面と輪郭形状(1)の間で遮蔽関係を検証すると、遮蔽関係の検証対象を輪郭形状(2)に変更して(ステップST8,ST9)、頂点I−頂点Jのポリゴンの面と輪郭形状(2)の間で遮蔽関係を検証する。
このとき、輪郭形状(2)は、頂点I−頂点Jのポリゴンの面と同一面であるため、ポリゴン形状出力部7による図形ブーリアン演算は行われない。
【0050】
また、遮蔽判定処理部6は、遮蔽関係の検証対象を輪郭形状(3)に変更して(ステップST8,ST9)、頂点I−頂点Jのポリゴンの面と輪郭形状(3)の間で遮蔽関係を検証する。
このとき、輪郭形状(3)は、頂点I−頂点Jのポリゴンの面の奥側に存在しており、頂点I−頂点Jのポリゴンの面を遮蔽していないので、ポリゴン形状出力部7による図形ブーリアン演算は行われない。
したがって、頂点I−頂点Jのポリゴンの面が遮蔽関係の検証対象である場合、ポリゴン形状出力部7から出力されるポリゴンの形状は、頂点I−頂点IJのポリゴンの形状のみとなる。
【0051】
これにより、ポリゴン形状出力部7から出力されるポリゴンの形状は下記の通りとなり、一連の処理を終了する(ステップST12)。
頂点A−頂点Bのポリゴンの形状
↓
頂点B−頂点Cのポリゴンの形状
↓
頂点C−頂点Dのポリゴンの形状
↓
頂点D−頂点Eのポリゴンの形状
↓
頂点E−頂点Fのポリゴンの形状
↓
頂点GH−頂点Hのポリゴンの形状
↓
頂点I−頂点IJのポリゴンの形状
【0052】
以上で明らかなように、この実施の形態1によれば、3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出部3と、表面ポリゴン抽出部3により抽出された1以上のポリゴンを2次元平面上に投影変換する投影変換処理部4と、投影変換処理部4により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する輪郭形状抽出部5と、表面ポリゴン抽出部3により抽出されたポリゴン毎に、当該ポリゴンの面が輪郭形状抽出部5により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定処理部6とを設け、ポリゴン形状出力部7が、遮蔽判定処理部6によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定処理部6によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力するように構成したので、図形ブーリアン演算の演算誤差の発生を抑制して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができる効果を奏する。
【0053】
即ち、この実施の形態1によれば、遮蔽関係の検証対象が、ポリゴンの面×ポリゴンの面ではなく、ポリゴンの面×輪郭形状としているので、遮蔽判定処理部6によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、図形ブーリアン演算を実施する必要がない。このため、図形ブーリアン演算を実施する回数を大幅に削減することができるので、図形ブーリアン演算の演算誤差の発生を抑制して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができる。
【0054】
実施の形態2.
上記実施の形態1では、輪郭形状抽出部5が1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出するものについて示したが、輪郭形状抽出部5が投影変換処理部4により2次元平面上に投影変換された1以上のポリゴンの中で、他のポリゴンと辺を共有しているポリゴンが存在する場合、その辺を削除する処理を順次繰り返すことで、オブジェクトの輪郭形状を抽出するようにしてもよい。
具体的には、以下の通りである。
【0055】
図7はオブジェクトの輪郭形状の抽出例を示す説明図である。
輪郭形状抽出部5は、投影変換処理部4が1以上のポリゴンを2次元平面上に投影変換すると、2次元平面上に投影変換された1以上のポリゴンの中で、他のポリゴンと辺を共有しているポリゴンを検索し、2つのポリゴンが共有している辺を削除して、新たなポリゴンを生成する。
図7の例では、ポリゴン(1)とポリゴン(2)が1つの辺を共有しており、ポリゴン(1)とポリゴン(2)が共有している辺を削除して、新たなポリゴン(12)を生成している。
【0056】
輪郭形状抽出部5は、新たなポリゴンを生成すると、更に、他のポリゴンと辺を共有しているポリゴンを検索し、2つのポリゴンが共有している辺を削除して、新たなポリゴンを生成する。
新たなポリゴンを生成する処理は、2つのポリゴンが共有している辺がなくなるまで繰り返し実施する。
2つのポリゴンが共有している辺がなくなると、残っているポリゴンの輪郭形状が、オブジェクトの輪郭形状となる。
【0057】
実施の形態3.
図8はこの発明の実施の形態3による図形処理装置を示す構成図であり、図において、図1と同一符号は同一又は相当部分を示すので説明を省略する。
輪郭形状抽出部8は3次元形状のオブジェクトが閉ループで覆われている場合、そのオブジェクトの表面と裏面が共有している辺を検索し、表面と裏面が共有している辺の中で、頂点で結合されている辺を輪郭形状として抽出する処理を実施する。なお、輪郭形状抽出部8は輪郭形状抽出手段を構成している。
【0058】
図8の例では、図形処理装置の構成要素である視点受付部1、データ記憶部2、表面ポリゴン抽出部3、遮蔽判定処理部6、ポリゴン形状出力部7及び輪郭形状抽出部8のそれぞれが専用のハードウェア(例えば、CPUを実装している半導体集積回路、あるいは、ワンチップマイコンなど)で構成されているものを想定しているが、図形処理装置がコンピュータで構成される場合、視点受付部1、データ記憶部2、表面ポリゴン抽出部3、遮蔽判定処理部6、ポリゴン形状出力部7及び輪郭形状抽出部8の処理内容を記述しているプログラムをコンピュータのメモリに格納し、当該コンピュータのCPUが当該メモリに格納されているプログラムを実行するようにしてもよい。
【0059】
次に動作について説明する。
上記実施の形態1では、輪郭形状抽出部5が1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出するものについて示したが、3次元形状のオブジェクトが閉ループで覆われている場合、輪郭形状抽出部8が、3次元形状のオブジェクトの表面と裏面が共有している辺を検索し、表面と裏面が共有している辺の中で、頂点で結合されている辺を輪郭形状として抽出するようにしてもよい。
具体的には、以下の通りである。
【0060】
図9はオブジェクトの輪郭形状の抽出例を示す説明図である。
図9では、3次元形状のオブジェクトが閉ループで覆われている物体形状として、3次元形状のオブジェクトが立方体である例を示している。
3次元形状のオブジェクトが閉ループで覆われている物体形状である場合、3次元形状のオブジェクトの全ての面は結合されており、3次元形状のオブジェクトの輪郭形状は表面と裏面の境界部分になる。
【0061】
図9の例では、ポリゴン(1)、ポリゴン(2)及びポリゴン(3)は、3次元形状のオブジェクトの表面となる。
一方、ポリゴン(4)(ポリゴン(2)の反対側のポリゴン)、ポリゴン(5)(ポリゴン(3)の反対側のポリゴン)及びポリゴン(6)(ポリゴン(1)の反対側のポリゴン)は、3次元形状のオブジェクトの裏面となる。
【0062】
まず、輪郭形状抽出部8は、3次元形状のオブジェクトの裏面であるポリゴン(4)が、辺を共有しているポリゴン(1)、ポリゴン(3)、ポリゴン(5)及びポリゴン(6)を検索し、ポリゴン(1)、ポリゴン(3)、ポリゴン(5)及びポリゴン(6)の中で、3次元形状のオブジェクトの表面であるポリゴンを判別する。この場合、ポリゴン(1)とポリゴン(3)がオブジェクトの表面である。
輪郭形状抽出部8は、ポリゴン(1)とポリゴン(3)が3次元形状のオブジェクトの表面であると判別すると、ポリゴン(4)とポリゴン(1)が共有する辺(1)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
また、ポリゴン(4)とポリゴン(3)が共有する辺(2)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
【0063】
次に、輪郭形状抽出部8は、3次元形状のオブジェクトの裏面であるポリゴン(5)が、辺を共有しているポリゴン(1)、ポリゴン(2)、ポリゴン(4)及びポリゴン(6)を検索し、ポリゴン(1)、ポリゴン(2)、ポリゴン(4)及びポリゴン(6)の中で、3次元形状のオブジェクトの表面であるポリゴンを判別する。この場合、ポリゴン(1)とポリゴン(2)がオブジェクトの表面である。
輪郭形状抽出部8は、ポリゴン(1)とポリゴン(2)が3次元形状のオブジェクトの表面であると判別すると、ポリゴン(5)とポリゴン(1)が共有する辺(3)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
また、ポリゴン(5)とポリゴン(2)が共有する辺(4)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
【0064】
次に、輪郭形状抽出部8は、3次元形状のオブジェクトの裏面であるポリゴン(6)が、辺を共有しているポリゴン(2)、ポリゴン(3)、ポリゴン(4)及びポリゴン(5)を検索し、ポリゴン(2)、ポリゴン(3)、ポリゴン(4)及びポリゴン(5)の中で、3次元形状のオブジェクトの表面であるポリゴンを判別する。この場合、ポリゴン(2)とポリゴン(3)がオブジェクトの表面である。
輪郭形状抽出部8は、ポリゴン(2)とポリゴン(3)が3次元形状のオブジェクトの表面であると判別すると、ポリゴン(6)とポリゴン(2)が共有する辺(5)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
また、ポリゴン(6)とポリゴン(3)が共有する辺(6)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
以上より、輪郭形状抽出部8は、辺(1)、辺(2)、辺(3)、辺(4)、辺(5)、辺(6)を3次元形状オブジェクトの輪郭形状として抽出する。
【符号の説明】
【0065】
1 視点受付部、2 データ記憶部、3 表面ポリゴン抽出部(表面ポリゴン抽出手段)、4 投影変換処理部(投影変換手段)、5,8 輪郭形状抽出部(輪郭形状抽出手段)、6 遮蔽判定処理部(遮蔽判定手段)、7 ポリゴン形状出力部(ポリゴン形状出力手段)、11 アプリケーションメモリ、12 システムメモリ、13 演算プロセッサ。
【技術分野】
【0001】
この発明は、3次元空間内の視点から複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、そのオブジェクトの見える部分を構成しているポリゴンの形状を抽出する図形処理装置に関するものである。
【背景技術】
【0002】
複数のポリゴンで構成されている3次元形状のオブジェクトを描画する一般的な図形処理装置には、3次元空間内の視点(例えば、ユーザにより指定された位置)から3次元形状のオブジェクトを見たときに、そのオブジェクトの見える部分を構成しているポリゴンの形状を抽出する処理を実施する機能が備えられている。
このようなポリゴンの形状抽出処理では、3次元形状のオブジェクトを構成しているポリゴンが、例えば、ポリゴンAとポリゴンBである場合、ポリゴンAとポリゴンBの遮蔽関係を判定する必要がある。
【0003】
視点から3次元形状のオブジェクトを見たときに、ポリゴンAがポリゴンBに完全に遮蔽されている場合、そのオブジェクトの見える部分を構成しているポリゴンはポリゴンBだけであり、ポリゴンAは該当しない。
一方、ポリゴンBがポリゴンAに完全に遮蔽されている場合、そのオブジェクトの見える部分を構成しているポリゴンはポリゴンAだけであり、ポリゴンBは該当しない。
【0004】
視点から3次元形状のオブジェクトを見たときに、ポリゴンAの一部がポリゴンBに遮蔽されている場合、ポリゴンBに遮蔽されていない部分のポリゴンAの形状を算出する必要がある。
一方、ポリゴンBの一部がポリゴンAに遮蔽されている場合、ポリゴンAに遮蔽されていない部分のポリゴンBの形状を算出する必要がある。
例えば、ポリゴンBに遮蔽されていない部分のポリゴンAの形状の算出には、図形ブーリアン演算(ポリゴンA−ポリゴンB)などを利用することができる。
【0005】
ここでは、3次元形状のオブジェクトがポリゴンAとポリゴンBから構成されている場合について示したが、3次元形状のオブジェクトがN個のポリゴンから構成されている場合、ポリゴン間の遮蔽関係を判定する処理をN×(N−1)回実施して、一部遮蔽していることが判明すれば、図形ブーリアン演算を実施して、遮蔽されていない部分のポリゴンの形状を算出する必要がある。
以下、ポリゴンの一部が他のポリゴンに遮蔽されている場合に、他のポリゴンに遮蔽されていない部分のポリゴンの形状を算出する処理の具体例を説明する。
【0006】
図10はポリゴンC1,C2,C3,C4によって一部が遮蔽されているポリゴンAの抽出処理を示す説明図である。
この場合、ポリゴンAとポリゴンC1間で図形ブーリアン演算を実施し、その演算結果(ポリゴンC1に遮蔽されていない部分のポリゴンA)とポリゴンC2間で図形ブーリアン演算を実施する。
また、その演算結果(ポリゴンC1,C2に遮蔽されていない部分のポリゴンA)とポリゴンC3間で図形ブーリアン演算を実施し、その演算結果(ポリゴンC1,C2,C3に遮蔽されていない部分のポリゴンA)とポリゴンC4間で図形ブーリアン演算を実施する。
これにより、ポリゴンC1,C2,C3,C4に遮蔽されていない部分のポリゴンAが生成される。
このように、前の図形ブーリアン演算の演算結果が、次の図形ブーリアン演算に用いられる。
【0007】
この演算の過程で、ポリゴンとポリゴンの図形ブーリアン演算を実施した結果、非常に小さな形状や極端に細長い形状のポリゴン(他のポリゴンに遮蔽されていない部分のポリゴン)が生成される場合がある。
このとき、非常に小さな形状や極端に細長い形状のポリゴンと、他のポリゴンとの間で図形ブーリアン演算を実施する場合、演算誤差によって、正しい形状のポリゴンを生成することができない場合がある。
例えば、ポリゴンの頂点データは、浮動小数点で表現されることが多いが、微少ポリゴンや極端に細長いポリゴン(例えば、ポリゴンの頂点間が非常に小さい場合など)が図形ブーリアン演算の対象になると、情報落ちなどの誤差が発生して、幾何学的な状態が崩れる場合がある。
【0008】
具体的には、例えば、図11に示すように、非常に細長い三角形Bが三角形Aにより遮蔽されている場合、点線の丸で囲まれている2つの部分が図形ブーリアン演算(三角形B−三角形A)により求まる。
しかし、頂点1,頂点2,頂点3で構成される三角形Cにおいて、頂点1と頂点2の位置が非常に接近している場合、頂点1及び頂点2を算出する過程の計算で、浮動小数点演算の誤差が発生する。例えば、Ax+Byにおいて、A,Bの値が大きく、x,yが非常に小さい値の場合に誤差が発生する。
【0009】
この演算誤差によって、三角形Cの頂点1と頂点2の位置が逆転するような演算結果になると、三角形Cの形状が崩壊する。
この場合、本来、頂点1,頂点2,頂点3が反時計回りになる形状が、演算誤差によって、時計回りの形状になる。
このような現象によって、ポリゴンの表裏の関係や、ポリゴンの内部・外部の判定を間違うことになる。
【0010】
なお、以下の特許文献1には、複数のポリゴン間で共有する辺を削除することで、3次元形状オブジェクトの輪郭形状を抽出する技術が開示されているが、浮動小数点演算の誤差の発生を抑制する技術については開示されていない。
【先行技術文献】
【特許文献】
【0011】
【特許文献1】特開平6−266819号公報(段落番号[0006]から[0011]、図1)
【発明の概要】
【発明が解決しようとする課題】
【0012】
従来の図形処理装置は以上のように構成されているので、3次元形状のオブジェクトを構成しているポリゴン単位で、図形ブーリアン演算を繰り返し実施する場合、その図形ブーリアン演算の途中で、微少ポリゴンや極端に細長いポリゴンが生成されて、そのポリゴンが次の図形ブーリアン演算の対象になると、演算誤差が発生して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができなくなる課題があった。
【0013】
この発明は上記のような課題を解決するためになされたもので、図形ブーリアン演算の演算誤差の発生を抑制して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができる図形処理装置を得ることを目的とする。
【課題を解決するための手段】
【0014】
この発明に係る図形処理装置は、3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出手段と、表面ポリゴン抽出手段により抽出された1以上のポリゴンを2次元平面上に投影変換する投影変換手段と、投影変換手段により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する輪郭形状抽出手段と、表面ポリゴン抽出手段により抽出されたポリゴン毎に、当該ポリゴンの面が輪郭形状抽出手段により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定手段とを設け、ポリゴン形状出力手段が、遮蔽判定手段によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定手段によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力するようにしたものである。
【発明の効果】
【0015】
この発明によれば、3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出手段と、表面ポリゴン抽出手段により抽出された1以上のポリゴンを2次元平面上に投影変換する投影変換手段と、投影変換手段により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する輪郭形状抽出手段と、表面ポリゴン抽出手段により抽出されたポリゴン毎に、当該ポリゴンの面が輪郭形状抽出手段により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定手段とを設け、ポリゴン形状出力手段が、遮蔽判定手段によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定手段によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力するように構成したので、図形ブーリアン演算の演算誤差の発生を抑制して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができる効果がある。
【図面の簡単な説明】
【0016】
【図1】この発明の実施の形態1による図形処理装置を示す構成図である。
【図2】この発明の実施の形態1による図形処理装置を構成しているコンピュータを示す構成図である。
【図3】この発明の実施の形態1による図形処理装置の処理内容を示すフローチャートである。
【図4】複数のポリゴンで構成されている3次元形状のオブジェクトの一例を示す説明図である。
【図5】ポリゴンを平行投影変換することで、ポリゴンが2次元平面上に投影変換された例を示す説明図である。
【図6】ポリゴン形状出力部7から出力されるポリゴンの形状を示す説明図である。
【図7】オブジェクトの輪郭形状の抽出例を示す説明図である。
【図8】この発明の実施の形態3による図形処理装置を示す構成図である。
【図9】オブジェクトの輪郭形状の抽出例を示す説明図である。
【図10】ポリゴンC1,C2,C3,C4によって一部が遮蔽されているポリゴンAの抽出処理を示す説明図である。
【図11】図形ブーリアン演算により求まる三角形の一例を示す説明図である。
【発明を実施するための形態】
【0017】
実施の形態1.
図1はこの発明の実施の形態1による図形処理装置を示す構成図である。
図1において、視点受付部1は例えばキーボードやマウスなどのマンマシンインタフェース等から構成されており、複数のポリゴンで構成されている3次元形状のオブジェクトを見る3次元空間内の視点の位置を受け付ける処理を実施する。
データ記憶部2は3次元形状のオブジェクトを構成している複数のポリゴンのデータを記憶しているメモリである。
【0018】
表面ポリゴン抽出部3は視点受付部1により位置が受け付けられた3次元空間内の視点から、3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する処理を実施する。なお、表面ポリゴン抽出部3は表面ポリゴン抽出手段を構成している。
投影変換処理部4は表面ポリゴン抽出部3により抽出された1以上のポリゴンを2次元平面上に投影変換する処理を実施する。なお、投影変換処理部4は投影変換手段を構成している。
【0019】
輪郭形状抽出部5は投影変換処理部4により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する処理を実施する。なお、輪郭形状抽出部5は輪郭形状抽出手段を構成している。
遮蔽判定処理部6は表面ポリゴン抽出部3により抽出されたポリゴン毎に、当該ポリゴンの面が輪郭形状抽出部5により抽出された輪郭形状に遮蔽されているか否かを判定する処理を実施する。なお、遮蔽判定処理部6は遮蔽判定手段を構成している。
【0020】
ポリゴン形状出力部7は遮蔽判定処理部6によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定処理部6によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力する処理を実施する。なお、ポリゴン形状出力部7はポリゴン形状出力手段を構成している。
【0021】
図1の例では、図形処理装置の構成要素である視点受付部1、データ記憶部2、表面ポリゴン抽出部3、投影変換処理部4、輪郭形状抽出部5、遮蔽判定処理部6及びポリゴン形状出力部7のそれぞれが専用のハードウェア(例えば、CPUを実装している半導体集積回路、あるいは、ワンチップマイコンなど)で構成されているものを想定しているが、図形処理装置がコンピュータで構成される場合、視点受付部1、データ記憶部2、表面ポリゴン抽出部3、投影変換処理部4、輪郭形状抽出部5、遮蔽判定処理部6及びポリゴン形状出力部7の処理内容を記述しているプログラムをコンピュータのメモリに格納し、当該コンピュータのCPUが当該メモリに格納されているプログラムを実行するようにしてもよい。
【0022】
図2はこの発明の実施の形態1による図形処理装置を構成しているコンピュータを示す構成図である。
図2において、アプリケーションメモリ11はコンピュータに内蔵されているRAMやハードディスクなどの記録媒体であり、図形処理装置の構成要素である視点受付部1、データ記憶部2、表面ポリゴン抽出部3、投影変換処理部4、輪郭形状抽出部5、遮蔽判定処理部6及びポリゴン形状出力部7の処理内容を記述しているプログラムであるアプリケーションを格納している。
システムメモリ12は演算プロセッサ13に実行される命令コードや、3次元形状のオブジェクトを構成している複数のポリゴンのデータなどを保持しているRAMやハードディスクなどの記録媒体である。
【0023】
演算プロセッサ13は例えばCPUなどから構成されており、システムメモリ12に保持されている命令コードを参照しながら、アプリケーションメモリ11に格納されているアプリケーションを実行する。
なお、演算プロセッサ13には、OSなどが実装されており、このOS上で、アプリケーションメモリ11に格納されているアプリケーションやタスクが動作することで、3次元形状オブジェクトの見える部分を構成しているポリゴンだけを正確に抽出する処理を実施する。
図3はこの発明の実施の形態1による図形処理装置の処理内容を示すフローチャートである。
【0024】
次に動作について説明する。
ここでは、説明の便宜上、複数のポリゴンで構成されている3次元形状のオブジェクトが、図4に示すように、頂点A,B,C,D,E,F,G,H,I,J,Kを有する物体Aであるものとする。
この3次元形状のオブジェクトは、XZ平面における断面が図4のような形状を有している。
この3次元形状のオブジェクトのY軸は図4の奥行き方向であり、図4の○印の位置が視点であるとすると、その視点から3次元形状のオブジェクトを見た場合、図4の太線で表されている面が見える面になり、細線で表されている面が見えない面になる。
【0025】
視点受付部1は、3次元形状のオブジェクトを見る視点の位置を受け付けて、その視点の位置を示す位置情報を表面ポリゴン抽出部3に出力する。
表面ポリゴン抽出部3は、視点受付部1から位置情報を受けると、データ記憶部2により記憶されている3次元形状のオブジェクトを構成している複数のポリゴンのデータを取得する。
表面ポリゴン抽出部3は、視点受付部1から出力された位置情報が示す視点の位置から、3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する(ステップST1)。
【0026】
表面を構成しているポリゴンの抽出方法としては、次のような方法を用いることができる。
ポリゴン面の法線が定義されている場合は(例えば、法線ベクトルが、X軸を起点にして、Z軸に平行な方向である場合)、他の面にぶつかることなく、法線ベクトルがあたる面は3次元形状のオブジェクトの表面であり、他の面にぶつかってから、法線ベクトルがあたる面は3次元形状のオブジェクトの裏面であると判断すれば、3次元形状のオブジェクトの表面を構成しているポリゴンを抽出することができる。
一方、ポリゴン面の法線が定義されていない場合は、3次元形状のオブジェクトの形成時に決められた頂点の並び順と表裏の関係を考慮して、3次元形状のオブジェクトの面が表面であるか否かを判定すれば、3次元形状のオブジェクトの表面を構成しているポリゴンを抽出することができる。
【0027】
図4の例では、頂点F−頂点G、頂点H−頂点I、頂点J−頂点K、頂点K−頂点Aの間のポリゴンの面が3次元形状のオブジェクトの裏面と判定されて削除され、他の頂点間のポリゴンの面が3次元形状のオブジェクトの表面として抽出される。
即ち、頂点A−頂点B−頂点C−頂点D−頂点E−頂点F、頂点G−頂点H、頂点I−頂点Jの間のポリゴンの面が3次元形状のオブジェクトの表面として抽出される。
【0028】
投影変換処理部4は、表面ポリゴン抽出部3が3次元形状のオブジェクトの表面を構成している1以上のポリゴンを抽出すると、それらのポリゴンを2次元平面上に投影変換する(ステップST2)。
ポリゴンを2次元平面上に投影変換する方法としては、一般的に、ポリゴンを平行投影変換する方法や、ポリゴンを透視投影変換する方法などが考えられる。
ポリゴンを平行投影変換する場合、ポリゴンデータの奥行き情報を切り捨てる作業を実施することになる。例えば、図4に示す視点からZ軸方向を見る場合において、Z軸と垂直な面への投影であれば、Z座標の情報を切り捨てることになる。
一方、ポリゴンを透視投影変換する場合、ポリゴンのX座標及びY座標をZ座標で割り算することで変換することができる。
【0029】
ここで、図5はポリゴンを平行投影変換することで、ポリゴンが2次元平面上に投影変換された例を示す説明図である。
ポリゴンが平行投影変換されている場合、ポリゴンデータの奥行き情報がなくなっているが、図5の例では、仮想的に奥行きの順番で並べられている。
【0030】
輪郭形状抽出部5は、投影変換処理部4が1以上のポリゴンを2次元平面上に投影変換すると、それらのポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する(ステップST3)。
例えば、投影変換処理部4により投影変換された1以上のポリゴンの面が、頂点A−頂点B−頂点C−頂点D−頂点E−頂点Fの間のポリゴンの面であれば、最初に、頂点A−頂点Bのポリゴンと、頂点Bの位置の辺を共有している隣接のポリゴンである頂点B−頂点Cのポリゴンを調べることで、頂点A−頂点B−頂点Cからなる面は、連続している表面であると認識する。
次に、頂点B−頂点Cのポリゴンと、頂点Cの位置の辺を共有している隣接のポリゴンである頂点C−頂点Dのポリゴンを調べることで、頂点A−頂点B−頂点C−頂点Dからなる面は、連続している表面であると認識する。
次に、頂点C−頂点Dのポリゴンと、頂点Dの位置の辺を共有している隣接のポリゴンである頂点D−頂点Eのポリゴンを調べることで、頂点A−頂点B−頂点C−頂点D−頂点Eからなる面は、連続している表面であると認識する。
最後に、頂点D−頂点Eのポリゴンと、頂点Eの位置の辺を共有している隣接のポリゴンである頂点E−頂点Fのポリゴンを調べることで、頂点A−頂点B−頂点C−頂点D−頂点E−頂点Fからなる面は、連続している表面であると認識する。
これにより、図5の例では、頂点A−頂点B−頂点C−頂点D−頂点E−頂点Fからなる面を輪郭形状(1)として抽出する。
【0031】
投影変換処理部4により投影変換されたポリゴンの面が、頂点G−頂点Hの間のポリゴンの面であれば、頂点G−頂点Hのポリゴンと、頂点Hの位置の辺を共有している3次元形状のオブジェクトの表面であるポリゴンがなく(頂点H−頂点Iのポリゴンは、頂点Hの位置の辺を共有しているが、3次元形状のオブジェクトの裏面であるため除外される)、また、頂点G−頂点Hのポリゴンと、頂点Gの位置の辺を共有している3次元形状のオブジェクトの表面であるポリゴンがないので(頂点F−頂点Gのポリゴンは、頂点Gの位置の辺を共有しているが、3次元形状のオブジェクトの裏面であるため除外される)、図5の例では、頂点G−頂点Hからなる面を輪郭形状(2)として抽出する。
【0032】
投影変換処理部4により投影変換されたポリゴンの面が、頂点I−頂点Jの間のポリゴンの面であれば、頂点I−頂点Jのポリゴンと、頂点Iの位置の辺を共有しているオブジェクトの表面であるポリゴンがなく(頂点H−頂点Iのポリゴンは、頂点Iの位置の辺を共有しているが、オブジェクトの裏面であるため除外される)、また、頂点I−頂点Jのポリゴンと、頂点Jの位置の辺を共有しているオブジェクトの表面であるポリゴンがないので(頂点K−頂点Jのポリゴンは、頂点Jの位置の辺を共有しているが、オブジェクトの裏面であるため除外される)、図5の例では、頂点I−頂点Jからなる面を輪郭形状(3)として抽出する。
【0033】
遮蔽判定処理部6は、輪郭形状抽出部5がオブジェクトの輪郭形状(1)(2)(3)を抽出すると、表面ポリゴン抽出部3により抽出されたポリゴン毎に、当該ポリゴンの面と輪郭形状抽出部5により抽出された輪郭形状(1)(2)(3)間の遮蔽関係を検証する(ステップST4)。
遮蔽判定処理部6は、当該ポリゴンの面と輪郭形状(1)(2)(3)間の遮蔽関係を検証することで、当該ポリゴンの面の一部が輪郭形状(1)(2)(3)に遮蔽されているか、当該ポリゴンの面が輪郭形状(1)(2)(3)に遮蔽されていないか(または、当該ポリゴンの面が輪郭形状(1)(2)(3)と同一面であるのか)、当該ポリゴンの面が輪郭形状(1)(2)(3)に完全に遮蔽されているかを判別する(ステップST5,ST6)。
【0034】
具体的には、以下の通りである
最初に、遮蔽判定処理部6は、オブジェクトの表面を構成しているポリゴンの中で、頂点A−頂点Bのポリゴンの面と、輪郭形状(1)の間の遮蔽関係を検証する(ステップST4)。
頂点A−頂点Bのポリゴンの面と輪郭形状(1)は同一面であるため、頂点A−頂点Bのポリゴンの面が輪郭形状(1)に遮蔽されていないと判別され(ステップST5,ST6)、遮蔽関係の検証対象が輪郭形状(2)に変更される(ステップST8,ST9)。
【0035】
これにより、遮蔽判定処理部6は、頂点A−頂点Bのポリゴンの面と、輪郭形状(2)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(2)は頂点A−頂点Bのポリゴンの面の奥側に存在しているため、頂点A−頂点Bのポリゴンの面は、輪郭形状(2)に遮蔽されていないと判別され(ステップST5,ST6)、遮蔽関係の検証対象が輪郭形状(3)に変更される(ステップST8,ST9)。
これにより、遮蔽判定処理部6は、頂点A−頂点Bのポリゴンの面と、輪郭形状(3)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(3)は頂点A−頂点Bのポリゴンの面の奥側に存在しているため、頂点A−頂点Bのポリゴンの面は、輪郭形状(3)に遮蔽されていないと判別される(ステップST5,ST6)。
【0036】
図5の例では、この段階で、全ての輪郭形状が遮蔽関係の検証対象にされているので(ステップST8,ST9)、頂点A−頂点Bのポリゴンの面に対する遮蔽関係の検証処理を終了する。
以上より、遮蔽判定処理部6によって、頂点A−頂点Bのポリゴンの面が、輪郭形状(1)(2)(3)に遮蔽されていないと判別されているので、ポリゴン形状出力部7が、頂点A−頂点Bのポリゴンの形状を出力する(ステップST10)。
【0037】
次に、遮蔽判定処理部6は、オブジェクトの表面を構成しているポリゴンの中で、頂点B−頂点Cのポリゴンの面を遮蔽関係の検証対象に選択し(ステップST11,ST12)、頂点B−頂点Cのポリゴンの面と、輪郭形状(1)の間の遮蔽関係を検証する(ステップST4)。
頂点B−頂点Cのポリゴンの面と輪郭形状(1)は同一面であるため、頂点B−頂点Cのポリゴンの面が輪郭形状(1)に遮蔽されていないと判別され(ステップST5,ST6)、遮蔽関係の検証対象が輪郭形状(2)に変更される(ステップST8,ST9)。
【0038】
これにより、遮蔽判定処理部6は、頂点B−頂点Cのポリゴンの面と、輪郭形状(2)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(2)は頂点B−頂点Cのポリゴンの面の奥側に存在しているため、頂点B−頂点Cのポリゴンの面は、輪郭形状(2)に遮蔽されていないと判別され(ステップST5,ST6)、遮蔽関係の検証対象が輪郭形状(3)に変更される(ステップST8,ST9)。
これにより、遮蔽判定処理部6は、頂点B−頂点Cのポリゴンの面と、輪郭形状(3)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(3)は頂点B−頂点Cのポリゴンの面の奥側に存在しているため、頂点B−頂点Cのポリゴンの面は、輪郭形状(3)に遮蔽されていないと判別される(ステップST5,ST6)。
【0039】
図5の例では、この段階で、全ての輪郭形状が遮蔽関係の検証対象にされているので(ステップST8,ST9)、頂点B−頂点Cのポリゴンの面に対する遮蔽関係の検証処理を終了する。
以上より、遮蔽判定処理部6によって、頂点B−頂点Cのポリゴンの面が、輪郭形状(1)(2)(3)に遮蔽されていないと判別されているので、ポリゴン形状出力部7が、頂点B−頂点Cのポリゴンの形状を出力する(ステップST10)。
【0040】
3次元形状オブジェクトの表面を構成しているポリゴンの中で、頂点C−頂点Dのポリゴンの面、頂点D−頂点Eのポリゴンの面、頂点E−頂点Fのポリゴンの面についても、頂点A−頂点Bのポリゴンの面や、頂点B−頂点Cのポリゴンの面と同様に検証される。
頂点C−頂点Dのポリゴンの面、頂点D−頂点Eのポリゴンの面、頂点E−頂点Fのポリゴンの面についても、輪郭形状(1)(2)(3)によって遮蔽されていないと判別されるので、ポリゴン形状出力部7が、頂点C−頂点Dのポリゴンの形状、頂点D−頂点Eのポリゴンの形状、頂点E−頂点Fのポリゴンの形状を出力する(ステップST10)。
【0041】
次に、遮蔽判定処理部6は、3次元形状オブジェクトの表面を構成しているポリゴンの中で、頂点G−頂点Hのポリゴンの面を遮蔽関係の検証対象に選択し(ステップST11,ST12)、頂点G−頂点Hのポリゴンの面と、輪郭形状(1)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(1)は頂点G−頂点Hのポリゴンの面の手前側に存在しており、頂点G−頂点Hのポリゴンの面の一部が輪郭形状(1)に遮蔽されていると判別される(ステップST5)。
【0042】
ポリゴン形状出力部7は、遮蔽判定処理部6により頂点G−頂点Hのポリゴンの面の一部が輪郭形状(1)に遮蔽されていると判別されると、頂点G−頂点Hのポリゴンの面と輪郭形状(1)の間で図形ブーリアン演算を実施することで、その輪郭形状(1)に遮蔽されている面が除かれているポリゴンを生成する(ステップST7)。
即ち、ポリゴン形状出力部7は、図形ブーリアン演算として、頂点G−頂点Hのポリゴンの面と輪郭形状(1)の間の差分演算を実施することで、図6に示すように、新たな頂点GHを算出して、頂点GH−頂点Hのポリゴンを生成する。
図形ブーリアン演算の演算方法としては、既存のブーリアン演算方法を適用することができる。例えば、「General Polygon Clipper(GPC)」と呼ばれるライブラリなどを使用することができる。
【0043】
ポリゴン形状出力部7は、頂点GH−頂点Hのポリゴンを生成すると、そのポリゴンの形状を出力する(ステップST10)。
ただし、最終的には、頂点GH−頂点Hのポリゴンから3次元形状のオブジェクトを生成するため、新たに算出した頂点GHの奥行き情報を計算する必要がある。
新たに算出した頂点GHは、頂点G−頂点Hのポリゴンの上に存在しているため、ポリゴン形状出力部7は、頂点G−頂点Hのポリゴンの3次元空間の平面方程式を用いて、頂点GHにおける3次元空間内の奥行き情報を計算し、3次元空間のデータに復元する。
【0044】
なお、遮蔽判定処理部6は、上記のようにして、頂点G−頂点Hのポリゴンの面と輪郭形状(1)の間で遮蔽関係を検証すると、遮蔽関係の検証対象を輪郭形状(2)に変更して(ステップST8,ST9)、頂点G−頂点Hのポリゴンの面と輪郭形状(2)の間で遮蔽関係を検証する。
このとき、輪郭形状(2)は、頂点G−頂点Hのポリゴンの面の一部を遮蔽しているが、頂点GH−頂点Hのポリゴンの面は、輪郭形状(2)に遮蔽されていないので、ポリゴン形状出力部7による図形ブーリアン演算は行われない。
【0045】
また、遮蔽判定処理部6は、遮蔽関係の検証対象を輪郭形状(3)に変更して(ステップST8,ST9)、頂点G−頂点Hのポリゴンの面と輪郭形状(3)の間で遮蔽関係を検証する。
このとき、輪郭形状(3)は、頂点G−頂点Hのポリゴンの面と同一面であるため、ポリゴン形状出力部7による図形ブーリアン演算は行われない。
したがって、頂点G−頂点Hのポリゴンの面が遮蔽関係の検証対象である場合、ポリゴン形状出力部7から出力されるポリゴンの形状は、頂点GH−頂点Hのポリゴンの形状のみとなる。
【0046】
次に、遮蔽判定処理部6は、3次元形状オブジェクトの表面を構成しているポリゴンの中で、頂点I−頂点Jのポリゴンの面を遮蔽関係の検証対象に選択し(ステップST11,ST12)、頂点I−頂点Jのポリゴンの面と、輪郭形状(1)の間の遮蔽関係を検証する(ステップST4)。
輪郭形状(1)は頂点I−頂点Jのポリゴンの面の手前側に存在しており、頂点I−頂点Jのポリゴンの面の一部が輪郭形状(1)に遮蔽されていると判別される(ステップST5)。
【0047】
ポリゴン形状出力部7は、遮蔽判定処理部6により頂点I−頂点Jのポリゴンの面の一部が輪郭形状(1)に遮蔽されていると判別されると、頂点I−頂点Jのポリゴンの面と輪郭形状(1)の間で図形ブーリアン演算を実施することで、その輪郭形状(1)に遮蔽されている面が除かれているポリゴンを生成する(ステップST7)。
即ち、ポリゴン形状出力部7は、図形ブーリアン演算として、頂点I−頂点Jのポリゴンの面と輪郭形状(1)の間の差分演算を実施することで、図6に示すように、新たな頂点IJを算出して、頂点I−頂点IJのポリゴンを生成する。
【0048】
ポリゴン形状出力部7は、頂点I−頂点IJのポリゴンを生成すると、そのポリゴンの形状を出力する(ステップST10)。
ただし、最終的には、頂点I−頂点IJのポリゴンから3次元形状のオブジェクトを生成するため、新たに算出した頂点IJの奥行き情報を計算する必要がある。
新たに算出した頂点IJは、頂点I−頂点Jのポリゴンの上に存在しているため、ポリゴン形状出力部7は、頂点I−頂点Jのポリゴンの3次元空間の平面方程式を用いて、頂点IJにおける3次元空間内の奥行き情報を計算し、3次元空間のデータに復元する。
【0049】
なお、遮蔽判定処理部6は、上記のようにして、頂点I−頂点Jのポリゴンの面と輪郭形状(1)の間で遮蔽関係を検証すると、遮蔽関係の検証対象を輪郭形状(2)に変更して(ステップST8,ST9)、頂点I−頂点Jのポリゴンの面と輪郭形状(2)の間で遮蔽関係を検証する。
このとき、輪郭形状(2)は、頂点I−頂点Jのポリゴンの面と同一面であるため、ポリゴン形状出力部7による図形ブーリアン演算は行われない。
【0050】
また、遮蔽判定処理部6は、遮蔽関係の検証対象を輪郭形状(3)に変更して(ステップST8,ST9)、頂点I−頂点Jのポリゴンの面と輪郭形状(3)の間で遮蔽関係を検証する。
このとき、輪郭形状(3)は、頂点I−頂点Jのポリゴンの面の奥側に存在しており、頂点I−頂点Jのポリゴンの面を遮蔽していないので、ポリゴン形状出力部7による図形ブーリアン演算は行われない。
したがって、頂点I−頂点Jのポリゴンの面が遮蔽関係の検証対象である場合、ポリゴン形状出力部7から出力されるポリゴンの形状は、頂点I−頂点IJのポリゴンの形状のみとなる。
【0051】
これにより、ポリゴン形状出力部7から出力されるポリゴンの形状は下記の通りとなり、一連の処理を終了する(ステップST12)。
頂点A−頂点Bのポリゴンの形状
↓
頂点B−頂点Cのポリゴンの形状
↓
頂点C−頂点Dのポリゴンの形状
↓
頂点D−頂点Eのポリゴンの形状
↓
頂点E−頂点Fのポリゴンの形状
↓
頂点GH−頂点Hのポリゴンの形状
↓
頂点I−頂点IJのポリゴンの形状
【0052】
以上で明らかなように、この実施の形態1によれば、3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、そのオブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出部3と、表面ポリゴン抽出部3により抽出された1以上のポリゴンを2次元平面上に投影変換する投影変換処理部4と、投影変換処理部4により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出する輪郭形状抽出部5と、表面ポリゴン抽出部3により抽出されたポリゴン毎に、当該ポリゴンの面が輪郭形状抽出部5により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定処理部6とを設け、ポリゴン形状出力部7が、遮蔽判定処理部6によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、そのポリゴンの形状を出力し、遮蔽判定処理部6によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、そのポリゴンの面と輪郭形状間で図形ブーリアン演算を実施することで、その輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、そのポリゴンの形状を出力するように構成したので、図形ブーリアン演算の演算誤差の発生を抑制して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができる効果を奏する。
【0053】
即ち、この実施の形態1によれば、遮蔽関係の検証対象が、ポリゴンの面×ポリゴンの面ではなく、ポリゴンの面×輪郭形状としているので、遮蔽判定処理部6によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、図形ブーリアン演算を実施する必要がない。このため、図形ブーリアン演算を実施する回数を大幅に削減することができるので、図形ブーリアン演算の演算誤差の発生を抑制して、3次元形状のオブジェクトの見える部分を構成しているポリゴンの形状を正確に抽出することができる。
【0054】
実施の形態2.
上記実施の形態1では、輪郭形状抽出部5が1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出するものについて示したが、輪郭形状抽出部5が投影変換処理部4により2次元平面上に投影変換された1以上のポリゴンの中で、他のポリゴンと辺を共有しているポリゴンが存在する場合、その辺を削除する処理を順次繰り返すことで、オブジェクトの輪郭形状を抽出するようにしてもよい。
具体的には、以下の通りである。
【0055】
図7はオブジェクトの輪郭形状の抽出例を示す説明図である。
輪郭形状抽出部5は、投影変換処理部4が1以上のポリゴンを2次元平面上に投影変換すると、2次元平面上に投影変換された1以上のポリゴンの中で、他のポリゴンと辺を共有しているポリゴンを検索し、2つのポリゴンが共有している辺を削除して、新たなポリゴンを生成する。
図7の例では、ポリゴン(1)とポリゴン(2)が1つの辺を共有しており、ポリゴン(1)とポリゴン(2)が共有している辺を削除して、新たなポリゴン(12)を生成している。
【0056】
輪郭形状抽出部5は、新たなポリゴンを生成すると、更に、他のポリゴンと辺を共有しているポリゴンを検索し、2つのポリゴンが共有している辺を削除して、新たなポリゴンを生成する。
新たなポリゴンを生成する処理は、2つのポリゴンが共有している辺がなくなるまで繰り返し実施する。
2つのポリゴンが共有している辺がなくなると、残っているポリゴンの輪郭形状が、オブジェクトの輪郭形状となる。
【0057】
実施の形態3.
図8はこの発明の実施の形態3による図形処理装置を示す構成図であり、図において、図1と同一符号は同一又は相当部分を示すので説明を省略する。
輪郭形状抽出部8は3次元形状のオブジェクトが閉ループで覆われている場合、そのオブジェクトの表面と裏面が共有している辺を検索し、表面と裏面が共有している辺の中で、頂点で結合されている辺を輪郭形状として抽出する処理を実施する。なお、輪郭形状抽出部8は輪郭形状抽出手段を構成している。
【0058】
図8の例では、図形処理装置の構成要素である視点受付部1、データ記憶部2、表面ポリゴン抽出部3、遮蔽判定処理部6、ポリゴン形状出力部7及び輪郭形状抽出部8のそれぞれが専用のハードウェア(例えば、CPUを実装している半導体集積回路、あるいは、ワンチップマイコンなど)で構成されているものを想定しているが、図形処理装置がコンピュータで構成される場合、視点受付部1、データ記憶部2、表面ポリゴン抽出部3、遮蔽判定処理部6、ポリゴン形状出力部7及び輪郭形状抽出部8の処理内容を記述しているプログラムをコンピュータのメモリに格納し、当該コンピュータのCPUが当該メモリに格納されているプログラムを実行するようにしてもよい。
【0059】
次に動作について説明する。
上記実施の形態1では、輪郭形状抽出部5が1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面をオブジェクトの輪郭形状として抽出するものについて示したが、3次元形状のオブジェクトが閉ループで覆われている場合、輪郭形状抽出部8が、3次元形状のオブジェクトの表面と裏面が共有している辺を検索し、表面と裏面が共有している辺の中で、頂点で結合されている辺を輪郭形状として抽出するようにしてもよい。
具体的には、以下の通りである。
【0060】
図9はオブジェクトの輪郭形状の抽出例を示す説明図である。
図9では、3次元形状のオブジェクトが閉ループで覆われている物体形状として、3次元形状のオブジェクトが立方体である例を示している。
3次元形状のオブジェクトが閉ループで覆われている物体形状である場合、3次元形状のオブジェクトの全ての面は結合されており、3次元形状のオブジェクトの輪郭形状は表面と裏面の境界部分になる。
【0061】
図9の例では、ポリゴン(1)、ポリゴン(2)及びポリゴン(3)は、3次元形状のオブジェクトの表面となる。
一方、ポリゴン(4)(ポリゴン(2)の反対側のポリゴン)、ポリゴン(5)(ポリゴン(3)の反対側のポリゴン)及びポリゴン(6)(ポリゴン(1)の反対側のポリゴン)は、3次元形状のオブジェクトの裏面となる。
【0062】
まず、輪郭形状抽出部8は、3次元形状のオブジェクトの裏面であるポリゴン(4)が、辺を共有しているポリゴン(1)、ポリゴン(3)、ポリゴン(5)及びポリゴン(6)を検索し、ポリゴン(1)、ポリゴン(3)、ポリゴン(5)及びポリゴン(6)の中で、3次元形状のオブジェクトの表面であるポリゴンを判別する。この場合、ポリゴン(1)とポリゴン(3)がオブジェクトの表面である。
輪郭形状抽出部8は、ポリゴン(1)とポリゴン(3)が3次元形状のオブジェクトの表面であると判別すると、ポリゴン(4)とポリゴン(1)が共有する辺(1)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
また、ポリゴン(4)とポリゴン(3)が共有する辺(2)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
【0063】
次に、輪郭形状抽出部8は、3次元形状のオブジェクトの裏面であるポリゴン(5)が、辺を共有しているポリゴン(1)、ポリゴン(2)、ポリゴン(4)及びポリゴン(6)を検索し、ポリゴン(1)、ポリゴン(2)、ポリゴン(4)及びポリゴン(6)の中で、3次元形状のオブジェクトの表面であるポリゴンを判別する。この場合、ポリゴン(1)とポリゴン(2)がオブジェクトの表面である。
輪郭形状抽出部8は、ポリゴン(1)とポリゴン(2)が3次元形状のオブジェクトの表面であると判別すると、ポリゴン(5)とポリゴン(1)が共有する辺(3)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
また、ポリゴン(5)とポリゴン(2)が共有する辺(4)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
【0064】
次に、輪郭形状抽出部8は、3次元形状のオブジェクトの裏面であるポリゴン(6)が、辺を共有しているポリゴン(2)、ポリゴン(3)、ポリゴン(4)及びポリゴン(5)を検索し、ポリゴン(2)、ポリゴン(3)、ポリゴン(4)及びポリゴン(5)の中で、3次元形状のオブジェクトの表面であるポリゴンを判別する。この場合、ポリゴン(2)とポリゴン(3)がオブジェクトの表面である。
輪郭形状抽出部8は、ポリゴン(2)とポリゴン(3)が3次元形状のオブジェクトの表面であると判別すると、ポリゴン(6)とポリゴン(2)が共有する辺(5)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
また、ポリゴン(6)とポリゴン(3)が共有する辺(6)が、3次元形状のオブジェクトの輪郭形状を形成している辺であると認識する。
以上より、輪郭形状抽出部8は、辺(1)、辺(2)、辺(3)、辺(4)、辺(5)、辺(6)を3次元形状オブジェクトの輪郭形状として抽出する。
【符号の説明】
【0065】
1 視点受付部、2 データ記憶部、3 表面ポリゴン抽出部(表面ポリゴン抽出手段)、4 投影変換処理部(投影変換手段)、5,8 輪郭形状抽出部(輪郭形状抽出手段)、6 遮蔽判定処理部(遮蔽判定手段)、7 ポリゴン形状出力部(ポリゴン形状出力手段)、11 アプリケーションメモリ、12 システムメモリ、13 演算プロセッサ。
【特許請求の範囲】
【請求項1】
3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、上記オブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出手段と、上記表面ポリゴン抽出手段により抽出された1以上のポリゴンを2次元平面上に投影変換する投影変換手段と、上記投影変換手段により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面を上記オブジェクトの輪郭形状として抽出する輪郭形状抽出手段と、上記表面ポリゴン抽出手段により抽出されたポリゴン毎に、当該ポリゴンの面が上記輪郭形状抽出手段により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定手段と、上記遮蔽判定手段によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、上記ポリゴンの形状を出力し、上記遮蔽判定手段によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、上記ポリゴンの面と上記輪郭形状間で図形ブーリアン演算を実施することで、上記輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、上記ポリゴンの形状を出力するポリゴン形状出力手段とを備えた図形処理装置。
【請求項2】
輪郭形状抽出手段は、投影変換手段により2次元平面上に投影変換された1以上のポリゴンの中で、他のポリゴンと辺を共有しているポリゴンが存在する場合、上記辺を削除する処理を順次繰り返すことで、オブジェクトの輪郭形状を抽出することを特徴とする請求項1記載の図形処理装置。
【請求項3】
3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、上記オブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出手段と、上記オブジェクトが閉ループで覆われている場合、上記オブジェクトの表面と裏面が共有している辺を検索し、表面と裏面が共有している辺の中で、頂点で結合されている辺を輪郭形状として抽出する輪郭形状抽出手段と、上記表面ポリゴン抽出手段により抽出されたポリゴン毎に、当該ポリゴンの面が上記輪郭形状抽出手段により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定手段と、上記遮蔽判定手段によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、上記ポリゴンの形状を出力し、上記遮蔽判定手段によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、上記ポリゴンの面と上記輪郭形状間で図形ブーリアン演算を実施することで、上記輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、上記ポリゴンの形状を出力するポリゴン形状出力手段とを備えた図形処理装置。
【請求項1】
3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、上記オブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出手段と、上記表面ポリゴン抽出手段により抽出された1以上のポリゴンを2次元平面上に投影変換する投影変換手段と、上記投影変換手段により2次元平面上に投影変換された1以上のポリゴンが構成しているオブジェクトの表面の中で、連続している表面を上記オブジェクトの輪郭形状として抽出する輪郭形状抽出手段と、上記表面ポリゴン抽出手段により抽出されたポリゴン毎に、当該ポリゴンの面が上記輪郭形状抽出手段により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定手段と、上記遮蔽判定手段によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、上記ポリゴンの形状を出力し、上記遮蔽判定手段によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、上記ポリゴンの面と上記輪郭形状間で図形ブーリアン演算を実施することで、上記輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、上記ポリゴンの形状を出力するポリゴン形状出力手段とを備えた図形処理装置。
【請求項2】
輪郭形状抽出手段は、投影変換手段により2次元平面上に投影変換された1以上のポリゴンの中で、他のポリゴンと辺を共有しているポリゴンが存在する場合、上記辺を削除する処理を順次繰り返すことで、オブジェクトの輪郭形状を抽出することを特徴とする請求項1記載の図形処理装置。
【請求項3】
3次元空間内の視点から、複数のポリゴンで構成されている3次元形状のオブジェクトを見たときに、上記オブジェクトの表面を構成している1以上のポリゴンを抽出する表面ポリゴン抽出手段と、上記オブジェクトが閉ループで覆われている場合、上記オブジェクトの表面と裏面が共有している辺を検索し、表面と裏面が共有している辺の中で、頂点で結合されている辺を輪郭形状として抽出する輪郭形状抽出手段と、上記表面ポリゴン抽出手段により抽出されたポリゴン毎に、当該ポリゴンの面が上記輪郭形状抽出手段により抽出された輪郭形状に遮蔽されているか否かを判定する遮蔽判定手段と、上記遮蔽判定手段によりポリゴンの面が輪郭形状により遮蔽されていないと判定された場合、上記ポリゴンの形状を出力し、上記遮蔽判定手段によりポリゴンの面の一部が輪郭形状により遮蔽されていると判定された場合、上記ポリゴンの面と上記輪郭形状間で図形ブーリアン演算を実施することで、上記輪郭形状に遮蔽されている面が除かれているポリゴンを生成して、上記ポリゴンの形状を出力するポリゴン形状出力手段とを備えた図形処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2011−232798(P2011−232798A)
【公開日】平成23年11月17日(2011.11.17)
【国際特許分類】
【出願番号】特願2010−99729(P2010−99729)
【出願日】平成22年4月23日(2010.4.23)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】
【公開日】平成23年11月17日(2011.11.17)
【国際特許分類】
【出願日】平成22年4月23日(2010.4.23)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】
[ Back to top ]