【文献】
大隈隆史, 外3名,“ビデオシースルー型拡張現実のための実画像からのカメラパラメータの実時間推定”,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,1997年10月16日,第97巻, 第324号,p.13-20
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0009】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の1つである。
【0010】
先ず、それぞれの実施形態に共通の構成について説明する。先ず、本実施形態に係る情報処理システムの構成例について、
図1のブロック図を用いて説明する。
【0011】
図1に示すように、情報処理システムが有する各装置はネットワーク(例えばLAN)150に通信可能に接続されている。ネットワーク150の種別については特定の種別に限るものではないし、1種類だけでなく2種類以上のネットワークにより構成されても良い。
【0012】
PC(パーソナルコンピュータ)100は、該PC100の表示画面上に表示している画面(スクリーン画像)を表す情報をスクリーン情報としてサーバ200に送信する。サーバ200は、PC100から送信されたスクリーン情報を受信すると共に、赤外線カメラによって測定されたHMD101A〜101C(総称してHMD101と呼称する場合がある)の位置姿勢を該赤外線カメラから取得する。更に、サーバ200は、HMD101に搭載された不図示のカメラにより撮像された現実空間の画像(現実画像)を該カメラから取得する。そしてサーバ200は、HMD101の位置姿勢、現実画像、スクリーン情報、そして自身が管理する様々な情報、に基づいて、現実画像に仮想オブジェクトを重畳させた画像である重畳画像(MR画像)を生成し、該生成したMR画像をHMD101に対して配信する。
【0013】
サーバ200が管理する様々な情報には、現実空間に対して位置合わせを行って重ね合わせる仮想空間(若しくは、現実空間に対して位置合わせを行って仮想空間を重ね合わせた空間=MR空間(ようは、現実空間と仮想空間とを合成した空間))における、現実物体の位置姿勢及び形状、が含まれている。本実施形態では、このような情報を用いて、CG(コンピュータグラフィックス)で描画された仮想オブジェクトとしての仮想スクリーンの配置位置姿勢を決定し、該仮想スクリーンを該決定した配置位置姿勢でもって仮想空間中に配置する。なお、
図1に記載の如く、PC100とサーバ200とは別個の装置であっても良いが、一体化した1つの装置であっても良い。
【0014】
以下では、現実空間に位置合わせを行って仮想空間を重ね合わせた空間を、MR空間と記載する。
【0015】
HMD101は上記の如く、現実空間を撮像するカメラと、該HMD101を頭部に装着したユーザの眼前に位置するように取り付けられた表示画面と、を有する頭部装着型表示装置の一例であり、サーバ200から受信したMR画像を該表示画面に表示する。
【0016】
次に
図2を参照して、サーバ200及びHMD101のハードウェア構成の一例について説明する。
図2は、サーバ200及びHMD101のハードウェア構成の一例を示すブロック図である。
【0017】
CPU201は、RAM203やROM202に格納されているコンピュータプログラムやデータを用いて処理を実行することで、システムバス204に接続されている各機能部を統括的に制御し、サーバ200が行うものとして後述する各処理を実行若しくは制御する。
【0018】
ROM202には、CPU201の制御プログラムであるBIOS(Basic Input / OutputSystem)やサーバ200の設定データなどが格納されている。
【0019】
外部メモリ211は、ハードディスクドライブ装置(HDD)に代表される大容量情報記憶装置である。外部メモリ211には、オペレーティングシステムや、サーバ200が行うものとして後述する各処理をCPU201に実行させるためのコンピュータプログラムやデータが格納されている。また、外部メモリ211には、以下の説明において既知の情報として取り扱う情報(定義ファイルやテーブルなども含む)も格納されている。ROM202や外部メモリ211に格納されているコンピュータプログラムやデータは、CPU201による制御に従って適宜RAM203にロードされ、CPU201による処理対象となる。
【0020】
RAM203は、ROM202や外部メモリ211からロードされたコンピュータプログラムやデータ、HMD101が有する右目・左目ビデオカメラ221が撮像した現実空間の動画像(現実空間を撮像することで得られる各フレームの画像(現実画像))を格納するためのエリアを有する。更にRAM203は、通信I/Fコントローラ208を介して外部から受信したコンピュータプログラムやデータを格納するためのエリアを有する。更にRAM203は、CPU201が各種の処理を実行する際に用いるワークエリアを有する。このように、RAM203は、各種のエリアを適宜提供することができる。
【0021】
入力コントローラ(入力C)205は、キーボードやマウス等のポインティングデバイスである入力デバイス210を制御する。
【0022】
ビデオコントローラ(VC)206は、サーバ200に接続されているディスプレイ212や、HMD101が有する右目・左目ディスプレイ222等の表示装置における表示制御を行う。ビデオコントローラ206は、右目・左目ディスプレイ222に対しては、例えば外部出力端子(例えば、Digital Visual Interface)を用いて出力を行う。
【0023】
右目・左目ディスプレイ222は、右目用のディスプレイと左目用のディスプレイとから構成されている。右目用のディスプレイは、HMD101を頭部に装着したユーザの右目の眼前に位置するようにHMD101に取り付けられており、左目用のディスプレイは、HMD101を頭部に装着したユーザの左目の眼前に位置するようにHMD101に取り付けられている。右目・左目ディスプレイ222には、ビデオコントローラ206から出力された画像信号に応じた画像が表示されることになる。
【0024】
メモリコントローラ(MC)207は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するHDDやフレキシブルディスク(FD)或いはPCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等の外部メモリ211へのアクセスを制御する。
【0025】
通信I/Fコントローラ(通信I/FC)208は、ネットワークを介して外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。また、通信I/Fコントローラ208は、ギガビットイーサネット(登録商標)等を通じて赤外線カメラとの通信も制御する。
【0026】
汎用バス209は、HMD101の右目・左目ビデオカメラ221が撮像した現実空間の動画像(現実空間を撮像することで得られる各フレームの画像(現実画像))を取り込むために使用される。右目・左目ビデオカメラ221からの現実画像は、外部入力端子(例えば、IEEE1394端子)を用いてサーバ200に入力される。右目・左目ビデオカメラ221は、右目用のビデオカメラと左目用のビデオカメラとから構成されている。
【0027】
尚、CPU201は、例えばRAM203内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ212上での表示や右目・左目ディスプレイ222上での表示を可能としている。また、CPU201は、ディスプレイ212上のマウスカーソル等でのユーザ指示を可能とする。
【0028】
なお、
図2に示したサーバ200及びHMD101のハードウェア構成は、あくまでも一例であり、以下に説明する処理と同等以上の処理を実現可能な構成であれば、如何なる構成を採用しても構わない。例えば、
図2では、HMD101に取り付けられたカメラは右目用と左目用の2つであったが、1つであっても良く、該1つのカメラによる現実画像を右目、左目で共有して使用するようにしても構わない。同様に、
図2では、HMD101に取り付けられたディスプレイは右目用と左目用の2つであったが、右目、左目で共有して観察する1つのディスプレイであっても良い。
【0029】
次に
図3を参照して、PC100、HMD101、サーバ200のそれぞれの機能構成例について説明する。
図3は、本発明の実施形態における、PC100、HMD101、サーバ200のそれぞれの機能構成の一例を示すブロック図である。
【0030】
スクリーン画像送信部301は、PC100の表示画面上に表示している画面(スクリーン画像)を表す情報をスクリーン情報としてサーバ200に送信する。スクリーン画像受信部321は、スクリーン画像送信部301によって送信されたスクリーン情報を受信する。
【0031】
配置ルール記憶部322は、スクリーン画像受信部321が受信したスクリーン情報が表すスクリーン画像をテクスチャとして貼り付ける対象となる仮想オブジェクトである仮想スクリーン(CGのスクリーン)を配置するための条件(ルール)を記憶する。
【0032】
現実物体位置取得部323は、外部メモリ211に格納されている、現実空間中の現実物体の位置姿勢、形状を示す情報を取得する。
【0033】
撮像処理部311は、右目・左目ビデオカメラ221により撮像された現実画像を取得し、撮像画像送信部312は、該現実画像をサーバ200に対して送信する。
【0034】
撮像画像受信部324は、撮像画像送信部312によって送信された現実画像を受信する。HMD位置特定部325は、赤外線カメラよって測定されたHMD101の位置姿勢を取得する。厳密には、HMD位置特定部325は、赤外線カメラによるHMD101の位置姿勢測定結果を取得し、該位置姿勢測定結果に基づいてHMD101の位置姿勢を特定する。なお、ここでは赤外線カメラを用いてHMD101の位置姿勢を特定するものとしているが、他の手法を用いてHMD101の位置姿勢を特定するようにしても構わない。例えば、HMD101の位置姿勢、HMD101による現実画像中のマーカの識別情報・位置・大きさ・角度、サーバ200に記憶されているマーカの識別情報・MR空間上の位置・大きさ、を用いて、HMD101のMR空間上の位置姿勢を特定するようにしてもよい。このようなマーカを使ったHMDの位置姿勢の特定方法は公知の技術であるため詳細な説明は割愛する。なお、「HMD101の位置姿勢」としてHMD101のどの部分の位置姿勢を採用しても構わないが、以下では、一例として、「右目・左目ビデオカメラ221の位置姿勢」とする。
【0035】
仮想スクリーン配置位置決定部326は、配置ルール記憶部322から取得したルール、HMD位置特定部325で特定したHMDのMR空間上の位置姿勢、現実物体位置取得部323が取得した、現実空間中の現実物体の位置姿勢、形状を示す情報、に基づいて、MR空間中のどのような位置にどのような姿勢で仮想スクリーンを配置するのか、すなわち仮想スクリーンの配置位置姿勢を決定する。
【0036】
MR画像生成部327は、仮想スクリーン配置位置決定部326で決定した配置位置姿勢で配置された仮想スクリーンを含むMR空間の画像をMR画像として生成する。
【0037】
MR画像送信部328は、MR画像生成部327によって生成されたMR画像をHMD101に対して送信する。MR画像受信部313は、MR画像送信部328によって送信されたMR画像を受信し、MR画像表示部314は、受信したMR画像を表示する。
【0038】
[第1の実施形態]
本実施形態に係るPC100及びサーバ200の動作について、
図4のフローチャートを用いて説明する。
【0039】
PC100の不図示のプロセッサは、アプリケーションの起動指示を検知すると、対応するアプリケーションを起動する(ステップS401)。これによりPC100の不図示の表示画面には、該アプリケーションを実行することで得られる画面が表示される。
【0040】
次に、PC100の不図示のプロセッサは、仮想スクリーンの表示指示を受け付ける(ステップS402)。例えば、PC100のプロセッサは、PC100がサーバ200に接続されたことを検知すると、仮想スクリーンの表示指示を受け付けたものと判断する。
【0041】
次に、PC100の不図示のプロセッサは、PC100の不図示の表示画面に表示されている画面を表すスクリーン情報を、仮想スクリーンの表示指示と共に、サーバ200に対して送信する(ステップS403)。なお、スクリーン情報は、PC100の不図示の表示画面に表示されている画面全体を表すスクリーン情報でなくても良く、PC100の不図示の表示画面に表示されている画面の一部を表すスクリーン情報であっても良い。
【0042】
以下、ステップS404でアプリケーションの終了指示を受け付けるまで、PC100の不図示のプロセッサは、このような送信を繰り返し続ける。一方、アプリケーションの終了指示を検知すると、PC100の不図示のプロセッサは処理を完了する。
【0043】
一方、サーバ200のCPU201は、PC100から送信されたスクリーン情報及び仮想スクリーンの表示指示を通信I/Fコントローラ208を介して受信すると、これらをRAM203や外部メモリ211に格納する(ステップS405)。
【0044】
次に、CPU201は、通信I/Fコントローラ208を介して、赤外線カメラにより測定されたそれぞれのHMD101の位置姿勢の測定結果を取得し、該測定結果に基づいて該それぞれのHMD101の位置姿勢を特定する(ステップS406)。また、CPU201は、配置ルール記憶部322が記憶しているものとして説明した、仮想スクリーンの配置ルール(
図7の仮想スクリーン配置ルール710)を、外部メモリ211から読み出す(ステップS407)。
【0045】
ここで、外部メモリ211で管理している様々なデータについて、
図7を用いて説明する。
【0046】
HMD情報700は、ステップS406においてHMD101毎に特定した該HMD101の位置姿勢を含む情報であり、外部メモリ211内で管理される。ID701は、HMD101毎に固有の情報である。HMD位置702は、ステップS406において特定したそれぞれのHMD101の位置(現実空間及び仮想空間で共有している座標系におけるx座標値、y座標値、z座標値)である。HMD姿勢703は、ステップS406において特定したそれぞれのHMD101の姿勢(現実空間及び仮想空間で共有している座標系におけるx軸回転角度、y軸回転角度、z軸回転角度)である。以下では、何れの位置及び姿勢も、この座標系におけるものであるとする。
【0047】
仮想スクリーン配置ルール710は上記の通り、仮想スクリーンの配置に係るルールを規定した情報であり、外部メモリ211内で管理される。ruleID711は、ルール毎に固有の情報である。位置712は、仮想スクリーンの配置位置について規定したルールである。姿勢713は、仮想スクリーンの配置姿勢について規定したルールである。仮想スクリーン配置ルール710に登録されているルールのうち何れを用いるのか(どのruleID711に対応するルールを用いるのか)、についてはユーザが選択しても良いし、仮想オブジェクト毎若しくはその種別毎に適用するルールが決められていても良い。
【0048】
仮想スクリーン情報720は、それぞれの仮想スクリーンを規定した情報であり、外部メモリ211内で管理される。仮想スクリーンID721は、仮想スクリーン毎に固有の情報である。形状722は、仮想スクリーンの大きさであり、縦、横、奥行きのそれぞれの大きさを規定する。位置723は、仮想スクリーンが実際に配置されている位置であり、姿勢724は、仮想スクリーンが実際に配置されている姿勢である。ID725は、対応するHMDのIDである。例えば
図7の場合、ID=scr1の仮想スクリーンは、ID=1のHMDに対応づけられている。
【0049】
現実物体情報730は、現実空間中に配置されているそれぞれの現実物体を規定した情報であり、外部メモリ211内で管理される。ID731は、現実物体毎に固有の情報である。形状732は、現実物体の大きさであり、縦、横、奥行きのそれぞれの大きさを規定する。位置733は、現実物体の実際の配置位置であり、姿勢734は、現実物体の実際の配置姿勢である。
【0050】
以降の処理は、サーバ200に接続されているそれぞれのHMD101について行われる。CPU201は、外部メモリ211内で管理しているHMD情報700からHMD101の位置(HMD位置702)を読み出す(ステップS408)。また、CPU201は、外部メモリ211内で管理されている現実物体情報730を読み出す(ステップS409)。本実施形態では
図7に示す如く、現実物体情報730には、ID731=DESK1に対応する現実物体(机)の形状732、位置733、姿勢734が登録されているものとして説明する。
図7の現実物体情報730によれば、ID731=DESK1に対応する現実物体(机)は、位置733で規定される位置に姿勢734で規定される姿勢でもって配置される、縦XXXmm、横YYYmm、奥行きZZZmmのサイズの直方体であることがわかる。なお、「位置733で規定される位置」とは、該直方体における1点(直方体内の重心位置や8個の頂点のうちの1つ)の位置のことであり、且つ該1点と直方体の8個の頂点との位置関係は既知とするので、これによれば、上記の座標系における、該直方体の幾何的な情報(例えば直方体の8個の頂点の位置)もまた既知である。
【0051】
そしてCPU201は、この直方体の上面を規定する4本の辺のうちHMD位置702に最も近い辺を最近辺として特定する。ここで、HMD位置702が(xh、yh、zh)であり、該上面が上記の座標系におけるXY平面と平行な面で且つそのz座標値(床面からの高さ)がzdであるとすると、CPU201は、点(xh、yh、zd)を通り、且つ該最近辺に直交する線分(ベクトル)を求める(ステップS410)。
【0052】
次に、CPU201は、外部メモリ211内で管理している仮想スクリーン情報720を読み出し、該読み出した仮想スクリーン情報720から形状722を読み出す(ステップS411)。そしてCPU201は、該読み出した形状722を有する仮想オブジェクトを仮想スクリーンとして生成し、該仮想スクリーンにおいて規定の面に、ステップS405でHMD101から受信したスクリーン情報が表すスクリーン画像をテクスチャとして貼り付ける(ステップS411)。これにより仮想スクリーンの規定の面には、PC100側で表示されている画面(スクリーン画像)がテクスチャとして貼り付けられていることになる。
【0053】
次に、CPU201は、ステップS407において読み出した仮想スクリーン配置ルール710中の位置712が規定する位置を特定する(ステップS412)。
図7の場合、位置712が規定するルールは「机の端から200mm、机の上空100mm」であるから、上記のベクトルと上記の最近辺との交点位置を求め、点(xh、yh、zd)から該交点位置に向かう方向に、該交点位置から200mmだけ進んだ位置(ベクトル上の位置)を求め、該求めた位置から上記上面の法線方向に100mmだけ進んだ位置を、「ステップS407において読み出した仮想スクリーン配置ルール710中の位置712が規定する位置」として求める。
【0054】
そしてCPU201は、ステップS411で生成した仮想スクリーンを、「ステップS407において読み出した仮想スクリーン配置ルール710中の位置712が規定する位置」に、「ステップS407において読み出した仮想スクリーン配置ルール710中の姿勢713が規定する姿勢」でもって、仮想空間中に配置する(ステップS412)。もちろん、規定の面がHMD位置702側に向くように配置する。仮想スクリーンの配置の様子は
図8に示す通りである。
【0055】
なお、仮想スクリーンの位置については上記のようにして求めた位置に限るものではなく、例えば、HMD位置702から視線方向に規定の距離だけ離間した位置に、仮想スクリーンを、規定の面がHMD位置702側に向くように配置しても構わない。また、HMD位置702から規定の距離にあり、且つ直方体の上面若しくはその上空の位置に、仮想スクリーンを、規定の面がHMD位置702側に向くように配置しても構わない。つまり、HMD101の位置と、現実物体の位置及び形状と、に応じて、仮想スクリーンの配置位置を決定する。
【0056】
次に、CPU201は、ステップS412で配置した仮想スクリーンのID721に対応するID725として、該仮想スクリーンの配置位置を求めるために用いたHMD位置702に対応するHMD101のID701を登録する(ステップS413)。
【0057】
次に、CPU201は、HMD位置702及びHMD姿勢703をそれぞれ視点位置及び視点姿勢とする視点から見える仮想空間の画像を、周知の方法でもって生成し、該仮想空間の画像を、右目・左目ビデオカメラ221から取得した現実画像に重畳させることでMR画像を生成する(ステップS414)。そしてCPU201は、このようにして生成したMR画像をHMD101に対して送信する(ステップS415)。
【0058】
また、CPU201は、
図4のフローチャートに従った処理と並行して、
図5のフローチャートに従った処理を実行する。
図5のフローチャートに従った処理は、サーバ200に接続されているそれぞれのHMD101について行われる。
【0059】
CPU201は、HMD情報700から未選択のID701を1つ選択し(ステップS501)、該選択したIDに対応するHMD位置702を該HMD情報700から取得する(ステップS502)。
【0060】
そしてCPU201は、現実物体情報730中の位置733を取得する(ステップS503)。そしてCPU201は、ステップS503で取得した位置733と、ステップS502で取得したHMD位置702と、の間の距離を求め、該求めた距離が所定距離以上か否か(HMD101が現実物体から所定距離以上離れたか否か)を判断する(ステップS504)。
【0061】
この判断の結果、所定距離以上離れた場合(ステップS504でYES)、処理はステップS505に進み、CPU201は、ステップS501で選択したIDに対応するHMD101に対する仮想スクリーンの表示を非表示にする(ステップS505)。つまり、机から離れたHMD101に対して出力するMR画像を生成する処理(
図4)において、仮想スクリーンを生成して配置するための一連の処理を中止して、仮想スクリーンがMR画像上に描画されないようにする。なお、仮想スクリーンの透明度を100%にしても構わない。すなわち、ステップS505では、仮想スクリーンを不可視にする。
【0062】
一方、所定距離以上離れていない場合(ステップS504でNO)、処理はステップS506に進み、CPU201は、ステップS501で選択したIDに対応するHMD101(机から所定距離内にある(所定距離以上離れていない)HMD101)に対する仮想スクリーンの表示を許可する(ステップS506)。仮想スクリーンが表示中の場合には該表示を継続する。非表示中の場合には、仮想スクリーンを生成して配置するための一連の処理を再開し、仮想スクリーンを可視にする。なお、ステップS505で仮想スクリーンの透明度を100%にした場合には、ステップS506では、仮想スクリーンの透明度を0%にしても構わない。
【0063】
このような処理により、部屋からユーザが退出し(机から離れ)た場合には、不要となった該退出したユーザ用の仮想スクリーンを非表示にし、部屋に残っているユーザ用の仮想スクリーンを表示させることができる。
【0064】
[第2の実施形態]
本実施形態では、PC100の前に座るユーザの前には、仮想スクリーンを配置しないようにする。以下では第1の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第1の実施形態と同様であるものとして説明する。これは、第3の実施形態以降についても同様である。本実施形態に係るサーバ200は、
図4のフローチャートにおいて、ステップS406とステップS413との間で
図6のフローチャートに従った処理を実行する。
図6において
図4に示した処理ステップと同じ処理ステップには同じステップ番号を付しており、該処理ステップに係る説明は省略する。
【0065】
本実施形態では、赤外線カメラは、HMD101だけでなく、PC100も測定対象となっている。本実施形態では、PC100についてはその位置を測定しているものとする。
【0066】
CPU201は、赤外線カメラからの測定結果に応じて、PC100の位置を特定する(ステップS601)。もちろん、PC100の位置を特定するための仕組みについては特定の仕組みに限るものではない。
【0067】
次に、CPU201は、HMD情報700で管理しているそれぞれのHMD101の位置(HMD位置702)のうち、PC100の位置に最も近い位置を特定し、該特定した位置に対応するID(ID701)を、オーナーHMDのIDとして別途、外部メモリ211に格納する(ステップS602)。
【0068】
ステップS603、S604、S605ではそれぞれ、ステップS602で外部メモリ211に格納したオーナーHMDのID以外のIDに対応するそれぞれのHMD101を対象として、ステップS408、S410、S412と同様の処理を行う。これはすなわち、仮想スクリーンを生成して配置するための一連の処理(ステップS406〜S413)は、オーナーHMDのID以外のIDに対応するそれぞれのHMD101を対象として行うことを意味する。この場合、オーナーHMDのIDに対応するHMD101には、MR画像ではなく、該HMD101による撮像画像としての現実画像が表示されることになる。
【0069】
以上の処理を行うことで、オーナーHMDの前の卓上には仮想スクリーンは配置されず、オーナーHMD以外のHMD(一般HMD)の前の卓上には仮想スクリーンは配置される。
【0070】
本実施形態においては、ユーザの位置と現実物体の位置とを用いて、所定のユーザに対応する仮想オブジェクトの表示・非表示を決定する仕組みを提供することができる。
【0071】
[第3の実施形態]
本実施形態では、仮想スクリーンを上記第1の実施形態の方法(HMDの位置と現実物体の位置及び形状とに基づいて仮想スクリーンの配置位置を決定する方法)で決定した配置位置に配置するか、デフォルトの配置位置に巨大な1つのスクリーンを配置するかを、不図示の設定切替画面にて設定する(切り替える)。
【0072】
デフォルトの配置位置(デフォルト位置)とは、HMD101の位置により変動しない所定の位置である。デフォルト位置には、HMD101の位置により変動しない所定の姿勢も含まれている。デフォルト位置、及び該デフォルト位置に仮想スクリーンを配置する場合の該仮想スクリーンの大きさ(デフォルトサイズ)は、予め外部メモリ211に登録されているものとする。
【0073】
例えば、デフォルト位置に仮想スクリーンを配置する場合には、
図9に示す如く、デフォルトサイズを有する1つ(所定の数)の仮想スクリーンを生成して、デフォルト位置に配置する。なお、デフォルト位置にデフォルトサイズで仮想スクリーンを配置する場合には、第1の実施形態において説明したように、ユーザごとに仮想スクリーンを配置する設定にはなっていない。
【0074】
ここで、1つの仮想スクリーンを全てのユーザで共有して閲覧する場合、
図5のフローチャートに従った処理をそのまま適用してしまうと、それぞれのユーザのHMD101のうち1つでも現実物体から所定距離以上離れてしまうと全てのユーザで共有している1つの仮想スクリーンが非表示になってしまうことになる。
【0075】
然るに本実施形態では、
図5のフローチャートにおいて、ステップS501の前に、CPU201は、RAM203や外部メモリ211において管理されている「仮想スクリーンの配置設定」が、可変設定(第1の実施形態と同様にしてそれぞれのHMD101に対して仮想スクリーンを提供する)であるのか、それともデフォルト設定(デフォルトサイズを有する1つの仮想スクリーンをデフォルト位置に配置する)であるのかを判断する。
【0076】
この判断の結果、可変設定の場合、即ち可変モードが設定されている場合には、処理はステップS501に進み、第1の実施形態と同様の処理を行う。一方、デフォルト設定の場合、即ちデフォルトモードが設定されている場合には、ステップS501〜S506の処理を行わずに、上記の如く、デフォルトサイズを有する1つの仮想スクリーンを生成して、仮想空間中のデフォルト位置に配置する(もちろん、
図4のフローチャートにおいて、HMD101ごとに仮想スクリーンの配置位置を決定するための処理も行わない)。然るにHMD101を頭部に装着したそれぞれのユーザには、デフォルト位置にデフォルトサイズを有する仮想スクリーンが配置されているMR空間が提供されることになり、それぞれのユーザでこの1つの仮想スクリーンを共有して閲覧することができる。
【0077】
このような処理により、デフォルト設定の場合、会議に参加している1人のユーザが現実物体から離れたとしても、仮想スクリーンを非表示にすることなく、ユーザに継続して仮想スクリーンを閲覧させることができる。
【0078】
[第4の実施形態]
第1の実施形態では、HMD101の位置と、現実物体の位置と、を用いて、該HMD101に対する仮想オブジェクトの表示/非表示を切り替えていたが、本実施形態においては、HMD101の位置と、仮想オブジェクトの位置と、を用いて、該HMD101に対する仮想オブジェクトの表示/非表示を切り替える。
【0079】
例えば、HMD101の位置と仮想スクリーンの位置との間の距離が所定距離内である場合には、該HMD101に対しては仮想スクリーンを表示し、該距離が所定距離以上である場合には、該HMD101に対しては仮想スクリーンを非表示にする。
【0080】
本実施形態では、
図5のフローチャートに従った処理において、ステップS503で現実物体情報730中の位置733を取得する代わりに、仮想スクリーン情報720から、ステップS501で取得したID701と同じID725に対応する仮想スクリーン(
ステップS501で取得したID701に対応するHMD101と対応づけられている仮想スクリーン)の位置723を取得する。そして、ステップS504では、ステップS503で取得した位置723と、ステップS502で取得したHMD位置702と、の間の距離を求め、該求めた距離が所定距離以上か否か(HMD101が仮想スクリーンから所定距離以上離れたか否か)を判断する。
【0081】
この判断の結果、所定距離以上離れた場合(ステップS504でYES)、処理はステップS505に進み、第1の実施形態と同様、ステップS501で選択したIDに対応するHMD101に対する仮想スクリーンの表示を非表示にする(ステップS505)。
【0082】
一方、所定距離以上離れていない場合(ステップS504でNO)、処理はステップS506に進み、第1の実施形態と同様、ステップS501で選択したIDに対応するHMD101に対する仮想スクリーンの表示を許可する(ステップS506)。
【0083】
このように、本実施形態においては、HMD101の位置と、仮想オブジェクトの位置と、を用いて、該HMD101に対する仮想オブジェクトの表示/非表示を切り替える。
【0084】
以上説明したように、本実施形態によれば、HMD101の位置と、仮想オブジェクトの位置と、を用いて、該HMD101に対する仮想オブジェクトの表示/非表示を切り替える仕組みを提供することができる。
【0085】
また、第1〜4の実施形態では、HMD101はビデオシースルー型のものを用いていたが、光学シースルー型のものを用いても構わない。その場合、サーバ200は、生成した仮想空間の画像をそのままHMD101に対して送出することになる。
【0086】
[第5の実施形態]
本実施形態では、仮想スクリーンの移動・拡大・縮小について説明する。本実施形態は、第1〜4の実施形態の何れに適用しても構わない。仮想スクリーンは、ユーザからの操作に応じて自在に移動・変形(拡大・縮小)可能である。本実施形態では、
図4,5のフローチャートに従った処理と並行して、
図10のフローチャートに従った処理も実行する。なお、
図10に示した各ステップのうち幾つかのステップについては、
図4,5のフローチャートに示したステップと重複するものもあるが、
図10では説明をわかりやすくするために各ステップを列挙したのであって、実際には、ステップの重複は生じ得ない。
【0087】
先ず、CPU201は、すでに外部メモリ211に登録したHMD情報700から、HMD101の位置702及び姿勢703を取得すると共に、右目・左目ビデオカメラ221から取得した現実画像を取得する(ステップS1001)。次に、CPU201は、該現実画像から手の領域を抽出し(ステップS1002)、該抽出した手の領域から、位置702に対する該手の相対的な位置姿勢を算出する(ステップS1003)。
【0088】
一般に、画像中に写っている手の、該画像を撮像した装置に対する相対的な位置姿勢を求める方法には様々な方法があり、本実施形態では如何なる方法を採用しても構わない。例えば、ユーザの手の3次元CGモデル(ユーザの手の大きさ・形状と同じ大きさ・形状を有するハンドオブジェクト)を予め作成して外部メモリ211に登録しておく。そして、現実画像から肌色を示す画素値を有する画素から成る領域を手の領域として抽出し、位置702から姿勢703で見たハンドモデルの外形線で囲まれた領域が、該抽出した手の領域と一致するような、手の位置姿勢(HMD101に対する該手の相対的な位置姿勢)を推定する。もちろん、ハンドモデルを用いて手の位置姿勢を推定する方法はこの方法に限るものではない。
【0089】
次に、CPU201は、ハンドモデルを、位置702及び姿勢703に対する相対的な位置姿勢がステップS1003で推定した位置姿勢となる位置姿勢に上記のハンドモデルを配置する(ステップS1004)。
【0090】
上記のようにしてHMD101ごとに求めたハンドモデルの位置姿勢については、
図11に示す如く、ハンドモデルに固有のID1121、ハンドモデルの位置1122、ハンドモデルの姿勢1123、がそれぞれのハンドモデルについて管理されているハンドオブジェクト情報1120として外部メモリ211で管理する。
【0091】
次に、CPU201は、ステップS1004で配置したハンドモデルと、仮想スクリーンと、が接触しているか否かを判断する(ステップS1005)。ハンドモデル及び仮想スクリーンの何れも仮想物体であり、仮想物体同士の衝突判定については公知の技術であるため、これに係る説明は省略する。
【0092】
この判断の結果、接触していない場合(ステップS1005でNO)には、
図10のフローチャートに従った処理は完了する(実際には、
図10のフローチャートに従った処理は、右目・左目ビデオカメラ221による撮像画像毎に行われるため、現フレームに対する
図10のフローチャートに従った処理は完了し、次のフレームについてはまた
図10のフローチャートに従った処理を開始することになる)。
【0093】
一方、この判断の結果、接触している場合(ステップS1005でYES)には、
図11に示す如く、ハンドモデルのID1131と、該ハンドモデルと接触したと判断された仮想スクリーンのID1132と、を関連づけて、接触情報1130に登録する。そして処理はステップS1006に進む。
【0094】
次に、CPU201は、仮想スクリーンに対して予め設定された領域A(領域Bを除く領域)及び領域B(仮想スクリーンの頂点から所定範囲内の領域)のうち、ハンドモデルと接触したと判断された位置が領域A内の位置であるのか、それとも領域B内の位置であるのかを判断する。領域A及び領域Bの一例を
図12に示す。ただし、領域A及び領域Bの設定は
図12に示した設定に限るものではない。また、仮想スクリーンを3以上の領域に分割しても良く、それぞれの領域に異なる機能を割り当てるようにしても構わない。
【0095】
本実施形態においては、領域Bは、仮想スクリーンの各頂点から半径300mm以内の領域であるものとする。また、領域Aは、仮想スクリーンにおける領域B以外の領域であるものとする。
【0096】
このような領域A及び領域Bを規定する情報(仮想スクリーン上のX,Y座標)は予め作成されて外部メモリ211に登録されているものとする。
【0097】
そして、ハンドモデルと接触したと判断された位置が領域A内の位置である場合には、処理はステップS1007に進み、領域B内の位置である場合には、処理はステップS1014に進む。
【0098】
ステップS1007では、CPU201は、
図11の接触情報1130における接触領域1134に、領域Aを示す情報を登録する(ステップS1007)。
【0099】
次に、CPU201は、ハンドモデルと仮想スクリーンとが接触した状態において、ハンドモデルの移動量が規定量以下となる状態が所定時間以上続いているか否かを判断する(ステップS1008)。この判断の結果、続いていると判断した場合(ステップS1008でYES)には、処理はステップS1009に進み、続いていないと判断した場合(ステップS1008でNO)には、
図10のフローチャートに従った処理は完了する。
【0100】
次に、CPU201は、接触情報1130中の追従フラグ1133を参照し、該追従フラグ1133が「1」であるか「0」であるかを判断する(ステップS1009)。追従フラグ1133とは、
図11の追従フラグ1100で示す如く、ハンドモデルの移動(ユーザの手の移動)に合わせて仮想スクリーンの移動や拡大縮小が可能な状態(ハンドモデルの移動に追従して仮想スクリーンの移動や拡大縮小が可能な状態)の場合には「1」となり、可能ではない場合には「0」となる。
【0101】
この追従フラグ1133は、「ハンドモデルと仮想スクリーンとが接触した状態において、ハンドモデルの移動量が規定量以下となる状態が所定時間以上続いた」という条件が満たされると「1」にセットされる。この「所定時間」は、例えば
図11の1110に示す如く「3秒」である。
【0102】
図11の例からすると、ハンドモデルが仮想スクリーンにおける領域Aと接触している状態において、ハンドモデルの移動量が規定量以下となる状態が3秒以上続くと、追従フラグ1133は「1」にセットされ、ハンドモデルの移動に合わせて仮想スクリーンの移動が可能な状態となる。仮想スクリーンはハンドモデルの移動に追従して移動する。移動したい先で仮想スクリーンを停止させ(手を停止させ)てから3秒以上が経過すると、追従フラグ1133は「0」にセットされ、仮想スクリーンが停止中の位置に固定される。つまり仮想スクリーンの位置723、姿勢724が、移動後の位置・姿勢に変更される。
【0103】
また、ハンドモデルが仮想スクリーンにおける領域Bと接触している状態において、ハンドモデルの移動量が規定量以下となる状態が3秒以上続くと、追従フラグ1133は「1」にセットされ、ハンドモデルの移動に合わせて仮想スクリーンの拡大縮小が可能な状態となる。仮想スクリーンは手の移動に追従して拡大縮小される。具体的には、ハンドモデルの位置と、仮想スクリーンの中心座標(重心位置)と、の間の距離が大きくなった場合に、該大きくなった距離に応じて仮想スクリーンを拡大する。また、ハンドモデルの位置と、仮想スクリーンの中心座標(重心位置)と、の間の距離が小さくなった場合に、該小さくなった距離に応じて仮想スクリーンを縮小する。
【0104】
拡大縮小後、手を停止させてから3秒以上が経過すると、追従フラグ1133は「0」にセットされ、仮想スクリーンの大きさが、拡大縮小後の大きさに固定される。つまり仮想スクリーンの形状722が、拡大縮小後の大きさに変更される。
【0105】
図10に戻って、ステップS1009における判断において、追従フラグ1133が「1」である場合には、処理はステップS1012に進み、「0」である場合には、処理はステップS1010に進む。
【0106】
ステップS1010では、CPU201は、追従フラグ1133を「1」にセットし(ステップS1010)、その後、上記の通り、ハンドモデルの移動に追従させて仮想スクリーンを移動させる(ステップS1011)。
【0107】
一方、ステップS1012では、CPU201は、追従フラグ1133を「0」にセットし(ステップS1012)、その後、ハンドモデルの移動に追従させて仮想スクリーンを移動させことを中止し、仮想スクリーンの位置姿勢を固定して、手(ハンドモデル)と仮想スクリーンを分離させる(ステップS1013)。
【0108】
一方、ステップS1014では、CPU201は、
図11の接触情報1130における接触領域1134に、領域Bを示す情報を登録する(ステップS1014)。
【0109】
次に、CPU201は、ハンドモデルと仮想スクリーンとが接触した状態において、ハンドモデルの移動量が規定量以下となる状態が所定時間以上続いているか否かを判断する(ステップS1015)。この判断の結果、続いていると判断した場合(ステップS1015でYES)には、処理はステップS1016に進み、続いていないと判断した場合(ステップS1015でNO)には、
図10のフローチャートに従った処理は完了する。
【0110】
次に、CPU201は、接触情報1130中の追従フラグ1133を参照し、該追従フラグ1133が「1」であるか「0」であるかを判断する(ステップS1016)。
【0111】
ステップS1016における判断において、追従フラグ1133が「1」である場合には、処理はステップS1019に進み、「0」である場合には、処理はステップS1017に進む。
【0112】
ステップS1017では、CPU201は、追従フラグ1133を「1」にセットし(ステップS1017)、その後、上記の通り、ハンドモデルの移動に追従させて仮想スクリーンを拡大/縮小させる(ステップS1018)。
【0113】
一方、ステップS1019では、CPU201は、追従フラグ1133を「0」にセットし(ステップS1019)、その後、ハンドモデルの移動に追従させて仮想スクリーンを拡大縮小させことを中止し、仮想スクリーンのサイズを固定して、手(ハンドモデル)と仮想スクリーンを分離させる(ステップS1020)。
【0114】
このように、本実施形態においては、例えば、移動・拡大・縮小後の仮想スクリーンの位置・姿勢・形状と、HMD101の位置情報と、に応じて、仮想スクリーンの表示・非表示を切り替えることが可能である。
【0115】
尚、上述した実施形態の
図5の説明においては、HMD101の位置と現実物体の位置が所定距離以上離れた場合に(ステップS504でYES)、ステップS501で選択したIDに対応するHMD101に対する全ての仮想スクリーンの表示を非表示にするものとしたが、例えばステップS505で、当該HMD101(HMD ID725)に対応する仮想スクリーン(仮想スクリーンID721の仮想スクリーン)を特定して当該特定した仮想スクリーンを非表示にするようにしてもよい。つまり、現実物体から離れたユーザの前に配置されていた仮想スクリーンを非表示にして、他のユーザの前に配置されている仮想スクリーンは、当該現実物体から離れたユーザの装着しているHMD101のディスプレイにも継続して表示されるようにするということである。
【0116】
また、上述した第3の実施形態の説明においては、
図5のステップS501の前に、CPU201は、RAM203や外部メモリ211において管理されている「仮想スクリーンの配置設定」が、可変設定であるのか、それともデフォルト設定であるのかを判断して、当該判断結果に応じて、処理をステップS501に移行するのか、ステップS501からS506の処理を行わずに処理を終了するのかを切り替えたが、例えば、
図4のステップS407とS408の間に「仮想スクリーンの配置設定」が、可変設定であるのか、それともデフォルト設定であるのかを判定するようしてもよい。尚、ステップS407では更にデフォルトの配置位置の情報が外部メモリから読み込まれているものとする。
【0117】
この判断の結果、可変設定の場合、即ち可変モードが設定されている場合には、処理はステップS408に進み、第1の実施形態と同様の処理を行う。一方、デフォルト設定の場合、即ちデフォルトモードが設定されている場合には、ステップS408〜S413の処理を行わずに、デフォルトサイズを有する1つの仮想スクリーンを生成して、仮想空間中のデフォルト位置に配置する。そして、当該デフォルトの位置に配置された仮想スクリーンの情報とHMD101の位置姿勢、現実画像の情報を用いてHMD101に表示させるMR画像を生成して、当該MR画像HMD101に送信するものとする。
【0118】
然るにHMD101を頭部に装着したそれぞれのユーザには、デフォルト位置にデフォルトサイズを有する仮想スクリーンが配置されているMR空間が提供されることになり、それぞれのユーザでこの1つの仮想スクリーンを共有して閲覧することができる。
【0119】
尚、本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、1つの機器からなる装置に適用してもよい。
【0120】
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接、或いは遠隔から供給するものを含む。そして、そのシステム或いは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合も本発明に含まれる。
【0121】
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【0122】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RWなどがある。また、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などもある。
【0123】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
【0124】
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
【0125】
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【0126】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【0127】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
【0128】
尚、前述した実施形態は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。即ち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。