以下、図面を参照しながら、本発明の第1の実施形態の一例について説明する。
図1は、本発明の第1の実施形態における遠隔MRシステム(情報処理システム)のシステム構成の一例を示す図である。図1に示す遠隔MRシステムは、MR技術を用いて、複数の拠点のユーザに同一の仮想空間を閲覧させるシステムである。遠隔MRシステムは、情報処理装置101にHMD102が相互にデータ通信可能に接続される複数のMRシステムを含み、各MRシステムの情報処理装置101はネットワーク103を介して通信可能に接続されている。情報処理装置101とHMD102との接続は、有線接続であってもよいし、無線接続であってもよい。また、遠隔MRシステムに含まれるMRシステムはいくつでもよい。本実施形態では、情報処理装置101−1とHMD102−1とが接続されるMRシステムと、情報処理装置101−2とHMD102−2とが接続されるMRシステムと、その他複数のMRシステムとを含む遠隔MRシステムとして説明を行う。尚、図1のシステム上に接続される各種端末の構成は一例であり、用途や目的に応じて様々な構成例がある。
情報処理装置101は、汎用的なコンピュータである。情報処理装置101は、HMD102で撮影(撮像)された現実空間の画像(以下、現実空間画像という。)と、情報処理装置101で生成された仮想空間の画像(以下、仮想空間画像という。)とを重畳した画像(以下、複合現実画像という。)を生成し、HMD102に送信する。尚、MR技術に関しては従来技術を用いるため、詳細な説明は省略する。また、情報処理装置101は、パーソナルコンピュータであってもよいし、サーバのような大型のコンピュータであってもよい。更には、携帯電話やタブレット端末といった携帯端末であってもよい。コンピュータの種類は特に問わない。また、拠点ごとに情報処理装置101を設置せず、1台の情報処理装置101で処理するようにしてもよい。すなわち、1台の情報処理装置101が本実施形態における各MRシステムを構築してもよい。
HMD102は、ヘッドマウントディスプレイである。HMD102は、ユーザの頭部に装着する装置であり、右目用と左目用のビデオカメラと、右目用と左目用のディスプレイを備えている。HMD102は、HMD102のビデオカメラで撮影された現実空間画像を情報処理装置101に送信する。そして、情報処理装置101から送信されてきた複合現実画像を受信し、ディスプレイに表示する。HMD102では、右目用と左目用のディスプレイを設けているので、視差によって立体感を得ることができる。尚、HMD102で撮影する現実空間画像とHMD102で表示する複合現実画像は、動画(映像)が望ましいが、所定の間隔で撮影された画像であってもよい。
図2は、各拠点のMRシステムのシステム構成の一例を示す図である。前述した通り、情報処理装置101はHMD102と通信可能に接続されている。更に、情報処理装置101には赤外線カメラ202が接続されている。赤外線カメラ202は、赤外線を用いた光学式のセンサである。赤外線カメラ202は、現実空間に赤外線を照射し、現実空間の物体で反射した赤外線を撮影することにより、赤外線カメラ202が定義する座標系における、現実空間の物体の位置及び姿勢を特定する。この赤外線カメラ202を用いて、現実空間におけるHMD102(すなわちユーザ)の位置及び姿勢(向きや傾き、視線の方向等。以下、同じ。)を特定する。HMD102には、オプティカルマーカ201という赤外線を反射する物体を備えており、赤外線カメラ202はこのオプティカルマーカ201で反射した赤外線を撮影することで、HMD102の位置及び姿勢を特定できるようになっている。ユーザがどのような位置や姿勢であっても、当該ユーザが装着するHMD102のオプティカルマーカ201を撮影または検知できるように、MRシステムでは赤外線カメラ202を複数台設置することが望ましい。また、位置及び姿勢を特定可能なHMD102は、赤外線カメラ202の撮影範囲に存在するHMD102である。
尚、本実施形態においては、現実空間におけるHMD102の位置及び姿勢を特定するために、赤外線カメラ202を用いるが、HMD102の現実空間における位置及び姿勢を特定できるのであれば、これに限らない。例えば、磁気センサを用いてもよいし、HMD102が撮影した画像を解析して位置及び姿勢を特定してもよい。
図3は、情報処理装置101とHMD102の各ハードウェア構成の一例を示す図である。
まず、情報処理装置101は、CPU301、ROM302、RAM303、システムバス304、入力コントローラ305、ビデオコントローラ306、メモリコントローラ307、通信I/Fコントローラ308、汎用バス309、入力デバイス310、外部メモリ311、ディスプレイ312等を備える。
CPU301は、システムバス304に接続される各デバイスやコントローラを統括的に制御する。
また、ROM302あるいは外部メモリ311には、CPU301の制御プログラムであるBIOS(Basic Input / OutputSystem)やオペレーティングシステムや、各種装置の実行する機能を実現するために必要な後述する各種プログラム等が記憶されている。RAM303は、CPU301の主メモリ、ワークエリア等として機能する。
CPU301は、処理の実行に際して必要なプログラム等をRAM303にロードして、プログラムを実行することで各種動作を実現するものである。
また、入力コントローラ(入力C)305は、キーボードやマウス等のポインティングデバイス(入力デバイス310)からの入力を制御する。
情報処理装置101のビデオコントローラ(VC)306は、HMD102が備える右目・左目ディスプレイ322やディスプレイ312等の表示器への表示を制御する。右目・左目ディスプレイ322に対しては、例えば外部出力端子(例えば、Digital Visual Interface)を用いて出力される。また、右目・左目ディスプレイ322は、右目用のディスプレイと左目用のディスプレイとから構成されている。また、ディスプレイ312は、液晶ディスプレイ等であり、右目・左目ディスプレイ322と同様の表示、または仮想空間を操作するためのGUI(Graphical User Interface)が表示される。
メモリコントローラ(MC)307は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク(HD)やフレキシブルディスク(FD)或いはPCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等の外部メモリ311へのアクセスを制御する。
通信I/Fコントローラ(通信I/FC)308は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。特に、情報処理装置101の通信I/Fコントローラ308は、赤外線カメラ202との通信も制御する。
情報処理装置101の汎用バス309は、情報処理装置101に接続されるHMD102の右目・左目ビデオカメラ321で撮影した画像を取り込むために使用される。右目・左目ビデオカメラ321からは、外部入力端子(例えば、IEEE1394端子)を用いて入力される。また、右目・左目ビデオカメラ321は、右目用のビデオカメラと左目用のビデオカメラとから構成されている。
尚、CPU301は、例えばRAM303内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ上での表示を可能としている。また、CPU301は、ディスプレイ上の不図示のマウスカーソル等でのユーザ指示を可能とする。
本発明の情報処理装置101が後述する各種処理を実行するために用いられる各種プログラム等は外部メモリ311に記録されており、必要に応じてRAM303にロードされることによりCPU301によって実行されるものである。さらに、本発明に係わるプログラムが用いる定義ファイルや各種情報テーブルは外部メモリ311に格納されている。
図4は、情報処理装置101の機能構成を示す機能構成図である。尚、図4の情報処理装置101の機能構成は一例であり、用途や目的に応じて様々な構成例がある。
情報処理装置101は機能部として、通信制御部401と、位置・姿勢取得部402と、位置・姿勢特定部403と、現実空間画像取得部404と、仮想空間生成部405と、仮想空間画像取得部406と、複合現実画像生成部407とを備える。また、表示制御部408と、記憶部409と、オブジェクト制御部410と、視線方向特定部411と、距離測定部412と、座標特定部413と、マウス制御部414とを備える。
通信制御部401は、情報処理装置101と通信可能なHMD102と赤外線カメラ202との各種情報の送受信を行う機能部である。通信制御部401は、前述したビデオコントローラ306、通信I/Fコントローラ308、汎用バス309等を通じてこれらの装置と情報の送受信を行う。
位置・姿勢取得部402は、オプティカルマーカ201を備える装置の現実空間における位置及び姿勢(向き)を示す情報を赤外線カメラ202から取得する機能部である(取得手段)。本実施形態では、HMD102がオプティカルマーカ201を備えているため、位置・姿勢取得部402は赤外線カメラ202が解析した、現実空間におけるHMD102の位置及び姿勢(HMD102を装着しているユーザの位置及び姿勢。以下同じ。)を示す情報を取得する。また、位置・姿勢取得部402は、現実空間画像取得部404で右目・左目ビデオカメラ321から取得した右目用の現実空間画像と左目用の現実空間画像とを用いて、三角測量等の方法により、現実空間の物体の位置及び姿勢を特定することもできる。
位置・姿勢特定部403は、位置・姿勢取得部402で取得した、現実空間におけるHMD102の位置及び姿勢(向き)に対応する仮想空間上の位置及び姿勢(向き)を特定する機能部である(第1の特定手段)。現実空間の座標系(赤外線カメラ202の座標系)と仮想空間の座標系とはあらかじめキャリブレーションがなされており、現実空間と仮想空間とが対応付けられている。つまり、この対応付けに基づいて現実空間におけるHMD102の位置及び姿勢に対応する仮想空間上の位置及び姿勢を特定する。
現実空間画像取得部404は、HMD102の右目・左目ビデオカメラ321で撮影された現実空間画像を取得する機能部である。
仮想空間生成部405は、情報処理装置101の外部メモリ311に記憶されている情報に基づいて仮想空間を生成する機能部である。仮想空間は情報処理装置101の内部に生成される仮想的な空間であるので、その空間の形や大きさに関する情報が外部メモリ311に記憶されており、これに基づいて仮想空間を生成する。仮想空間には3次元モデルからなるオブジェクトを配置可能である。オブジェクトはオブジェクト制御部410によって配置される。
仮想空間画像取得部406は、仮想空間生成部405で生成した仮想空間の画像を取得する機能部である。仮想空間画像取得部406が仮想空間の画像を取得する場合には、位置・姿勢特定部403で特定した仮想空間におけるHMD102の位置及び姿勢に基づいて仮想空間上の視点を決定し、当該視点から見た場合の仮想空間画像を生成し、これを取得する。この視点に仮想的なカメラを設置し、仮想空間を撮像するようにすればよい。
複合現実画像生成部407は、現実空間画像取得部404で取得した現実空間画像に仮想空間画像取得部406で取得した仮想空間画像を重畳することにより、複合現実画像を生成する機能部である。
表示制御部408は、情報処理装置101に接続されたHMD102の右目・左目ディスプレイ322や情報処理装置101に接続されたディスプレイ312における各種情報の表示制御を行う機能部である。特に、複合現実画像生成部407で生成された複合現実画像をHMD102の右目・左目ディスプレイ322に表示させる機能を有する。
記憶部409は、後述する各種テーブルの情報や仮想空間を生成するための情報、オブジェクト等の情報を記憶するための機能部である。必要に応じて、情報の追加・更新・削除を行う。本実施形態においては、共通の仮想空間やオブジェクトが各情報処理装置101の記憶部409で記憶されているものとして説明を行う。
オブジェクト制御部410は、3次元モデルからなるオブジェクトを仮想空間に配置するための機能部である。仮想空間が生成された場合には、あらかじめ定義された位置及び姿勢でオブジェクトを配置する。必要に応じて、配置されたオブジェクトを異なる位置及び姿勢で再配置する。
視線方向特定部411は、位置・姿勢特定部403で特定した仮想空間における位置及び姿勢に基づいて、仮想空間におけるユーザの視線方向を特定するための機能部である(視線方向特定手段)。また、仮想空間に配置されたオブジェクトに対するユーザの視線方向も特定する。
距離測定部412は、仮想空間において、ユーザが閲覧中のオブジェクトと当該ユーザの視点との距離を測定するための機能部である。特に、ユーザの視点からユーザの視線方向を示すベクトルが接触するオブジェクトの面までの距離を測定する。
座標特定部413は、仮想空間やオブジェクトの座標系において、任意の位置の座標を特定するための機能部である。特に、ユーザの視線方向を示すベクトルが接触するオブジェクトの面の座標や、距離測定部412で測定した距離だけユーザの視点から離れた位置の座標等を特定する。
マウス制御部414は、入力デバイス310であるマウスからの入力を受け付けるための機能部である。マウス制御部414は、マウスのどのボタンが押下されたのかを検知することができる。
次に、本発明の実施形態における情報処理装置101によって行われる一連の処理について、図5に示すフローチャートを用いて説明する。尚、以下説明する図5のフローチャートは、説明の都合上、情報処理装置101−1と情報処理装置101−2とに処理の主体をわけて表現しているが、どの情報処理装置101もステップS501乃至ステップS517の処理を実行可能である。すなわち、ステップS501乃至ステップS511、ステップS515乃至ステップS517の各処理は、情報処理装置101−2も実行可能である。また、ステップS512乃至ステップS514の処理は、情報処理装置101−1も実行可能である。また、これ以外の情報処理装置101が存在する場合にも同じくステップS501乃至ステップS517を実行可能である。更に、ステップS511からステップS512に対する破線の矢印と、ステップS514からステップS515に対する破線の矢印とはデータの流れを示す矢印である。
まずステップS501では、情報処理装置101−1のCPU301は、仮想空間生成部405の機能により、外部メモリ311から仮想空間の形や大きさに関する情報を取得し、仮想空間を生成する。また、オブジェクト制御部410の機能により、外部メモリ311から3次元モデルからなるオブジェクトを取得し、所定の位置及び姿勢で仮想空間に配置する。オブジェクトの配置について具体的に説明する。まず、情報処理装置101−1は、外部メモリ311に記憶された図6のオブジェクト管理テーブル600を参照する。そして、オブジェクト保存場所603が示すファイルパスからオブジェクトに関する情報(3次元モデルのデータ等)を取得し、これをオブジェクト位置姿勢情報602が示す位置及び姿勢で仮想空間に配置する。
図6のオブジェクト管理テーブル600は、情報処理装置101−1の外部メモリ311等に記憶されるデータテーブルである。オブジェクト管理テーブル600は、オブジェクトID601と、オブジェクト位置姿勢情報602と、オブジェクト保存場所603とを備える。オブジェクトID601は、オブジェクトごとに一意に割り振られる識別情報を示す。オブジェクト位置姿勢情報602は、仮想空間にオブジェクトを配置する際の位置及び姿勢である仮想空間上の座標とベクトルとを示す。オブジェクト保存場所603は、オブジェクトの保存場所であるファイルパスを示す。尚、オブジェクト管理テーブル600の構成はこれに限らない。
ステップS502では、情報処理装置101−1のCPU301は、現実空間画像取得部404の機能により、HMD102−1の右目・左目ビデオカメラ321から現実空間画像を取得し、これをRAM303に記憶する。
ステップS503では、情報処理装置101−1のCPU301は、位置・姿勢取得部402の機能により、情報処理装置101−1と通信可能なHMD102−1の現実空間における位置及び姿勢を示す情報を取得し、これをRAM303に記憶する(取得手段)。前述した通り、HMD102が備えるオプティカルマーカ201を赤外線カメラ202が検知することで特定した位置及び姿勢を示す情報を、赤外線カメラ202から取得する。
ステップS504では、情報処理装置101−1のCPU301は、マウス制御部414の機能により、入力デバイス310であるマウスからのボタン操作を検知したか否かを判定する。本実施形態においてマウスは、他拠点で共通の仮想空間を用いてMR体験をしているユーザの視点でオブジェクトを閲覧するための指示を受け付ける入力デバイス310である。本実施形態においてはマウスを用いるものとするが、キーボードやゲームコントローラ等、ボタンを備えるその他の入力デバイス310であってもよい。マウスからのボタン操作を検知したと判定した場合には、ステップS509に処理を進める。マウスからのボタン操作を検知したと判定しなかった場合には、ステップS505に処理を進める。
先にマウスからのボタン操作を検知しなかった場合の処理について説明を行う。ステップS505では、情報処理装置101−1のCPU301は、仮想空間画像取得部406の機能により、仮想空間を撮像することにより仮想空間画像を取得し、これをRAM303等に記憶する(仮想空間画像生成手段)。より具体的には、まずステップS503で取得したHMD102−1の現実空間における位置及び姿勢を示す情報をRAM303等から読み出し、当該情報を用いて現実空間上の位置及び姿勢に対応する仮想空間上の位置及び姿勢を特定する。そして、特定した仮想空間上の位置及び姿勢で仮想空間上に仮想のカメラ(視点)を設置し、当該カメラにより仮想空間を撮像する。これにより仮想空間画像を生成し、これをRAM303等に記憶する。尚、HMD102の右目・左目ディスプレイ322のそれぞれに表示するために右目用の仮想空間画像と左目用の仮想空間画像の2枚を取得する。
また、情報処理装置101−1は、ステップS505で特定した仮想空間上のHMD102−1の位置及び姿勢は、図6のHMD管理テーブル610のHMD位置姿勢情報612に格納する。より具体的には、自HMDフラグ614が「1」となっているレコードのHMD位置姿勢情報612にステップS505で特定した仮想空間上のHMD102−1の位置及び姿勢である仮想空間上の座標とベクトルとを示す情報を格納する。
図6のHMD管理テーブル610は、情報処理装置101−1の外部メモリ311等に記憶されるデータテーブルである。HMD管理テーブル610は、HMDID611と、HMD位置姿勢情報612と、通信先情報処理装置613と、自HMDフラグ614とを備える。HMDID611は、情報処理装置101−1に接続されているHMD102−1と、他の情報処理装置101(例えば、情報処理装置101−2)に接続されているHMD102(例えば、HMD102−2)とを一意に識別するための識別情報である。あらかじめ共通の仮想空間を閲覧するために使用するHMD102の識別情報を格納しておく。HMD位置姿勢情報612は、仮想空間における各HMD102の位置及び姿勢を示す。この位置及び姿勢は、オブジェクト位置姿勢情報602と同様に、仮想空間上の座標とベクトルとを示す情報である。通信先情報処理装置613は、各HMD102と通信可能に接続されている情報処理装置101の通信先の情報を示す。通信先の情報は、IPドレスやMACアドレス等の情報である。自HMDフラグ614は、HMD管理テーブル610を記憶する情報処理装置101−1がどのHMD102と接続されているのかを示すフラグである。自HMDフラグ614に「1」が格納されていれば、そのレコードのHMD102が情報処理装置101−1と接続されていることがわかる。自HMDフラグ614に「0」が格納されていれば、他の情報処理装置101(例えば、情報処理装置101−2)と接続されているHMD102であることがわかる。尚、HMD管理テーブル610の構成はこれに限らない。
ステップS506では、情報処理装置101−1のCPU301は、複合現実画像生成部407の機能により、ステップS502で取得した現実空間画像とステップS505で取得した仮想空間画像とをRAM303等から読み出す。そして、当該現実空間画像に当該仮想空間画像を重畳し、複合現実画像を生成する。生成した複合現実画像はRAM303等に記憶する。尚、前述した通り、現実空間画像と仮想空間画像とは右目用と左目用の2枚ずつがRAM303等に記憶されているので、右目用の現実空間画像に右目用の仮想空間画像を重畳し、左目用の現実空間画像に左目用の仮想空間画像を重畳する。
ステップS507では、情報処理装置101−1のCPU301は、表示制御部408の機能により、ステップS506で生成した複合現実画像をRAM303等から読み出し、ビデオコントローラ306を通じてHMD102−1の右目・左目ディスプレイ322に表示する(画像提示手段)。RAM303等に記憶された複合現実画像は、右目用と左目用の2枚が存在する。そのため、右目用の複合現実画像を右目・左目ディスプレイ322の右目のディスプレイに表示するよう制御し、左目用の複合現実画像を右目・左目ディスプレイ322の左目のディスプレイに表示するよう制御する。
ステップS508では、情報処理装置101−1のCPU301は、HMD102−1を装着しているユーザに複合現実感を提示する処理の終了指示があったか否かを判定する。例えば、前述したステップS501乃至ステップS517の処理を実行する情報処理装置101−1のアプリケーションの停止指示や終了指示があったか否かを判定する。終了指示があったと判定した場合には、本一連の処理を終了する。終了指示があったと判定しなかった場合、すなわち終了指示がなかった場合にはステップS502に処理を戻し、終了指示があるまでステップS502乃至ステップS517の処理を繰り返す。
このようにすることで、仮想空間に配置されたオブジェクトがあたかも現実空間に配置されているかのような感覚をユーザに与えることができる。
図7は、情報処理装置101が生成する仮想空間と、現実空間でHMD102を装着するユーザとの位置関係を示す概念図である。図7の上部に示す700は、情報処理装置101−1が示す仮想空間と、HMD102−1を装着するユーザA701との位置関係を示す図であり、図7の下部に示す710は、情報処理装置101−2が示す仮想空間と、HMD102−2を装着するユーザB711との位置関係を示す図である。ユーザA701とユーザB711とはそれぞれ異なる拠点にいるので、お互いの姿は見えていない。それぞれの仮想空間は共通であり、同じオブジェクト720が同じ位置及び姿勢で配置されている。
また、ユーザA701は視線方向702が示す方向を見ており、ユーザB711は視線方向712が示す方向を見ている。各ユーザの視線方向は、ステップS503で取得したHMD102の位置及び姿勢を示す情報から特定される、仮想空間上の位置及び姿勢に基づいて特定できる。位置及び姿勢を用いた視線方向の特定については、従来技術を用いるため説明は省略する。
このユーザA701とユーザB711とに提示する複合現実画像を、図8に示す。図8の上部の800は、ユーザA701が装着するHMD102−1に表示される複合現実画像である。また、図8の下部の810は、ユーザB711が装着するHMD102−2に表示される複合現実画像である。それぞれ異なる角度からオブジェクト720を閲覧しているため、オブジェクト720の見え方が異なっているのがわかる。
このような状態で、ユーザA701がマウスをクリックした場合を例にとって、以下ステップS509乃至ステップS517を説明する。
ステップS509では、情報処理装置101−1のCPU301は、マウス制御部414の機能により、ステップS504で検知したマウスのボタン操作が、前回検知したボタン操作と同じであるか否かを判定する。より具体的には、押下されたボタンに対応するHMD102を図6のマウスボタン管理テーブル620で特定し、特定したHMD102を示す情報が図6の他者視点管理テーブル630の他者HMD632に格納されていれば、前回検知したボタン操作と同じ操作がなされたと判定する。前回検知したボタン操作と同じであると判定した場合には、ステップS517に処理を進める。前回検知したボタン操作と同じあると判定しなかった場合、すなわち前回検知したボタン操作とは異なると判定した場合には、ステップS510に処理を進める。
図6のマウスボタン管理テーブル620は、情報処理装置101−1の外部メモリ311等に記憶されるデータテーブルである。マウスボタン管理テーブル620は、マウスボタンID621と、対応HMD622とを備える。マウスボタンID621は、マウスのボタンごとに一意に割り振られた識別情報である。あらかじめ使用するマウスのボタンごとにレコードを作成しておくことが望ましい。対応HMD622は、マウスのボタンに対応するHMD102のHMDID611を示す。つまり、押下を検知したボタンに対応するHMD102を特定することができる。尚、マウスボタン管理テーブル620の構成はこれに限らない。
また図6の他者視点管理テーブル630は、情報処理装置101−1の外部メモリ311等に記憶されるデータテーブルである。他者視点管理テーブル630は、他者視点フラグ631と、他者HMD632と、復元用位置姿勢情報633と、距離634と、被視線方向635とを備える。他者視点フラグ631は、他者の視点でオブジェクトを閲覧できるよう制御しているか否かを示すフラグである。他者視点フラグ631に「1」が格納されていれば、現在他者の視点でオブジェクトを閲覧できるよう制御しているということである。他者HMD632は、どのHMD102(他者)の視点でオブジェクトを閲覧しているのかを示す。他者HMD632には、HMDID611が格納される。復元用位置姿勢情報633は、他者の視点で閲覧していたオブジェクトを、元の視点から見た位置及び姿勢に戻すための位置及び姿勢を示す。この位置及び姿勢は、オブジェクト位置姿勢情報602と同様に、仮想空間上の座標とベクトルとを示す情報である。距離634は、他の情報処理装置101(例えば、情報処理装置101−2)に接続されたHMD102(例えば、HMD102−2)の仮想空間上の視点から、閲覧中のオブジェクトまでの距離を示す。被視線方向635は、他者HMD632が示すHMD102によってオブジェクトがどの方向から閲覧されているのかを示す。この視線方向は、オブジェクトの座標系におけるベクトルである。尚、他者視点管理テーブル630の構成はこれに限らない。
ステップS510では、情報処理装置101−1のCPU301は、マウス制御部414の機能により、操作されたボタンに対応する他のHMD102を特定する。ここでいう他のHMD102とは、ステップS510を実施する情報処理装置101−1とは異なる情報処理装置101に接続されたHMD102(例えば、情報処理装置101−2に接続されたHMD102−2)である。マウスボタン管理テーブル620に示すように、マウスが備えるボタン(マウスボタンID621)ごとに他のHMD102(対応HMD622)が対応づけられている。よって、ユーザは他者の視点でオブジェクトを閲覧したい場合には、当該他者が装着しているHMD102に対応するボタンを押下する。すると、情報処理装置101−1は、押下されたボタンに対応する他のHMD102を、マウスボタン管理テーブル620を用いて特定する。
ステップS511では、情報処理装置101−1のCPU301は、通信制御部401の機能により、ステップS510で特定したHMD102と接続された情報処理装置101に対して、当該HMD102の現実空間上の位置及び姿勢を示す情報の取得要求を送信する。本実施形態では、現実空間上の位置及び姿勢を示す情報の取得要求を送信するが、仮想空間上の位置及び姿勢を示す情報を取得してもよい。本実施形態では、マウスボタンID621が「Btn1」であるボタンが押下され、ステップS510で「HMD02」が特定された場合を想定する。この場合には、HMD管理テーブル610のHMDID611を参照し、ステップS510で特定した「HMD02」が格納されているレコードを特定する。そして、特定したレコードの通信先情報処理装置613から「HMD02」が接続されている情報処理装置101の通信先を取得し、これに基づいて上記要求を送信する。ここでは、「HMD02」が前述したHMD102−2、その「HMD02」に接続される情報処理装置101が情報処理装置101−2として説明を続ける。
ステップS512では、情報処理装置101−2のCPU301は、通信制御部401の機能により、情報処理装置101−1から送信された要求を受信する。ステップS513では、情報処理装置101−2のCPU301は、位置・姿勢取得部402の機能により、情報処理装置101−2に接続されたHMD102−2の現実空間上の位置及び姿勢を示す情報を取得する。情報処理装置101−2も情報処理装置101−1と同様にステップS501乃至ステップS511、ステップS515乃至ステップS517を実行しているので、ステップS503で取得し、RAM303等に記憶したHMD102−2の現実空間上の位置及び姿勢を示す情報を取得すればよい。
ステップS513では、情報処理装置101−2のCPU301は、通信制御部401の機能により、ステップS512で取得したHMD102−2の現実空間上の位置及び姿勢を示す情報を情報処理装置101−1に送信する。
ステップS514では、情報処理装置101−1のCPU301は、通信制御部401の機能により、情報処理装置101−2から送信された、HMD102−2の現実空間上の位置及び姿勢を示す情報を受信する。そして、HMD管理テーブル610のHMD位置姿勢情報612に格納する。格納先のレコードは、ステップS510で特定した対応HMD622が示すHMDID611を有するレコードである。
ステップS516では、情報処理装置101−1のCPU301は、他者の視点でオブジェクトを閲覧するための処理を実行する。オブジェクト配置処理の詳細は、後述する図9に示す。オブジェクト配置処理が完了したら、ステップS505に処理を進める。ステップS505以降の処理については、前述した通りである。つまり、オブジェクト配置処理によってオブジェクトの位置及び姿勢が変更され、他者が閲覧している視線方向でオブジェクトが表示されることになる。
ステップS509で前回検知したボタン操作と同じと判定された場合、ステップS517では、情報処理装置101−1のCPU301は、ステップS516で変更したオブジェクトの位置及び姿勢を元の状態に戻す処理を実行する。オブジェクト復帰処理の詳細は、後述する図13に示す。すなわち、マウスのボタンが1回押下されると、このボタンに対応するHMD102の視線方向で閲覧できるよう、オブジェクトの位置及び姿勢が変更され、もう1回同じボタンが押下されると、オブジェクトの位置及び姿勢がデフォルトの位置及び姿勢に戻るということである。オブジェクト復帰処理が完了したら、ステップS505に処理を進める。
次に、オブジェクト配置処理の詳細について、図9に示すフローチャートを用いて説明する。尚、以下説明する図9のフローチャートは、説明の都合上、情報処理装置101−1が実行する処理として表現しているが、前述した通り、情報処理装置101以外の情報処理装置101もステップS901乃至ステップS910を実行可能である。
まずステップS901では、情報処理装置101−1のCPU301は、他者視点フラグ631がONである(「1」が格納されている)か否かを判定する。他者視点フラグ631がONであると判定した場合には、ステップS902に処理を進める。他者視点フラグ631がONであると判定しなかった場合、すなわち他者視点フラグ631がOFFである(「0」が格納されている)と判定した場合には、ステップS903に処理を進める。
ステップS902では、情報処理装置101−1のCPU301は、オブジェクト復帰処理を実行する。オブジェクト復帰処理の詳細は、後述する図13に示す。ステップS901及びステップS902の一連の処理は、すなわち、ユーザA701がユーザB711の視点でオブジェクトを閲覧していて、ユーザCの視点でオブジェクトを閲覧するよう指示があった場合には、一旦オブジェクトを元の位置及び姿勢に戻すということである。
ステップS903では、情報処理装置101−1のCPU301は、視線方向特定部411の機能により、ステップS515で受信した、他のHMD102の位置及び姿勢を示す情報に基づいて、他のHMD102(例えば、HMD102−2)を装着するユーザ(例えば、ユーザB711)の視線方向を特定する(視線方向特定手段)。本実施形態では、HMD102−2の位置及び姿勢を示す情報を用いて、HMD102−2の仮想空間上の位置及び姿勢を特定し、更にこの仮想空間上の位置及び姿勢を用いて仮想空間上でのHMD102−2(ユーザB711)の視線方向を特定する。図10は、図7の710におけるユーザB711とオブジェクト720とを拡大した図である。この図10においてユーザB711の視線方向は、視線方向712である。ステップS903では情報処理装置101−1が従来技術を用いて、これを特定する。
ステップS904では、情報処理装置101−1のCPU301は、オブジェクト制御部410の機能により、ステップS903で特定した他のHMD102(例えば、HMD102−2)の視線方向から、他のHMD102を装着するユーザ(例えば、ユーザB711)が閲覧中のオブジェクトを特定する。図10に示すように、視線方向712の直線が最初に接触するオブジェクト720を抽出し、これをユーザB711が閲覧中のオブジェクトとして特定する。
ステップS905では、情報処理装置101−1のCPU301は、記憶部409の機能により、ステップS904で特定したオブジェクトの仮想空間における現在の位置及び姿勢を示す情報を一時記憶する。より具体的には、閲覧中のオブジェクトのオブジェクト位置姿勢情報602をオブジェクト管理テーブル600から取得し、これを復元用位置姿勢情報633に格納する。
ステップS906では、情報処理装置101−1のCPU301は、距離測定部412の機能により、他のHMD102(例えばHMD102−2)の仮想空間上の視点から、ステップS904で特定したオブジェクトまでの距離を測定する。図10に示すように、座標特定部413の機能により、HMD102−2の視点1002をHMD102−2の仮想空間上の位置及び姿勢を用いて特定する。更に、座標特定部413の機能により、視線方向712の直線上で最初に接触するオブジェクト720の表面の第1の座標1001を更に特定する。そして、この視点1002と第1の座標1001との距離を測定し、距離634に格納する。
ステップS907では、情報処理装置101−1のCPU301は、座標特定部413の機能により、他のHMD102の視線方向が交わる、閲覧中オブジェクトの二点の座標を特定する。すなわち、閲覧中オブジェクトに対する他のHMD102の視線方向を特定するということである。更に換言すれば、他のHMD102の位置及び向きに基づく視線方向から、他のHMD102から見た閲覧中オブジェクトの向きを特定するということである(第2の特定手段)。図10に示すように、第1の座標1001と、更にオブジェクト720の表面に接触している第2の座標1004とを特定し、第1の座標1001から第2の座標1004に向かうベクトル(オブジェクト720に対する視線方向712)を、被視線方向635に格納する。特定する二点の座標は、本実施形態では視線方向712とオブジェクト720の表面とが接触している二点の座標としたが、オブジェクト720の内部の座標であってもよい。特に本実施形態の二点に限らない。オブジェクトに対する他者からの視線方向が特定できればよい。また、ステップS907で特定する座標は、オブジェクトの座標系における座標である。こうすることで、どの向きからオブジェクトを閲覧しているのかが特定できる。
ステップS908では、情報処理装置101−1のCPU301は、視線方向特定部411の機能により、情報処理装置101−1に接続されたHMD102(例えば、HMD102−1)を装着するユーザ(例えば、ユーザA701)の視線方向を特定する。ステップS503で取得したHMD102−1の現実空間における位置及び姿勢を示す情報を用いて、仮想空間上のHMD102−1の位置及び姿勢を特定する。そして、この特定した位置及び姿勢を用いて、仮想空間上のHMD102−1の視線方向を特定する。図11は、図7の700におけるユーザA701とオブジェクト720とを拡大した図である。この図11においてユーザA701の視線方向は、視線方向702である。ステップS908では情報処理装置101−1が従来技術を用いて、これを特定する。
ステップS909では、情報処理装置101−1のCPU301は、オブジェクト制御部410の機能により、ユーザから指示されたHMD102の視線方向でオブジェクトを閲覧できるように、オブジェクトの位置及び姿勢を変更して、仮想空間に再配置する(3次元モデル配置手段)。すなわち、他のHMD102で閲覧している方向からオブジェクトを閲覧できるように、3次元モデルを回転して配置する。以下、詳細な処理について説明をする。まず、ユーザA701が装着するHMD102−1の位置及び姿勢を示す情報からユーザA701の視点1101を特定する。次に、ステップS908で特定したユーザA701の視線方向702の直線上のうち、ユーザA701の視点1101から距離634だけ離れた位置を特定する。この特定した位置にオブジェクト720の第1の座標1001が重なるようにオブジェクト720を移動し、更に、ユーザA701の視線方向702の直線が、第2の座標1004を通るような位置及び姿勢にオブジェクト720を配置する。つまり、オブジェクト720のオブジェクト位置姿勢情報602に新たな位置及び姿勢を格納する。こうすると、図10のように破線で示したオブジェクト720が実線で示したオブジェクト720の位置及び姿勢となり、ユーザA701はその場から移動せずに、ユーザB711の視点でオブジェクト720を閲覧できるようになる。図12の1200は、ステップS909を実施した場合にステップS507でHMD102−1を介してユーザA701に提示される複合現実画像である。図12の1200は、図8の810と同じ視点でオブジェクト720が表示されていることがわかる。つまり、ユーザA701はユーザB711の視線方向からオブジェクト720を閲覧可能となる。
ステップS910では、情報処理装置101−1のCPU301は、他者視点フラグ631をONにする。つまり、他者視点フラグ631に「1」を格納する。また、ステップS510で特定したHMD102のHMDID611を他者HMD632に格納する。ステップS910が完了したら、オブジェクト配置処理を終了する。
次に、オブジェクト復帰処理の詳細について、図13に示すフローチャートを用いて説明する。尚、以下説明する図13のフローチャートは、説明の都合上、情報処理装置101−1が実行する処理として表現しているが、前述した通り、情報処理装置101以外の情報処理装置101もステップS1301乃至ステップS1303を実行可能である。
ステップS1301では、情報処理装置101−1のCPU301は、オブジェクト制御部410の機能により、ステップS905で一時記憶した、閲覧中のオブジェクトの位置及び姿勢を復元用位置姿勢情報633から取得する。
ステップS1302では、情報処理装置101−1のCPU301は、オブジェクト制御部410の機能により、ステップS909で位置及び姿勢が変更されたオブジェクトを変更前の元の位置及び姿勢に戻す(復帰手段)。すなわち、ステップS909で更新されたオブジェクト位置姿勢情報602に、復元用位置姿勢情報633を格納することで、オブジェクト720を元の位置及び姿勢で再配置する。こうすることで、他者の視点で閲覧できるように変更したオブジェクト720を、変更する前の状態に戻すことができる。
ステップS1303では、情報処理装置101−1のCPU301は、他者視点フラグ631をOFFにする。すなわち、他者視点フラグ631に「0」を格納する。更に、他者HMD632と、復元用位置姿勢情報633と、距離634と、被視線方向635とを「NULL」にする。こうすることで、他者視点管理テーブル630をクリアする。ステップS1303の処理が完了したら、オブジェクト復帰処理を終了する。
以上説明したように、第1の実施形態によれば、仮想空間に配置された3次元モデルを他のユーザが閲覧している向きで提示することの可能な効果を奏する。
次に第2の実施形態について説明する。第2の実施形態は、第1の実施形態におけるオブジェクト配置手段の変形例である。第2の実施形態のオブジェクト配置手段では、例えばユーザA701とユーザB711とが同一のオブジェクトを閲覧している場合に、ユーザB711が見ている向きで、ユーザA701にオブジェクトを提示する仕組みである。すなわち、同一のオブジェクトを閲覧していなければ、オブジェクトの再配置は行われない。ユーザA701とユーザB711とがそれぞれ異なるオブジェクトを閲覧しているときは、別々の作業を行っていると考えられる。そのため、こういう場合にユーザA701が誤って入力デバイス310を操作してしまうと、ユーザB711の閲覧しているオブジェクトが意図せずユーザA701の目の前に出てきてしまうという課題がある。そこで上記のような仕組みを採用することで、この課題を解決している。以下、この詳細な説明を行う。
第2の実施形態は、前述した通り、第1の実施形態におけるオブジェクト配置手段の変形例である。そのため、それ以外の点については第1の実施形態と同様であるので説明を省略する。
次に、オブジェクト配置処理の詳細について、図14に示すフローチャートを用いて説明する。尚、以下説明する図14のフローチャートは、説明の都合上、情報処理装置101−1が実行する処理として表現しているが、前述した通り、情報処理装置101以外の情報処理装置101もステップS1401乃至ステップS1412を実行可能である。
まずステップS1401では、情報処理装置101−1のCPU301は、他者視点フラグ631がONである(「1」が格納されている)か否かを判定する。他者視点フラグ631がONであると判定した場合には、ステップS1402に処理を進める。他者視点フラグ631がONであると判定しなかった場合、すなわち他者視点フラグ631がOFFである(「0」が格納されている)と判定した場合には、ステップS1403に処理を進める。
ステップS1402では、情報処理装置101−1のCPU301は、オブジェクト復帰処理を実行する。オブジェクト復帰処理の詳細は、第1の実施形態で前述した通りである。
ステップS1403では、情報処理装置101−1のCPU301は、視線方向特定部411の機能により、ステップS515で受信した、他のHMD102の位置及び姿勢を示す情報に基づいて、他のHMD102(例えば、HMD102−2)を装着するユーザ(例えば、ユーザB711)の視線方向を特定する(視線方向特定手段)。本実施形態では、HMD102−2の位置及び姿勢を示す情報を用いて、HMD102−2の仮想空間上の位置及び姿勢を特定し、更にこの仮想空間上の位置及び姿勢を用いて仮想空間上でのHMD102−2(ユーザB711)の視線方向を特定する。
ステップS1404では、情報処理装置101−1のCPU301は、オブジェクト制御部410の機能により、ステップS1403で特定した他のHMD102(例えば、HMD102−2)の視線方向から、他のHMD102を装着するユーザ(例えば、ユーザB711)が閲覧中のオブジェクトを特定する(第3の特定手段)。図10に示すように、視線方向712の直線が最初に接触するオブジェクト720を抽出し、これをユーザB711が閲覧中のオブジェクトとして特定する。
ステップS1405では、情報処理装置101−1のCPU301は、視線方向特定部411の機能により、ステップS503で取得した、HMD102の位置及び姿勢を示す情報に基づいて、HMD102(例えば、HMD102−1)を装着するユーザ(例えば、ユーザA701)の視線方向を特定する(視線方向特定手段)。本実施形態では、HMD102−1の位置及び姿勢を示す情報を用いて、HMD102−1の仮想空間上の位置及び姿勢を特定し、更にこの仮想空間上の位置及び姿勢を用いて仮想空間上でのHMD102−1(ユーザA701)の視線方向を特定する。図11は、図7の700におけるユーザA701とオブジェクト720とを拡大した図である。この図11においてユーザA701の視線方向は、視線方向702である。ステップS908では情報処理装置101−1が従来技術を用いて、これを特定する。
ステップS1406では、情報処理装置101−1のCPU301は、オブジェクト制御部410の機能により、ステップS1405で特定したHMD102(例えば、HMD102−1)の視線方向から、HMD102を装着するユーザ(例えば、ユーザA701)が閲覧中のオブジェクトを特定する(第4の特定手段)。特定方法は、ステップS1404と同様である。
ステップS1407では、情報処理装置101−1のCPU301は、オブジェクト制御部410の機能により、ステップS1404で特定したオブジェクトとステップS1406で特定したオブジェクトとが同一であるか否かを判定する。すなわち、情報処理装置101−1に接続されたHMD102−1を装着するユーザA701と、情報処理装置101−2に接続されたHMD102−2を装着するユーザB711とが同じオブジェクトを閲覧しているかどうかを判定する。同一であると判定した場合には、ステップS1407に処理を進める。同一でないと判定した場合には、オブジェクト配置処理を終了する。
ステップS1408では、情報処理装置101−1のCPU301は、記憶部409の機能により、ステップS1404で特定したオブジェクトの仮想空間における現在の位置及び姿勢を示す情報を一時記憶する。より具体的には、閲覧中のオブジェクトのオブジェクト位置姿勢情報602をオブジェクト管理テーブル600から取得し、これを復元用位置姿勢情報633に格納する。
ステップS1409では、情報処理装置101−1のCPU301は、距離測定部412の機能により、他のHMD102(例えばHMD102−2)の仮想空間上の視点から、ステップS1404で特定したオブジェクトまでの距離を測定する。図10に示すように、座標特定部413の機能により、HMD102−2の視点1002をHMD102−2の仮想空間上の位置及び姿勢を用いて特定する。更に、座標特定部413の機能により、視線方向712の直線上で最初に接触するオブジェクト720の表面の第1の座標1001を更に特定する。そして、この視点1002と第1の座標1001との距離を測定し、距離634に格納する。
ステップS1410では、情報処理装置101−1のCPU301は、座標特定部413の機能により、他のHMD102の視線方向が交わる、閲覧中オブジェクトの二点の座標を特定する。すなわち、閲覧中オブジェクトに対する他のHMD102の視線方向を特定するということである。更に換言すれば、他のHMD102の位置及び向きに基づく視線方向から、他のHMD102から見た閲覧中オブジェクトの向きを特定するということである(第2の特定手段)。図10に示すように、第1の座標1001と、更にオブジェクト720の表面に接触している第2の座標1004とを特定し、第1の座標1001から第2の座標1004に向かうベクトル(オブジェクト720に対する視線方向712)を、被視線方向635に格納する。特定する二点の座標は、本実施形態では視線方向712とオブジェクト720の表面とが接触している二点の座標としたが、オブジェクト720の内部の座標であってもよい。特に本実施形態の二点に限らない。オブジェクトに対する他者からの視線方向が特定できればよい。また、ステップS1410で特定する座標は、オブジェクトの座標系における座標である。こうすることで、どの向きからオブジェクトを閲覧しているのかが特定できる。
ステップS1411では、情報処理装置101−1のCPU301は、オブジェクト制御部410の機能により、ユーザから指示されたHMD102の視線方向でオブジェクトを閲覧できるように、オブジェクトの位置及び姿勢を変更して、仮想空間に再配置する(3次元モデル配置手段)。すなわち、他のHMD102で閲覧している方向からオブジェクトを閲覧できるように、3次元モデルを回転して配置する。以下、詳細な処理について説明をする。まず、ユーザA701が装着するHMD102−1の位置及び姿勢を示す情報からユーザA701の視点1101を特定する。次に、ステップS1405で特定したユーザA701の視線方向702の直線上のうち、ユーザA701の視点1101から距離634だけ離れた位置を特定する。この特定した位置にオブジェクト720の第1の座標1001が重なるようにオブジェクト720を移動し、更に、ユーザA701の視線方向702の直線が、第2の座標1004を通るような位置及び姿勢にオブジェクト720を配置する。つまり、オブジェクト720のオブジェクト位置姿勢情報602に新たな位置及び姿勢を格納する。こうすると、図10のように破線で示したオブジェクト720が実線で示したオブジェクト720の位置及び姿勢となり、ユーザA701はその場から移動せずに、ユーザB711の視点でオブジェクト720を閲覧できるようになる。図12の1200は、ステップS1411を実施した場合にステップS507でHMD102−1を介してユーザA701に提示される複合現実画像である。図12の1200は、図8の810と同じ視点でオブジェクト720が表示されていることがわかる。つまり、ユーザA701はユーザB711の視線方向からオブジェクト720を閲覧可能となる。
ステップS1412では、情報処理装置101−1のCPU301は、他者視点フラグ631をONにする。つまり、他者視点フラグ631に「1」を格納する。また、ステップS510で特定したHMD102のHMDID611を他者HMD632に格納する。ステップS1412が完了したら、オブジェクト配置処理を終了する。
以上説明したように、第2の実施形態によれば、仮想空間に配置された3次元モデルをお互いに閲覧している場合に、他のユーザが閲覧している向きで当該3次元モデルを提示することの可能な効果を奏する。
本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、1つの機器からなる装置に適用してもよい。
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接、或いは遠隔から供給するものを含む。そして、そのシステム或いは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合も本発明に含まれる。
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であってもよい。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RWなどがある。また、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などもある。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
なお、前述した実施形態は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。即ち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。