JP4437504B2 - 3次元表示プログラム、3次元表示装置、および3次元表示方法 - Google Patents

3次元表示プログラム、3次元表示装置、および3次元表示方法 Download PDF

Info

Publication number
JP4437504B2
JP4437504B2 JP2007296447A JP2007296447A JP4437504B2 JP 4437504 B2 JP4437504 B2 JP 4437504B2 JP 2007296447 A JP2007296447 A JP 2007296447A JP 2007296447 A JP2007296447 A JP 2007296447A JP 4437504 B2 JP4437504 B2 JP 4437504B2
Authority
JP
Japan
Prior art keywords
subdivision
pattern
division
display
divisions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2007296447A
Other languages
English (en)
Other versions
JP2008117406A (ja
Inventor
博己 森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Digital Process Ltd
Original Assignee
Digital Process Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Digital Process Ltd filed Critical Digital Process Ltd
Priority to JP2007296447A priority Critical patent/JP4437504B2/ja
Publication of JP2008117406A publication Critical patent/JP2008117406A/ja
Application granted granted Critical
Publication of JP4437504B2 publication Critical patent/JP4437504B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Processing Or Creating Images (AREA)
  • Controls And Circuits For Display Device (AREA)

Description

本発明は物の形状を立体的に表示するための3次元表示プログラム、3次元表示装置、および3次元表示方法に関し、特に圧縮されたデータに基づいて元の形状を再現するための3次元表示プログラム、3次元表示装置、および3次元表示方法に関する。
近年、各種部品を3次元CAD(Computer-Aided Design)で立体的に表現することが一般的となっている。たとえば、複雑な構造の装置を構成する各部品が3次元CADデータで表現される。これにより、個々の部品のCADデータ(ソリッドモデル)を集結し、アセンブリ検討、レイアウト検討、干渉検討などの作業を、コンピュータ上で容易に行うことができる。このような作業はデジタルモックアップと呼ばれ、自動車や航空機産業を中心に盛んに用いられている。
一般にソリッドCADデータには、高精度の幾何と位相で表したプリサイス表現(Precise Representation)が用いられる。ソリッドCADデータは、プリサイス表現を基に、パラメトリック変形の為の拘束条件や形状生成履歴を持つ。さらにソリッドCADデータは、表示を速くするための表示データも保持している。それ故にソリッドCADが扱う情報量は多く、部品を集結してデジタルモックアップを造るにはデータ量が膨大になる。ソリッドのCADのデータ量が膨大であると、データの編集は行わずに立体形状を表示させるだけの場合であっても、膨大な量のデータ処理が発生する。
その解決策として自動車や航空機産業では、CADデータを表示用ポリゴンデータ(たとえば、VRML(Virtual Reality Modeling Language)のデータ)に変換し、その表示用ポリゴンデータをデジタルモックアップ専用のビューア(Viewer)を用いて表示している。表示用ポリゴンデータを用いて画面表示させることで、形状の確認作業が容易となる。
ところが、最近のCADデータの詳細化(より細かい定義でデータ量が増加)は、ハードウェアやソフトウェアの進化を超え、専用ビューアでも製品全体を扱うことが困難になってきた。たとえば、自動車のエンジンの構成を表すCADデータを、0.1mmの誤差で表示用ポリゴンデータに変換した場合、0.5〜1Gbyteになる。エンジンだけでも0.5〜1Gbyteになるため、車両1台分の合計は10Gbyte以上になると推定される。そのため、ビューアを実行するコンピュータには、表示用ポリゴンデータを格納するための大容量のメモリやハードディスク装置が必要となる。
そこで、表示用の立体形状のデータを圧縮する技術が考えられている。立体形状の圧縮表現としてはB'ezierの三角パッチやGregoryパッチ(Lattice=XVL)などを用いる方法があり、ハードディスク装置に格納しておくデータ容量を減らすことができるが、データをメモリ読み込み時にポリゴンに展開するためにメモリの削減にはならない。一方、圧縮された立体形状をそのままメモリに保持し、表示倍率に応じてポリゴンを細分割する方法にSubdivision法がある。Subdivision法が適している理由は、画面の拡大時に多くの部品は視野(画面)外にある確率が高く、View Frustum Culling(視野外の物体を省く手法)を用いて省かれたCPU(Central Processing Unit)資源をポリゴンの細分割計算に割り当てることが出来るからである。
Subdivision法の一例として、特許文献1に記載された発明がある。この発明では、NURBS(Non-Uniform Rational B-Splines)曲線などのコントロールポイントを用いて表現している。そして、1つの形状の中間点からその形状の各辺に向けて引いた線によって、元の形状を分割している。
米国特許6,222,553号公報
しかし、従来のSubdivision法は、メモリやファイル容量を少なくすることはできるが、ポリゴンの細分割計算におけるコンピュータの処理負荷が大幅に増加してしまう。しかも、従来のSubdivision法におけるデータ圧縮効果は、Webなどを用い遠隔地から大規模データのコラボレーションを行うには不十分である。
たとえば、米国特許6,222,553号公報に記載された発明では、ある形状の中間点から各辺に向けて引いた線でその形状を分割するため、分割する必要のない辺(たとえば、直線の辺)が含まれていても全ての辺が分割されてしまう。従って、不必要な分割が発生し、処理負荷の増大を招いている。しかも、NURBS曲線などのコントロールポイントは、各辺毎に個別に設定する必要があり、データ量増大の原因となってしまう。
本発明はこのような点に鑑みてなされたものであり、圧縮されたデータに基づいて高速に立体形状を表示することができる3次元表示プログラム、3次元表示装置、および3次元表示方法を提供することを目的とする。
本発明によれば、上記課題を解決するために、コンピュータを、頂点の位置と当該頂点における法線ベクトルとが設定された面で物体形状を定義した物体形状データを記憶する記憶手段、面の各辺の分割数の決定処理、および細分割パターンの決定処理を行う分割パターン決定手段、前記記憶手段に記憶された前記物体形状データに予め設定された面の頂点の位置および当該頂点における法線ベクトルに基づいて面の曲線形状の決定処理を行う曲面形状決定手段、前記分割パターン決定手段で決定した細分割パターンに基づいて、面を、前記曲面形状決定手段によって得られる曲面形状に沿って細分割する細分割処理を行う細分割手段、前記細分割手段を用いて細分割された面から構成される物体形状を表示する物体表示手段、として機能させるための3次元表示プログラムにおいて、前記分割パターン決定手段による各辺の分割数の決定処理では、表示精度に関連する操作入力を基に表示精度を取得し、取得した表示精度に応じて、面を構成する各辺に対して2のべき乗数である分割数を求め、前記分割パターン決定手段による細分割パターンの決定処理では、面が3辺形の場合は3つの辺の分割数をi,j,k(i,j,kは2のべき乗であり、i≦j≦k)とし、i>1の場合は、各辺の細分割数を(i,i,i)とした複数の3辺形への第1の細分割パターンに決定し、i=1,j>1の場合は、各辺の細分割数を(1,j,j)とした複数の3辺形への第2の細分割パターンに決定し、i=j=1,k>1の場合は、各辺の細分割数を(1,1,k)とした複数の3辺形への第3の細分割パターンに決定し、細分割処理で細分割された面に対してさらに細分割することが可能である間は、細分割パターンの決定処理、曲面形状の決定処理および細分割処理を繰り返す、ことを特徴とする3次元表示プログラムが提供される。
このような3次元表示プログラムを実行するコンピュータによれば、表示精度に関連する操作入力を基に表示精度が取得され、取得した表示精度に応じて、面を構成する各辺に対して2のべき乗数である分割数が求められ、面が3辺形の場合は3つの辺の分割数をi,j,k(i,j,kは2のべき乗であり、i≦j≦k)とし、i>1の場合は、各辺の細分割数を(i,i,i)とした複数の3辺形への第1の細分割パターンに決定され、i=1,j>1の場合は、各辺の細分割数を(1,j,j)とした複数の3辺形への第2の細分割パターンに決定され、i=j=1,k>1の場合は、各辺の細分割数を(1,1,k)とした複数の3辺形への第3の細分割パターンに決定される。そして、細分割処理で細分割された面に対してさらに細分割することが可能である間は、細分割パターンの決定処理、曲面形状の決定処理および細分割処理が繰り返される。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
本発明では、少ないデータ量で高速に、必要とする精度の物体形状を動的に表示させることができる。
以下、本発明の実施の形態を図面を参照して説明する。
まず、本発明の実施の形態に適用される発明の概要について説明し、その後、本発明の実施の形態の具体的な内容を説明する。
図1は、本実施の形態に適用される発明の概念図である。本発明は、物の形状を立体的に表示させる処理をコンピュータに実行させる立体形状表示プログラムである。この立体形状表示プログラムに基づいて、コンピュータが図1に示すような処理を実行する。
コンピュータは、CADデータ1のデータ圧縮を行い、圧縮された立体形状データ2を生成する。立体形状データ2は、CADデータ1における形状を定義するデータを圧縮したものである。データ圧縮により、たとえば、複雑な曲面形状が、単純な形状の複数の面に置き換えられる。
その後、コンピュータは、立体形状データ2に基づいて、立体形状を構成する面の分割パターンを決定する(ステップS2)。たとえば、面を構成する辺の分割数を決定し、各辺の分割数に応じた面の分割パターンを決定する。
また、コンピュータは、立体形状データ2に予め定義された面の頂点の位置とその頂点における法線方向とに基づいて、面の曲面形状を決定する(ステップS3)。たとえば、法線方向に垂直な方向が曲面形状の接線となるように、曲面形状を決定する。なお、法線方向は、一般には、法線ベクトル(単位ベクトル)で定義される。
次に、コンピュータは、決定された曲面形状を、決定された分割パターンによって分割し、曲面形状に沿った複数の面を生成する(ステップS4)。そして、コンピュータは、生成された複数の面で構成される立体形状を表示する(ステップS5)。
このような立体形状表示プログラムを任意のコンピュータで実行させることで、立体形状データ2を構成する面に定義された法線方向などに応じた曲面形状が決定され、その曲面形状が複数の面に分割される。そして、分割された面で構成される立体形状が表示される。
これにより、元のCADデータ1で定義された立体形状を、少ないデータ量の立体形状データ2で記録することができる。そして、立体形状データ2に基づいて、CADデータ1で定義された形状を少ない誤差で再現することが可能となる。
しかも、立体形状データ2では、立体形状を構成する面の頂点座標と法線方向が設定されている。法線方向は、たとえば、法線ベクトルで定義される。この法線ベクトルは、リアルな画面表示を行うためのグーローシェーディングや光の反射などの計算に必要な情報である。本発明では、立体形状データ2の状態で法線方向が定義されているため、立体形状データ2自体を1つのポリゴンモデルとみなして、そのままリアルに(たとえば、グーローシェーディングを用いる)画面表示することができる。従って、状況に応じて、コンピュータが面の分割の要否を判断し、面の分割を行わない高速表示と、面を分割する高精度の表示とを適宜切り換えることが可能である。
なお、前述した米国特許6,222,553号公報記載の発明に代表されるように、従来のSubdivision法で圧縮された多くのデータは、法線方向の情報(法線ベクトル)を面の分割に利用していない。そのため、圧縮されたデータに法線ベクトルを含めれば、面の分割に不要なデータを余分にもつことになり、データ容量が増加してしまう。
また、法線方向によって曲面形状を決定することで、元の立体形状を再現するために必要なデータ量を少なく抑えることができる。すなわち、滑らかに接続される2つの面では、ほとんどの場合、その境界の辺の端点において、法線方向の定義情報(法線ベクトル)を共有することができる。したがって、立体形状データ2全体としてのデータ量が削減される。
さらに、本発明では、立体形状データ2で定義されている面毎に分割すればよいため、分割された面のポリゴンデータを逐次3次元表示回路に送ることで、面分割後の高精度の立体形状を表示させることができる。これにより、コンピュータのメインメモリ上に面分割後の立体形状を定義した全てのデータを保持せずにすみ、必要なメモリ容量が少なくてすむ。
さらに、分割パターンを決定する際に、辺の分割数を先に決定し、その辺の分割数に従って面を分割することで、面の無駄な分割を避けることができる。たとえば、直線の辺は分割せずに、曲線で定義された辺を複数に分けることで、面を分割できる。その結果、処理負荷を低減し、表示処理の高速化が可能となる。
以下、本発明の実施の形態について、具体的に説明する。なお、以下の実施の形態では、圧縮された立体形状データにおいて、3辺で構成される面(フェース)と4辺で構成される面とを混在させることができる。そこで、以下、本発明において定義した形式の構造に圧縮されたデータを、ハイブリッドメッシュデータ(混成のメッシュデータ)と呼ぶこととする。
また、立体形状を構成する面の頂点となる位置は、各面を構成する辺の端点でもある。そこで、以下の実施の形態では、面の頂点となる位置を端点と呼ぶこととする。
図2は、本発明の実施の形態のシステム構成図である。図2に示すように、ネットワーク10を介して複数のコンピュータ100,100a,100bが接続されている。ネットワーク10は、たとえば社内LAN(Local Area Network)やインターネットである。
各コンピュータ100,100a,100bには3次元CADプログラムが実装されており、コンピュータ100,100a,100bを用いて各種部品などのCADデータ(ソリッドモデル)を生成することができる。また、各コンピュータ100,100a,100bには、本発明に係る3次元CADデータのビューアが実装されている。コンピュータ100,100a,100bでビューアを実行することで、CADデータの高圧縮率での圧縮保存および圧縮されたデータに基づく3次元モデルの画面表示が行われる。また、ネットワーク10を介して、圧縮されたデータを各コンピュータ100,100a,100b間で受け渡すことで、CADを用いた共同設計作業(コラボレーション)を行うことができる。
以下、コンピュータ100によって本発明を実施する場合の形態について詳しく説明する。
図3は、本発明の実施の形態に用いるコンピュータのハードウェア構成例を示す図である。コンピュータ100は、CPU101によって装置全体が制御されている。CPU101には、バス107を介してRAM(Random Access Memory)102、ハードディスクドライブ(HDD:Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、および通信インタフェース106が接続されている。
RAM102には、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。HDD103には、OSやアプリケーションプログラムが格納される。
グラフィック処理装置104には、3次元表示回路を内蔵しており、モニタ11が接続されている。グラフィック処理装置104は、CPU101からの命令に従って、3次元の座標データ(ポリゴンデータなど)に基づく画像を生成し、その画像をモニタ11の画面に表示させる。入力インタフェース105には、キーボード12とマウス13とが接続されている。入力インタフェース105は、キーボード12やマウス13から送られてくる信号を、バス107を介してCPU101に送信する。
通信インタフェース106は、ネットワーク10に接続されている。通信インタフェース106は、ネットワーク10を介して、他のコンピュータとの間でデータの送受信を行う。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
図4は、本発明の実施の形態の機能を示す機能ブロック図である。コンピュータ100は、ビューア110、ビューアアプリケーション部130、3次元表示用API(Application Program Interface)140、OSAPI150を有している。
ビューア110は、立体形状を表すデータのデータ形式を変換し、データ容量を圧縮する。たとえば、VRMLデータ31やCADデータ32を、ハイブリッドメッシュデータに変換する。また、ビューア110は、ハイブリッドメッシュデータに基づいて、立体形状を所定の誤差で再現する。再現される立体形状は、複数のポリゴンで構成されるポリゴンモデルである。ビューア110内の構成の詳細は後述する。
ビューアアプリケーション部130は、ビューア110と連携してCADを用いた設計作業を支援するための付加機能を有している。図4の例では、ビューアアプリケーション部130は、付加機能として干渉検討部131、計測部132、分解図生成部133、イラスト生成部134などを有している。干渉検討部131は、ビューア110内から渡された立体形状のデータに基づいて、部品間の干渉の有無を判断する。計測部132は、ビューア110内から渡された立体形状のデータに基づいて、任意の2点間の距離を計算する。分解図生成部133は、ビューア110内から渡された立体形状のデータに基づいて、立体形状の分解図を生成する。イラスト生成部134は、ビューア110内から渡された立体形状のデータに基づいて、立体形状のイラスト画像を生成する。
3次元表示用API140は、ビューア110などの各種処理機能と3次元表示を行うためのグラフィック処理装置104との間のインタフェースである。具体的には、3次元表示用API140は、ビューア110から渡されたポリゴンなどの情報に基づいて、コンピュータ100における3次元表示処理要求を生成し、その3次元表示処理要求をコンピュータ100に実行させる。たとえば、3次元表示用API140は、ビューア110から渡されたポリゴンの端点座標や色などの情報を、表示命令と共に図3に示すグラフィック処理装置104に渡す。すると、グラフィック処理装置104が各ポリゴンの透視投影などを行い、複数のポリゴンで構成される立体形状を表す画像(フレーム画像)を生成する。そして、グラフィック処理装置104で生成された画像のデータが所定周期でモニタ11に送信され、立体形状を表す画像がモニタ11の画面に表示される。3次元表示用API140としては、たとえば、OpenGL(商標)を用いることができる。
OSAPI150は、OSと他の処理機能との間のインタフェースである。具体的には、OSAPI150は、ビューア110などから出力される処理要求に対応するOSの処理機能を起動し、コンピュータ100に処理を実行させる。
次に、ビューア110の内部構成について説明する。
ビューア110は、アプリケーションインタフェース111、ハイブリッドメッシュAPI112、VRMLデータ変換部113、CADデータ変換部114、ユーザインタフェース115、細分割部116、表示データ出力部117、および、立体構造データ記憶部120を有している。
アプリケーションインタフェース111は、ビューアアプリケーション部130との間のインタフェースである。具体的には、アプリケーションインタフェース111は、ハイブリッドメッシュAPI112を介して受け取った立体構造データ(モックアップデータ)を、ビューアアプリケーション部130内の干渉検討部131などに渡す。また、アプリケーションインタフェース111は、ビューアアプリケーション部130内の干渉検討部131などから受け取った立体構造データをハイブリッドメッシュAPI112に渡す。
ハイブリッドメッシュAPI112は、アプリケーションインタフェース111に対して立体構造データ記憶部120へのアクセス環境を提供するインタフェースである。具体的には、ハイブリッドメッシュAPI112は、アプリケーションインタフェース111を介した要求に応じて、立体構造データ記憶部120内のハイブリッドメッシュデータの一部(または全部)のデータをアプリケーションインタフェース111に渡す。また、ハイブリッドメッシュAPI112は、アプリケーションインタフェース111を介して受け取ったデータを、ハイブリッドメッシュデータの一部(または全部)として立体構造データ記憶部120に格納する。
VRMLデータ変換部113は、VRMLデータ31をハイブリッドメッシュデータに変換する。この変換により、立体形状を表すデータのデータ容量が小さくなる。そして、VRMLデータ変換部113は、変換後のハイブリッドメッシュデータを、立体構造データ記憶部120に格納する。
CADデータ変換部114は、CADデータ32をハイブリッドメッシュデータに変換する。この変換により、立体形状を表すデータのデータ容量が小さくなる。そして、CADデータ変換部114は、変換後のハイブリッドメッシュデータを、立体構造データ記憶部120に格納する。
ユーザインタフェース115は、OSAPI150と連携し、キーボード12やマウス13を用いた操作入力の情報を取得する。そして、ユーザインタフェース115は、操作入力に応答して、ビューア110内の各構成要素に対して、処理要求を出したり、データを渡したりする。たとえば、ユーザインタフェース115は、操作入力によって指定された表示倍率116aや許容誤差116bを細分割部116に渡す。また、ユーザインタフェース115は、表示対象のオブジェクトを投影するための視点と立体形状との相対的位置の移動指示が入力された場合(表示画面内で立体形状が動く場合)、移動中であることを細分割部116に通知する。
細分割部116は、ハイブリッドメッシュデータを細分割する。すなわち、細分割部116は、CADデータ32よりも粗い構造で表現されたハイブリッドメッシュデータを構成する面(フェース)を分割し、元のCADデータ32の形状に近づける。そして、細分割部116は、面を分割する毎に、分割後の面の情報を表示データ出力部117に渡す。
なお、細分割部116は、ハイブリッドメッシュデータの面の分割数を決定するためのパラメータとして、表示倍率116aと許容誤差116bとを保持している。表示倍率116aは、ハイブリッドメッシュデータで定義される立体形状の画面表示上での表示倍率である。許容誤差116bは、ハイブリッドメッシュデータに基づいて定義される立体形状(曲面で構成される形状)を平面のポリゴンで表した場合に発生する形状誤差の最大値である。細分割部116は、表示倍率116aが大きいほどポリゴンの分割数を多くし、表示倍率116aが小さいほどポリゴンの分割数を少なくする。また、細分割部116は、許容誤差116bが大きいほどポリゴンの分割数を少なくし、許容誤差116bが小さいほどポリゴンの分割数を多くする。
表示データ出力部117は、細分割部116で分割された後のポリゴンの情報を、3次元表示用API140に対して出力する。
立体構造データ記憶部120は、表示対象のモデル(たとえば、自動車)の立体構造(部品の立体形状の組み合わせ)のデータを記憶するためのRAM102内の記憶領域である。立体構造のデータは、主に、表示対象モデルの構成要素(たとえば、自動車の部品)毎の立体形状を示すハイブリッドメッシュデータで形成される。このハイブリッドメッシュデータは、VRMLデータ変換部113やCADデータ変換部114によって生成される。また、ハイブリッドメッシュデータは、HDD103内のハイブリッドメッシュファイル33から読み込まれる場合もある。
ハイブリッドメッシュデータには、立体形状を構成する面毎の形状情報が定義されており、面単位の情報をポリゴンとみなして、そのまま3次元表示用API140に渡して画面表示させることができる。また、ハイブリッドメッシュデータには、各面を分割するのに必要な情報(基底分割数など)が含まれる。
次に、立体構造データ記憶部120のデータ構造の詳細について説明する。
図5は、立体構造データ記憶部の内部構成を示す図である。立体構造データ記憶部120は、複数のハイブリッドメッシュデータ200,200a,200b,・・・とオブジェクト配置情報300とを有している。ハイブリッドメッシュデータ200,200a,200b,・・・は、表示対象物を構成する部品(オブジェクト)毎の形状を定義したデータである。ハイブリッドメッシュデータ200,200a,200b,・・・は、表示対象物を構成するユニット毎にグループ化されている場合もある。ここで、ユニットとは、1以上の部品で構成される物品である。表示対象物をアセンブリ(組み立て部品)とすれば、ユニットはサブアセンブリである。たとえば、表示対象物が自動車であれば、エンジンやサスペンションなどがユニットに相当する。なお、1つのユニットがさらに複数のユニット(各ユニットが1以上の部品を有する)で構成される場合もある。
ハイブリッドメッシュデータ200には、オブジェクト情報210、点座標データ群220、およびベクトルデータ群230が含まれている。オブジェクト情報210は、各部品の立体形状などを表すデータ(部品の色の情報も含む)である。オブジェクト情報210の詳細は後述する。
点座標データ群220は、立体形状を構成する面の各端点の端点座標データ221,222,・・・,22i,・・・,22m,22nの集合である。端点座標データ221,222,・・・,22i,・・・,22m,22nには、x軸−y軸−z軸で表される3次元空間(ローカル座標系)内での各軸方向の座標値が設定されている。
ベクトルデータ群230は、立体形状を構成する面の各端点に定義する法線ベクトルまたは接線ベクトルを表すベクトルデータ231,232,・・・,23i,・・・,23m,23nの集合である。ベクトルデータ231,232,・・・,23i,・・・,23m,23nは、3次元空間(ローカル座標系)内での方向と大きさを、x軸、y軸、z軸方向のベクトル成分で表している。
なお、本実施の形態において法線ベクトルとして指定されるベクトルは、全て長さが1の単位ベクトルである。接線ベクトルとして指定されるベクトルは、単位ベクトルとは限らない。
オブジェクト配置情報300は、立体形状をグローバル座標系(ワールド座標系)に配置する場合の配置位置および向きを定義した情報である。各立体形状に関する配置情報が定義されることで、表示対象物を構成する各部品をグローバル座標系内に配置し、複数の立体形状の組み合わせからなる表示対象物の形を生成することができる。
次に、オブジェクト情報の内容を詳細に説明する。
図6は、オブジェクト情報のデータ構造例を示す図である。なお、図6中のデータ名の前に示されている矢印(↑)は、そのデータが他のデータの格納位置を指すポインタであることを示している。
オブジェクト情報210は、オブジェクト識別情報(ObjectID)211、最大基底分割数(MaxDivide)212、および複数のフェース情報(Face1,...,Face i,...,Face n-1,Face n)410,420,430,440を有している。オブジェクト識別情報211は、表示対象物を構成する部品ごとに作成されたオブジェクト情報210を一意に識別するための識別情報である。最大基底分割数212は、オブジェクト情報210を構成する面の各辺に設定された基底分割数のうちの最大値である。フェース情報410,420,430,440は、部品を構成する面の情報である。
フェース情報420は、フェース識別情報(Face ID)421、フェース辺数(nP)422、フェース属性(Attr)423、複数の端点情報(Vertex 1,Vertex 2,...,Vertex i,...,Vertex nP-1,Vertex nP)424,425,426,427,428、および再帰ポインタ(↑ EOF)429を有している。フェース識別情報421は、オブジェクト情報210内でフェース情報を一意に識別するための識別情報である。フェース辺数422は、面を構成する辺(直線または曲線)の数である。フェース属性423は、面の色などの属性情報である。
端点情報424,425,426,427,428は、面の端点に関する情報である。再帰ポインタ429は、先頭の端点情報424の位置を指し示すポインタである。再帰ポインタ429により先頭の端点情報424が示されることで、端点情報424,425,426,427,428は、端点の列び順のループを構成する。連続した2つの端点情報によって、面を構成する辺が定義されている。なお、最後尾の端点情報428は、先頭の端点情報424と連続しているものとして扱われる。
端点情報426は、点座標ポインタ(↑ Point)426a、法線ベクトルポインタ(↑ Normal)426b、接線定義情報(Ratio or Tangent)426c、基底分割数(nDevide)426d、および隣接辺ポインタ(↑ MateEdge)426eを有している。
点座標ポインタ426aは、点座標データ群220内の点座標データ221,222,・・・,22i,・・・,22m,22nのうち、端点の3次元空間(ローカル座標系)内での位置を示す点座標データを指すポインタである。法線ベクトルポインタ426bは、ベクトルデータ群230内のベクトルデータ231,232,・・・,23i,・・・,23m,23nのうち、端点の法線ベクトルの値を示すベクトルデータを指すポインタである。
接線定義情報426cは、端点における接線ベクトルを定義するための情報である。接線定義情報426cには、端点における接線の長さ(Ratio)、または接線ベクトルを指すポインタ(Tangent)のいずれかが設定される。法線ベクトルと辺の両端の端点の位置とから接線ベクトルの方向が決定できる場合(辺が法線ベクトルの示す方向に湾曲する場合)には、接線定義情報426cとして接線の長さが設定される。法線ベクトルと辺の両端の端点の位置とから接線ベクトルの方向が決定できない場合(辺が法線ベクトルの示す方向と異なる方向に湾曲する場合)には、接線定義情報426cとして接線ベクトルへのポインタが設定される。
基底分割数426dは、予め設定された辺の分割数である。基底分割数426dは、表示倍率が1(拡大も縮小も行わない)のときに、分割後の誤差が予め決められた誤差以内となるような値が設定される。
隣接辺ポインタ426eは、隣接する面と辺を共有する場合に、隣接する面側の共有する辺の情報(辺の両端を示す2つの端点情報の先頭の位置)を指し示すポインタである。隣接辺ポインタ426eにより、隣接する面を繋ぎ合わせたループ間での面同士の辺の供給関係が定義される。
なお、複数の辺の端点情報426において、点座標ポインタ426aが同じアドレス(点座標データの位置)を示す場合、各辺の端点が共有されることを表している。
また、複数の辺の端点が共有されるとき、それぞれの辺の端点に対応する端点情報426の法線ベクトルポインタ426bが同じアドレス(法線ベクトルデータの位置)を示していれば、各辺の法線ベクトルが共有されている。
このように、本実施の形態のハイブリッドメッシュデータ200,200a,200bでは、端点のループと面のループとが定義されていると共に、辺の端点の共有関係、法線ベクトルの共有関係、辺の共有関係が定義されている。これにより、立体形状の位相(topology)と幾何(geometry)との情報が定義される。ここで、位相とは、面、稜線、端点(頂点)など立体の境界面のつながり具合をあらわす要素であり、幾何とは、曲面、曲線、点など立体の実際の形状をあらわす要素である。
次に、図7〜図8を参照して、立体形状に応じたオブジェクト情報210の具体例を説明する。
図7は、立体形状の一例を示す図である。図7(A)と図7(B)とは立体形状の斜視図である。図7(A)と図7(B)とは、見る方向が逆である。
立体形状500は、6つの面511〜516で構成され、12個の辺521〜532、8個の端点541〜548を有している。各面511〜516のフェース識別情報(FaceID)は、F1〜F6である。面511は曲面であり、他の面512〜516は平面である。
ここで、各端点541〜548の位置を示す点座標データへのポインタ(点座標ポインタ)をP1〜P8とし、各端点541〜548の法線ベクトルを示すベクトルデータへのポインタ(法線ベクトルポインタ)をN1〜N8とする。なお、図7に示すように端点541には、2つの法線ベクトル551,552が存在する。このとき、法線ベクトル551,552を有する面のフェース識別情報を、法線ベクトルデータを示す記号の後に括弧書きで示す。すなわち、面516が有する法線ベクトル551の法線ベクトルポインタはN1(F6)であり、面511と面513が共有する法線ベクトル552の法線ベクトルポインタはN1(F1,F3)である。
このような立体形状500のオブジェクト情報の例を以下に示す。
図8は、オブジェクト情報の具体例を示す図である。オブジェクト情報210aには、オブジェクト識別情報211a、最大基底分割数212a、および複数のフェース情報410a,420a,430a,440a,450a,460aが含まれている。フェース情報410aは、フェース識別情報「F1」の面511に関する情報である。フェース情報420aは、フェース識別情報「F2」の面512に関する情報である。フェース情報430aは、フェース識別情報「F3」の面513に関する情報である。フェース情報440aは、フェース識別情報「F4」の面514に関する情報である。フェース情報450aは、フェース識別情報「F5」の面515に関する情報である。フェース情報460aは、フェース識別情報「F6」の面516に関する情報である。
ここで、フェース情報410aを参照して、データの例を詳しく説明する。フェース情報410aのフェース識別情報(FaceID)は「F1」である。これにより、図7に示す面511に関する情報であることが分かる。また、フェース辺数(nP)は、4である。これにより、4辺からなる面であることが分かる。フェース情報(Attr)には、色情報などが設定されている。
フェース情報410aには、4つの端点541〜544に対応する端点情報が設定されている。図8の例では、端点541の端点情報には、点座標ポインタP1、法線ベクトルポインタN1(F1,F3)、接線の長さ(Ratio)、基底分割数「0」、および面513(フェース識別情報F3)の先頭の端点情報(F3−1)を指し示す隣接辺ポインタが設定されている。端点542の端点情報には、点座標ポインタP2、法線ベクトルポインタN2(F1,F3)、接線の長さ(Ratio)、基底分割数「n0−1」、および面514(フェース識別情報F4)の4番目の端点情報(F4−4)を指し示す隣接辺ポインタが設定されている。端点543の端点情報には、点座標ポインタP3、法線ベクトルポインタN3(F1)、接線の長さ(Ratio)、基底分割数「0」、および面515(フェース識別情報F5)の4番目の端点情報(F5−4)を指し示す隣接辺ポインタが設定されている。端点544の端点情報には、点座標ポインタP4、法線ベクトルポインタN4(F1)、接線の長さ(Ratio)、基底分割数「n0−1」、および面516(フェース識別情報F6)の先頭の端点情報(F6−1)を指し示す隣接辺ポインタが設定されている。再帰ポインタは、先頭の端点情報を指し示している。
以上のような機能構成およびデータ構造を有するコンピュータ100によって、立体形状の表示が行われる。以下、立体形状の表示方法について詳しく説明する。
図9は、立体形状表示手順を示す第1のフローチャートである。以下、図9に示す処理をステップ番号に沿って説明する。
[ステップS11]コンピュータ100は、ユーザからの操作入力などによる指示に従って、ハイブリッドメッシュデータで構成される立体形状データを生成する。たとえば、VRMLデータ変換部113が、VRMLデータ31に定義されている部品の立体形状を解析し、部品毎の立体形状データをハイブリッドメッシュデータに変換する。また、CADデータ変換部114が、CADデータ32に定義されている部品の立体形状を解析し、部品毎の立体形状データをハイブリッドメッシュデータに変換する。
生成されるハイブリッドメッシュデータは、元のVRMLデータ31に定義された立体形状よりも面の数を減らした立体形状を定義している。したがって、この変換処理により、データ容量が圧縮される(データ容量が減少する)。
[ステップS12]VRMLデータ変換部113またはCADデータ変換部114は、データ変換によって生成したハイブリッドメッシュデータを内部のRAM102内の立体構造データ記憶部120に格納する。なお、RAM102に格納されたハイブリッドメッシュデータは、ハイブリッドメッシュファイル33に書き出すことができる。また、ハイブリッドメッシュファイル33からハイブリッドメッシュデータを取り出し、RAM102内の立体構造データ記憶部120に格納することもできる。
[ステップS13]ユーザインタフェース115は、ユーザからのキーボード12などに対する操作入力に基づいて、画面の表示倍率と許容誤差を取得する。すると、ユーザインタフェース115は、細分割部116に対して表示倍率と許容誤差を渡す。
[ステップS14]細分割部116は、立体構造データ記憶部120内のオブジェクトを1つ選択する。以下、選択したオブジェクトに関して、ステップS15〜ステップS37の処理が行われる。
[ステップS15]細分割部116は、立体構造データ記憶部120からステップS14で選択したオブジェクトのハイブリッドメッシュデータを取り出し、最大基底分割数を取得する。
[ステップS16]細分割部116は、画面の表示倍率、許容誤差、および最大基底分割数に基づいて、実分割数を算出する。実分割数の算出方法の詳細については後述する。
[ステップS17]細分割部116は、分割処理の必要の有無を判断する。具体的には、ステップS16で算出した実分割数が1以下か否かを判断する。実分割数が1以下の場合、分割処理の必要がないと判断される。一方、実分割数が1を超えた場合には、分割処理の必要があると判断する。
すなわち、最大基底分割数は、単位倍率のときの単位誤差における分割数が最も大きい辺の基底分割数である。したがって、その辺の分割が不要であれば、他の辺の分割も不要である。
分割処理の必要がない場合には、処理がステップS18に進められる。分割処理が必要な場合には、処理が図10のステップS21に進められる。
[ステップS18]細分割部116は、立体構造データ記憶部120に記憶されたハイブリッドメッシュデータやオブジェクト配置情報を、そのまま表示データ出力部117に送信する。表示データ出力部117は、ハイブリッドメッシュデータを3次元表示用API140へ出力する。すなわち、ハイブリッドメッシュデータは、そのままポリゴンモデルのデータとして解釈することができるため、そのままのデータ形式で3次元表示用API140に出力すれば、少ない数の面(ハイブリッドメッシュデータで定義されている面の数)で構成された立体形状41がモニタ11の画面に表示される。その後、処理がステップS38に進められる。
これにより、表示倍率が小さい場合(画面中で小さく表示される場合)には、簡易な構造の立体形状が表示され、高速に画面表示が可能となる。また、許容誤差が大きい場合にも簡易な構造の立体形状が表示され、高速に画面表示が可能となる。
図10は、立体形状表示手順を示す第2のフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。
[ステップS21]細分割部116は、立体形状の分割処理に必要なパラメータ等の初期化処理を行う。
[ステップS22]細分割部116は、立体構造データ記憶部120に格納されているハイブリッドメッシュデータの中から、フェース情報を1つ選択する。
[ステップS23]細分割部116は、視点(仮想カメラ)と立体形状(ステップS22で選択した面)との相対位置が変化しているか否かを判断する。すなわち、表示される画面内で立体形状が動くか否かを判断する。相対位置が変化している場合には、処理がステップS29に進められる。相対位置が変化していない場合には、処理がステップS24に進められる。なお、本実施の形態では、視点と立体形状との相対位置は、ユーザからの操作入力(視点の移動指示や、視点の向き(視軸)の変更指示など)に応じて変化する。
[ステップS24]細分割部116は、選択したフェース情報で定義される辺(端点情報の列)の1つを選択する。
[ステップS25]細分割部116は、選択した辺の実分割数を算出する。これは、選択された辺の基底分割数n0に、1つの画面内に表示される全ての立体形状に対して共通の値√(Scale/Tol)を乗算したものである。
[ステップS26]細分割部116は、ステップS25で算出された実分割数を、2のべき乗に切り上げる。辺の分割数を2のべき乗とすることで、以降の3角形ポリゴンの分割を、単純な分割パターンで行うことができる。
[ステップS27]細分割部116は、ステップS22で選択したフェース情報の全ての辺の分割数が決定したか否かを判断する。全ての辺の分割数が決定した場合には、処理がステップS28に進められる。未処理の辺があれば、処理がステップS24に進められる。
[ステップS28]細分割部116は、全ての辺で分割の必要がないか(分割数が1以下か)否かを判断する。全ての辺で分割の必要がなければ、処理がステップS29に進められる。分割の必要な辺が1つでもあれば、処理が図11のステップS31に進められる。
[ステップS29]細分割部116は、立体構造データ記憶部120に記憶されたハイブリッドメッシュデータのステップS22で選択した面に関する情報を、そのまま表示データ出力部117に送信する。表示データ出力部117は、ハイブリッドメッシュデータを3次元表示用API140へ出力する。すると、ステップS22で選択された面40が、細分割されずにモニタ11に表示される。その後、処理は図11のステップS37に進む。
このように、画面中で立体形状が動いている場合には、各面が分割されずに画面表示される。その結果、少ない数の面(ハイブリッドメッシュデータで定義されている面の数)で構成された立体形状がモニタ11の画面に表示される。すなわち、少ない処理で高速に立体形状の画面表示が可能となる。
図11は、立体形状表示手順を示す第3のフローチャートである。以下、図11に示す処理をステップ番号に沿って説明する。
[ステップS31]細分割部116は、図10のステップS22で選択したフェース情報が3辺形か4辺形かを判断する。3辺形の場合には、処理がステップS32に進められる。4辺形の場合には、処理がステップS33に進められる。
[ステップS32]細分割部116は、3辺形分割パターン決定処理を行う。この処理は、各辺の実分割数に応じて、3辺形を1段階分だけ分割パターンを決定する処理である。すなわち、3辺形の分割処理は、多段階に分けて行われる。ステップS32では、その1段階分の分割パターンの決定が行われる。なお、3辺形分割処理の詳細は後述する。その後、処理がステップS34に進められる。
[ステップS33]細分割部116は、4辺形分割パターン決定処理を行う。この処理は、各辺の実分割数に応じて、4辺形を1段階分だけ分割パターンを決定する処理である。すなわち、4辺形の分割処理は、多段階に分けて行われる。ステップS33では、その1段階分の分割パターンの決定が行われる。この処理の詳細は後述する。
[ステップS34]細分割部116は、各辺のパラメータ3次式を決定する。
[ステップS35]細分割部116は、ステップS32、S33で決定した分割パターンとステップS34で決定したパラメータ3次式とに従って、立体形状を構成する各面を細分割する。細分割された結果が、これ以上細分割できない場合、ステップS36へ進む。
さらに細分割できる場合は、細分割部116は、再帰的にステップS31〜S3の処理を呼び出す。再帰的に呼び出されたときのステップS32,S33では、多段階に分けて行われる細分割処理の次の1段階分の分割パターン決定処理が行われる。このように、ステップS31〜S3の処理を再帰的に呼び出すことで、ステップS22で選択した面が、段階的に細分される。
[ステップS36]細分割部116は、細分割した後の立体形状データを、表示データ出力部117に送信する。表示データ出力部117は、立体形状データを3次元表示用API140へ出力する。これにより、細分割の分割数に応じた精度の立体形状42〜44がモニタ11の画面に表示される。
なお、ステップS36の処理は、選択された面がこれ以上分割できない状態まで分割されたとき実行される。そして、最小単位の3辺形が生成される毎に、その3辺形の表示用のポリゴンデータが表示データ出力部117に送信される。そのため、立体形状全体のポリゴンデータを、細分割部116が保持する必要なはい。
[ステップS37]細分割部116は、全ての面(フェース)を分割したか否かを判断する。全ての面を分割した場合には、処理がステップS38に進められる。未分割の面がある場合には、処理がステップS22に進められる。
[ステップS38]細分割部116は、全オブジェクトの画面表示が終了したか否かを判断する。なお、ユーザの操作入力によりビューア110の終了が指示された場合にも、画面表示終了と判断される。画面表示終了の場合には処理が終了し、別のオブジェクトのハイブリッドメッシュデータの画面表示を継続する場合には、処理が図9のステップS14に進められる。
以上のようにして、拡大倍率、許容誤差、および視点との相対位置に応じた精度の立体形状が画面に表示される。しかも、粗い形状の面を定義しているハイブリッドメッシュデータに基づいて、精度の高い(誤差の少ない)立体形状を表示することができる。そのため、立体形状データを格納するための記憶領域が少なくてすむ。
以下、図9〜図11で説明したステップ毎の処理の詳細な内容について説明する。
[実分割数の算出]
図9のステップS16と図10のステップS25とに示した実分割数の算出処理の詳細について説明する。
本実施の形態では、立体形状を構成する面の形を表す辺を、パラメータ3次式F(t)(0≦t≦1)で定義する。パラメータ3次式を用いれば、辺の中間点の算出が容易となる。すなわち、パラメータ3次式にt=1/2を与えることにより、容易に中間点の座標を(CPUに負荷を与えず)求めることができる。
ここで、パラメータ3次式で与えられた辺が曲線であれば、その辺は、立体形状を表示する際に複数の線分に分割される(ポリライン(折れ線)近似される)。このとき、辺の分割数が多いほど、分割された線分の形が元の曲線に近くなる(誤差が小さくなる)。ただし、分割数を多くすると、表示ポリゴン数が増大し、処理負荷が大きくなる。そこで、再現される立体形状の精度と処理負荷とのバランスを考えて許容できる誤差(許容誤差(Tol))をコンピュータ100に与え、その許容誤差に応じた適切な分割数(誤差を超えない範囲の最も小さい分割数)を決定する必要がある。
一般に、与えられた許容誤差内で最も小さい分割数を算出するには、負荷の大きい計算が必要となる。例えば、半径Rの円の分割数nは、
n=π/cos-1(1−Tol/R)
・・・(1)
で求めることができる。この式(1)を、便宜上真の式と呼ぶこととする。ここで、πは円周率である。真の式(1)で用いられているアークコサイン(cos-1)は、CPU負荷の大きな関数である。その為、本実施の形態では、分割数の計算を高速にする近似式を用いた。その近似式は以下の通りである。
n≒π×√(R/2Tol)
・・・(2)
ここで、式(2)には、変数として半径Rが含まれている。辺の形は単純な円弧に限らず、自由曲線の場合もある。そのため、式(2)をそのまま用いると、実分割数の決定前に、辺を定義する曲線の曲率(半径R)を算出する必要が生じる。そこで、本実施の形態では、予め計算された単位倍率と単位誤差における基底分割数(実数)を用い、半径Rを用いずに分割数nを算出する。
図12は、空間曲線のポリライン近似の例を示す図である。図12では、空間曲線51を4つの線分52〜55に分割している。このときの誤差をtol0とする。
このように、任意の空間曲線51を誤差tol0でポリライン(折れ線)近似した場合における分割数n(ポリラインのVector本数)が判っているものとする(図12の例では分割数n=4)。この既知の分割数nを、基底分割数n0とする。そして、このときの空間曲線51のサイズを基準サイズと定める。また、基底分割数n0を算出した際の誤差を基準誤差tol0とする。
ユーザは、空間曲線51を基準サイズの何倍の大きさで表示させるのかを、表示倍率として指定する。ユーザから任意に指定される表示倍率をScaleとすると、空間曲線51をScale倍した曲線の分割数N1は、
N1≒√(Scale)×n0
・・・(3)
で示せる。
また、ユーザは、空間曲線51を画面に表示の際の精度を誤差によって指定することができる。基準誤差tol0を誤差tol1に変更したときの分割数N2は、
N2≒√(tol0/tol1)×n0
・・・(4)
で示せる。
従って、この空間曲線51を、基準サイズ(Scale=1)で誤差を基準誤差(tol0)内とするための基底分割数n0が既知である場合、この空間曲線51をScale倍し、許容誤差Tol(=tol1/tol0)でポリライン近似する場合の曲線の実際の分割数(実分割数)Nは、
N≒√(Scale/Tol)×n0
・・・(5)
で示せることになる。許容誤差Tolは、誤差の大きさを基準誤差tol0との比で示している。
ここで、n0は表示倍率や許容誤差に依存しない曲線固有の特性値である。そのため、n0を基底分割数と称し、予め計算しておくことにより表示倍率や許容誤差が変更された場合の分割数計算を高速に行うことができる。
なお、√(Scale/Tol)の値は、3次元空間内の全ての表示対象物に対して1つの値であるため、表示対象物(たとえば、自動車)を構成する立体形状(たとえば、部品)の辺(空間曲線)毎に計算する必要はない。すなわち、1つの辺に対する表示倍率と許容誤差に応じた実分割数Nを、乗算1回で求めることができる。ここで、基底分割数n0は正の実数であり、実分割数Nは小数点以下を切り上げた自然数である。
さらに、本実施の形態では、分割パターン処理の簡素化の為に、実分割数は2のべき乗に繰上げる。実分割数を2のべき乗にしておけば、辺の2分割を繰り返すことで、実分割数に応じた辺の等分が可能となる。
また、直線は基底分割数n0=0とする。これにより、表示倍率(Scale)にも許容誤差(Tol)にも影響されず、実分割数Nは常に0となる。これは、分割しないことを意味する。
以下に、図形の分割例について説明する。
図13は、図形の分割例を示す図である。図13では、簡単な図形の例として、円60を示している。ここで、円60の半径Rを変えながら、真の式(1)を用いて分割数nを求めてみる。得られた分割数を、円60の半径Rに応じた基底分割数n0とする。このとき、基準誤差tol0を1mmとする。この場合、半径Rの変化と基底分割数n0との関係は、以下の表のようになる。
Figure 0004437504
この表に示すように、半径Rが大きくなるほど基底分割数n0も大きくなる。なお、半径Rが0.5mm未満の場合アークコサインの計算を行うことができないため、計算不能となる。
このようにして得られた基底分割数n0から、表示倍率と許容誤差とに応じた実分割数Nを計算する。
たとえば、半径10mmの円を100倍(Scale=100)の大きさで、許容誤差1mm(Tol=1)で近似する場合、基底分割数n0=6.97を用いて実分割数Nが計算される。各数値を式(5)の変数に設定して、近似式を解くと、
N≒√(100)×6.97=69.7
・・・(6)
となる。実分割数Nの小数点以下を切り上げると70になる。ここで、表示倍率を100倍にしたときの分割数は、半径が100倍の円の分割数と同等になるべきである。この例では、半径10mmの100倍の半径1000mmを有する円の分割数を真の式(1)で求めた場合、70.24である。この値の小数点以下を切り上げると71となる。そのため、十分な精度で近似されていることがわかる。
次に、真の式(1)では計算不能だった半径0.1mmの円を1mmの誤差で分割する場合の分割数も、半径10mmの円を1/100倍して表示することで近似できる筈であるから
n0(r=0.1)≒1/√(100)×6.97=0.697
・・・(7)
と求めることができる。
[分割パターン決定処理]
次に、図11のステップS32,S33に示す分割パターンの決定処理について詳細に説明する。
[3辺形分割パターン決定処理]
まず、3辺形分割パターン決定処理について詳細に説明する。本実施の形態では、全ての辺の分割数が2のべき乗となっているため、全ての3辺形は、4種類の分割パターンの組み合わせによって分割することができる。
図14は、3辺形の分割パターンの種別を示す図である。図14には、3辺の分割数Nの相互関係に応じた分割パターンを、分割図によって示している。
第1の3辺形分割パターンは、3辺の分割数がN,N×a1,N×a2(Nは1より大きい2のべき乗)の関係にある場合である。ここで、a1,a2は、2のべき乗である。すなわち、3辺を同じ分割数Nで分割できる場合である。この場合、分割図に示すように、分割数Nに応じてパラメータ3次式で表現された各辺の分割点の座標と分割点の法線ベクトルが求められ、さらに3辺形の中間分割線が求められる。そして、中間分割線により元の3辺形が多数の3辺形に分割される。
第2の3辺形分割パターンは、3辺の分割数が1,N,N×a3(Nは1より大きい2のべき乗)の関係にある場合である。ここで、a3は、2のべき乗である。すなわち、分割数が1より大きい2辺を同じ分割数Nで分割できる場合である。この場合、分割図に示すように、パラメータ3次式で表現された分割すべき2辺に関して、分割数Nに応じて分割点の座標と分割点の法線ベクトルが求められ、さらに3辺形の中間分割線が求められる。そして、中間分割線により元の3辺形が多数の3辺形に分割される。
第3の3辺形分割パターンは、3辺の分割数が1,1、N(Nは1より大きい2のべき乗)の関係にある場合である。すなわち、1辺のみを分割する場合である。この場合、分割図に示すように、パラメータ3次式で表現された分割すべき1辺に関して、分割数Nに応じて分割点の座標と分割点の法線ベクトルが求められ、さらに3辺形の中間分割線が求められる。そして、中間分割線により元の3辺形が多数の3辺形に分割される。
第4の3辺形分割パターンは、3辺の分割数が全て1の場合である。この場合、元の3辺形は分割されない。
以上のような4パターン(第4の3辺形分割パターンでは分割は行われないため、実質3パターン)の分割を段階的に繰り返すことで、各辺の実分割数に応じて3辺形が分割される。なお、3辺形を分割する場合に採用する優先順は、第1の分割パターン、第2の分割パターン、第3の分割パターンの順番である。
図15は、3辺形分割パターン決定処理の手順を示すフローチャートである。この処理は、図11のステップS32の処理である。なお、図11では、ステップS35において、細分割処理が再帰的に実行されることで多段階の分割が行われる(1段階で1つの分割パターンによる分割が行われる)が、図15では、分割方法を分かり易く説明するために、多段階の分割処理を一連のフローチャートで示している。以下、図15に示す処理をステップ番号に沿って説明する。
[ステップS51]細分割部116は、実分割数の小さい順に、辺を並べ替える(ソートする)。ここで、実分割数の小さい順に、各辺の分割数をi,j,kとする(i≦j≦k)。
[ステップS52]細分割部116は、iが1より大きいか否かを判断する。iが1より大きい場合には、処理がステップS53に進められる。iが1以下の場合には、処理がステップS55に進められる。
[ステップS53]細分割部116は、3辺形の第1の分割パターンによって、各辺を(i,i,i)で分割する。
[ステップS54]細分割部116は、i,j,kの値を更新する。具体的には、j/iの値を、新たにjに設定する。k/iの値を、新たにkに設定する。iに1を設定する。
[ステップS55]細分割部116は、jが1より大きいか否かを判断する。jが1より大きい場合には、処理がステップS56に進められる。jが1以下の場合には、処理がステップS58に進められる。
[ステップS56]細分割部116は、3辺形の第2の分割パターンによって、各辺を(1,j,j)で分割する。
[ステップS57]細分割部116は、j,kの値を更新する。具体的には、k/jの値を、新たにkに設定する。jに1を設定する。
[ステップS58]細分割部116は、kが1より大きいか否かを判断する。kが1より大きい場合には、処理がステップS59に進められる。kが1以下の場合には、処理が図11のステップS34に進められる。
[ステップS59]細分割部116は、3辺形の第3の分割パターンによって、各辺を(1,1,k)で分割する。その後、処理が図11のステップS34に進められる。
以上のようにして、3辺形の面の分割パターンが、各辺の実分割数に応じて決定することができる。分割パターンが決定された後、図11のステップS34,S35によって、3辺形が細分割される。
たとえば、3辺形の各辺に関して式(5)による実分割数を計算したとき、それぞれ、(5,21,12)の結果を得た場合を考える。これらの値は、2のべき乗に切り上げられ(8,32,16)となる。そして、各辺の分割数を、値の小さい順にソートすると、i=8、j=16、k=32(8,16,32)となる。
まず、iが1より大きいため、第1の分割パターンで分割される。すると、各辺が8分割される。これにより、i,j,kの値が更新され、(1,2,4)となる。
次に、jが1より大きいため、第2の分割パターンで分割される。すると、jとkとに対応する辺が2分割される。これにより、各3辺形がさらに複数の3辺形に分割される。そして、j,kの値が更新され、(1,1,2)となる。
最後に、kが1より大きいため、第3のパターンで分割される。すると、kに対応する辺が2分割される。これにより、各3辺形が複数の3辺形に分割される。
このようにして、3辺形を分割することができる。
[4辺形分割パターン決定処理]
次に、4辺形の分割パターン決定処理について詳しく説明する。本実施の形態では、全ての辺の分割数が2のべき乗となっていることから、全ての4辺形は、4種類の分割パターンの組み合わせによって分割することができる。
図16は、4辺形の分割パターンの種別を示す図である。図16には、4辺の分割数Nの相互関係に応じた分割パターンを、分割図によって示している。
第1の分割パターンは、対向する辺同士を組にしたときに、4辺の分割数が(M,M×b1),(N,N×b2)(M,Nの少なくとも1つは1より大きい2のべき乗)の関係にある場合である(括弧内の2つの値が、互いに組となった2つの辺の分割数である)。ここで、b1、b2は、2のべき乗である。すなわち、対向する辺同士を同じ分割数で分割できる場合である。この場合、分割図に示すように、対向する辺の一方の組がMで分割され、他方の組がNで分割される。その結果、元の4辺形が複数の4辺形に分割される。
第2の分割パターンは、対向する辺同士を組にしたときに、4辺の分割数が(1,M),(1,N)(M,Nは1より大きい2のべき乗)の関係にある場合である。ここで、M≦Nの関係にあるものとする。すなわち、対向する辺の一方の辺を分割する場合である。この場合、分割図に示すように、4辺の内の隣ある2辺が分割対象である。ここで、分割対象の2つの辺が共有する端点から、その端点に対向する端点へ対角線が引かれる。4辺形は、対角線によって2つの3辺形に分割される。対角線の分割数をNとすることで、生成された2つの3辺形を、3辺形の分割パターンに従って分割することができる。具体的には、生成される3辺形は、第3のパターンと第4のパターンとに分けられる。
第3の分割パターンは、3辺形の2辺を、それぞれN,Mに分割する場合である。この3辺形は、3辺形の第2の分割パターンと第3の分割パターンとの組み合わせにより、分割することができる。
第4の分割パターンは、3辺形の2辺を、それぞれN,Nに分割する場合である。この3辺形は、3辺形の第2の分割パターンによって分割することができる。
以上のような分割パターンに従って4辺形を分割することができる。
図17は、4辺形分割パターン決定処理の手順を示すフローチャートである。この処理は、図11のステップS33の処理である。なお、図11では、ステップS35において、細分割処理が再帰的に実行されることで多段階の分割が行われる(1段階で1つの分割パターンによる分割が行われる)が、図17では、分割方法を分かり易く説明するために、多段階の分割処理を一連のフローチャートで示している。以下、図17に示す処理をステップ番号に沿って説明する。
[ステップS61]細分割部116は、対辺を組にする。そして、同じく組となった2つの辺の分割数の比(大きい方の分割数/小さい方の分割数)を、組同士で比較する。そして、分割数の比が小さい方から順に、各組の辺を並べる。同じ組の中の辺同士では、分割数の小さい順に並べる。このとき並べられた各辺の分割数を、配列の順にi,j,k,lとする。分割数iの辺とjの辺とが組を構成し、分割数kの辺とlの辺とが組を構成する。このとき、i≦j、k≦l、j/i≦l/kの関係となる。
[ステップS62]細分割部116は、iとkとの少なくとも一方が1より大きいか否かを判断する。いずれか一方が1より大きければ、処理がステップS63に進められる。両方とも1以下であれば、処理がステップS65に進められる。
[ステップS63]細分割部116は、第1の4辺形分割パターンにより、4辺形を分割する。すなわち、分割数i、jとの辺はiで分割され、分割数k、lとの辺はkで分割される。
[ステップS64]細分割部116は、i,j,k,lの値を更新する。具体的には、j/iの値を新たにjに設定する。l/kの値を新たにlに設定する。iに1を設定する。kに1を設定する。
[ステップS65]細分割部116は、第2の4辺形分割パターンに基づいて、ステップS63による分割で生成された4辺形を2分割する。これにより、各4辺形から2つの3辺形が生成される。
[ステップS66]細分割部116は、ステップS65で生成された3辺形を1つ選択する。
[ステップS67]細分割部116は、ステップS66で選択した3辺形に対して、3辺形分割パターン決定処理を行う。たとえば、選択した3辺形が、4辺形に関する第3の分割パターンに従っていれば、その3辺形は、3辺形の第2の分割パターンと第3の分割パターンによって分割パターンが決定される。また、選択した3辺形が、4辺形に関する第4の分割パターンに従っていれば、その3辺形は、3辺形の第2の分割パターンによって分割パターンが決定される。
[ステップS68]細分割部116は、ステップS65で生成された全ての3辺形を分割したか否かを判断する。全ての3辺形の分割パターン決定処理が終了した場合には、処理が図11のステップS34に進められる。未処理の3辺形があれば、処理がステップS66に進められる。
以上のようにして、4辺形の面の分割パターンを、各辺の実分割数に応じて決定することができる。分割パターンが決定された後、図11のステップS34,S35によって、4辺形が細分割される。
たとえば、3辺形の各辺に関して式(5)による実分割数を計算したとき、それぞれ、(6,2,12,7)の結果を得た場合を考える。ここで、分割数6の辺と分割数2の辺とが対向する辺であり、分割数12の辺と分割数7の辺とが対向する辺である。これらの値は、2のべき乗に切り上げられ(8,2,16,8)となる。そして、分割数の比が小さい方の組を先にして、各組内での各辺を、分割数の小さい順にソートすると、i=8,j=16,k=2,l=8(8,16,2,8)となる。
まず、iとkが1より大きいため、4辺形の第1の分割パターンで分割される。すると、分割数iの辺とjの辺とが8分割される。同様に、分割数kの辺とjの辺とが2分割される。これにより、i,j,k,lの値が更新され、(1,2,1,4)となる。
次に、第2の分割パターンによって、第1の分割パターンによる分割で生成された各4辺形が、対角線で2分割される。対角線に対しては、lの値と同じ分割数が設定される。これにより、(1,j,l)の分割数の3辺形と、(1,l,l)の分割パターンの3辺形とに分けられる。すなわち、(1,2,4)の分割パターンの3辺形と(1,4,4)の分割パターンの辺形が生成される。
分割数(1,2,4)の3辺形に関しては、j(=2)が1より大きいため、3辺形の第2の分割パターンで分割される。すると、jとlとに対応する辺が2分割される。これにより、3辺形がさらに複数の3辺形に分割される。そして、j,lの値が更新され、(1,1,2)となる。そして、lが1より大きいため、3辺形の第3のパターンで分割される。すると、lに対応する辺が2分割される。
分割数(1,4,4)の3辺形に関しては、l(=4)が1より大きいため、3辺形の第2の分割パターンで分割される。すると、lに対応する辺が4分割される。これにより、3辺形がさらに複数の3辺形に分割される。
以上のようにして、4辺形が複数の3辺形に分割される。
[パラメータ3次式決定法]
辺を分割する場合、その辺の端点に対して設定されている法線ベクトルに応じてパラメータ3次式が決定される。そして、辺の曲線を定義したパラメータ3次式におけるパラメータt(0≦t≦1)に、0.5を設定することで、その辺の中点を求める。なお、パラメータ3次式の決定法は、立体形状における面同士の隣接関係に応じて異なる。
・第1の隣接関係は、隣接する面同士が滑らかに接続している場合である。この場合、法線ベクトルから接線ベクトルを経由して求める方法と、法線ベクトルから2次微分ベクトルを仮定して求める方法がある。
・第2の隣接関係は、隣接する面同士が共有する辺で折れている場合である。
・第3の隣接関係は、辺の形状を強制的に指示する必要がある場合である。
以下、面同士の隣接関係に応じた、パラメータ3次式の決定法について説明する。
[隣接する面同士が滑らかに接続している場合]
図18は、隣接する面同士が滑らかに接続している立体形状の一例を示す図である。図に示すように、立体形状71は、互いに隣接する面F1a,F1bを有している。隣接する面F1a,F1bが辺S1(t)を共有し、さらに辺S1(t)の両端点における法線ベクトルN10,N11も隣接する面F1a,F1b同士が共有する。この場合、この2つの隣接する面F1a,F1bは、辺S1(t)において滑らかに接続されていると判断される。
このような場合、以下の2つの方法の何れかでパラメータ3次式を決定することができる。
まず、法線ベクトルから接線ベクトルを経由してパラメータ3次式を求める方法について説明する。
この方法では、両端点の座標P10,P11、両端点における法線ベクトルN10,N11、及び接線の長さr10,r11を与え、接線ベクトルT10,T11を決定する。なお、端点座標、法線ベクトル、および接線の長さは、立体構造データ記憶部120内の端点情報において定義されている。
この場合、接線ベクトルT10は、法線ベクトルN10に垂直で、座標P10から座標P11の方向に最も近い方向を向いた、長さr10のベクトルである。また、接線ベクトルT11は、法線ベクトルN11に垂直で、座標P10から座標P11の方向に最も近い方向を向いた、長さr11のベクトルである。
式で示すと以下の通りとなる。
T10=r10・N10×(P11−P10)×N10/|N10×(P11−P10)×N10|
・・・(8)
T11=r11・N11×(P11−P10)×N11/|N11×(P11−P10)×N11|
・・・(9)
式(8)、式(9)において、“×”はベクトルの外積を示しており、“・”はスカラー値(r0やr1)の乗算を示している。
次に、両端点の座標(P10,P11)及び両端点における接線ベクトル(T10,T11)を用いて、以下の4つのベクトル式を満たしたパラメータ3次式S1(t)を決定する。
S1(t=0)=P10
S1(t=1)=P11
dS1/dt(t=0)=T10
dS1/dt(t=1)=T11
・・・(10)
このように、端点での条件を決定することで、3次元区間内の曲線を決定することができる。たとえば、ファーガソン曲線を算出することができる。
次に、法線ベクトルから2次微分ベクトルを仮定してパラメータ3次式を求める方法について説明する。
図19は、2次微分ベクトルを用いて決定されたパラメータ3次式の一例を示す図である。図19に示すように、両端点における2次微分ベクトルW20,W21が、両端点における法線ベクトルN20,N21と方向が近似している(正負反対の場合も含む)と仮定(弧長媒介変数による2次微分ではないので一致しない)することができる。このとき、法線ベクトルN20,N21にベクトルの大きさr20,r21を乗じたベクトルを2次微分ベクトルW20,W21とする。
なお、法線ベクトルN20,N21は常に面の表を向いているため、ベクトルの大きさr20,r21を与える時に、必要に応じて負の値とすることで2次微分方向に合わせる。たとえば、曲線が、立体形状の表方向に凸であれば、ベクトルの大きさr20,r21を負の値とする。逆に、曲線が、立体形状の表方向に凹であれば、ベクトルの大きさr20,r21を正の値とする。なお、ベクトルの大きさr20,r21は、図6に示す端点情報426の接線定義情報426c内に予め設定される。
2次微分ベクトルW20,W21は、それぞれ法線ベクトルN20,N21と平行で、長さと向きがr20,r21で示されるベクトルと近似する。これを式で示すと以下の通りとなる。
W20=r20・N20
・・・(11)
W21=r21・N21
・・・(12)
両端点の座標P20,P21、及び両端点における2次微分ベクトルW20,W21を用いて、以下の4つのベクトル式からパラメータ3次式S2(t)を決定する。
S2(t=0)=P20
S2(t=1)=P21
2S2/dt2(t=0)=W20
2S2/dt2(t=1)=W21
・・・・(13)
このような条件を満たしたパラメータ3次式S2(t)が決定される。
[隣接する面同士が共有する辺で折れている場合]
次に、隣接する面同士が共有する辺で折れている場合のパラメータ3次式の決定方法について説明する。
図20は、隣接する面同士が共有する辺で折れている立体形状の一例を示す図である。図20に示す立体形状72は、面F3aと面F3bとが辺S3(t)で隣接している。面F3aの法線ベクトルN30a,N31aには、辺S3(t)を湾曲させる成分を持っていない。一方で隣接関係にある面F3bの法線ベクトルN30b,N31bは辺S3(t)を湾曲させる成分を持っている。
このように隣接する面F3a,F3bによって共有される辺S3(t)の両端点の法線ベクトルが、2つの面F3a,F3bによって共有されない場合、この隣接する面F3a,F3bは共有される辺S3(t)で折れていると判断される。この場合、4本の法線ベクトルを用いて接線ベクトルの方向を決定する。
接線ベクトルT30は法線ベクトルN30a,N30bの外積の方向で、長さはr30のベクトルである。同様に、接線ベクトルT31は法線ベクトルN31a,N31bの外積の方向で、長さはr31のベクトルである。なお、長さr30は、端点30に定義された接線の長さであり、長さr31は、端点31に定義された接線の長さである。これを式で示すと以下の通りとなる。
T30=r30・N30a×N30b/|N30a×N30b|
・・・(14)
T31=r31・N31a×N31b/|N31a×N31b|
・・・(15)
次に、両端点の座標(P30,P31)、及び両端点における接線ベクトル(T30,T31)を用いて、以下の4つのベクトルを満たしたパラメータ3次式S3(t)を決定する。
S3(t=0)=P30
S3(t=1)=P31
dS3/dt(t=0)=T30
dS3/dt(t=1)=T31
・・・(16)
[辺の形状を強制的に指示する必要がある場合]
次に、辺の形状を強制的に指示する必要がある場合について説明する。
図21は、辺の形状を強制的に指示された立体形状の一例を示す図である。図21に示す立体形状73は、面F4aと面F4bとが隣接している。隣接する面F4a,F4bが辺S4(t)を共有し、さらに辺S4(t)の両端点における法線ベクトルN40,N41も隣接する面F4a,F4bによって共有される。この場合、この2つの隣接する面F4a,F4bは辺S4(t)において滑らかに接続されていると判断されるが、法線ベクトルN40,N41には辺S4(t)を湾曲させる成分を持っていない。
そういった場合においても辺S4(t)を強制的に湾曲させる必要があれば接線ベクトルT40,T41を直接与える。
両端点の座標P40,P41、及び両端点における接線ベクトルT40,T41を用いて、以下の式を満たすパラメータ3次式S4(t)を決定する。
S4(t=0)=P40
S4(t=1)=P41
dS4/dt(t=0)=T40
dS4/dt(t=1)=T41
・・・(17)
以上のようにして、立体形状を構成する辺のパラメータ3次式を決定することができる。
[辺上の任意の中間座標と法線ベクトルの求め方]
辺の曲線を定義したパラメータ3次式が決定されると、先に決定された分割パターンに従って、辺が分割される。分割された辺の端点には、新たに端点の位置と法線ベクトルとを定義する必要がある。以下、中間点における座標(中間座標)と法線ベクトルとの算出方法について説明する。
[中間座標の求め方]
中間座標の求め方を、図22を参照して説明する。
図22は、分割対象の面の一例を示す図である。図22の例では、分割される面81は3辺形である。面81は、端点P50,P51を有する辺81a、端点P51,P52を有する辺81b、端点P52,P50を有する辺81cで構成されている。端点P50での法線ベクトルがV50、接線ベクトルがN50である。端点P51での法線ベクトルがV51、接線ベクトルがN51である。
パラメータ3次式の決定法に従い端点P50から端点P51を結ぶ辺81aのパラメータ3次式S5(t)が決定されている場合、辺81a上の任意の点であるPcは、パラメータ3次式S5(t)のt値(中点ならt=0.5)を定めることにより決定される。
次に、中間点の法線ベクトルの求め方について、図22を参照して説明する。
任意の中間点における法線ベクトルの決定法としては、以下の4通りの決定法が考えられる。
第1の方法は、中間点の法線ベクトルNcがN50からN51に線形変化していると想定する方法である。その計算式は、以下の通りである。
Nc=(1−t)N50+(t)N51
・・・(18)
第2の方法は、中間点の法線ベクトルNcがN50からN51に線形変化し、中間点の接線ベクトルVcと直交していると想定する方法である。その計算式は、以下の通りである。
Nc=Vc×(N50+N51)×Vc
・・・(19)
第3の方法は、中間点の法線ベクトルNcが、N50方向からN51方向に回転していると想定する方法である。その計算式は、以下の通りである。
Nc=Vc×N50×N51
・・・(20)
但し、N50×N51=0の場合の計算式は、以下の通りである。
Nc=Vc×N50×Vc
・・・(21)
第4の方法は、中間点の法線ベクトルNcが、N0方向からN1方向に3次で変化していると想定する方法である。その計算式は、以下の通りである。
Nc=−2(N51−N50)t3+3(N51−N50)t2+N50
・・・(22)
式(18)〜(22)で得られたベクトルNcを単位ベクトルに正規化したものが、中間点の法線ベクトルとなる。
[3辺形の任意中間曲線の計算方法]
3辺形を分割すると、元の3辺形内に新たな辺が生成される。そのとき、生成された辺の曲線式を計算する必要がある。
図23は、分割される3辺形を含む立体形状の一例を示す図である。図23の例では、円柱の立体形状82が示されている。立体形状82の側面が、複数の3辺形で構成される。側面に含まれる1つの3辺形82aは、端点P60,P61,P62を有している。ハイブリッドメッシュデータにおいて定義されている3辺形82aは、たとえば、画像で表示するときに複数の3辺形に分割される。
ここで、辺82ba上の中間点の座標P70と法線ベクトルN70、および辺82bb上の中間点の座標P71と法線ベクトルN71を用いて、2つの辺82ba,82bbの中間点同士を結ぶ辺82caのパラメータ3次式を求めることができる。この際、パラメータ3次式の決定法としては、たとえば、隣接する面同士が滑らかに接続している場合の決定法により求める。
但し、座標P70での接線の長さr70と、座標P71での接線の長さr71とは、以下の式で求める。
r70=r60×|P71−P70|/|P61−P60|
・・・(23)
r71=r61×|P71−P70|/|P61−P60|
・・・(24)
なお、r60は、端点P60での接線の長さであり、r61は端点P61での接線の長さである。
[3辺形の任意中間曲線の計算方法(他の案)]
他の3辺形の任意中間曲線の計算方法もある。
図24は、分割される3辺形の一例を示す図である。図24の三辺形83について、P80、P81,P82は、三辺形の頂点(3辺形を構成する辺の端点)を示す。N80,N81,N82は、P80,P81,P82における法線ベクトルを示す。T81,T82は、P81とP82とを端点とする辺の各端点における接線ベクトルを示す。U81,U80は、P81とP80とを端点とする辺の各端点における接線ベクトルを示す。V82,V80は、P82とP80とを端点とする辺の各端点における接線ベクトルを示す。
ここで、内部で生成される情報として、e80,e81,e82がある。e80,e81,e82は、三角形を形成する辺を示し、パラメータ3次式で示される。
ここで、内部中間曲線e83を、以下の方法で求める。
[ST1]e82上を、P80からP81に向かって、u(0<u<1)だけ進んだ点P83を求める。
[ST2]P83におけるe82の接線ベクトルU83を求める。
[ST3]P83における法線ベクトルN83を求める。
[ST4]P83においてU83,N83,T83の方向関係が、P81におけるU81,N81,T81の関係と等しくなる接線ベクトルT83を求める。
[ST5]接線ベクトルT83を求めた方法と同様に、P82におけるV82,N82,T82の関係と等しくなる接線ベクトルT84を求める。
[ST6]接線ベクトルT83,T84から、e83のパラメータ3次式を求める。
このようにして、3辺形を分割するための境界となる辺のパラメータ3次式を求めることができる。
[4辺形の内部中間座標と法線ベクトルの求め方]
次に、4辺形の内部中間座標と法線ベクトルの求め方について説明する。
まず、図25を参照して4辺形の任意中間座標の求め方について説明する。
図25は、分割される4辺形の一例を示す図である。ここで、4辺形84を表す式を、S9(u,v)とする。4辺形84がCoon’s曲面とすると、図25のように各端点における座標P90〜P93とu方向ベクトルU90〜U93、v方向ベクトルV90〜V93を用いて以下のベクトル式で示せる。
S9(u=0,v=0)=P90
S9(u=0,v=1)=P91
S9(u=1,v=0)=P92
S9(u=1,v=1)=P93
・・・(25)
∂S9/∂u(u=0,v=0)=U90
∂S9/∂u(u=0,v=1)=U91
∂S9/∂u(u=1,v=0)=U92
∂S9/∂u(u=1,v=1)=U93
・・・(26)
∂S9/∂v(u=0,v=0)=V90
∂S9/∂v(u=0,v=1)=V91
∂S9/∂v(u=1,v=0)=V92
∂S9/∂v(u=1,v=1)=V93
・・・(27)
これらの式を連立させて解くことにより、S9(u,v)が求まり、(u=u0,v=v0)で示される任意点の座標Pは、P=S9(u=u0,v=v0)で与えられる。
次に、4辺形の任意中間点における法線ベクトルの決定法について説明する。(u=u0,v=v0)で示される任意点Pにおける法線ベクトルは、u方向接線ベクトル∂S9/∂u(u=u0,v=v0)と、v方向接線ベクトル∂S9/∂v(u=u0,v=v0)との外積で与えられる。
以上のような処理を行うことで、ハイブリッドメッシュデータに基づいた立体形状の画面表示が可能となる。
[画面表示例]
以下、図26〜図30を参照して、立体形状の画面表示例について説明する。本実施の形態では、立体形状を構成する辺のみを画面表示することもできる。辺のみを画面表示することで、立体形状の構造を画面上で視覚的に容易に認識することができる。
例として、球体の立体形状を3次元CADで作成した場合について説明する。球体を示すCADデータは、CADデータ変換部114によって、ハイブリッドメッシュデータに変換される。球体をハイブリッドメッシュデータに変換すると、たとえば、8つの3辺形からなる8面体で表現される。
図26は、ハイブリッドメッシュデータで定義されている立体形状の辺を表示した画面例を示す図である。図26の画面には、8面体の立体形状をハイブリッドメッシュデータで定義したときの立体形状の辺が表示されている(ワイヤーフレームだけを表示)。このような構造を定義したハイブリッドメッシュデータを任意の精度で細分割して、立体形状を画面に表示することができる。
たとえば、立体形状を画面内で回転させている場合や、表示倍率が表示に小さい場合には、ハイブリッドメッシュデータの細分割を行わずに立体形状が表示される。
図27は、ハイブリッドメッシュデータで定義されている立体形状を表示した画面例を示す図である。この画面には、図26に示した構造のハイブリッドメッシュデータをそのまま(細分割を行わずに)表示したときの立体形状が表示されている。図27の例では、細分割を行っていないため、8つの面で立体形状が表現されている。これにより、立体形状を高速に画面表示することができる。
一方、表示倍率を上げて、静止した立体形状を画面表示する場合には、ハイブリッドメッシュデータの細分割が行われる。細分割によって、球体を表す立体形状が大量の面で再現される。
図28は、ハイブリッドメッシュデータを細分割したときの立体形状の辺を表示した画面例を示す図である。図28に示す画面には、ハイブリッドメッシュデータの細分割が行われることで、多数の面で構成された球体が表示される(ワイヤーフレームだけを表示)。
図28に示すような構成に分割されたデータにも基づいて立体形状を表示すれば、3次元CADで作成したときの球体と同様の見栄えの立体形状を表示することができる。
図29は、ハイブリッドメッシュデータを細分割したときの立体形状を表示した画面例を示す図である。図29に示すように、画面には、細分割を行うことにより、ほとんど球体に見える立体形状が表示される。
ハイブリッドメッシュデータは、元のCADデータに比べてデータ容量が少ないため、元の立体形状を詳細に再現する場合であっても、HDD103などの記憶容量が少なくてすむ。また、細分割によってポリゴンデータが生成される毎に3次元表示用API140に渡されるため、細分割後のポリゴンデータをRAM102に格納する必要がなく、RAM102の使用量を低減することができる。すなわち、少ない記憶容量のRAM102であっても、CADで作成された立体形状を表示させることができる。
ところで、立体形状を画面表示するには、各面の端点に定義されている法線ベクトルを用いて、グーローシェーディングを行うことができる。グーローシェーディングを行うことで、立体形状を構成する1つの面が平面ポリゴンで表示されていても、各面の境界を滑らかに表現することができる。なお、本実施の形態では、法線ベクトルとして単位ベクトルを用いているため、一般的なグーローシェーディングにそのまま利用することができる。
また、立体形状を表示するために必要な資源や処理負荷が少なくてすむことにより、非常に複雑な立体形状であっても、容易に画面表示することができる。たとえば、ネットワークを介したコラボレーションシステム上でCADを用いた自動車の設計を行い、自動車の構造を表す立体形状を、各共同作業者がネットワークを介して参照することも可能である。
図30は、自動車の立体形状の表示画面例を示す図である。図30に示す画面には、自動車のエンジンルームの構造が表示されている。このように複雑な構造の立体形状であっても、各コンピュータで容易に表示させることができる。
以上のようにして、複雑な立体形状を少ない処理負荷で画面表示することができる。
なお、図10に示したように、本実施の形態ではフェース毎に視点と立体形状との相対位置の変化の有無を判断しているが、立体形状(オブジェクト)毎に相対位置の変化の有無を判断してもよい。その場合、ステップS23の処理に代えて、たとえば、ステップS14とステップS15との間に、視点と立体形状の基準位置との相対位置の変化の有無を判断する処理が行われる。相対位置が変化していれば、処理をステップS18に進め、相対位置が変化していなければ処理をステップS15に進める。
また、仮想3次元空間内で視点だけが移動可能な場合などには、視点と立体形状との相対位置の変化の有無を判断する代わりに、視点の移動の有無を判断してもよい。その場合、ステップS23の処理に代えて、たとえば、ステップS13とステップS14との間に視点の移動の有無を判断する処理が行われる。視点が移動していれば、全てのオブジェクトに関して生データ表示処理(ステップS18)を行い、処理を終了する。視点が移動していなければ、処理をステップS14に進める。
このように、表示画面中でオブジェクトが動くか否かの判断処理を単純化することで、処理の高速化を図ることができる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、コンピュータが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM(Random Access Memory)、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disc)などがある。
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
本実施の形態に適用される発明の概念図である。 本発明の実施の形態のシステム構成図である。 本発明の実施の形態に用いるコンピュータのハードウェア構成例を示す図である。 本発明の実施の形態の機能を示す機能ブロック図である。 立体構造データ記憶部の内部構成を示す図である。 オブジェクト情報のデータ構造例を示す図である。 立体形状の一例を示す図である。図7(A)と図7(B)とは立体形状の斜視図である。 オブジェクト情報の具体例を示す図である。 立体形状表示手順を示す第1のフローチャートである。 立体形状表示手順を示す第2のフローチャートである。 立体形状表示手順を示す第3のフローチャートである。 空間曲線のポリライン近似の例を示す図である。 図形の分割例を示す図である。 3辺形の分割パターンの種別を示す図である。 3辺形分割パターン決定処理の手順を示すフローチャートである。 4辺形の分割パターンの種別を示す図である。 4辺形分割パターン決定処理の手順を示すフローチャートである。 隣接する面同士が滑らかに接続している立体形状の一例を示す図である。 2次微分ベクトルを用いて決定されたパラメータ3次式の一例を示す図である。 隣接する面同士が共有する辺で折れている立体形状の一例を示す図である。 辺の形状を強制的に指示された立体形状の一例を示す図である。 分割対象の面の一例を示す図である。 分割される3辺形を含む立体形状の一例を示す図である。 分割される3辺形の一例を示す図である。 分割される4辺形の一例を示す図である。 ハイブリッドメッシュデータで定義されている立体形状の辺を表示した画面例を示す図である。 ハイブリッドメッシュデータで定義されている立体形状を表示した画面例を示す図である。 ハイブリッドメッシュデータを細分割したときの立体形状の辺を表示した画面例を示す図である。 ハイブリッドメッシュデータを細分割したときの立体形状を表示した画面例を示す図である。 自動車の立体形状の表示画面例を示す図である。
符号の説明
1 CADデータ
2 立体形状データ
10 ネットワーク
11 モニタ
12 キーボード
13 マウス
100,100a,100b コンピュータ
110 ビューア
111 アプリケーションインタフェース
112 ハイブリッドメッシュAPI
113 VRMLデータ変換部
114 CADデータ変換部
115 ユーザインタフェース
116 細分割部
117 表示データ出力部
120 立体構造データ記憶部

Claims (11)

  1. コンピュータを、
    頂点の位置と当該頂点における法線ベクトルとが設定された面で物体形状を定義した物体形状データを記憶する記憶手段、
    面の各辺の分割数の決定処理、および細分割パターンの決定処理を行う分割パターン決定手段、
    前記記憶手段に記憶された前記物体形状データに予め設定された面の頂点の位置および当該頂点における法線ベクトルに基づいて面の曲線形状の決定処理を行う曲面形状決定手段、
    前記分割パターン決定手段で決定した細分割パターンに基づいて、面を、前記曲面形状決定手段によって得られる曲面形状に沿って細分割する細分割処理を行う細分割手段、
    前記細分割手段を用いて細分割された面から構成される物体形状を表示する物体表示手段、
    として機能させるための3次元表示プログラムにおいて、
    前記分割パターン決定手段による各辺の分割数の決定処理では、表示精度に関連する操作入力を基に表示精度を取得し、取得した表示精度に応じて、面を構成する各辺に対して2のべき乗数である分割数を求め、
    前記分割パターン決定手段による細分割パターンの決定処理では、面が3辺形の場合は3つの辺の分割数をi,j,k(i,j,kは2のべき乗であり、i≦j≦k)とし、i>1の場合は、各辺の細分割数を(i,i,i)とした複数の3辺形への第1の細分割パターンに決定し、i=1,j>1の場合は、各辺の細分割数を(1,j,j)とした複数の3辺形への第2の細分割パターンに決定し、i=j=1,k>1の場合は、各辺の細分割数を(1,1,k)とした複数の3辺形への第3の細分割パターンに決定し、
    細分割処理で細分割された面に対してさらに細分割することが可能である間は、細分割パターンの決定処理、曲面形状の決定処理および細分割処理を繰り返す、
    ことを特徴とする3次元表示プログラム。
  2. 前記第1の細分割パターンは、3角格子状に細分割する細分割パターンであり、
    前記第2の細分割パターンは、2つの辺をi分割することで生成される各辺上の分割点間を交互に結ぶ新たな辺を生成することで、複数の3辺形に細分割する細分割パターンであり、
    前記第3の細分割パターンは、1つの辺をk分割することで生成される分割点それぞれと、分割しない2つの辺が共有する頂点とを結ぶ新たな辺を生成することで、複数の3辺形に細分割する細分割パターンであることを特徴とする請求項1記載の3次元表示プログラム。
  3. 前記分割パターン決定手段による細分割パターンの決定処理では、面が4辺形の場合は、4つの辺のうちの対向する辺を組とし、各組内の辺の分割数をそれぞれ(i,j)、(k,l)(i,j,k,lは2のべき乗であり、i≦j、k≦l)とし、i>1またはk>1の場合は、分割数が(i,j)の対向する辺の組をiで細分割すると共に分割数が(k,l)の対向する辺の組をkで細分割することで複数の4辺形へ分割する第4の細分割パターンに決定し、i=k=1の場合は、分割数がi,kの各辺が共有する頂点と分割数がj,lの各辺が共有する頂点とを対角線で結ぶ辺を生成することで、2つの3辺形に分割する第5の細分割パターンに決定し、
    4辺形の面が存在する間は、前記第4または第5の細分割パターンの決定処理、面の曲面形状の決定および細分割を繰り返し、その後、3辺形の面に対する細分割パターンの決定、曲面形状の決定処理および細分割処理を行うことを特徴とする請求項1記載の3次元表示プログラム。
  4. 前記表示精度に関連する操作入力は、表示倍率の指定であることを特徴とする請求項1記載の3次元表示プログラム。
  5. 前記表示精度に関連する操作入力は、許容誤差の指定であることを特徴とする請求項1記載の3次元表示プログラム。
  6. 前記表示精度に関連する操作入力は、表示画面内での物体形状の動作指示であることを特徴とする請求項1記載の3次元表示プログラム。
  7. 前記記憶手段に記憶された前記物体形状データには、面を構成する各辺に対して予め基底分割数が設定されており、
    前記分割パターン決定手段は、各辺の分割数の決定処理では、物体形状を構成する面の各辺に設定された前記基底分割数に対して前記表示精度に応じた値を乗算し、乗算結果に応じた2のべき乗の値を各辺の分割数として決定することを特徴とする請求項記載の3次元表示プログラム。
  8. 前記分割パターン決定手段は、各辺の分割数の決定処理では、操作入力によって指定された表示倍率と許容誤差とに応じた係数を決定し、当該係数を前記基底分割数に乗算した値によって前記辺の分割数を決定することを特徴とする請求項記載の3次元表示プログラム。
  9. 前記記憶手段に記憶された前記物体形状データには、前記面の頂点に対して接線の長さが設定されており、
    前記曲面形状決定手段は、前記面の各頂点の位置、頂点に設定されている前記法線ベクトル、および頂点の前記接線の長さから各頂点の接線ベクトルを求め、前記接線ベクトルに基づいて前記面の曲面形状を決定することを特徴とする請求項1記載の3次元表示プログラム。
  10. 頂点の位置と当該頂点における法線ベクトルとが設定された面で物体形状を定義した物体形状データを記憶する記憶手段と、
    前記面の各辺の分割数の決定処理、および細分割パターンの決定処理を行う分割パターン決定手段と、
    前記記憶手段に記憶された前記物体形状データに予め設定された面の頂点の位置および当該頂点における法線ベクトルに基づいて面の曲線形状の決定処理を行う曲面形状決定手段と、
    前記分割パターン決定手段で決定した細分割パターンに基づいて、面を、前記曲面形状決定手段によって得られる曲面形状に沿って細分割する細分割処理を行う細分割手段と、
    前記細分割手段を用いて細分割された面から構成される物体形状を表示する物体表示手段と、
    を有する3次元表示装置において、
    前記分割パターン決定手段による各辺の分割数の決定処理では、表示精度に関連する操作入力を基に表示精度を取得し、取得した表示精度に応じて、面を構成する各辺に対して2のべき乗数である分割数を求め、
    前記分割パターン決定手段による細分割パターンの決定処理では、面が3辺形の場合は3つの辺の分割数をi,j,k(i,j,kは2のべき乗であり、i≦j≦k)とし、i>1の場合は、各辺の細分割数を(i,i,i)とした複数の3辺形への第1の細分割パターンに決定し、i=1,j>1の場合は、各辺の細分割数を(1,j,j)とした複数の3辺形への第2の細分割パターンに決定し、i=j=1,k>1の場合は、各辺の細分割数を(1,1,k)とした複数の3辺形への第3の細分割パターンに決定し、
    細分割処理で細分割された面に対してさらに細分割することが可能である間は、細分割パターンの決定処理、曲面形状の決定処理および細分割処理を繰り返す、
    ことを特徴とする3次元表示装置。
  11. 頂点の位置と当該頂点における法線ベクトルとが設定された面で物体形状を定義した物体形状データが記憶手段に記憶されており、
    分割パターン決定手段が、面の各辺の分割数の決定処理、および細分割パターンの決定処理を行い、
    曲面形状決定手段が、前記記憶手段に記憶された前記物体形状データに予め設定された面の頂点の位置および当該頂点における法線ベクトルに基づいて面の曲線形状の決定処理を行い、
    細分割手段が、前記分割パターン決定手段で決定した細分割パターンに基づいて、面を、前記曲面形状決定手段によって得られる曲面形状に沿って細分割する細分割処理を行い、
    物体表示手段が、前記細分割手段を用いて細分割された面から構成される物体形状を表示する、
    3次元表示方法において、
    前記分割パターン決定手段による各辺の分割数の決定処理では、表示精度に関連する操作入力を基に表示精度を取得し、取得した表示精度に応じて、面を構成する各辺に対して2のべき乗数である分割数を求め、
    前記分割パターン決定手段による細分割パターンの決定処理では、面が3辺形の場合は3つの辺の分割数をi,j,k(i,j,kは2のべき乗であり、i≦j≦k)とし、i>1の場合は、各辺の細分割数を(i,i,i)とした複数の3辺形への第1の細分割パターンに決定し、i=1,j>1の場合は、各辺の細分割数を(1,j,j)とした複数の3辺形への第2の細分割パターンに決定し、i=j=1,k>1の場合は、各辺の細分割数を(1,1,k)とした複数の3辺形への第3の細分割パターンに決定し、
    細分割処理で細分割された面に対してさらに細分割することが可能である間は、細分割パターンの決定処理、曲面形状の決定処理および細分割処理を繰り返す、
    ことを特徴とする3次元表示方法。
JP2007296447A 2007-11-15 2007-11-15 3次元表示プログラム、3次元表示装置、および3次元表示方法 Expired - Lifetime JP4437504B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007296447A JP4437504B2 (ja) 2007-11-15 2007-11-15 3次元表示プログラム、3次元表示装置、および3次元表示方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007296447A JP4437504B2 (ja) 2007-11-15 2007-11-15 3次元表示プログラム、3次元表示装置、および3次元表示方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2003566802A Division JPWO2003067527A1 (ja) 2002-02-06 2002-02-06 立体形状表示プログラム、立体形状表示方法、および立体形状表示装置

Publications (2)

Publication Number Publication Date
JP2008117406A JP2008117406A (ja) 2008-05-22
JP4437504B2 true JP4437504B2 (ja) 2010-03-24

Family

ID=39503213

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007296447A Expired - Lifetime JP4437504B2 (ja) 2007-11-15 2007-11-15 3次元表示プログラム、3次元表示装置、および3次元表示方法

Country Status (1)

Country Link
JP (1) JP4437504B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012073363A1 (ja) 2010-12-02 2012-06-07 デジタルプロセス株式会社 表示処理方法及び装置

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6375683B2 (ja) * 2014-05-01 2018-08-22 ヤマハ株式会社 画像処理装置
JP2023144940A (ja) * 2022-03-28 2023-10-11 矢崎総業株式会社 立体像表示システム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012073363A1 (ja) 2010-12-02 2012-06-07 デジタルプロセス株式会社 表示処理方法及び装置
US8717356B2 (en) 2010-12-02 2014-05-06 Digital Process Ltd. Display processing method and apparatus

Also Published As

Publication number Publication date
JP2008117406A (ja) 2008-05-22

Similar Documents

Publication Publication Date Title
KR100861161B1 (ko) 3차원 표시 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 3차원 표시 장치, 및 3차원 표시 방법
JP3275920B2 (ja) 科学的図形表示方法
EP0311081B1 (en) Displaying method and apparatus for three-dimensional computer graphics
JPH05266212A (ja) データプロセッサによってオブジェクトの作成を実行する方法及びグラフィックスディスプレイ装置
JP4858795B2 (ja) 瞬時光線追跡
JP2002230054A (ja) 形状と物性を統合した実体データの記憶方法
JPH063606B2 (ja) コンピュータ支援製図システム
Hanna et al. Intersection of parametric surfaces by means of look-up tables
JP4437504B2 (ja) 3次元表示プログラム、3次元表示装置、および3次元表示方法
KR101032397B1 (ko) 구면 좌표계를 사용하는 3차원 형상 표현장치 및 방법
Forberg et al. Generalization of 3D building data based on scale-spaces
CN110223395A (zh) 一种三维场景物料模型动态构建方法及系统
US7050053B2 (en) Geometric folding for cone-tree data compression
CN113591208B (zh) 一种基于舰船特征提取的超大模型轻量化方法及电子设备
JP6093704B2 (ja) 描画装置、描画方法及び描画プログラム
JP3792584B2 (ja) 工具経路面計算方法、工具経路面計算プログラム及び工具経路面計算プログラムを記録した記録媒体
JP4896237B2 (ja) 画像処理方法、画像処理装置、および画像処理システム
Garland et al. Fast triangular approximation of terrains and height fields
Vukašinović et al. Introduction to freeform surface modelling
KR100269100B1 (ko) 삼각형탐색방법및이를채용한래스터라이저
JP4479957B2 (ja) 曲面細分割装置
JP7368950B2 (ja) 効率的な建物フットプリント特定のための方法及び装置
Lau et al. Large a collision detection framework for deformable objects
JPH06314317A (ja) Cadデータの立体図描画方法
JPH11259681A (ja) オブジェクトをプリミティブに変換する装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091215

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20091222

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20091222

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130115

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4437504

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140115

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term