(57)【要約】【課題】  仮想物体間の干渉を高速に判定可能とするための干渉判定情報の生成方法及び装置を提供する。【解決手段】  干渉対象群ＣＧデータの描画処理を行ないながら、描画される画素毎に、その画素を描画するＣＧデータの識別情報を記録した干渉対象情報として、干渉対象マップ及び干渉対象ＬＵＴを生成する。次いで被干渉対象群ＣＧデータの描画処理を行ないながら、描画画素に対応する干渉対象情報を参照する。干渉対象情報に干渉対象群ＣＧデータが含まれている場合、描画処理中の仮想物体との干渉判定を行うべきものと判断し、干渉判定情報を生成する。【選択図】  図１０
2008305347.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想物体のうち、干渉判定を行うべき仮想物体の組み合わせを特定する干渉判定情報を生成する方法であって、
前記複数の仮想物体のうち第１のグループに属する仮想物体について、フレームバッファへの描画処理を行ないながら、前記フレームバッファの各画素について、その画素を含む仮想物体を特定する情報を記録した干渉対象情報を生成し、記憶手段に記憶するステップと、
前記複数の仮想物体のうち第２のグループに属する仮想物体について、前記フレームバッファへの描画処理を行ないながら、描画する各画素について前記干渉対象情報を参照し、既に前記第１のグループに属する仮想物体を特定する情報が記録されている画素である場合には、描画処理中の仮想物体を特定する情報と、前記記録されている情報により特定される前記第１のグループに属する仮想物体との組み合わせについて前記干渉判定を行うべきものとして、当該組み合わせを特定する情報を干渉判定情報として記憶手段に記憶するステップとを有することを特徴とする方法。
【請求項２】
前記干渉対象情報が、前記フレームバッファと共通の画素座標を有するビットマップ情報と、当該ビットマップ情報の画素値と前記第１のグループに属する仮想物体を特定する情報との関係を表すテーブル情報とから構成されることを特徴とする請求項１記載の方法。
【請求項３】
前記仮想物体がポリゴンで構成されることを特徴とする請求項１又は請求項２記載の方法。
【請求項４】
さらに、前記干渉判定情報により特定される仮想物体の組み合わせについて干渉判定を行う干渉判定ステップを有し、
当該干渉判定ステップが、前記第２のグループに属する仮想物体が複数ある場合、それぞれの仮想物体についての前記干渉判定情報が生成される毎に、前記干渉判定を行うことを特徴とする請求項３記載の方法。
【請求項５】
複数の仮想物体のうち、干渉判定を行うべき仮想物体の組み合わせを特定する干渉判定情報を生成する装置であって、
前記複数の仮想物体のうち第１のグループに属する仮想物体について、フレームバッファへの描画処理を行ないながら、前記フレームバッファの各画素について、その画素を含む仮想物体を特定する情報を記録した干渉対象情報を生成し、記憶手段に記憶する手段と、
前記複数の仮想物体のうち第２のグループに属する仮想物体について、前記フレームバッファへの描画処理を行ないながら、描画する各画素について前記干渉対象情報を参照し、既に前記第１のグループに属する仮想物体を特定する情報が記録されている画素である場合には、描画処理中の仮想物体を特定する情報と、前記記録されている情報により特定される前記第１のグループに属する仮想物体との組み合わせについて前記干渉判定を行うべきものとして、当該組み合わせを特定する情報を干渉判定情報として記憶手段に記憶する手段とを有することを特徴とする装置。
【請求項６】
コンピュータに、請求項１乃至請求項４のいずれか１項に記載の方法の各ステップを実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想空間内における複数の仮想物体間の干渉判定を行うための干渉判定情報の生成方法及び装置に関する。
【背景技術】
【０００２】
３次元（３Ｄ）コンピュータグラフィックス（ＣＧ）技術は、その発展に伴い、様々な分野で利用されてきている。近年では、３Ｄ−ＣＡＤ(Computer-Aided Design)はもとより、VR（仮想現実；Virtual Reality）やMR（複合現実；Mixed Reality）の分野での利用も活発である。
【０００３】
これらの分野のアプリケーションの一部では、仮想物体をＣＧによって三次元的に表現するだけでなく、仮想物体同士の干渉を考慮する必要がある。
【０００４】
例えば、３Ｄ−ＣＡＤを利用した設計では、仮想物体として表される部品が他の部品と干渉（同空間を複数の部品が占有）していると、実際には製造ができない。そのため、部品同士が干渉していないかを設計時にチェックする。具体的には、特定の部品配置にした上で、干渉箇所を一気に調べる方法が用いられ、この方法は静的干渉チェックと呼ばれる。また、可動部が存在する装置の場合、可動部の機構シミュレーションを行いながら他の部品との干渉箇所を調べる方法もあり、この方法は動的干渉チェックと呼ばれる。
【０００５】
動的干渉チェックの場合、可動部品が取りうる位置姿勢は限られている。そのため、時間をかけて干渉箇所を計算し、その結果を履歴として保存しておき、全計算が終わった後、ユーザに提示することが可能である。これは前述の静的干渉チェックでも同様である。
【０００６】
【特許文献１】特開平１１−３２８４４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
３Ｄ−ＣＡＤを利用した設計アプリケーションにおいては、干渉の有無を調べる対象となる物体（以下、対象物体という）が装置の部品であり、取りうる位置姿勢は固定であったり、たとえ可動部位であっても十分限定されているのが通例である。そのため、対象物体が取り得る位置姿勢について網羅的に干渉チェックを行なうことも可能である。
【０００８】
しかし、VRやMRアプリケーションでは、対象物体の一方が例えばユーザが手に持って操作する道具であったり、ユーザの手そのものであるなど、対象物体の取りうる位置姿勢が３Ｄ−ＣＡＤにおける対象物体である部品と比べて非常に多い。
【０００９】
例えば製品の組立教育を目的としたVR又はMRアプリケーションの場合、組み立て作業をユーザに体感させるため、ユーザが手に持つ工具と、部品などの組立対象物との干渉をチェックし、その結果をユーザにフィードバックする場合がある。
【００１０】
この場合、ユーザが手に持つ工具の取りうる位置姿勢は、平行移動成分３自由度と、回転成分３自由度の合計６自由度を有し、仮想空間内での位置姿勢に実質的な制限はない。そのため、対象物体が取りうる全ての位置姿勢について予め干渉チェックを行うのは現実的に不可能である。
従って、その時点時点において、対象物体の位置姿勢をもとに、実時間で干渉チェックを行う必要がある。
【００１１】
干渉チェックのための計算（干渉計算）は非常に計算負荷が高いため、実時間で計算を行うための手法が提案されている。最もよく用いられている手法のひとつは、「明らかに干渉しない物体同士については、干渉計算を行わない」というものである。不要な計算を行わないので、実時間での干渉計算を実現する上で非常に効果がある。
【００１２】
この手法の一つとして、Sweep and Prune（ＳＡＰ）という手法がよく知られている。このＳＡＰは、複数の仮想物体（ＣＧ物体）をある世界座標に配置したときに、仮想物体のバウンディングボックス同士が明らかに重なっていない組み合わせを干渉計算の候補から除外する手法である。  また、Sweep and Prune（ＳＡＰ）という手法もよく知られている。これは、複数の仮想物体（ＣＧ物体）をある世界座標に配置したときに、仮想物体のバウンディングボックス同士が明らかに重なっていない組み合わせを干渉計算の候補から除外する手法である。
【００１３】
世界座標がＸＹＺ直交座標系で表されるとすると、まず、バウンディングボックスのＸ軸への投影が、明らかに重なっていない仮想物体同士は干渉の可能性がゼロなので、干渉計算の候補から除外する。次いで、Ｙ軸への投影、Ｚ軸への投影についても同様のチェックを行う。全ての軸についてバウンディングボックスの重なりが認められた仮想物体の組み合わせのみを、干渉計算の対象とする。
【００１４】
バウンディングボックスは実際の仮想物体を囲むボックスであるため、実際の仮想物体よりも大きい。そのため、バウンディングボックスの干渉有無に基づいて干渉計算の要否を決定するＳＡＰ手法では、実際には干渉しない仮想物体の組み合わせについての干渉計算を除去しきれないことが多い。
【００１５】
このような、干渉計算を行う対象を絞り込む手法の他に、干渉計算そのものを高速化する手法も提案されている。計算を高速化するための手法の多くは、対象物体は全て凸物体であると仮定している。なぜ凸物体同士であると、干渉計算が高速に行えるかについては、本発明と直接関係がないため詳細な説明は割愛する。なお、実際には凹物体の仮想物体も存在するため、本手法を利用した干渉計算手法を用いるためには、対象物体を凸物体に分解する比較的重い前処理が必要となる。
【００１６】
このように、対象物体を凸物体と仮定して干渉計算を高速化する手法においては、対象物体を凸物体へ分解する比較的重い前処理が必要となる。さらに、この前処理後のデータ量は、処理前に匹敵するデータ量となるため、このことが問題となる場合には、データの持ち方に特別の工夫が必要となる。
【００１７】
また、最終的に画面に描画される範囲内での干渉計算がなされればよい、という条件での干渉計算を行う方法が特許文献１に記載されている。この手法では、仮想物体のレンダリング処理中に干渉計算を行えるため、ＧＰＵ(Graphics Processing Unit)内で計算を行うことにより、高速な干渉計算が可能である。しかしながら、特許文献１記載の手法は、投影像の画素毎に物体の奥行き値の配列を保持し、投影像の重なりの画素の奥行き値のリストを用い、衝突判定手段により各画素ごとに、衝突判定を行っており、適用可能範囲が狭い。そのため、一般的な仮想物体群同士の干渉判定に適用するのは困難である。
【００１８】
本発明はこのような従来技術の課題に鑑みなされたものであり、その目的は、仮想物体間の干渉を高速に判定可能とするための干渉判定情報の生成方法及び装置を提供することにある。
【課題を解決するための手段】
【００１９】
上述の目的は、複数の仮想物体のうち、干渉判定を行うべき仮想物体の組み合わせを特定する干渉判定情報を生成する方法であって、複数の仮想物体のうち第１のグループに属する仮想物体について、フレームバッファへの描画処理を行ないながら、フレームバッファの各画素について、その画素を含む仮想物体を特定する情報を記録した干渉対象情報を生成し、記憶手段に記憶するステップと、複数の仮想物体のうち第２のグループに属する仮想物体について、フレームバッファへの描画処理を行ないながら、描画する各画素について干渉対象情報を参照し、既に第１のグループに属する仮想物体を特定する情報が記録されている画素である場合には、描画処理中の仮想物体を特定する情報と、記録されている情報により特定される第１のグループに属する仮想物体との組み合わせについて干渉判定を行うべきものとして、当該組み合わせを特定する情報を干渉判定情報として記憶手段に記憶するステップとを有することを特徴とする方法によって達成される。
【００２０】
また、上述の目的は、複数の仮想物体のうち、干渉判定を行うべき仮想物体の組み合わせを特定する干渉判定情報を生成する装置であって、複数の仮想物体のうち第１のグループに属する仮想物体について、フレームバッファへの描画処理を行ないながら、フレームバッファの各画素について、その画素を含む仮想物体を特定する情報を記録した干渉対象情報を生成し、記憶手段に記憶する手段と、複数の仮想物体のうち第２のグループに属する仮想物体について、フレームバッファへの描画処理を行ないながら、描画する各画素について干渉対象情報を参照し、既に第１のグループに属する仮想物体を特定する情報が記録されている画素である場合には、描画処理中の仮想物体を特定する情報と、記録されている情報により特定される第１のグループに属する仮想物体との組み合わせについて干渉判定を行うべきものとして、当該組み合わせを特定する情報を干渉判定情報として記憶手段に記憶する手段とを有することを特徴とする装置によっても達成される。
【発明の効果】
【００２１】
このような構成により、仮想物体間の干渉を高速に判定可能とするための干渉判定情報を生成することができる。
【発明を実施するための最良の形態】
【００２２】
以下、添付図面を参照して、本発明を好適な実施形態に基づき詳細に説明する。
（第１の実施形態）
図１は本発明の第１の実施形態に係る干渉判定情報の生成装置の機能構成例を表すブロック図である。ここで、干渉判定情報は、複数の仮想物体のうち、干渉判定を行うべき仮想物体の組み合わせを特定する情報である。
【００２３】
本実施形態の干渉判定情報の生成装置１００は、仮想空間（複合現実空間を含む）中に存在する複数の仮想物体を、第１のグループである干渉対象群（１つの仮想物体でも可）と、第２のグループである被干渉対象群（１つの仮想物体でも可）に分ける。そして、これら２グループに属する仮想物体間の干渉判定を行うための干渉判定情報を生成する。
【００２４】
干渉対象群に含まれる仮想物体のＣＧデータは干渉対象群ＣＧデータ１１２として、被干渉対象群に含まれる仮想物体のＣＧデータは被干渉対象群ＣＧデータ１１４として、ＣＧデータ記憶部１１０に保持される。ＣＧデータ記憶部１１０は、例えばハードディスクドライブから読み出されたＣＧデータが記憶されるＲＡＭのような記憶装置であってよい。
【００２５】
これら２種のＣＧデータ１１２，１１４には、最終的に仮想物体をＣＧによって描画するのに十分なデータが収められている。本実施形態に係る干渉判定情報の生成装置１００は、後述のレンダリング部１２０が用いるレンダリング手法に制限はないが、例えば描画単位の一例としてポリゴンを用いる手法であると仮定する。この場合、干渉対象群ＣＧデータ１１２（１１４も同様）は、複数の干渉対象ＣＧデータから構成される。各々の干渉対象ＣＧデータは、ひとつ、または複数のポリゴンから構成される。各ポリゴン（ポリゴンデータ）は、最低３つの頂点を識別するデータ、マテリアル情報等を含む。さらに各ポリゴンデータには、後述する干渉判定部１７０が用いる、当該ポリゴンデータが含まれる干渉対象ＣＧデータを特定する識別情報がポリゴン毎に関連付けられている。ここで、頂点データとは、頂点の３次元位置を指定する座標値である。
【００２６】
レンダリング部１２０は、ＣＧデータ１１２，１１４に基づく最終的な描画イメージをフレームバッファ１５２にレンダリングする。一般にレンダリング部１２０は、ポリゴンデータから、描画すべきフレームバッファ上の画素の位置を計算し、次いでその画素の色を計算する。そして、フレームバッファ上の計算された位置の画素を、計算された色に対応する値で更新する。この処理をポリゴンデータが表すポリゴンに対応するフレームバッファ上の全画素について行う。これで、ひとつのポリゴンの描画が終了する。このポリゴン描画処理を、全ポリゴンデータに対して行うことにより、シーン全体の描画処理が完了する。
【００２７】
なお、本発明とは直接関係がないため、ここでは隠面処理やアルファブレンディング等の処理についての説明は割愛する。重要なことは、ポリゴン毎に、描画すべき全画素のフレームバッファ上の位置が順に計算されるということである。
【００２８】
本実施形態におけるレンダリング部１２０は、前述の一般的なレンダリング部が行う処理に加えて、描画すべき画素の、フレームバッファ上の位置を、干渉対象マップ作成部１３０、または干渉判定表作成部１４０に対して通知する。この動作を図２を参照して説明する。
【００２９】
レンダリング部１２０は、干渉対象群ＣＧデータ１１２を処理し、次いで被干渉対象群ＣＧデータ１１４を処理する。図２は、レンダリング部１２０のこれら各々のＣＧデータ１１２，１１４に対する処理手順を示す図である。
【００３０】
本実施形態の干渉判定情報の生成装置１００は、例えば汎用コンピュータ装置によって実現可能であり、この場合、ＣＧデータ記憶部１１０はハードディスク等の不揮発性記憶装置、一時記憶部１５０は例えばＲＡＭにより実現できる。また、レンダリング部１２０、干渉対象マップ作成部１３０及び干渉判定表作成部１４０は、ＣＰＵがＲＯＭやハードディスク、半導体メモリ等の不揮発性記憶装置に記憶されたプログラムを実行することによってソフトウェア的に実現することができる。もちろん、レンダリング部１２０の動作実行にＧＰＵなどのハードウェアを用いることによって処理の高速化を図ることも可能である。
【００３１】
まず、干渉対象群ＣＧデータ１１２の処理手順について説明する。
干渉対象群ＣＧデータ１１２に含まれる全ポリゴンデータについて、以下の処理を行う。もし全ポリゴンの処理が終了したのであれば（Ｓ２０１）、干渉対象群ＣＧデータの処理は終了したことになり、被干渉対象群ＣＧデータの処理を行うことになる。
【００３２】
Ｓ２０２以降の手順により、未処理ポリゴンの各々に対する処理を行なう。
Ｓ２０３では、処理中のポリゴンデータに基づいて描画すべき全画素の処理が終了しているかどうか判断する。描画すべき全画素の処理が終了していれば、処理中のポリゴンに対する処理は終了し、次の未処理ポリゴンの処理を行う。
【００３３】
未処理画素があれば、描画すべき画素のフレームバッファ上での位置の計算を行う（Ｓ２０４）。この計算では、モデリング変換、視野変換、投影変換、ビューポート変換といった、一連の座標変換を行うビューイングパイプラインでの処理を経ることになるが、これら変換は、ＣＧ分野では一般的な技術であるため詳細についての説明は割愛する。
【００３４】
次いで、一般的なレンダリング部と同様にして、描画すべき画素の色を計算し（Ｓ２０８）、フレームバッファを更新する（Ｓ２０９）。また、これらの処理と並行して、処理中のポリゴンデータが、干渉対象群ＣＧデータ１１２に属するか否かを判断する（Ｓ２０５）。前述の通り、ここでは干渉対象群ＣＧデータ１１２の処理を行っている。そのため、レンダリング部１２０は、干渉対象マップ作成部１３０に対し、Ｓ２０４で計算された、描画すべき画素のフレームバッファ上での位置と、処理中のポリゴンに関連付けられたＣＧデータを特定する識別情報とを通知する。
【００３５】
上記処理を干渉対象群ＣＧデータ１１２に対して行った後、被干渉対象群ＣＧデータ１１４に対して行う。処理内容は干渉対象群ＣＧデータ１１２に対するものとほぼ同様である。ただし、Ｓ２０４で計算された、描画すべき画素のフレームバッファ上での位置と、処理中のポリゴンに関連付けられたＣＧデータを特定する識別情報の通知先が、干渉対象マップ作成部１３０ではなく、干渉判定表作成部１４０となる点で異なる。
【００３６】
一連のレンダリング部１２０での処理が完了すると、フレームバッファ１５２には最終的に表示される画面データが保持されている。この画面データに基づき、干渉判定情報の生成装置１００に接続された表示部１６０によって描画結果が表示され、ユーザに提示される。
【００３７】
なお、フレームバッファ１５２は、後述する干渉対象マップ１５８、干渉対象ＬＵＴ１５６、干渉判定表１５４とともに、一時記憶部１５０の一部によって構成される。一時記憶部１５０は例えば半導体記憶装置であり、そのアドレス空間をこれらの各種用途に応じて割り当てている。干渉対象情報は、干渉対象マップ１５８と干渉対象ＬＵＴ１５６とで構成される。
【００３８】
さて、干渉対象マップ作成部１３０では、画素単位で、干渉対象群ＣＧデータ１１２の識別情報を記録した干渉対象マップ１５８を作成する。干渉対象マップ１５８は具体的にはビットマップ情報（ビットマップデータ）であり、通常、フレームバッファ１５２と共通の画素座標を有する。換言すれば、干渉対象マップ１５８を、フレームバッファ１５２と同じサイズ（縦横画素数）にする。こうすることにより、レンダリング部１２０から通知される、フレームバッファ上の画素の位置は、そのまま干渉対象マップ１５８上の画素の位置として用いることができる。もちろん、干渉対象マップ１５８のサイズがフレームバッファ１５２より大きくても良い。また、各画素あたり数ビットから十数ビット程度のデータを保持できるものとする。
【００３９】
干渉対象マップ１５８の各画素の値は、フレームバッファ１５２において対応する位置の画素を、描画すべき画素として有するＣＧデータを特定する値である。
例えば、干渉対象マップ１５８の画素（ａ，ｂ）の値がＣＧデータαとＣＧデータβを特定する値であれば、画素（ａ，ｂ）は干渉対照群ＣＧデータであるＣＧデータαとＣＧデータβによって描画されることを意味する。被干渉対象群ＣＧデータであるＣＧデータγによっても画素（ａ，ｂ）が描画されるとすると、ＣＧデータγによって表される仮想物体と干渉する可能性のある仮想物体は、ＣＧデータαとＣＧデータβで表される仮想物体に限定される。つまり、ＣＧデータαとＣＧデータβ以外の干渉対象群ＣＧデータとは干渉しないことが保証される。
【００４０】
図４に示す、フローチャートを用いて、本発明の第１の実施形態における干渉対象マップ作成部の動作を説明する。なお、以下の説明では、ポリゴンに関連付けられた識別情報によって特定されるＣＧデータは、そのポリゴンを表すポリゴンデータであるものとして、説明を行う。
【００４１】
例として、干渉対象群ＣＧデータ１１２は、図３に示す立方体形状の仮想物体を表すＣＧデータ１つのみであるとする。この立方体を横１６×縦１２画素の画面（フレームバッファ１５２）に、一部がはみ出すように描画する場合を考える。
【００４２】
この場合、干渉対象群ＣＧデータ１１２には、Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆの面（ポリゴン）に対応する６つのポリゴンデータが含まれる。そして、これらのポリゴンデータは、Ａ〜Ｆのポリゴンの順に描画され、また、各ポリゴンは、縦方向位置の小さい画素から、同じ縦方向位置の場合には横方向位置の小さい画素から描画されるものとする。また、干渉対象マップ１５８の各画素の値は、予めゼロに初期化されているものとする。干渉対象マップ１５８における画素値”０”は、その画素に描画を行うＣＧデータが無いこと、すなわち、本例においてはどのポリゴンにも含まれないことを示す。
【００４３】
まず、レンダリング部１２０が、図２のＳ２０２以降の処理をポリゴンＡについて実行し、フレームバッファにポリゴンＡを描画しながら、干渉対象マップ作成部１３０へ画素の描画位置とポリゴンデータの識別情報を通知する。
【００４４】
図５は、ＣＧデータが表す立方体の描画位置と干渉対象マップ１５８中の画素位置の対応および、ポリゴンＡを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【００４５】
図において、干渉対象マップ１５８の各画素は正方形で表されており、太枠の正方形はポリゴンの描画によって更新される画素を示している。また、正方形内の数は画素値を表し、空白の正方形は値”０”の画素を示す。干渉対象ＬＵＴ１５６は、干渉対象マップ１５８の画素値と、対応するＣＧデータを特定する情報とを対応付けた表（テーブル情報）である。
【００４６】
ポリゴンＡの描画処理中、干渉対象マップ作成部１３０は、描画位置を受信する（Ｓ３０１）。そして、描画位置に対応する干渉対象マップの画素の値を参照する（Ｓ３０３）。値が”０”であれば（Ｓ３０５，Ｙ）、干渉対象マップ作成部１３０は、その値を描画処理中のＣＧデータに応じた固有値、ここでは値”１”で更新する（Ｓ３０７）。また、干渉対象ＬＵＴ１５６には、画素値”１”に対応するレコードがないため（Ｓ３１１，Ｎ）を新規レコードを追加し、画素値”１”を設定する。さらに干渉対象マップ作成部１３０は、画素値”１”のレコードに、通知された識別情報に基づいて、ＣＧデータ（本例では処理中のポリゴンＡを表すポリゴンデータ）を特定する情報（本例では「Ａ」）を設定する（Ｓ３１３）。
【００４７】
ポリゴンＡの描画処理が終了すると、レンダリング部１２０は処理を図２のＳ２０１へ戻し、次の未処理ポリゴンＢを描画する（Ｓ３１５→Ｓ３０１）。
【００４８】
図６は、図５の状態からさらにポリゴンＢを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
図に示す通り、干渉対象マップ作成部１３０は、ポリゴンＢの描画時に描画される画素に対応する干渉対象マップ１５８中の画素について、値”２”に更新する。また、干渉対象マップ作成部１３０は干渉対象ＬＵＴ１５６に画素値”２”に対応するレコードを追加し、ポリゴンＢを表すポリゴンデータを特定する情報「Ｂ」を格納する。
【００４９】
次にレンダリング部１２０はポリゴンＣの描画処理を行なうが、ポリゴンＣは干渉対象マップ１５８（すなわち、フレームバッファ１５２）に描画する必要がない。そのため、レンダリング部１２０から描画位置と識別情報が干渉対象マップ１５８作成部に通知されることもない。そのため、ポリゴンＣの描画処理が終了しても、干渉対象マップ１５８および干渉対象ＬＵＴ１５６に変化はない。
【００５０】
図７は、図６の状態からさらにポリゴンＤを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
例えば、ポリゴンＤの描画処理において描画される、横方向に左から１０番目、縦方向に上から４番目の画素、画素（１０，４）に注目する。干渉対象マップ１５８における画素（１０，４）は、ポリゴンＡの描画処理において描画されているため、値は１である。従って、ポリゴンＤの描画処理中、描画位置（１０，４）がレンダリング部１２０から通知されてきた場合、干渉対象マップ作成部１３０は、干渉対象マップの画素（１０，４）の値から干渉対象ＬＵＴ１５６を参照する。そして、画素（１０，４）には「ポリゴンＡとポリゴンＤ」のポリゴンデータを特定する値を格納する必要性を認識する。しかし、このようなポリゴンデータの組合せは干渉対象ＬＵＴ１５６に存在しない。
【００５１】
そのため、干渉対象マップ作成部１３０は、画素値を「ポリゴンＡとポリゴンＤ」のポリゴンデータを特定する値、ここでは値”３”で更新する（Ｓ３０９）。そして、ポリゴンＡとポリゴンＤのポリゴンデータの組み合わせを特定する情報（ここでは、「Ａ，Ｄ」）と、対応する新たな画素値”３”とを対応付けたレコードを干渉対象ＬＵＴ１５６に追加する（Ｓ３１３）。
【００５２】
同様に、干渉対象マップ作成部１３０は、ポリゴンＢとポリゴンＤの両方で描画される画素が最初に通知された際に、画素値”４”と、ポリゴンＢ，Ｄのポリゴンデータの組み合わせを特定する情報「Ｂ，Ｄ」とを対応付けたレコードを追加する。本例では、干渉対象マップ１５８における画素（１０，７）が通知された場合に該当する。
【００５３】
このように、干渉対象マップ作成部１３０は、ポリゴンＤの描画処理中に通知される描画画素位置に対応する干渉対象マップ１５８中の画素の値を、既存の値”１”の画素については値”３”に、既存の値”２”の画素については値”４”に更新する。
【００５４】
図８は、図７の状態からさらにポリゴンＥを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【００５５】
ポリゴンＥの描画処理中においては、既に値”３”を有する、干渉対象マップ１５８における画素（１６，６）がポリゴンＥについても描画対象となる。そのため、干渉対象マップ作成部１３０は、ポリゴンＡ，Ｄ，Ｅのポリゴンデータの組み合わせを特定する情報（「Ａ，Ｄ，Ｅ」）と、対応する新たな画素値（ここでは５）とを対応付けたレコードを干渉対象ＬＵＴ１５６に追加する。さらに、干渉対象マップ作成部１３０は、干渉対象マップ１５８の画素（１６，６）の値を”５”に更新する。
【００５６】
同様に、干渉対象マップ作成部１３０は、ポリゴンＢ，Ｄ，Ｅのポリゴンデータの組み合わせを特定する情報（「Ｂ，Ｄ，Ｅ」）と、対応する新たな画素値（ここでは６）とを対応付けたレコードを干渉対象ＬＵＴ１５６に追加する。そして、干渉対象マップ１５８において、ポリゴンＢ，Ｄ，Ｅのいずれにおいても描画される画素（１６，７），（１６，８），...，（１６，１２）を値”６”に更新する。
【００５７】
図９は、図８の状態からさらに干渉対象群ＣＧデータの最後のＣＧデータ（ポリゴンデータ）により、ポリゴンＦを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【００５８】
本例では干渉対象群ＣＧデータが図３に示す立方体を表すＣＧデータのみであるため、この時点で干渉対象マップ１５８および干渉対象ＬＵＴ１５６が完成する。干渉対象群ＣＧデータに他のＣＧデータが存在する場合は、同様にして順次全てのポリゴンの描画処理が終了するまで、干渉対象マップ作成部１３０は干渉対象マップ１５８の画素値更新と、干渉対象ＬＵＴ１５６のレコード追加を行う。干渉対象群ＣＧデータの全ての描画処理が終了すると（Ｓ３１５，Ｙ）、干渉対象マップ作成部１３０は処理を終了する。
【００５９】
なお、図９から明らかなように、ポリゴンＦを描画し終わった段階で、値”１”と値”２”の画素は干渉対象マップ１５８には存在しなくなる。そのため、これらの画素値に対応するレコードを干渉対象ＬＵＴ１５６から削除しても良い。
【００６０】
被干渉対象群ＣＧデータの描画処理時に、干渉対象情報である干渉対象ＬＵＴ１５６と干渉対象マップ１５８を用いて、最終的な干渉判定情報としての干渉判定表１５４を生成する。
【００６１】
（被干渉対象群ＣＧデータの描画処理）
次に被干渉対象群ＣＧデータの描画処理並びに干渉判定表の作成処理について説明する。
ここでは簡単のため、被干渉対象群ＣＧデータにはポリゴンＸとポリゴンＹを表す２つのポリゴンデータのみが含まれるものとする。図２のＳ２０７で説明したように、レンダリング部１２０は、被干渉対象群ＣＧデータの描画処理では、描画位置と識別情報を干渉判定表作成部１４０へ通知する。
【００６２】
図１０は、図９に示す干渉対象マップ１５８及び干渉対象ＬＵＴ１５６が作成されている状態における、ポリゴンＸの描画画素と干渉対象マップ１５８の画素との対応関係の例を示す図である。
【００６３】
ポリゴンＸの描画処理が開始されると、レンダリング部１２０から、ポリゴンＸの描画画素の位置が干渉判定表作成部１４０へ通知される。図１０では、ポリゴンＸの描画画素位置に対応する干渉対象マップ１５８中の画素を、太枠で示している。
【００６４】
以下、図１１に示すフローチャートも参照して、本発明の第１の実施形態における干渉判定表作成部１４０の動作を説明する。
最初の描画画素（４，４）の位置が通知されると（Ｓ４０１）、干渉判定表作成部１４０は干渉対象マップ１５８の対応画素（４，４）の値を参照する（Ｓ４０３）。この場合、値は”０”である（Ｓ４０５，Ｙ）。そして、干渉判定表作成部１４０は、干渉対象ＬＵＴ１５６の画素値”０”のレコードの識別情報フィールドを参照すると、空き状態である。この時点で、ポリゴンＸのこの画素は干渉対象群ＣＧデータで描画される仮想物体のいずれとも干渉しないことが明らかになる。
【００６５】
レンダリング部１２０によるポリゴンＸの描画を行いながら、同様の処理を続けていく。そして画素（７，６）の位置が通知されると、干渉判定表作成部１４０は干渉対象マップ１５８の画素（７，６）の値を参照する。値は”７”であり（Ｓ４０５，Ｎ）、干渉対象ＬＵＴ１５６の画素値”７”のレコードの識別情報フィールドの値は”Ａ，Ｆ”である。これは、被干渉対象群ＣＧデータ１１４のポリゴンＸの画素（７，６）は、干渉対象群ＣＧデータ１１２で描画される仮想物体のポリゴンＡ，Ｆと干渉する可能性があることを示す。
【００６６】
干渉判定表作成部１４０は、描画処理中のＣＧデータであるポリゴンＸに対応するレコードが干渉判定情報の一例である干渉判定表１５４に存在するか調べる（Ｓ４０７）。ここでは存在していない。
【００６７】
そのため、干渉判定表作成部１４０は、ポリゴンＸを特定する情報（例えば”Ｘ”）と、干渉の可能性があるポリゴンＡ，Ｆのポリゴンデータを特定する情報（ここでは、”Ａ，Ｆ”）とを対応付けたレコードを干渉判定表１５４に追加する（Ｓ４１１）。
【００６８】
さらに処理を続け、レンダリング部１２０から画素（７，７）の位置が通知されると、干渉判定表作成部１４０は、干渉対象マップ１５８の画素（７，７）の値”１”を参照する。干渉対象ＬＵＴ１５６の画素値”１”のレコードの識別情報フィールドの値は”Ｂ，Ｆ”である。干渉判定表１５４には、ポリゴンＸに関するレコードが既に存在している（Ｓ４０７，Ｙ）。従って、干渉判定表作成部１４０は、干渉の可能性があるポリゴンデータを特定する情報に、ポリゴンＢ，Ｆのポリゴンデータを特定する情報（ここでは”Ｂ，Ｆ”）を追加する（Ｓ４１１）。この場合、”Ｂ”は既にレコード中に存在するので、干渉判定表作成部１４０は、重複しない”Ｆ”のみを追加する。結果として”Ａ，Ｂ，Ｆ”がポリゴンＸと対応付けられる値となる。
【００６９】
ポリゴンＹについても、同様にして処理を行なう。ポリゴンＹについては、画素（９，４）の描画時にポリゴンＹに対応したレコードが干渉判定表１５４に追加される。図１２に示すように、干渉対象マップ１５８において、ポリゴンＹの描画画素に対応する画素の値は”０”，”７”，”８”，”１”である。従って、対応する識別情報フィールドの値”Ａ，Ｆ”、”Ａ，Ｄ，Ｆ”及び”Ｂ，Ｆ”に基づき、ポリゴンＹの描画終了時には、ポリゴンＹに干渉の可能性のあるポリゴンのポリゴンデータを特定する情報”Ａ，Ｂ，Ｄ，Ｆ”が関連付けられている。
【００７０】
このようにして、干渉判定表１５４が被干渉対象群ＣＧデータ１１４に含まれるポリゴンデータに対して生成される。被干渉対象群ＣＧデータ１１４の全ての描画処理が終了すると（Ｓ４１３，Ｙ）、干渉判定表作成部１４０は処理を終了する。
【００７１】
例えば、ＶＲ（又はＭＲ）アプリケーションにおいて、位置姿勢の自由度が高い仮想物体（例えばユーザの手を表すモデルや、ユーザが手に持つ工具のモデルなど）を表すポリゴンデータを被干渉対象群ＣＧデータとする。そして、部品などの、操作される仮想物体を表すポリゴンデータを干渉対象群ＣＧデータとする。
【００７２】
そして、ユーザの手や工具の位置姿勢を例えば位置姿勢センサで測定し、その位置姿勢に応じて、干渉対象群ＣＧデータ中の干渉対象ＣＧデータを用いて、ポリゴンを描画して、干渉判定表を作成若しくは更新する。そして、完成した干渉判定表によって特定される仮想物体の組み合わせに対して、従前の干渉判定手法を適用する干渉判定部１７０により、最終的な干渉判定を行うことができる。なお、図１において干渉判定部１７０は外部接続された別装置として記載されているが、これは干渉判定部１７０が本発明に必須な構成ではないためである。
【００７３】
以上説明したように、本実施形態では、干渉対象群ＣＧデータの描画処理を行ないながら、描画される画素毎に、その画素を描画するＣＧデータの識別情報を記録した干渉対象情報として、干渉対象マップ及び干渉対象ＬＵＴを生成する。次いで被干渉対象群ＣＧデータの描画処理を行ないながら、描画画素に対応する干渉対象情報を参照する。干渉対象情報に干渉対象群ＣＧデータが含まれている場合、描画処理中の仮想物体との干渉判定を行うべきものと判断し、干渉判定情報を生成する。
【００７４】
本実施形態による干渉対象マップ、干渉対象ＬＵＴ及び干渉判定表はいずれも、仮想物体の描画処理と並行して、フレーム単位で、かつ簡単に得ることができる。そのため、ＶＲ（ＭＲ）アプリケーションのように、位置姿勢の自由度が高い仮想物体について、実時間で干渉判定を行う必要がある場合にも適用することができる。また、干渉の可能性がある組み合わせを画素単位での重なりから判断するので、実際には行う必要のない干渉判定処理を実行してしまう頻度を低減可能であり、ひいては干渉判定処理全体の処理時間を短縮することができる。
【００７５】
（第２の実施形態）
第１の実施形態においては、干渉対象マップ１５８に存在しない画素値に対応するレコードを削除しなければ、干渉対象ＬＵＴ１５６には使用されないレコードが蓄積されていく。
【００７６】
これに対し、本実施形態では、このようなレコードの再利用を可能とすることで、干渉対象ＬＵＴ１５６のサイズの肥大化を抑制するものである。
【００７７】
なお、干渉対象ＬＵＴ１５６のレコードの追加、および干渉対象マップ１５８の更新後の画素値の算出は、どのように行っても良いが、例えば、干渉対象ＬＵＴ１５６の各レコードに、「遷移後画素値」のフィールドを追加することにより容易に実現できる。また、干渉対象ＬＵＴ１５６中のレコードのうち、再利用も、例えば各レコードに「画素数」のフィールドを追加することで、容易に実現できる。
【００７８】
これらの具体例を、上述の描画処理に関して説明する。
図１３は、干渉対象群ＣＧデータ１１２の描画処理開始時における干渉対象ＬＵＴ１５６の内容を模式的に示す図である。ここで、干渉対象ＬＵＴ１５６のレコードには、画素値フィールド及び、画素値に対応するＣＧデータを特定する情報（識別情報）のフィールドに加え、画素数フィールド及び遷移後画素値フィールドが設けられている。
【００７９】
画素数フィールドは、対応する画素値を持つ画素が干渉対象マップ１５８中にいくつあるかを示す。遷移後画素値フィールドについては後述する。
この時点では、まだポリゴン描画を開始しておらず、干渉対象マップ作成部１３０は描画画素の位置の通知をレンダリング部１２０から受けていない。そのため、干渉対象マップ１５８中の画素値は全てゼロに初期化されたままの状態であり、干渉対象ＬＵＴ１５６も画素値”０”のレコードのみを有している。
【００８０】
干渉対象群ＣＧデータの描画処理開始時は、全画素とも値”０”である。そのため、画素値”０”のレコードの画素数フィールドには干渉対象マップ１５８の全画素数に等しい値（本例では１６×１２＝１９２）が格納され、識別情報フィールド並びに遷移後画素値フィールドは空き（又は空きを表す値）となる。
【００８１】
なお、ここでも、干渉対象群ＣＧデータは、ポリゴンＡ〜Ｆの順に描画され、また各ポリゴンは、縦方向位置の小さい画素から、同じ縦方向位置の場合には横方向位置の小さい画素から描画されるものとする。
【００８２】
図１４（ａ）はポリゴンＡの描画処理において最初に描画される画素（９，４）（図５参照）の描画後の干渉対象ＬＵＴ１５６の内容を示している。
レンダリング部１２０から、ポリゴンＡの最初の描画画素の位置が通知されると、干渉対象マップ作成部１３０は、干渉対象マップ１５８内の対応画素（９，４）の値を取得する。そして、干渉対象マップ作成部１３０は、画素（９，４）の値”０”に基づいて干渉対象ＬＵＴ１５６から画素値”０”のレコードを参照する。
【００８３】
干渉対象マップ作成部１３０は、画素値”０”のレコード内の遷移後画素値フィールドの値を参照するが、何も格納されていない（あるいは、空きを表す値である）。干渉対象マップ作成部１３０は、参照した遷移後画素値フィールドの空き状態を検出すると、新しいレコードを作成する。この際、生成するレコードの画素値フィールドには、干渉対象ＬＵＴ１５６に使用されていない最も小さな値を設定されるものとする。従って、ここでは１が設定される。また、識別情報フィールドにはポリゴンＡのポリゴンデータを特定する情報「Ａ」が設定される。
【００８４】
そして、干渉対象マップ作成部１３０は、新しいレコードの画素値フィールドに設定した値を、新しいレコードの作成のきっかけとなった空き状態の遷移後画素値フィールドに設定する。
【００８５】
そして、干渉対象マップ作成部１３０は、再度、画素値”０”のレコードの遷移後画素値を参照する。この時点では１が設定されている。また、遷移後画素値フィールドの値に対応する画素値”１”のレコードも存在する。そこで、干渉対象マップ作成部１３０は、画素値”０”のレコードの画素数フィールドの値を１減じ、一方で画素値”１”のレコードの画素数フィールドの値を１増やす。
【００８６】
次に、干渉対象マップ作成部１３０は、レンダリング部１２０から画素（１０，４）の通知を受ける。干渉対象マップ作成部１３０は、画素（１０、４）の値”０”に基づいて干渉対象ＬＵＴ１５６の画素値”０”のレコードの遷移後画素値フィールドを参照する。この時点で遷移後画素値フィールドには１が設定されており、画素値”１”のレコードも存在する。従って、干渉対象マップ作成部１３０は、画素値”０”のレコードの画素数フィールドの値を１減じ、一方で画素値”１”のレコードの画素数フィールドの値を１増やす。
【００８７】
このような動作をポリゴンＡの全画素について繰り返す。ポリゴンＡの描画終了時の干渉対象ＬＵＴ１５６の内容を図１４（ｂ）に示す。図５に示すように、ポリゴンＡの描画により、画素（９，４）〜（１６，４）、画素（８，５）〜（１６，５）及び画素（７，６）〜（１６，６）の合計２７画素が値”１”に更新される。従って、干渉対象ＬＵＴ１５６の画素値”１”のレコードの画素数フィールドの値が”２７”に、画素数０のレコードの画素数フィールドの値は１９２−２７＝１６５になる。
【００８８】
次にポリゴンＢの描画時に同様の処理を行うが、それに先立ち、干渉対象マップ作成部１３０は、干渉対象ＬＵＴ１５６の全レコードの遷移後画素値フィールドを空にする。
【００８９】
図１５（ａ）は、ポリゴンＢで最初に描画される画素（７，７）（図６参照）を描画した直後の干渉対象ＬＵＴ１５６の内容を示す。
上述のように、干渉対象マップ作成部１３０は、画素（７，７）の値”０”から、画素値”０”のレコードの遷移後画素値フィールドを参照するが、空きであるため、新たなレコードを生成する。このレコードの画素値フィールドには２が、識別情報フィールドにはポリゴンＢのポリゴンデータを特定する情報「Ｂ」が設定される。そして、干渉対象マップ作成部１３０は画素値”０”のレコードの遷移後画素値フィールドに「２」を設定し、画素値”２”のレコードの画素数フィールドの値を１増加させ、画素値”０”のレコードの画素数フィールドの値を１減少させる。
【００９０】
このような動作をポリゴンＢの全画素について繰り返す。ポリゴンＢの描画終了時の干渉対象ＬＵＴ１５６の内容を図１５（ｂ）に示す。
ポリゴンＢの描画が終了すると、干渉対象マップ作成部１３０は、ポリゴンＣの描画に先立ち、干渉対象ＬＵＴ１５６の全レコードの遷移後画素値フィールドを空にする。
【００９１】
しかし、上述のようにポリゴンＣは画面内に描画されないため、ポリゴンＣの描画処理終了時の干渉対象ＬＵＴ１５６は、図１５（ｂ）に示す干渉対象ＬＵＴ１５６において、画素値”０”のレコードの遷移後画素値フィールドが空きの状態に等しい。
【００９２】
干渉対象マップ作成部１３０は、干渉対象ＬＵＴ１５６の全レコードの遷移後画素値フィールドを空き状態とし、ポリゴンＤの描画処理を干渉対象ＬＵＴ１５６に反映させる。ポリゴンＤの描画処理において最初に描画される画素（１０，４）がレンダリング部１２０から通知される。
【００９３】
干渉対象マップ作成部１３０は、まず干渉対象マップ１５８の画素（１０，４）の値を取得する。その値は１であるので、干渉対象ＬＵＴ１５６の画素値”１”のレコードの遷移後画素値フィールドを参照する。
【００９４】
この時点では遷移後画素値フィールドはクリアされていて、空き状態であるため、干渉対象マップ作成部１３０は、新たに画素値”３”のレコードを生成する。そして、識別情報フィールドには、画素値”１”のレコードの識別情報の内容「Ａ」に、現在処理中の画素の識別情報であるポリゴンＤのポリゴンデータを特定する情報「Ｄ」を追加した、「Ａ，Ｄ」を設定する。
【００９５】
さらに干渉対象マップ作成部１３０は、画素値”１”のレコードの遷移後画素値フィールドに３を設定する。そして、画素値”１”のレコードの画素数フィールドの値を１減じて２６に、画素値”３”のレコードの画素数フィールドの値を１増やし１に設定する。この時点の干渉対象ＬＵＴ１５６を図１６（ａ）に示す。このようにしてポリゴンＤの全画素の描画結果を反映させた干渉対象ＬＵＴ１５６を図１６（ｂ）に示す。
【００９６】
同様にして、ポリゴンＥの全画素の描画結果を反映させた干渉対象ＬＵＴ１５６を図１７に示す。
最後にポリゴンＦの描画を行う。これまでの処理と同様に画素（９，４）を描画した後の干渉対象ＬＵＴ１５６を図１８（ａ）に、画素（９，６）を描画した後の干渉対象ＬＵＴ１５６を図１８（ｂ）に示す。
【００９７】
この時点で、画素値”１”のレコードの画素数フィールドの値が０になる。画素数フィールドの値が０のレコードはもはや不要であるので、次に新たにレコードを作成する際には再利用可能である。
【００９８】
ポリゴンＦの描画処理が進み、画素（７，７）が通知された際、干渉対象マップ１５８の画素（７，７）の値は２だが、画素値”２”のレコードの遷移後画素値フィールドは空き状態である。
【００９９】
従って、干渉対象マップ作成部１３０は新たにレコードを作成することになるが、この時点で画素値”１”のレコードの画素数フィールドの値が”０”であることを検出する。これにより、干渉対象マップ作成部１３０はレコードを追加する代わりに、画素値”１”のレコードを再利用する。
【０１００】
すなわち、干渉対象マップ作成部１３０は、画素値”１”のレコードの識別情報フィールドに、ポリゴンＢ，Ｆのポリゴンデータを特定する情報「Ｂ，Ｆ」を設定し、遷移後画素値フィールドを空き状態にする。そして画素値”２”のレコードの遷移後画素値フィールドの値を”１”に設定する。画素（７，７）の描画を反映した後の干渉対象ＬＵＴ１５６を図１９（ａ）に示す。
【０１０１】
さらに描画処理を継続し、ポリゴンＦの全画素の描画を完了したときの干渉対象ＬＵＴ１５６の状態は図１９（ｂ）のようになる。
画素値フィールドの値が”０”となったレコードを再利用することにより、再利用を行わない場合と比較し、干渉対象ＬＵＴ１５６のレコード数が少なくて済む。
【０１０２】
図２０は、レコードを再利用した場合について、図９と同様に、ポリゴンＦを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【０１０３】
図９と図２０との比較から明らかなように、レコードの再利用により、干渉対象ＬＵＴ１５６のレコード数が削減されていることがわかる。
【０１０４】
被干渉対象群ＣＧデータの描画処理については第１の実施形態と同様に行うことが可能であり、それにより同様の干渉判定表が作成される。
このように本実施形態によれば、第１の実施形態における効果に加え、干渉対象ＬＵＴのレコード数の肥大化を抑制することが可能となる効果が実現できる。
【０１０５】
（第３の実施形態）
本実施形態は、干渉判定表の作成処理をより効率的に行うものである。
具体的には、干渉対象ＬＵＴ１５６のレコードに処理済フラグフィールドを追加することにより、同じ画素値に対応する識別情報を、同じデータで更新する処理を不要とするものである。
【０１０６】
図２１は、本実施形態に係る干渉対象ＬＵＴの構成例と、本実施形態における干渉判定表の更新処理について説明する図である。
ここでは、干渉対象群ＣＧデータの描画処理終了時の干渉対象ＬＵＴ１５６が、第２の実施形態で説明した方法で生成されている（すなわち、図１９（ｂ）に示す状態である）ものとする。
【０１０７】
図２１に示すように、本実施形態に係る干渉対象ＬＵＴ１５６は、少なくとも画素値フィールド、識別情報フィールド及び処理済フラグフィールドを有する。
干渉判定表作成部１４０は、まず、干渉対象ＬＵＴ１５６の全レコードの処理済フラグフィールドを未処理状態を表す値（ここでは「未」）に設定する。
【０１０８】
そして、干渉判定表作成部１４０は、上述のポリゴンＸのポリゴンデータによる最初の描画画素位置（４，４）がレンダリング部１２０から通知されると、干渉対象マップ１５８の画素（４，４）の値を参照する。そして、干渉判定表作成部１４０は、画素（４，４）の値”０”に対応する干渉対象ＬＵＴ１５６のレコードの処理済フラグフィールドを参照する。画素値”０”のレコードの処理済フラグフィールドは未処理状態を示す値である「未」となっているため、干渉判定表作成部１４０はその値を、処理済を表す値（ここでは「済」）に書き換える。
【０１０９】
さらに、干渉判定表作成部１４０は、画素値”０”のレコードの識別情報フィールドを参照する。空き状態であるため、干渉判定表に対する処理（レコードの作成、更新）は行わない。この処理は第１の実施形態と同様である。
【０１１０】
しかし、次の描画画素（５，４）が通知された際には、画素値”０”のレコードの処理済フィールドの値が「済」となっているため、その時点で描画画素（５，４）についての処理は打ち切る。
【０１１１】
その後、画素（７，６）がレンダリング部１２０から通知されるまでは干渉対象マップ１５８の対応画素の値は”０”である。そして、描画画素（７，６）が通知されると、干渉対象マップ１５８の対応画素（７，６）の値は”７”である。従って、干渉判定表作成部１４０は、干渉対象ＬＵＴ１５６の画素値”７”のレコードの処理済フラグフィールドを参照する。値は「未」であるため、干渉判定表作成部１４０はそれを「済」に書き換えた後、同レコードの識別情報フィールドを参照する。今度は値が”Ａ，Ｆ”であるため、第１の実施形態で説明したように、干渉判定表１５４にポリゴンＸについてのレコードを追加する処理を行う。
【０１１２】
次に画素（７，７）では、干渉対象マップ１５８の画素（７，７）の値が１となる。干渉対象ＬＵＴ１５６における画素値”１”のレコードの処理済フラグフィールドの値は「未」であるため、干渉判定表作成部１４０はそれを「済」に書き換えた後、同レコードの識別情報フィールドを参照する。今度は値が”Ｂ，Ｆ”であるため、第１の実施形態で説明したように、干渉判定表１５４にポリゴンＸについてのレコードに、識別情報を追加する処理を行なう。このようにして、ポリゴンＸの全ての描画画素について処理を行う。
【０１１３】
次に、ポリゴンＹの描画時においても同様の処理を行うが、ポリゴンＹの描画処理に先立ち、干渉判定表作成部１４０は、干渉対象ＬＵＴ１５６の全レコードの処理済フラグフィールドを「未」としておく。
こうしてポリゴンＹの全画素の処理を終えると、第１の実施形態と同様な干渉判定表が得られる。
【０１１４】
このように、本実施形態によれば、第１の実施形態と同様の干渉判定表を、より効率的に作成することが可能になる。
【０１１５】
（他の実施形態）
なお、上述の実施形態では、干渉対象情報を、干渉対象マップと干渉対象ＬＵＴとの組み合わせによって構成した。しかし、フレームバッファの各画素について、その画素を含む（描画する）仮想物体を特定する情報が記録できれば、干渉対象情報の形式はどのようなものであってもよい。例えば、干渉対象マップの各画素あたりのビット数が十分多い場合には、各画素に直接ＣＧデータの識別情報を記憶するようにしてもよい。
【０１１６】
なお、上述の実施形態では、干渉判定表は、被干渉対象群ＣＧデータ（具体的にはポリゴンデータ）の識別情報をキーとし、干渉対象群ＣＧデータ（ポリゴンデータ）の識別情報群を値とするレコードの集合であった。しかし、逆に、干渉対象群ＣＧデータの識別情報をキーとし、被干渉対象群ＣＧデータの識別情報群を値とするレコードの集合としてもよい。
【０１１７】
また、上述の実施形態では、被干渉対象群ＣＧデータの全てについて、１フレーム分の干渉判定表を作成してから、実際の干渉判定を行うものとして説明した。こうすることにより、レンダリング処理終了後に、干渉判定処理を一括して行えるため、比較的複雑な干渉判定処理を行うことができる。
【０１１８】
しかし、実施形態で例示したような、ポリゴン同士の干渉判定であれば、より簡単な処理で実現することが可能である。ＧＰＵの進歩により、最近ではレンダリング処理はグラフィックボード（ＧＰＵとその周辺回路）で行われることが多くなった。グラフィックボードで複雑な干渉計算を行うのは困難であるが、ポリゴン同士の干渉判定であれば可能である。
【０１１９】
そのため、ポリゴン同士の干渉判定をグラフィックボードで行う場合などでは、干渉判定表の完成を待たずに、レコードが生成若しくは更新される毎に干渉判定を行うことが有効である。
【０１２０】
上述の実施形態と同様の状況を例にとって説明する。
この場合、被干渉対象群ＣＧデータ毎に干渉判定を行うため、被干渉対象群ＣＧデータの識別情報を干渉判定表１５４に含める必要はない。換言すれば、干渉判定表１５４には、描画処理中のＣＧデータに関して干渉可能性のある干渉対象群ＣＧデータの識別情報のみが含まれていれば十分であり、キーによる検索機能は不要である。
【０１２１】
従って、上述の実施形態では画素（７，６）が通知された際に、干渉判定表作成部１４０はキーをポリゴンＸとし、値をＡ，Ｆとするレコードを生成したが、本実施形態では、干渉判定表１５４にポリゴンＡ，Ｆのポリゴンデータの識別情報を設定するだけでよい。次いで、画素（７，７）が通知された際に、ポリゴンＢ，Ｆのポリゴンデータの識別情報を追加設定するが、既にＦは設定済みであるので、Ｂのみを追加し、結果として干渉判定表にはポリゴンＡ，Ｂ，Ｆのポリゴンデータの識別情報が保持される。ポリゴンＸの描画処理が終了すると、干渉判定部１７０が、干渉判定表１５４を用いて干渉判定を行う。
【０１２２】
この時点で干渉判定表にはポリゴンＸの描画処理が反映されているので、干渉判定を行うべきポリゴンの組は（Ｘ，Ａ），（Ｘ，Ｂ）、（Ｘ，Ｆ）の３つのみである。干渉判定処理を終えると、次はポリゴンＹの描画処理を行うが、それに先立ち、干渉判定表１５４の内容を消去する。そして、ポリゴンＸの描画時と同様の処理を行なうと、干渉判定表１５４はポリゴンＡ，Ｂ，Ｄ，Ｆのポリゴンデータの識別情報を持つことになる。そこで干渉判定部１７０は、（Ｙ，Ａ），（Ｙ，Ｂ），（Ｙ，Ｄ），（Ｙ，Ｆ）の４通りのポリゴンの組み合わせについて干渉判定処理を行う。以上の処理によって、干渉対象群と被干渉対象群の間の干渉判定は終了する。
【０１２３】
また、上述の実施形態では、ＣＧデータの識別情報はポリゴンデータを特定するものとして用いたが、仮想物体を特定するものとして用いてもよい。例えば、凸物体同士の干渉判定を行う干渉判定部１７０が接続される干渉判定情報の生成装置の場合、凸物体を特定するものとして識別情報を定義することができる。
【０１２４】
上述の実施形態は、システム或は装置のコンピュータ（或いはＣＰＵ、ＭＰＵ等）によりソフトウェア的に実現することも可能である。
従って、上述の実施形態をコンピュータで実現するために、該コンピュータに供給されるコンピュータプログラム自体も本発明を実現するものである。つまり、上述の実施形態の機能を実現するためのコンピュータプログラム自体も本発明の一つである。
【０１２５】
なお、上述の実施形態を実現するためのコンピュータプログラムは、コンピュータで読み取り可能であれば、どのような形態であってもよい。例えば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等で構成することができるが、これらに限るものではない。
【０１２６】
上述の実施形態を実現するためのコンピュータプログラムは、記憶媒体又は有線／無線通信によりコンピュータに供給される。プログラムを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、磁気テープ等の磁気記憶媒体、ＭＯ、ＣＤ、ＤＶＤ等の光／光磁気記憶媒体、不揮発性の半導体メモリなどがある。
【０１２７】
有線／無線通信を用いたコンピュータプログラムの供給方法としては、コンピュータネットワーク上のサーバを利用する方法がある。この場合、本発明を形成するコンピュータプログラムとなりうるデータファイル（プログラムファイル）をサーバに記憶しておく。プログラムファイルとしては、実行形式のものであっても、ソースコードであっても良い。
【０１２８】
そして、このサーバにアクセスしたクライアントコンピュータに、プログラムファイルをダウンロードすることによって供給する。この場合、プログラムファイルを複数のセグメントファイルに分割し、セグメントファイルを異なるサーバに分散して配置することも可能である。
つまり、上述の実施形態を実現するためのプログラムファイルをクライアントコンピュータに提供するサーバ装置も本発明の一つである。
【０１２９】
また、上述の実施形態を実現するためのコンピュータプログラムを暗号化して格納した記憶媒体を配布し、所定の条件を満たしたユーザに、暗号化を解く鍵情報を供給し、ユーザの有するコンピュータへのインストールを許可してもよい。鍵情報は、例えばインターネットを介してホームページからダウンロードさせることによって供給することができる。
【０１３０】
また、上述の実施形態を実現するためのコンピュータプログラムは、すでにコンピュータ上で稼働するＯＳの機能を利用するものであってもよい。
さらに、上述の実施形態を実現するためのコンピュータプログラムは、その一部をコンピュータに装着される拡張ボード等のファームウェアで構成してもよいし、拡張ボード等が備えるＣＰＵで実行するようにしてもよい。
【図面の簡単な説明】
【０１３１】
【図１】本発明の第１の実施形態に係る干渉判定情報の生成装置の機能構成例を表すブロック図である。
【図２】本発明の第１の実施形態におけるレンダリング部１２０の動作を説明する図である。
【図３】干渉対象群ＣＧデータが表す仮想物体の一例としての立方体を示す図である。
【図４】本発明の第１の実施形態における干渉対象マップ作成部の動作を説明するフローチャートである。
【図５】本発明の第１の実施形態において、ＣＧデータが表す立方体の描画位置と干渉対象マップ１５８中の画素位置の対応および、ポリゴンＡを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【図６】本発明の第１の実施形態において、図５の状態からさらにポリゴンＢを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【図７】本発明の第１の実施形態において、図６の状態からさらにポリゴンＤを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【図８】本発明の第１の実施形態において、図７の状態からさらにポリゴンＥを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【図９】本発明の第１の実施形態において、図８の状態からさらに干渉対象群ＣＧデータの最後のＣＧデータにより、ポリゴンＦを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【図１０】干渉対象マップ１５８及び干渉対象ＬＵＴ１５６が作成されている状態における、ポリゴンＸの描画画素と干渉対象マップ１５８の画素との対応関係及び、及び、干渉対象ＬＵＴ、干渉判定表の例を示す図である。
【図１１】本発明の第１の実施形態における干渉判定表作成部の動作を説明するフローチャートである。
【図１２】図１０の状態からさらにポリゴンＹを描画した際の描画画素と干渉対象マップ１５８の画素との対応関係及び、干渉対象ＬＵＴ、干渉判定表の例を示す図である。
【図１３】本発明の第２の実施形態において、干渉対象群ＣＧデータ１１２の描画処理開始時における干渉対象ＬＵＴ１５６の内容を模式的に示す図である。
【図１４】本発明の第２の実施形態における干渉対象ＬＵＴ１５６の内容を模式的に示す図である。
【図１５】本発明の第２の実施形態における干渉対象ＬＵＴ１５６の内容を模式的に示す図である。
【図１６】本発明の第２の実施形態における干渉対象ＬＵＴ１５６の内容を模式的に示す図である。
【図１７】本発明の第２の実施形態における干渉対象ＬＵＴ１５６の内容を模式的に示す図である。
【図１８】本発明の第２の実施形態における干渉対象ＬＵＴ１５６の内容を模式的に示す図である。
【図１９】本発明の第２の実施形態における干渉対象ＬＵＴ１５６の内容を模式的に示す図である。
【図２０】本発明の第２の実施形態において、ポリゴンＦを描画し終わったときの干渉対象マップ１５８の画素値と干渉対象ＬＵＴ１５６の内容の例をそれぞれ模式的に示す図である。
【図２１】本発明の第３の実施形態における干渉対象ＬＵＴの構成例と、本実施形態における干渉判定表の更新処理について説明する図である。
【図１】
2008305347.tif 000003
【図２】
2008305347.tif 000004
【図３】
2008305347.tif 000005
【図４】
2008305347.tif 000006
【図１１】
2008305347.tif 000007
【図１３】
2008305347.tif 000008
【図１４】
2008305347.tif 000009
【図１５】
2008305347.tif 000010
【図１６】
2008305347.tif 000011
【図１７】
2008305347.tif 000012
【図１８】
2008305347.tif 000013
【図１９】
2008305347.tif 000014
【図２１】
2008305347.tif 000015
【図５】
2008305347.tif 000016
【図６】
2008305347.tif 000017
【図７】
2008305347.tif 000018
【図８】
2008305347.tif 000019
【図９】
2008305347.tif 000020
【図１０】
2008305347.tif 000021
【図１２】
2008305347.tif 000022
【図２０】
2008305347.tif 000023