(57)【特許請求の範囲】
【請求項１】
現実空間を撮像した画像である現実空間画像に、仮想空間を撮像した画像である仮想空間画像を重畳した複合現実画像を、ユーザに対して提示するための情報処理装置であって、
前記現実空間画像の入力を受け付ける現実空間画像入力受付手段と、
前記複合現実画像を提示するユーザの位置及び姿勢の入力を受け付ける位置姿勢入力受付手段と、
ユーザからの第１の指示に応じて、仮想空間に配置された３次元モデルが、前記現実空間においてユーザが保持する物体の動きに追従するように設定する設定手段と、
前記設定手段で設定された３次元モデルを、前記物体の動きに追従するように移動させる３次元モデル移動手段と、
前記３次元モデル移動手段で移動された３次元モデルを含む仮想空間を、前記位置姿勢入力受付手段で入力を受け付けた位置及び姿勢の少なくとも一方に基づいて撮像することにより、前記仮想空間画像を生成する仮想空間画像生成手段と、
前記現実空間画像入力受付手段で入力を受け付けた現実空間画像に、前記仮想空間画像生成手段で生成された仮想空間画像を重畳し、前記複合現実画像を生成する複合現実画像生成手段と
を備え、
前記設定手段は、前記物体の動きに追従して移動させた３次元モデルが、当該３次元モデルとは異なる３次元モデルと接触した場合に、当該設定手段で設定された前記物体の動きに追従する設定を解除し、
前記３次元モデル移動手段は、前記設定手段で前記物体の動きに追従する設定が解除されたことに応じて、移動させた３次元モデルを、前記ユーザが保持する物体の動きに追従させず、当該３次元モデルとは異なる３次元モデルと接触した位置で停止することを特徴とする情報処理装置。
【請求項２】
前記設定手段は、前記第１の指示とは異なる第２の指示を検知した場合には、前記３次元モデル移動手段で移動を停止させた３次元モデルが前記物体の動きに追従するように再度設定し、
前記３次元モデル移動手段は、前記第１の指示とは異なる第２の指示を検知した場合には、前記３次元モデル移動手段で移動を停止させた３次元モデルを前記物体の位置に移動させると共に、前記物体の動きに追従するように移動を再開させることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記物体は、前記情報処理装置と通信可能に接続された入力デバイスであり、
前記位置姿勢入力受付手段は、前記入力デバイスの位置及び姿勢の入力を更に受け付け、
前記３次元モデル移動手段は、前記位置姿勢入力受付手段で入力を受け付けた前記入力デバイスの位置及び姿勢に基づいて特定される３次元モデルを移動させることを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記３次元モデル移動手段は、前記位置姿勢入力受付手段で入力を受け付けた前記入力デバイスの位置及び姿勢に基づいて仮想空間に３次元モデルを生成し、生成された３次元モデルと接触する３次元モデルを移動させることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記３次元モデル移動手段は、ユーザからの第１の指示によって移動された３次元モデルが、当該３次元モデルとは異なる３次元モデルと接触した場合には、接触した位置で当該３次元モデルの移動を停止させ、ユーザからの第２の指示によって移動された３次元モデルが、当該３次元モデルとは異なる３次元モデルと接触した場合には、当該３次元モデルの移動を停止させないことを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記位置姿勢入力受付手段は、前記情報処理装置と通信可能に接続されたセンサから送信される情報を受信することで、前記ユーザの位置及び姿勢の入力を受け付けることを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記情報処理装置は、現実空間を撮像可能なヘッドマウントディスプレイと通信可能に接続され、
前記現実空間画像入力受付手段は、前記ヘッドマウントディスプレイで撮像された前記現実空間画像の入力を受け付け、
前記情報処理装置は、
前記複合現実画像生成手段で生成された複合現実画像を前記ヘッドマウントディスプレイに送信する複合現実画像送信手段を更に備え、
前記ヘッドマウントディスプレイは、
前記情報処理装置から送信された複合現実画像を表示する表示手段を備えることを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
現実空間を撮像した画像である現実空間画像に、仮想空間を撮像した画像である仮想空間画像を重畳した複合現実画像を、ユーザに対して提示するための情報処理装置の制御方法であって、
前記情報処理装置の現実空間画像入力受付手段が、前記現実空間画像の入力を受け付ける現実空間画像入力受付ステップと、
前記情報処理装置の位置姿勢入力受付手段が、前記複合現実画像を提示するユーザの位置及び姿勢の入力を受け付ける位置姿勢入力受付ステップと、
前記情報処理装置の設定手段が、ユーザからの指示に応じて、仮想空間に配置された３次元モデルが、前記現実空間においてユーザが保持する物体の動きに追従するように設定する設定ステップと、
前記情報処理装置の３次元モデル移動手段が、前記設定ステップで設定された３次元モデルを、前記物体の動きに追従するように移動させる３次元モデル移動ステップと、
前記情報処理装置の仮想空間画像生成手段が、前記３次元モデル移動ステップで移動された３次元モデルを含む仮想空間を、前記位置姿勢入力受付ステップで入力を受け付けた位置及び姿勢の少なくとも一方に基づいて撮像することにより、前記仮想空間画像を生成する仮想空間画像生成ステップと、
前記情報処理装置の複合現実画像生成手段が、前記現実空間画像入力受付ステップで入力を受け付けた現実空間画像に、前記仮想空間画像生成ステップで生成された仮想空間画像を重畳し、前記複合現実画像を生成する複合現実画像生成ステップと
を備え、
前記設定ステップは、前記物体の動きに追従して移動させた３次元モデルが、当該３次元モデルとは異なる３次元モデルと接触した場合に、当該設定ステップで設定された前記物体の動きに追従する設定を解除し、
前記３次元モデル移動ステップは、前記設定ステップで前記物体の動きに追従する設定が解除されたことに応じて、移動させた３次元モデルを、前記ユーザが保持する物体の動きに追従させず、当該３次元モデルとは異なる３次元モデルと接触した位置で停止することを特徴とする情報処理装置の制御方法。
【請求項９】
現実空間を撮像した画像である現実空間画像に、仮想空間を撮像した画像である仮想空間画像を重畳した複合現実画像を、ユーザに対して提示するための情報処理装置の制御方法を実行可能なプログラムであって、
前記情報処理装置を、
前記現実空間画像の入力を受け付ける現実空間画像入力受付手段と、
前記複合現実画像を提示するユーザの位置及び姿勢の入力を受け付ける位置姿勢入力受付手段と、
ユーザからの指示に応じて、仮想空間に配置された３次元モデルが、前記現実空間においてユーザが保持する物体の動きに追従するように設定する設定手段と、
前記設定手段で設定された３次元モデルを、前記物体の動きに追従するように移動させる３次元モデル移動手段と、
前記３次元モデル移動手段で移動された３次元モデルを含む仮想空間を、前記位置姿勢入力受付手段で入力を受け付けた位置及び姿勢の少なくとも一方に基づいて撮像することにより、前記仮想空間画像を生成する仮想空間画像生成手段と、
前記現実空間画像入力受付手段で入力を受け付けた現実空間画像に、前記仮想空間画像生成手段で生成された仮想空間画像を重畳し、前記複合現実画像を生成する複合現実画像生成手段
として機能させ、
前記設定手段は、前記物体の動きに追従して移動させた３次元モデルが、当該３次元モデルとは異なる３次元モデルと接触した場合に、当該設定手段で設定された前記物体の動きに追従する設定を解除し、
前記３次元モデル移動手段は、前記設定手段で前記物体の動きに追従する設定が解除されたことに応じて、移動させた３次元モデルを、前記ユーザが保持する物体の動きに追従させず、当該３次元モデルとは異なる３次元モデルと接触した位置で停止することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザが保持する物体に追従して移動する３次元モデルと、当該３次元モデルとは異なる３次元モデルとの接触をユーザに認識させることの可能な情報処理装置、その制御方法、及びプログラムに関する。
【背景技術】
【０００２】
従来、ヘッドマウントディスプレイ（ＨＭＤ）やスマートフォンで撮影した現実の世界（以下、現実空間）の画像に、コンピュータで生成された仮想の世界（以下、仮想空間）の画像を重畳させて、ＨＭＤやスマートフォンの画面に表示する技術が存在する。例えば、複合現実感（Ｍｉｘｅｄ  Ｒｅａｌｉｔｙ、以下、ＭＲ）技術や拡張現実感（Ａｕｇｍｅｎｔｅｄ  Ｒｅａｌｉｔｙ）技術などがある。
【０００３】
特にＭＲ技術は、ユーザが装着したＨＭＤに現実空間の画像と仮想空間の画像とを重畳して表示するので、目の前に仮想空間の情報が表示されているかのように見え、臨場感が非常に高い。そのため、ＭＲ技術を用いた様々な活用方法が考えられている。
【０００４】
例えば下記の特許文献１では、仮想のペットを育成する複合現実感提示装置において、ユーザの所定部位による所定動作により、仮想のペットを示す３次元モデルの内部状態を遷移させることで、仮想物体の存在感の認知を容易にする技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−１１２２８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、このＭＲ技術を使用して、仮想空間に配置された３次元モデルをユーザが移動させる場合がある。例えば、ＭＲ技術によって表現されたモデルルームにおいて、家具を移動する場合である。
【０００７】
より具体的には、現実空間の画像と、モデルルームを３次元モデルで表現した仮想空間の画像とを重畳させ、重畳された画像をＨＭＤを通じて表示することにより、実際に建築される室内を再現する。そして、表示されたモデルルーム内には、３次元モデルで表現された椅子や机といった家具が配置されており、ユーザはマウス等のデバイスを通じて、この家具を自由に持ち運ぶことができる。こうすることで、好きな位置に好きな家具をレイアウトしながら、モデルルームを体験することができる。
【０００８】
しかしながら、このようなモデルルームで家具を移動させる場合、モデルルームも家具も３次元モデルで表現されているので、家具を移動する際に壁を貫通して移動させることができてしまう。本来であれば、現実空間と同様に、３次元モデル同士が重なり合うことのないように制御するべきである。しかしながら、従来は、仮想空間内の指定された位置に３次元モデルを表示するようになっているので、３次元モデル同士が重なっていたとしても、そのまま指定された位置に表示されてしまう問題がある。つまり、より現実空間と同様な、リアルな動作をＭＲ技術で実現することが求められている。
【０００９】
本発明は、ユーザが保持する物体に追従して移動する３次元モデルと、当該３次元モデルとは異なる３次元モデルとの接触をユーザに認識させることの可能な仕組みを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記の目的を達成するために、本発明の情報処理装置は、現実空間を撮像した画像である現実空間画像に、仮想空間を撮像した画像である仮想空間画像を重畳した複合現実画像を、ユーザに対して提示するための情報処理装置であって、前記現実空間画像の入力を受け付ける現実空間画像入力受付手段と、前記複合現実画像を提示するユーザの位置及び姿勢の入力を受け付ける位置姿勢入力受付手段と、ユーザからの第１の指示に応じて、仮想空間に配置された３次元モデルが、前記現実空間においてユーザが保持する物体の動きに追従するように設定する設定手段と、前記設定手段で設定された３次元モデルを、前記物体の動きに追従するように移動させる３次元モデル移動手段と、前記３次元モデル移動手段で移動された３次元モデルを含む仮想空間を、前記位置姿勢入力受付手段で入力を受け付けた位置及び姿勢の少なくとも一方に基づいて撮像することにより、前記仮想空間画像を生成する仮想空間画像生成手段と、前記現実空間画像入力受付手段で入力を受け付けた現実空間画像に、前記仮想空間画像生成手段で生成された仮想空間画像を重畳し、前記複合現実画像を生成する複合現実画像生成手段とを備え、前記設定手段は、前記物体の動きに追従して移動させた３次元モデルが、当該３次元モデルとは異なる３次元モデルと接触した場合に、当該設定手段で設定された前記物体の動きに追従する設定を解除し、前記３次元モデル移動手段は、前記設定手段で前記物体の動きに追従する設定が解除されたことに応じて、移動させた３次元モデルを、前記ユーザが保持する物体の動きに追従させず、当該３次元モデルとは異なる３次元モデルと接触した位置で停止することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、ユーザが保持する物体に追従して移動する３次元モデルと、当該３次元モデルとは異なる３次元モデルとの接触をユーザに認識させることが可能となる。
【図面の簡単な説明】
【００１２】
【図１】マーカーを用いた場合のＭＲシステム１００の一例を示す構成図である。
【図２】磁気式トラッキングセンサーを用いた場合のＭＲシステム１００の一例を示す構成図である。
【図３】光学式トラッキングセンサーを用いた場合のＭＲシステム１００の一例を示す構成図である。
【図４】光学式トラッキングセンサーを用いたＭＲシステム１００で使用するマウス４０１の一例を示す模式図である。
【図５】ＭＲシステム１００のハードウェア構成の一例を示す構成図である。
【図６】情報処理装置１０１のモジュール構成の一例を示す構成図である。
【図７】本発明の実施形態における一連の処理の流れの一例を示すフローチャートである。
【図８】本発明の実施形態における仮想空間生成処理の一例を示すフローチャートである。
【図９】マウス４０１にカーソルオブジェクト９０１を重畳させた場合の一例を示す模式図である。
【図１０】カーソルオブジェクト９０１で仮想オブジェクト１００２を持ち上げた場合の一例を示す模式図である。
【図１１】カーソルオブジェクト９０１で持ち上げた仮想オブジェクト１００２と、仮想オブジェクト１００３が接触した場合と、仮想オブジェクト１００２を引き寄せた場合の一例を示す模式図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照しながら、本発明の実施形態の一例について説明する。
【００１４】
図１から図３は、ＭＲシステム１００のシステム構成の一例を示す図である。図１から図３に示すＭＲシステム１００は、情報処理装置１０１、ＨＭＤ１０２が相互にデータ通信可能に接続されている。情報処理装置１０１とＨＭＤ１０２との接続は、有線接続であってもよいし、無線接続であってもよい。尚、図１から図３のシステム上に接続される各種端末の構成は一例であり、用途や目的に応じて様々な構成例がある。
【００１５】
情報処理装置１０１は、パーソナルコンピュータやサーバのような装置である。情報処理装置１０１は、ＨＭＤ１０２で撮影（撮像）された現実空間の画像（以下、現実空間画像）と、情報処理装置１０１で生成された仮想空間の画像（以下、仮想空間画像）とを重畳した画像（以下、複合現実画像）を生成し、ＨＭＤ１０２に送信する。
【００１６】
ＨＭＤ１０２は、いわゆるヘッドマウントディスプレイである。ＨＭＤ１０２は、ユーザの頭部に装着するディスプレイ装置であり、右目用と左目用のビデオカメラと、右目用と左目用のディスプレイを備えている。ＨＭＤ１０２は、ＨＭＤ１０２のビデオカメラで撮影された現実空間画像を情報処理装置１０１に送信する。そして、情報処理装置１０１から送信されてきた複合現実画像を受信し、ディスプレイに表示する。更に、右目用と左目用のビデオカメラとディスプレイを設けているので、視差によって立体感を得ることができる。尚、ＨＭＤ１０２で撮影する現実空間画像、及び表示する複合現実画像は、動画形式が望ましいが、所定の間隔で撮影された画像であってもよい。
【００１７】
まず、図１のＭＲシステム１００は、一意に識別可能なマーカー１０３が所定の場所に設置されており、ＨＭＤ１０２から送信される現実空間画像に含まれるマーカー１０３を情報処理装置１０１が識別することで、ＨＭＤ１０２の位置や姿勢を特定する形態のシステムである。より具体的には、仮想空間における所定の位置と、所定のマーカー１０３とを紐づけておき、現実空間画像から当該マーカー１０３が検出された場合には、そのマーカー１０３の大きさや傾きから、ＨＭＤ１０２が仮想空間上のどの位置にいるのか、及びどの姿勢であるのかを特定する。尚、ＭＲシステム１００では、ＨＭＤ１０２がどの方向を向いても、いずれかのマーカー１０３が検出できるように、マーカー１０３を配置しておくのがよい。
【００１８】
次に、図２のＭＲシステム１００は、磁場を発生させるトランスミッター２０１を用いて、ＨＭＤ１０２の位置や姿勢を特定する形態のシステムである。トランスミッター２０１は磁場を発生し、発生した磁場をＨＭＤ１０２に備えられたレシーバ２０２が受信する。受信した磁場に関する情報を情報処理装置１０１に送信すると、磁場の強さからＨＭＤ１０２の位置や姿勢を情報処理装置１０１が特定する。
【００１９】
そして、図３のＭＲシステム１００は、赤外線カメラ３０１（センサ）を用いて、ＨＭＤ１０２の位置や姿勢を特定する形態のシステムである。ＨＭＤ１０２には、オプティカルマーカー３０２という光マーカーを備えており、赤外線カメラ３０１を用いて撮影し、撮影した結果を情報処理装置１０１に送信すると、オプティカルマーカー３０２を検出して、ＨＭＤ１０２の位置姿勢を特定する。オプティカルマーカー３０２が撮影できるように、赤外線カメラ３０１を複数台設置することが望ましい。
【００２０】
このように、ＨＭＤ１０２の位置や姿勢を特定するためには、マーカーやセンサーを用いる必要がある。ＨＭＤ１０２の位置や姿勢を特定できれば、どのような形態でも構わない。本実施形態では、図３のシステム構成を例に説明を行う。
【００２１】
図４は、本実施形態で用いるマウス４０１の一例である。マウス４０１は、ポインティングデバイスであり、情報処理装置１０１とデータ通信可能に接続されている。マウス４０１と情報処理装置１０１との接続は、有線接続であってもよいし、無線接続であってもよい。また、マウス４０１は第１のボタン４０２と第２のボタン４０３を備える。更に、マウス４０１にもＨＭＤ１０２と同様のオプティカルマーカー３０２を備える。このオプティカルマーカー３０２によって、ＨＭＤ１０２だけでなく、マウス４０１の位置や姿勢も特定することができる。
【００２２】
図５は、本発明の実施形態における情報処理装置１０１、ＨＭＤ１０２のハードウェア構成を示す図である。尚、図５の情報処理装置１０１とＨＭＤ１０２のハードウェアの構成は一例であり、用途や目的に応じて様々な構成例がある。
【００２３】
まず、情報処理装置１０１は、ＣＰＵ５０１、ＲＯＭ５０２、ＲＡＭ５０３、システムバス５０４、入力コントローラ５０５、ビデオコントローラ５０６、メモリコントローラ５０７、通信Ｉ／Ｆコントローラ５０８、入力デバイス５０９、ディスプレイ５１０、外部メモリ５１１等を備える。
【００２４】
ＣＰＵ５０１は、システムバス５０４に接続される各デバイスやコントローラを統括的に制御する。
【００２５】
また、ＲＯＭ５０２あるいは外部メモリ５１１には、ＣＰＵ５０１の制御プログラムであるＢＩＯＳ(Ｂａｓｉｃ  Ｉｎｐｕｔ  ／  ＯｕｔｐｕｔＳｙｓｔｅｍ)やオペレーティングシステムや、各種装置の実行する機能を実現するために必要な後述する各種プログラム等が記憶されている。ＲＡＭ５０３は、ＣＰＵ５０１の主メモリ、ワークエリア等として機能する。
【００２６】
ＣＰＵ５０１は、処理の実行に際して必要なプログラム等をＲＡＭ５０３にロードして、プログラムを実行することで各種動作を実現するものである。
【００２７】
また、入力コントローラ（入力Ｃ）５０５は、キーボードやマウス４０１等のポインティングデバイスからの入力を制御する。
【００２８】
ビデオコントローラ（ＶＣ）５０６は、ディスプレイ５１０等の表示器への表示を制御する。表示器は液晶ディスプレイでもＣＲＴでも構わない。
【００２９】
メモリコントローラ（ＭＣ）５０７は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク（ＨＤ）やフレキシブルディスク（ＦＤ）或いはＰＣＭＣＩＡカードスロットにアダプタを介して接続されるカード型メモリ等の外部メモリ５１１へのアクセスを制御する。
【００３０】
通信Ｉ／Ｆコントローラ（通信Ｉ／ＦＣ）５０８は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、ＴＣＰ／ＩＰを用いたインターネット通信等が可能である。通信Ｉ／Ｆコントローラ５０８は、トランスミッター２０１から磁場を受信したレシーバ２０２との通信と、赤外線カメラ３０１との通信も制御する。
【００３１】
尚、ＣＰＵ５０１は、例えばＲＡＭ５０３内の表示情報用領域へアウトラインフォントの展開（ラスタライズ）処理を実行することにより、ディスプレイ５１０上での表示を可能としている。また、ＣＰＵ５０１は、ディスプレイ５１０上の不図示のマウスカーソル等でのユーザ指示を可能とする。
【００３２】
本発明の情報処理装置１０１が後述する各種処理を実行するために用いられる各種プログラム等は外部メモリ５１１に記録されており、必要に応じてＲＡＭ５０３にロードされることによりＣＰＵ５０１によって実行されるものである。さらに、本発明に係わるプログラムが用いる定義ファイルや各種情報テーブルは外部メモリ５１１に格納されている。
【００３３】
次に、ＨＭＤ１０２は、右目ビデオカメラ５２１、左目ビデオカメラ５２２、右目ディスプレイ５２３、左目ディスプレイ５２４、コントローラ５２５等を備える。
【００３４】
右目ビデオカメラ５２１と、左目ビデオカメラ５２２は、現実世界を撮影するビデオカメラである。右目ビデオカメラ５２１は、右目ディスプレイ５２３に表示するための画像を撮影し、左目ビデオカメラ５２２は、左目ディスプレイ５２４に表示するための画像を撮影する。撮影された画像（現実空間画像）は、コントローラ５２５が情報処理装置１０１に送信し、通信Ｉ／Ｆコントローラ５０８を通じて情報処理装置１０１が受信する。
【００３５】
情報処理装置１０１から通信Ｉ／Ｆコントローラ５０８を通じて複合現実画像が送信されると、コントローラ５２５が受信し、受信した複合現実画像を右目ディスプレイ５２３と左目ディスプレイ５２４に表示させる。この時、右目ビデオカメラ５２１で撮影された現実空間画像に基づいて生成された複合現実画像は、右目ディスプレイ５２３に表示し、左目ビデオカメラ５２２で撮影された現実空間画像に基づいて生成された複合現実画像は、左目ディスプレイ５２４に表示する。
【００３６】
尚、図２のようなシステム構成の場合、レシーバ２０２がＨＭＤ１０２に設置されており、レシーバ２０２が受け取った磁場の情報をレシーバ２０２から情報処理装置１０１に送信する。
【００３７】
図６は、情報処理装置１０１のモジュール構成を示す機能構成図である。尚、図６の情報処理装置１０１のモジュール構成は一例であり、用途や目的に応じて様々な構成例がある。
【００３８】
情報処理装置１０１は、オペレーティングシステム６００、ＭＲプラットフォーム６１０、ＭＲアプリケーション６２０から構成される。
【００３９】
オペレーティングシステム６００は、通信モジュール６０１、入力デバイス制御モジュール６０２を備える。通信モジュール６０１は、ＨＭＤ１０２やレシーバ２０２、赤外線カメラ３０１と通信するためのモジュールである。通信モジュール６０１は、通信Ｉ／Ｆコントローラ５０８を通じて、各種装置と情報の通信を行う。入力デバイス制御モジュール６０２は、マウス４０１等の入力デバイス５０９からの信号を受信し、情報処理装置１０１において各種制御を行うモジュールである。
【００４０】
ＭＲプラットフォーム６１０は、キャリブレーションモジュール６１１、画像処理モジュール６１２、マーカー検知モジュール６１３、磁場解析モジュール６１４、赤外線情報解析モジュール６１５、位置姿勢特定モジュール６１６、色検知モジュール６１７から構成される。
【００４１】
キャリブレーションモジュール６１１は、現実空間と仮想空間の位置合わせを行うためのモジュールである。ＨＭＤ１０２で撮影された現実空間画像や各種センサーからの情報により、現実空間と仮想空間の位置合わせを行う。
【００４２】
画像処理モジュール６１２は、ＨＭＤ１０２で撮影された現実空間画像からマーカー１０３等を抽出するために画像処理を実行するモジュールである。画像処理の内容は特に問わない。現実空間画像から必要な情報を抽出しやすくなる画像処理であれば、何でもよい。
【００４３】
マーカー検知モジュール６１３は、ＨＭＤ１０２で撮影され、画像処理モジュール６１２で画像処理された現実空間画像から、マーカー１０３を検知するためのモジュールである。現実空間画像からマーカー１０３の特徴点を抽出し、更にマーカー１０３の大きさや傾きを検出する。検知したマーカー１０３の情報は、後述する位置姿勢特定モジュール６１６に渡す。
【００４４】
磁場解析モジュール６１４は、レシーバ２０２で送信された、トランスミッター２０１で発生する磁場を解析するためのモジュールである。磁場の強さや変化を解析し、後述する位置姿勢特定モジュール６１６に渡す。
【００４５】
赤外線情報解析モジュール６１５は、赤外線カメラ３０１から送信された赤外線の電気信号（以下、赤外線情報）を解析するためのモジュールである。赤外線情報からオプティカルマーカー３０２を検出し、検出した情報を後述する位置姿勢特定モジュール６１６に渡す。
【００４６】
位置姿勢特定モジュール６１６は、マーカー検知モジュール６１３、磁場解析モジュール６１４、赤外線情報解析モジュール６１５から渡された各種情報に基づいて、ＨＭＤ１０２またはマウス４０１の位置と姿勢を特定するモジュールである。キャリブレーションモジュール６１１によって現実空間と仮想空間の位置合わせが行われているので、現実空間における位置から仮想空間における位置を特定できる。
【００４７】
色検知モジュール６１７は、ＨＭＤ１０２から送信された現実空間画像から所定の色を検知するためのモジュールである。特に、後述するマスク設定モジュール６２２において、３次元モデルによってユーザの手が隠れないようにするために、肌色の画素を検知する。ＲＧＢ（Ｒｅｄ−Ｇｒｅｅｎ−Ｂｌｕｅ  ｃｏｌｏｒ  ｍｏｄｅｌ）で肌色に近い色の値を設定し、それと同じまたは同様の色を肌色と判定すればよい。
【００４８】
ＭＲアプリケーション６２０は、仮想カメラ制御モジュール６２１、マスク設定モジュール６２２、仮想オブジェクト管理モジュール６２３、重畳画像生成モジュール６２４から構成される。
【００４９】
仮想カメラ制御モジュール６２１は、位置姿勢特定モジュール６１６で特定された仮想空間における位置と姿勢に基づいて、仮想空間におけるカメラの位置と姿勢を制御するモジュールである。仮想空間におけるカメラは、仮想空間を撮影するためのカメラである。つまり、仮想空間におけるユーザの視点である。このカメラで撮影された仮想空間画像と、ＨＭＤ１０２から送信された現実空間画像とを重畳させることで、複合現実画像が生成される。
【００５０】
マスク設定モジュール６２２は、仮想空間画像と現実空間画像を重畳させる際に、現実空間画像を構成する画素のうち、仮想空間画像を重畳させない画素に対してマスクを設定するモジュールである。マスクが設定された画素には、仮想空間画像が重畳されない。特に、色検知モジュール６１７で検知された色の画素にマスクを設定する。肌色が検知されているのであれば、肌色の画素の部分にマスクを設定し、ユーザの手はいつでも見えるようにできる。
【００５１】
仮想オブジェクト管理モジュール６２３は、仮想空間に配置される３次元モデル（以下、仮想オブジェクト）を管理するためのモジュールである。仮想空間における仮想オブジェクトの配置位置の管理や、仮想オブジェクトの表示、移動、非表示、仮想オブジェクト同士の紐付け、仮想オブジェクト同士の接触判定等を行う。
【００５２】
重畳画像生成モジュール６２４は、ＨＭＤ１０２から送信された現実空間画像と、仮想カメラ制御モジュール６２１で制御された仮想空間のカメラで撮影された仮想空間画像とを重畳させ、複合現実画像を生成するためのモジュールである。この時、マスク設定モジュール６２２でマスクが設定された現実空間画像の画素には、仮想空間画像を重畳しない。また、重畳画像生成モジュール６２４では、右目ビデオカメラ５２１と左目ビデオカメラ５２２でそれぞれ撮影された現実空間画像に対応する複合現実画像を生成する。尚、情報処理装置１０１が備える各種モジュールが、右目ビデオカメラ５２１で撮影された現実空間画像と左目ビデオカメラ５２２で撮影された現実空間画像に対して実行する処理はどちらも同様である。
【００５３】
次に、本発明の実施形態における情報処理装置１０１によって行われる一連の処理について、図７に示すフローチャートを用いて説明する。
【００５４】
ステップＳ７０１では、情報処理装置１０１のＣＰＵ５０１は、ユーザからの指示に応じて、外部メモリ５１１に記憶されたＭＲプラットフォーム６１０とＭＲアプリケーション６２０を起動し、ＨＭＤ１０２と赤外線カメラ３０１からの情報の送信を受け付ける。
【００５５】
ステップＳ７０２では、ＨＭＤ１０２のコントローラ５２５は、右目ビデオカメラ５２１及び左目ビデオカメラ５２２で現実空間を撮影する。そして、ステップＳ７０３では、ＨＭＤ１０２のコントローラ５２５は、撮影された現実世界の画像（現実空間画像）を情報処理装置１０１に送信する。尚、本実施形態では右目ビデオカメラ５２１及び左目ビデオカメラ５２２で撮影された画像は静止画でも動画でもよい。よりリアリティのある複合現実感を体感するためには、動画のほうがよい。
【００５６】
ステップＳ７０４では、情報処理装置１０１のＣＰＵ５０１は、通信モジュール６０１を用いて、ＨＭＤ１０２から送信された現実空間画像を受信し、ＲＡＭ５０３に記憶する（現実空間画像入力受付手段）。
【００５７】
一方、ステップＳ７０５では、赤外線カメラ３０１は、現実空間を撮影する。この時、赤外線カメラ３０１は、赤外光を撮影するので、前述したＨＭＤ１０２とマウス４０１に付されたオプティカルマーカー３０２を撮影することとなる。そして、ステップＳ７０６では、赤外線カメラ３０１は、撮影された赤外線の電気信号（赤外線情報）を情報処理装置１０１に送信する。
【００５８】
ステップＳ７０７では、情報処理装置１０１のＣＰＵ５０１は、通信モジュール６０１を用いて、赤外線カメラ３０１から送信された赤外線情報を受信し、ＲＡＭ５０３に記憶する（位置姿勢入力受付手段）。赤外線情報は、ＨＭＤ１０２やマウス４０１に付されたオプティカルマーカー３０２の位置や姿勢を示す情報であるので、ＨＭＤ１０２を装着するユーザやマウス４０１の位置や姿勢の入力を情報処理装置１０１が受け付けているのと同義である。
【００５９】
ステップＳ７０８では、情報処理装置１０１のＣＰＵ５０１は、入力デバイス制御モジュール６０２を用いて、マウス４０１からの操作信号を受信する。より具体的には、マウス４０１が備えるボタンが押下（クリック）された場合に、押下されたボタンに関する操作信号がマウス４０１から情報処理装置１０１に対して送信され、情報処理装置１０１が入力デバイス制御モジュール６０２を通じてこれを受信する。尚、本実施形態では、マウス４０１の備える第１のボタン４０２と第２のボタン４０３を用いるが、これ以外のボタンを用いてもよい。
【００６０】
ステップＳ７０９では、情報処理装置１０１のＣＰＵ５０１は、ユーザからＭＲプラットフォーム６１０やＭＲアプリケーション６２０に対する終了指示があったか否かを判定する。ＭＲプラットフォーム６１０やＭＲアプリケーション６２０を終了するメニューがユーザから選択された場合に終了指示があったと判定してもよいし、それ以外でもよい。終了指示があったと判定された場合には、ステップＳ７１９に処理を進める。終了指示があったと判定されなかった場合には、ステップＳ７１０に処理を進める。
【００６１】
ステップＳ７１０では、情報処理装置１０１のＣＰＵ５０１は、赤外線情報解析モジュール６１５を用いて、ステップＳ７０７で受信した赤外線情報からＨＭＤ１０２とマウス４０１に備えられたオプティカルマーカー３０２の位置や姿勢を検出する。尚、赤外線情報から検出する方法については、既存の技術を用いるため、詳細な説明は省略する。
【００６２】
ステップＳ７１１では、情報処理装置１０１のＣＰＵ５０１は、位置姿勢特定モジュール６１６を用いて、ステップＳ７１０で検出したＨＭＤ１０２とマウス４０１のオプティカルマーカー３０２の位置や姿勢から、仮想空間上におけるＨＭＤ１０２とマウス４０１の位置や姿勢を特定する。つまり、ＨＭＤ１０２を装着するユーザとそのユーザが操作するマウス４０１の現実空間における位置と姿勢を特定することになる。キャリブレーションモジュール６１１によって、現実空間における所定の位置と仮想空間における所定の位置とが一致するように、あらかじめ調整されている。そのため、現実空間における位置や姿勢が特定できれば、仮想空間における位置や姿勢も特定できる。
【００６３】
ステップＳ７１２では、情報処理装置１０１のＣＰＵ５０１は、ステップＳ７０８で受信したマウスの操作信号と、ステップＳ７１１で特定したＨＭＤ１０２とマウス４０１の仮想空間上の位置や姿勢に基づいて、ステップＳ７０４で受信した現実空間画像に重畳する仮想空間を生成する処理を実行する。仮想空間生成処理の詳細は、図８で後述する。
【００６４】
ステップＳ７１３では、情報処理装置１０１のＣＰＵ５０１は、仮想カメラ制御モジュール６２１を用いて、仮想空間における仮想カメラの位置と向きを制御し、仮想空間を撮影する（仮想空間画像生成手段）。そして、撮影により生成された仮想空間画像をＲＡＭ５０３に記憶する。
【００６５】
より具体的には、ステップＳ７１１で特定されたＨＭＤ１０２の位置や姿勢からＨＭＤ１０２が仮想空間のどの位置でどの方向を向いているのかを特定し、その特定された位置と方向に仮想カメラを設置する。仮想カメラは、仮想空間内に設置され、仮想空間を撮影する仮想的な撮影部である。仮想空間は仮想オブジェクトから形成される仮想的な３次元空間であるので、これをＨＭＤ１０２に表示させるために２次元の画像にしなければならない。そのため、３次元空間を仮想カメラから撮影することにより、２次元画像を取得する。尚、ここでいう撮影は仮想空間をキャプチャすることである。キャプチャする際には、仮想空間に存在する仮想オブジェクトのみをキャプチャする。そのため、背景は透過されている。
【００６６】
また、仮想カメラから見て、仮想オブジェクトの手前にマスクオブジェクトが配置されている場合にも、当該マスクオブジェクトが重なっている部分の仮想オブジェクトは透過される。マスクオブジェクトは、ユーザによって仮想空間に設置される仮想オブジェクトの１つである。マスクオブジェクトを配置することにより、仮想オブジェクトが常に最前面に表示される問題を防ぐことができる。例えば、現実空間に配置された物体の向こう側に仮想オブジェクトを表示したい場合がある。このとき、マスクオブジェクトを配置しないと、後述するステップＳ７１５で現実空間画像の上に仮想空間画像を重畳することになるので、仮想オブジェクトが物体よりも手前に表示されてしまう。そこで、当該物体の位置に相当する仮想空間上の位置にマスクオブジェクトを設定する。こうすると、仮想カメラから見て当該マスクオブジェクトよりも奥にある仮想オブジェクトは、そのマスクオブジェクトと重なる部分が透過する。これにより、現実空間画像の上に仮想空間画像を重畳しても、物体よりも奥に仮想オブジェクトが表示されているように見える。
【００６７】
ステップＳ７１４では、情報処理装置１０１のＣＰＵ５０１は、仮想カメラ制御モジュール６２１を用いて、ステップＳ７１３で撮影された仮想空間画像をＲＡＭ５０３から取得する。
【００６８】
そして、ステップＳ７１５では、情報処理装置１０１のＣＰＵ５０１は、重畳画像生成モジュール６２４を用いて、ステップＳ７０４で受信した現実空間画像に、ステップＳ７１４で取得した仮想空間画像を重畳し、複合現実画像を生成する（複合現実画像生成手段）。この時、情報処理装置１０１のＣＰＵ５０１は、色検知モジュール６１７を用いて、現実空間画像から所定の色を含む画素を検知し、更にマスク設定モジュール６２２を用いて、検知した画素には仮想空間画像が重畳されないように制御する。例えば、ユーザの手の肌色を検知し、その検知した部分には仮想空間画像が重畳されないようにする。こうすれば、ユーザの手が仮想オブジェクトよりも手前に表示されるように見える。
【００６９】
ステップＳ７１６では、情報処理装置１０１のＣＰＵ５０１は、通信モジュール６０１を用いて、ステップＳ７１５で生成された複合現実画像をＨＭＤ１０２に送信する（複合現実画像送信手段）。そして、ステップＳ７０４に処理を戻し、ステップＳ７０９で終了指示があるまでステップＳ７０２乃至ステップＳ７１８の処理を繰り返す。
【００７０】
ステップＳ７１７では、ＨＭＤ１０２のコントローラ５２５は、ステップＳ７１６で送信された複合現実画像を受信する。そして、ステップＳ７１８では、ＨＭＤ１０２のコントローラ５２５は、ステップＳ７１７で受信した複合現実画像を、右目ディスプレイ５２３と左目ディスプレイ５２４に表示し、ユーザに複合現実画像を提示する（表示手段）。前述した処理においては説明を省略したが、複合現実画像は右目ディスプレイ５２３に表示するものと、左目ディスプレイ５２４に表示するものの２つが生成されている。右目ディスプレイ５２３に表示するものは、右目ビデオカメラ５２１から取得した現実空間画像を用いて生成された複合現実画像を表示する。一方、左目ディスプレイ５２４に表示するものは、左目ビデオカメラ５２２から取得した現実空間画像を用いて生成された複合現実画像を表示する。
【００７１】
このように、ステップＳ７０２乃至ステップＳ７１８を繰り返し実行することで、リアルタイムに複合現実感をユーザに体感させることができる。また、前述したステップＳ７０９で終了指示があったと判定された場合には、ステップＳ７１９に処理を進め、ステップＳ７１９では、情報処理装置１０１のＣＰＵ５０１は、ＭＲプラットフォーム６１０とＭＲアプリケーション６２０を終了させる。
【００７２】
次に、本発明の実施形態における情報処理装置１０１によって行われる仮想空間生成処理について、図８に示すフローチャートを用いて説明する。
【００７３】
本発明における仮想空間生成処理は、仮想オブジェクトから成る仮想空間を生成する処理であって、マウス４０１を通じてユーザから指示された内容に応じて、仮想空間における仮想オブジェクトの位置や動作を制御する処理である。
【００７４】
図８の処理の概要について、図１０、図１１を用いて説明する。まず、図１０の１０００について説明する。１０００は、仮想空間に仮想オブジェクトが配置された初期状態である。ユーザ１００１は、ＨＭＤ１０２を装着し、複合現実画像を閲覧しているユーザである。仮想オブジェクト１００２と仮想オブジェクト１００３は、仮想空間に配置された仮想オブジェクトである。カーソルオブジェクト９０１は、後述するステップＳ８０２で配置されるカーソルオブジェクトである。カーソルオブジェクトとは、仮想オブジェクトとの接触を検知するための３次元モデルである。カーソルオブジェクトは、図９のカーソルオブジェクト９０１に示すように、マウス４０１に重畳するように表示される。後述する処理において、このカーソルオブジェクト９０１と接触している仮想オブジェクトを操作することができる。ユーザ１００１は、ＨＭＤ１０２の右目ディスプレイ５２３と左目ディスプレイ５２４を通じて、現実空間画像に重畳されたカーソルオブジェクト９０１、仮想オブジェクト１００２、仮想オブジェクト１００３を閲覧している状態である。
【００７５】
まず、ユーザ１００１が移動してマウス４０１を仮想オブジェクトに近づけて、カーソルオブジェクト９０１と仮想オブジェクトとを接触させる。そして、接触している状態でマウス４０１の第１のボタン４０２をユーザ１００１が押下する。すると、押下されたことを情報処理装置１０１のＣＰＵ５０１が検知し、接触している仮想オブジェクトをカーソルオブジェクト９０１に追従するように制御する。図１０の１０１０は、カーソルオブジェクト９０１を仮想オブジェクト１００２に接触させた状態で第１のボタン４０２を押下し、仮想オブジェクト１００２を持ち上げた図である。このように第１のボタン４０２の押下を情報処理装置１０１のＣＰＵ５０１が検知し続けている間は、仮想オブジェクト１００２をカーソルオブジェクト９０１に追従するように移動させることができる。
【００７６】
次に、ユーザ１００１がマウス４０１で第１のボタン４０２を押下したまま移動し、仮想オブジェクト１００３を通り抜けた場合、本実施形態では、図１１の１１００に示すように、マウス４０１のカーソルオブジェクト９０１に追従していた仮想オブジェクト１００２が仮想オブジェクト１００３に接触した状態で追従を停止する。これは、たとえ仮想オブジェクトであっても、より現実空間に近い動作をさせることで、リアリティのある仮想空間を提示するためである。
【００７７】
従来の複合現実感技術では、仮想オブジェクトはあくまでデータであるので、仮想オブジェクト同士が重なり合うことができていた。これは、情報処理装置１０１のＣＰＵ５０１が、仮想オブジェクトごとに指定された座標値の位置に当該仮想オブジェクトを配置していたからである。つまり、仮想オブジェクト同士の干渉は考慮せずに、指定された位置に表示していたということである。しかしながら、自動車等の設計を複合現実感技術で行う場合には、仮想オブジェクトである部品同士の干渉をチェックしないと、本当に当該部品が組み込めるのかどうかわからない。また別のケースとして、モデルルームを複合現実感技術で提示した時に、仮想オブジェクトである家具を部屋の中に持ち運ぼうとした時に、部屋の扉を家具が通過できるかどうかをチェックしないと、現実味のないシミュレーションとなってしまう。
【００７８】
そのため、ユーザ１００１が移動させる仮想オブジェクト１００２が、他の仮想オブジェクト１００３に接触したときには、仮想オブジェクト１００２を停止することにより、移動している仮想オブジェクト１００２が他の仮想オブジェクト１００３に接触してしまったことをユーザに通知している。
【００７９】
また、図１１の１１１０に示すように、１１００のように仮想オブジェクト同士が接触し、マウス４０１の第１のボタン４０２が押下されている状態で、更にマウス４０１の第２のボタン４０３が押下されると、仮想オブジェクト１００２がカーソルオブジェクト９０１に対する追従を再開する。仮想オブジェクト１００２の追従が停止してしまった場合に、ユーザ１００１は、再度仮想オブジェクト１００２を取りに行く手間が生じる。そのため、容易に仮想オブジェクト１００２を移動させるために、第１のボタン４０２を押下したまま、第２のボタン４０３が押下されると、カーソルオブジェクト９０１に対する追従を再開する。
以下、この一連の処理について説明を行う。
【００８０】
まず、ステップＳ８０１では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュールを用いて、仮想空間の所定の位置に仮想オブジェクトを配置する。仮想空間上のどの位置にどの仮想オブジェクトを配置するのかは、あらかじめユーザによって指定されている。そのため、その指定に応じた位置に所定の仮想オブジェクトを配置する。仮想オブジェクトは複数あってもよい。
【００８１】
ステップＳ８０２では、情報処理装置１０１のＣＰＵ５０１は、前述したステップＳ７１１で特定されたマウス４０１の位置に対応する仮想空間の位置に、カーソルオブジェクト９０１を配置する。
【００８２】
ステップＳ８０３では、情報処理装置１０１のＣＰＵ５０１は、入力デバイス制御モジュール６０２を用いて、マウス４０１に備える第１のボタン４０２（第１の指示）または第２のボタン４０３（第２の指示）が押下されているか否かを判定する。より具体的には、第１のボタン４０２または第２のボタン４０３が押下されていることを示す信号を検知したか否かによって判定する。第１のボタン４０２または第２のボタン４０３が押下されていると判定された場合には、ステップＳ４０３に処理を進める。第１のボタン４０２および第２のボタン４０３のどちらも押下されていないと判定された場合には、ステップＳ８１９に処理を進める。
【００８３】
ステップＳ８０４では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、カーソルオブジェクト９０１に子要素があるか否かを判定する。子要素とは、前述した仮想オブジェクト１００２のように、カーソルオブジェクト９０１に追従する仮想オブジェクトのことである。つまり、ユーザからの指示に応じてカーソルオブジェクト９０１で移動させている仮想オブジェクトがあるか否かを判定する。子要素があると判定された場合には、ステップＳ８０５に処理を進める。子要素がないと判定された場合には、ステップＳ８０７に処理を進める。
【００８４】
ステップＳ８０５では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、カーソルオブジェクト９０１が当該カーソルオブジェクト９０１に追従させる仮想オブジェクト（以下、ＯｂｊＸ）と接触しているか否かを判定する。つまり、第１のボタン４０２または第２のボタン４０３がユーザから押下されて、ＯｂｊＸを移動させようとしているか否かを判定することになる。カーソルオブジェクト９０１がＯｂｊＸと接触していると判定された場合には、ステップＳ８０６に処理を進める。カーソルオブジェクト９０１がＯｂｊＸと接触していないと判定された場合には、ステップＳ８１４に処理を進める。
【００８５】
ステップＳ８０６では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、接触しているＯｂｊＸをカーソルオブジェクト９０１の子要素に設定する。つまり、ＯｂｊＸをカーソルオブジェクト９０１に追従（移動）するように制御する（３次元モデル移動手段）。子要素となったＯｂｊＸは、カーソルオブジェクト９０１に追従するので、ユーザが自由にＯｂｊＸの位置を移動させることができる。
【００８６】
ステップＳ８０７では、情報処理装置１０１のＣＰＵ５０１は、入力デバイス制御モジュール６０２を用いて、マウス４０１の第１のボタン４０２が押下されているか否かを判定する。第１のボタン４０２が押下されていると判定された場合には、ステップＳ８０８に処理を進める。第１のボタン４０２が押下されておらず、第２のボタン４０３が押下されていると判定された場合には、仮想空間生成処理を終了し、ステップＳ７１３に処理を進める。
【００８７】
ステップＳ８０８では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、前述したステップＳ８０６でカーソルオブジェクト９０１の子要素となったＯｂｊＸの仮想空間上の座標値を取得する。ここで取得する座標値は、後述するステップＳ８１２で使用する。
【００８８】
ステップＳ８０９では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、カーソルオブジェクト９０１の子要素であるＯｂｊＸと、当該ＯｂｊＸとは異なる仮想オブジェクト（以下、ＯｂｊＹ）とが接触しているかどうかを判定する。ステップＳ８０６でカーソルオブジェクト９０１の子要素となったＯｂｊＸは、前述した通り、カーソルオブジェクト９０１に追従している。つまり、ユーザがカーソルオブジェクト９０１でＯｂｊＸを移動させた結果、ＯｂｊＸが他の仮想オブジェクトであるＯｂｊＹと接触してしまう可能性がある。前述した図１１の１１００に示すように、本実施形態では、カーソルオブジェクト９０１で移動させている仮想オブジェクト１００２（ＯｂｊＸ）が他の仮想オブジェクト１００３（ＯｂｊＹ）に接触した場合には、仮想オブジェクト１００２（ＯｂｊＸ）を接触した位置で停止し、カーソルオブジェクト９０１に対する追従を終了する必要がある。そのため、ステップＳ８０９では、カーソルオブジェクト９０１の子要素であるＯｂｊＸと、ＯｂｊＹとが接触しているかどうかを判定している。また、接触の判定をする際には、更にＯｂｊＸの移動方向にＯｂｊＹがあるかどうかも判定する。つまり、ＯｂｊＹの方にＯｂｊＸが向かっているのであれば、接触した際に停止する必要があるが、そうでない場合（ＯｂｊＹのある面に対して平行にＯｂｊＸを移動する場合）には接触していたとしても停止する必要はない。そのため、ＯｂｊＸの移動方向も考慮して、接触判定を行う。ＯｂｊＸとＯｂｊＹとが接触していると判定された場合には、ステップＳ８１０に処理を進める。ＯｂｊＸとＯｂｊＹとが接触していないと判定された場合には、仮想空間生成処理を終了し、ステップＳ７１３に処理を進める。
【００８９】
ステップＳ８１０では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、ＯｂｊＸとＯｂｊＹとが接触している箇所を識別表示する。
【００９０】
ユーザは、仮想オブジェクト同士の接触を気にせずにＯｂｊＸを移動させていることが想定される。そのため、ＯｂｊＸが急に追従してこなくなった場合、ユーザに不安感を与えてしまう。そこで、ＯｂｊＸとＯｂｊＹとが接触していることをユーザに通知することで、このような問題点を解決している。
【００９１】
また、ユーザにとっては、どの部分が接触しているのかを知りたいことがある。例えば、製品設計において、部品が他の部品と接触していないかどうか確認しないと、故障につながってしまう可能性がある。そこで、ＯｂｊＸのどの部分がＯｂｊＹと接触しているのかをユーザに対して識別表示することで、このような問題点を解決している。図１１の１１００では、この識別表示の一例を示している。図１１の１１００では、仮想オブジェクト１００２（ＯｂｊＸ）の左面と、仮想オブジェクト１００３（ＯｂｊＹ）の右面とが接触しているので、接触している部分を示すように吹き出しを表示させている。この他にも、接触している部分の色を変えてもよいし、不図示のスピーカーから音を出して通知してもよい。通知の方法はどのような方法でもよい。
【００９２】
ステップＳ８１１では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、カーソルオブジェクト９０１から子要素であるＯｂｊＸを当該カーソルオブジェクト９０１から切り離す。つまり、子要素でなくす。そして、ステップＳ８１２では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、ステップＳ８０８で取得した座標値をＯｂｊＸに代入する。つまり、ＯｂｊＸはカーソルオブジェクト９０１の子要素ではなくなったので、追従を終了して、接触した位置で停止する必要がある。そこで、ステップＳ８０８で取得した座標値をＯｂｊＸの表示位置として使用する。
【００９３】
ステップＳ８１３では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、第１ボタン押下中フラグを「０」から「１」に変更する。第１のボタン押下中フラグは、マウス４０１の第１のボタン４０２が押下中であることを示すフラグである。第１のボタン押下中フラグは、後述するステップＳ８１４で使用する。ステップＳ８１３の処理が終了すると、仮想空間生成処理を終了し、ステップＳ７１３に処理を進める。
【００９４】
このように、ユーザはカーソルオブジェクト９０１をＯｂｊＸに接触させた状態で第１のボタン４０２または第２のボタン４０３を押下することで、ＯｂｊＸを移動させることができ、第１のボタン４０２でＯｂｊＸを移動させている場合に、ＯｂｊＸが他の仮想オブジェクトであるＯｂｊＹと接触した場合には、ＯｂｊＸを接触した位置で停止させることができる。そのため、より現実空間に近い動作をユーザに提示することができる。また、第２のボタン４０３でＯｂｊＸを移動させている場合には、ステップＳ８０８乃至ステップＳ８１３を実行しないため、従来通り、ＯｂｊＸがＯｂｊＹと接触した位置で停止させずに、ＯｂｊＸがＯｂｊＹを貫通して移動させることができる。つまり、ユーザは状況に応じて、所望の移動方法を選択することができる。
【００９５】
一方、ステップＳ８０５でＯｂｊＸとカーソルオブジェクト９０１が接触しないと判定された場合には、ステップＳ８１４では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、第１のボタン押下中フラグが「１」であるか否かを判定する。つまり、ステップＳ８０８乃至ステップＳ８１３の処理が実行された後も第１のボタン４０２が押下中であるか否かを判定する。第１のボタン押下中フラグが「１」であると判定された場合には、ステップＳ８１５に処理を進める。第１のボタン押下中フラグが「０」であると判定された場合には、仮想空間生成処理を終了し、ステップＳ７１３に処理を進める。
【００９６】
ステップＳ８１５では、情報処理装置１０１のＣＰＵ５０１は、入力デバイス制御モジュール６０２を用いて、更に第２のボタン４０３も押下されたか否かを判定する。第２のボタン４０３も押下されたと判定された場合には、ステップＳ８１６に処理を進める。第２のボタン４０３が押下されなかった場合には、仮想空間生成処理を終了し、ステップＳ７１３に処理を進める。
【００９７】
ステップＳ８１６では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、カーソルオブジェクト９０１の仮想空間上の座標値を取得する。そして、ステップＳ８１７では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、ステップＳ８１６で取得した座標値をＯｂｊＸの座標値として代入する。つまり、前述したステップＳ８１２で接触した位置で停止したＯｂｊＸをカーソルオブジェクト９０１の位置に呼び戻す。
【００９８】
ステップＳ８１８では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、前述したステップＳ８０６と同様に、ＯｂｊＸをカーソルオブジェクト９０１の子要素とする。このように、ＯｂｊＸがＯｂｊＹに接触することによりカーソルオブジェクト９０１から切り離され、停止した場合であっても、第１のボタン４０２の押下を継続したまま、更に第２のボタン４０３を押下することで、ＯｂｊＸを呼び戻すことができる。すなわち、ＯｂｊＸの追従動作を再開することができる。これにより、わざわざユーザがＯｂｊＸを取りに行く手間を軽減することができる。
【００９９】
ステップＳ８０３で第１のボタン４０２または第２のボタン４０３が第１のボタン４０２および第２のボタン４０３のどちらも押下されていないと判定された場合には、ステップＳ８１９では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、カーソルオブジェクト９０１に子要素のＯｂｊＸがあるか否かを判定する。つまり、第１のボタン４０２の押下が終了したため、ＯｂｊＸをカーソルオブジェクト９０１から切り離さなければならない。そこで、ステップＳ８１９においてこのような判定を行っている。カーソルオブジェクト９０１に子要素があると判定された場合には、ステップＳ８２０に処理を進める。カーソルオブジェクト９０１に子要素がないと判定された場合には、ステップＳ８２３に処理を進める。
【０１００】
ステップＳ８２０では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、前述したステップＳ８０８と同様に、カーソルオブジェクト９０１に追従しているＯｂｊＸの仮想空間上の座標値を取得する。そして、ステップＳ８２１では、情報処理装置１０１のＣＰＵ５０１は、前述したステップＳ８１１と同様に、仮想オブジェクト管理モジュール６２３を用いて、カーソルオブジェクト９０１からＯｂｊＸを切り離す。そして、ステップＳ８２２では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、前述したステップＳ８１２と同様に、ステップＳ８２０で取得した座標値をＯｂｊＸの座標値に代入する。こうすることで、ＯｂｊＸの追従動作を終了する。
【０１０１】
ステップＳ８２３では、情報処理装置１０１のＣＰＵ５０１は、仮想オブジェクト管理モジュール６２３を用いて、第１のボタン押下中フラグを「０」にする。つまり、第１のボタン押下中フラグを初期化する。
【０１０２】
以上のようにすることで、ユーザからマウス４０１を通じて操作された仮想オブジェクトで仮想空間を生成し、前述したステップＳ７１３以降の処理に備える。
【０１０３】
このように、ユーザから操作された仮想空間上の３次元モデルが当該３次元モデルとは異なる３次元モデルと接触した場合に、ユーザから操作された３次元モデルを停止することが可能となるので、よりリアルな動作を提示できる効果を奏する。
【０１０４】
本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、１つの機器からなる装置に適用してもよい。
【０１０５】
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接、或いは遠隔から供給するものを含む。そして、そのシステム或いは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合も本発明に含まれる。
【０１０６】
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【０１０７】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等の形態であってもよい。
【０１０８】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷなどがある。また、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−Ｒ）などもある。
【０１０９】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
【０１１０】
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明に含まれるものである。
【０１１１】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【０１１２】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【０１１３】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
【０１１４】
なお、前述した実施形態は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。即ち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【０１１５】
１００  ＭＲシステム
１０１  情報処理装置
１０２  ＨＭＤ
１０３  マーカー
２０１  トランスミッター
２０２  レシーバ
３０１  赤外線カメラ
３０２  オプティカルマーカー
４０１  マウス
５０１  ＣＰＵ
５０２  ＲＯＭ
５０３  ＲＡＭ
５０４  システムバス
５０５  入力コントローラ
５０６  ビデオコントローラ
５０７  メモリコントローラ
５０８  通信Ｉ／Ｆコントローラ
５０９  入力デバイス
５１０  ディスプレイ
５１１  外部メモリ
５２１  右目ビデオカメラ
５２２  左目ビデオカメラ
５２３  右目ディスプレイ
５２４  左目ディスプレイ
５２５  コントローラ
【図１】
0005874698.tif 000002
【図２】
0005874698.tif 000003
【図３】
0005874698.tif 000004
【図４】
0005874698.tif 000005
【図５】
0005874698.tif 000006
【図６】
0005874698.tif 000007
【図７】
0005874698.tif 000008
【図８】
0005874698.tif 000009
【図９】
0005874698.tif 000010
【図１０】
0005874698.tif 000011
【図１１】
0005874698.tif 000012