(57)【要約】  拡張現実（ＡＲ）環境および／または仮想現実（ＶＲ）環境において複数の６自由度（６ＤＯＦ）コントローラからの６ＤＯＦの入力、または位置および向き入力を組合せるためのシステムを提供する。検出された複数のコントローラの動きに応じて、特に、仮想現実環境においてユーザ入力を提供する複数のコントローラの回転運動に応じて、検出された複数のコントローラの動きが単一の共通の座標系に変換されて、仮想環境において選択された仮想オブジェクトに適用されることになる意図された入力が判断され得る。複数の６ＤＯＦコントローラからのこれらの入力を共通の座標系に変換する能力によって、より自然なユーザ入力モードが提供されるので、ユーザの体験を向上させることができる。
2019532396.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
３次元（３Ｄ）仮想環境を生成することと、
物理環境での第１のコントローラの６自由度（６ＤＯＦ）の位置および向きを追跡することと、
前記物理環境での第２のコントローラの６ＤＯＦの位置および向きを追跡することと、
前記仮想環境で表示される仮想オブジェクトの選択を検出することと、
前記物理環境で検出された第１の座標系に対する前記第１のコントローラの動き、および前記物理環境で検出された第２の座標系に対する前記第２のコントローラの動きに基づいて、選択された前記仮想オブジェクトについて目標とされた入力を検出することと、
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することと、
前記コマンドの動きに応じて、選択された前記仮想オブジェクトを操作することとを備える、方法。
【請求項２】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
前記共通の座標系の第１の軸を定義することを含み、前記第１の軸は前記第１のコントローラの中央部から前記第２のコントローラの中央部に延び、前記変換することはさらに、
前記共通の座標系の第２の軸を定義することを含み、前記第２の軸は前記第１の座標系のＸ軸、Ｙ軸、またはＺ軸の１つから選択され、前記変換することはさらに、
前記共通の座標系の第３の軸を定義することを含み、前記第３の軸は前記第１の軸と前記第２の軸との外積である、請求項１に記載の方法。
【請求項３】
前記共通の座標系の前記第２の軸を定義することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸のうちのどれが前記第１の軸に最も直交しているかを判断することと、
前記Ｘ軸、前記Ｙ軸または前記Ｚ軸のうちの最も直交している軸を前記共通の座標系の前記第２の軸として設定することとを含む、請求項２に記載の方法。
【請求項４】
前記第１の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、連続した時点において前記第１の軸を動的に再び定義することを含む、請求項３に記載の方法。
【請求項５】
前記第２の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、かつ前記第１の軸が動的に再び定義されると、連続した時点において前記第２の軸を動的に再び定義することを含む、請求項４に記載の方法。
【請求項６】
前記第３の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、かつ前記第１の軸および前記第２の軸が動的に再び定義されると、連続した時点において前記第３の軸を動的に再び定義することを含む、請求項５に記載の方法。
【請求項７】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きに基づいて、選択された前記仮想オブジェクトについて目標とされた入力を検出することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸の少なくとも１つの周りの前記第１のコントローラの回転運動を検出すること、または
前記第２の座標系のＸ軸、Ｙ軸またはＺ軸の少なくとも１つの周りの前記第２のコントローラの回転運動を検出すること、の少なくとも一方を含む、請求項２に記載の方法。
【請求項８】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
検出された前記第１のコントローラの前記回転運動または検出された前記第２のコントローラの前記運動の少なくとも一方に基づいて、前記共通の座標系に対する回転コマンドの動きを判断することと、
前記回転コマンドの動きを、選択された前記仮想オブジェクトの操作に適用することとを含む、請求項７に記載の方法。
【請求項９】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きに基づいて、選択された前記仮想オブジェクトについて目標とされた入力を検出することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸の少なくとも１つに対する、かつ前記第２のコントローラの位置に対する前記第１のコントローラの動きを検出すること、または
前記第２の座標系のＸ軸、Ｙ軸またはＺ軸の少なくとも１つに対する、かつ前記第１のコントローラの位置に対する前記第２のコントローラの動きを検出すること、の少なくとも一方を含む、請求項２に記載の方法。
【請求項１０】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
検出された前記第１のコントローラの前記動きまたは検出された前記第２のコントローラの前記動きの少なくとも一方に基づいて、前記共通の座標系に対する選択された動きの方向および選択された動きの量を求めることと、
前記選択された動きの方向における前記選択された動きの量を、選択された前記仮想オブジェクトの操作に適用することとを含む、請求項９に記載の方法。
【請求項１１】
前記３Ｄ仮想環境を生成することは、ヘッドマウントディスプレイ（ＨＭＤ）デバイスのディスプレイ上に前記仮想環境を表示することを含み、前記第１および第２のコントローラは前記ＨＭＤに作動的に結合されるハンドヘルドコントローラであり、その結果、前記物理環境での前記第１および第２のコントローラの物理的な動きは、前記仮想環境で表示される選択された仮想オブジェクトに対して実行されることになるユーザコマンドに対応する、請求項１に記載の方法。
【請求項１２】
方法であって、
仮想環境で表示される仮想オブジェクトの選択を検出することと、
検出された第１の座標系に対する第１のコントローラの動き、および検出された第２の座標系に対する第２のコントローラの動きに応じて、前記仮想環境で表示される選択された前記仮想オブジェクトについて目標とされた入力を検出することとを備え、前記第１のコントローラおよび前記第２のコントローラは物理環境で動作し、前記方法はさらに、
検出された前記第１のコントローラの前記動き、および検出された前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することと、
前記コマンドの動きに応じて、選択された前記仮想オブジェクトを前記仮想環境で回転させることとを備える、方法。
【請求項１３】
検出された前記第１のコントローラの前記動き、および検出された前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
前記共通の座標系の第１の軸を定義することを含み、前記第１の軸は前記第１のコントローラの中央部から前記第２のコントローラの中央部に延び、前記変換することはさらに、
前記共通の座標系の第２の軸を定義することを含み、前記第２の軸を定義することは、
前記第１の座標系のＸ軸、Ｙ軸またはＺ軸のうちのどれが前記第１の軸に最も直交しているかを判断することと、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸のうちの最も直交している軸を前記共通の座標系の前記第２の軸として設定することとを含み、前記変換することはさらに、
前記共通の座標系の第３の軸を定義することを含み、前記第３の軸は前記第１の軸と前記第２の軸との外積である、請求項１２に記載の方法。
【請求項１４】
前記第１の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、連続した時点において前記第１の軸を動的に再び定義することを含み、
前記第２の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、かつ前記第１の軸が動的に再び定義されると、連続した時点において前記第２の軸を動的に再び定義することを含み、
前記第３の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、かつ前記第１の軸および前記第２の軸が動的に再び定義されると、連続した時点において前記第３の軸を動的に再び定義することを含む、請求項１３に記載の方法。
【請求項１５】
検出された前記第１のコントローラの前記動き、および検出された第２のコントローラの前記動きに応じて、選択された前記仮想オブジェクトについて目標とされた入力を検出することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸の少なくとも１つの周りの前記第１のコントローラの回転運動を検出すること、または
前記第２の座標系のＸ軸、Ｙ軸またはＺ軸の少なくとも１つの周りの前記第２のコントローラの回転運動を検出すること、の少なくとも一方を含む、請求項１３に記載の方法。
【請求項１６】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
検出された前記第１のコントローラの前記回転運動または検出された前記第２のコントローラの前記運動の少なくとも一方に基づいて、前記共通の座標系に対する回転コマンドの動きを判断することと、
前記回転コマンドの動きを、選択された前記仮想オブジェクトの操作に適用することとを含む、請求項１５に記載の方法。
【請求項１７】
前記物理環境での前記第１のコントローラの６自由度（６ＤＯＦ）の位置および向きを追跡することと、
前記物理環境での前記第２のコントローラの６ＤＯＦの位置および向きを追跡することと、
前記第１のコントローラの前記６ＤＯＦの追跡に基づいて、前記第１のコントローラの前記動きを検出することと、
前記第２のコントローラの前記６ＤＯＦの追跡に基づいて、前記第２のコントローラの前記動きを検出することとをさらに備える、請求項１２に記載の方法。
【請求項１８】
非一時的なコンピュータ可読媒体上に具体化されたコンピュータプログラムプロダクトであって、前記コンピュータ可読媒体上に一連の命令が格納されており、前記命令はプロセッサによって実行されると前記プロセッサに方法を実行させ、前記方法は、
３次元（３Ｄ）仮想環境を生成することと、
物理環境での第１のコントローラの６自由度（６ＤＯＦ）の位置および向きを追跡することと、
前記物理環境での第２のコントローラの６ＤＯＦの位置および向きを追跡することと、
前記仮想環境で表示される仮想オブジェクトの選択を検出することと、
前記物理環境で検出された第１の座標系に対する前記第１のコントローラの動き、および前記物理環境で検出された第２の座標系に対する前記第２のコントローラの動きに基づいて、選択された前記仮想オブジェクトについて目標とされた入力を検出することと、
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することと、
前記コマンドの動きに応じて、選択された前記仮想オブジェクトを操作することとを備える、コンピュータプログラムプロダクト。
【請求項１９】
検出された前記第１のコントローラの前記動き、および検出された前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
前記共通の座標系の第１の軸を定義することを含み、前記第１の軸は前記第１のコントローラの中央部から前記第２のコントローラの中央部に延び、前記変換することはさらに、
前記共通の座標系の第２の軸を定義することを含み、前記第２の軸を定義することは、
前記第１の座標系のＸ軸、Ｙ軸またはＺ軸のうちのどれが前記第１の軸に最も直交しているかを判断することと、
前記Ｘ軸、前記Ｙ軸または前記Ｚ軸のうちの最も直交している軸を前記共通の座標系の前記第２の軸として設定することとを含み、前記変換することはさらに、
前記共通の座標系の第３の軸を定義することを含み、前記第３の軸は前記第１の軸と前記第２の軸との外積である、請求項１８に記載のコンピュータプログラムプロダクト。
【請求項２０】
検出された前記第１のコントローラの前記動き、および検出された第２のコントローラの前記動きに応じて、選択された前記仮想オブジェクトについて目標とされた入力を検出することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸の少なくとも１つの周りの前記第１のコントローラの回転運動を検出すること、または
前記第２の座標系のＸ軸、Ｙ軸またはＺ軸の少なくとも１つの周りの前記第２のコントローラの回転運動を検出すること、の少なくとも一方を含み、
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
検出された前記第１のコントローラの前記回転運動または検出された前記第２のコントローラの前記運動の少なくとも一方に基づいて、前記共通の座標系に対する回転コマンドの動きを判断することと、
前記回転コマンドの動きを、選択された前記仮想オブジェクトの操作に適用することとを含む、請求項１９に記載のコンピュータプログラムプロダクト。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、２０１６年８月２３日に出願された米国仮出願第６２／３７８，３８９号に基づく優先権を主張する２０１７年８月１７日に出願された米国出願第１５／６７９，５９７号の継続出願であり、それに基づく優先権を主張し、その開示全体を本明細書に引用により援用する。
【０００２】
本願は、２０１６年８月２３日に出願された米国仮出願第６２／３７８，３８９号に基づく優先権を主張し、その開示全体を本明細書に引用により援用する。
【０００３】
分野
本文書は概して、拡張現実およびまたは仮想現実環境における入力の処理に関する。
【背景技術】
【０００４】
背景
拡張現実（augmented reality：ＡＲ）および／または仮想現実（virtual reality：ＶＲ）システムは、３次元（３Ｄ）没入型環境を生成することができる。ユーザは、この拡張および／または仮想現実環境を、さまざまな電子装置との対話を通して体験することができる。これらの電子装置は、たとえば、ディスプレイを含むヘルメットまたはその他のヘッドマウントデバイス、ユーザがディスプレイ装置を見るときに用いる眼鏡またはゴーグル、センサを含む外部ハンドヘルドデバイス、センサが装着された手袋、およびその他のこのような電子装置などである。拡張および／または仮想現実環境に没入すると、ユーザは仮想環境において、仮想環境の中の仮想の物体、要素、特徴などと、仮想環境の中の仮想の物体を選択および／または操作するためのさまざまな方法で対話することができる。たとえば、ユーザは、１つ以上の外部電子装置の操作、物理的な動きおよび／またはジェスチャ、頭部の方向および／または目の注視などを通して仮想環境で所望の効果を生成して、仮想環境と対話し、仮想環境を個人専用にし、仮想環境を制御することができる。
【発明の概要】
【課題を解決するための手段】
【０００５】
要約
ある局面において、方法は、３次元（３Ｄ）仮想環境を生成することと、物理環境での第１のコントローラの６自由度（６ＤＯＦ）の位置および向きを追跡することと、物理環境での第２のコントローラの６ＤＯＦの位置および向きを追跡することと、仮想環境で表示される仮想オブジェクトの選択を検出することと、物理環境で検出された第１の座標系に対する第１のコントローラの動き、および物理環境で検出された第２の座標系に対する第２のコントローラの動きに基づいて、選択された仮想オブジェクトについて目標とされた入力を検出することと、検出された第１の座標系に対する第１のコントローラの動き、および検出された第２の座標系に対する第２のコントローラの動きを、共通の座標系に対するコマンドの動きに変換することと、コマンドの動きに応じて、選択された仮想オブジェクトを操作することとを含み得る。
【０００６】
別の局面において、方法は、仮想環境で表示される仮想オブジェクトの選択を検出することと、検出された第１の座標系に対する第１のコントローラの動き、および検出された第２の座標系に対する第２のコントローラの動きに応じて、仮想環境で表示される選択された仮想オブジェクトについて目標とされた入力を検出することとを含み得、第１のコントローラおよび第２のコントローラは物理環境で動作し、方法はさらに、検出された第１のコントローラの動き、および検出された第２のコントローラの動きを、共通の座標系に対するコマンドの動きに変換することと、コマンドの動きに応じて、選択された仮想オブジェクトを仮想環境で回転させることとを含み得る。
【０００７】
別の局面において、コンピュータプログラムプロダクトが非一時的なコンピュータ可読媒体上に具体化され得、コンピュータ可読媒体上に一連の命令が格納されている。命令はプロセッサによって実行されるとプロセッサに方法を実行させ得、方法は、３次元（３Ｄ）仮想環境を生成することと、物理環境での第１のコントローラの６自由度（６ＤＯＦ）の位置および向きを追跡することと、物理環境での第２のコントローラの６ＤＯＦの位置および向きを追跡することと、仮想環境で表示される仮想オブジェクトの選択を検出することと、物理環境で検出された第１の座標系に対する第１のコントローラの動き、および物理環境で検出された第２の座標系に対する第２のコントローラの動きに基づいて、選択された仮想オブジェクトについて目標とされた入力を検出することと、検出された第１の座標系に対する第１のコントローラの動き、および検出された第２の座標系に対する第２のコントローラの動きを、共通の座標系に対するコマンドの動きに変換することと、コマンドの動きに応じて、選択された仮想オブジェクトを操作することとを含む。
【０００８】
１つ以上の実装例の詳細を添付の図面および以下の説明に記載する。その他の特徴は、明細書および図面から、ならびに特許請求の範囲から明らかであろう。
【図面の簡単な説明】
【０００９】
【図１】本明細書に記載の実装例に従う、ヘッドマウントディスプレイ（ＨＭＤ）デバイスおよびハンドヘルド電子装置を含む仮想現実システムの例示的な実装例の図である。
【図２】本明細書に記載の実装例に従う、拡張および／または仮想現実環境で動作する複数の６自由度（６ＤＯＦ）コントローラのそれぞれの座標系を示す図である。
【図３】本明細書に記載の実装例に従う、拡張および／または仮想現実環境での複数の６ＤＯＦコントローラの例示的な動きおよび仮想オブジェクトの対応する動きを示す図である。
【図４】本明細書に記載の実装例に従う、拡張および／または仮想現実環境での複数の６ＤＯＦコントローラの例示的な動きおよび仮想オブジェクトに対応する動きを示す図である。
【図５】本明細書に記載の実装例に従う、拡張および／または仮想現実環境での複数の６ＤＯＦコントローラの例示的な動きおよび仮想オブジェクトに対応する動きを示す図である。
【図６】本明細書に記載の実装例に従う、拡張および／または仮想現実環境での複数の６ＤＯＦコントローラの例示的な動きおよび仮想オブジェクトに対応する動きを示す図である。
【図７】本明細書に記載の実装例に従う、拡張および／または仮想現実環境での複数の６ＤＯＦコントローラの例示的な動きおよび仮想オブジェクトに対応する動きを示す図である。
【図８】本明細書に記載の実装例に従う、拡張および／または仮想現実環境での複数の６ＤＯＦコントローラの例示的な動きおよび仮想オブジェクトに対応する動きを示す図である。
【図９】本明細書に記載の実装例に従う、拡張および／または仮想現実環境での複数の６ＤＯＦコントローラの例示的な動きおよび仮想オブジェクトに対応する動きを示す図である。
【図１０Ａ】本明細書に記載の実装例に従う、拡張現実および／または仮想現実環境での選択された仮想オブジェクトの操作時の複数の６ＤＯＦコントローラの使用の例示的な実装を示す図である。
【図１０Ｂ】本明細書に記載の実装例に従う、拡張現実および／または仮想現実環境での選択された仮想オブジェクトの操作時の複数の６ＤＯＦコントローラの使用の例示的な実装を示す図である。
【図１０Ｃ】本明細書に記載の実装例に従う、拡張現実および／または仮想現実環境での選択された仮想オブジェクトの操作時の複数の６ＤＯＦコントローラの使用の例示的な実装を示す図である。
【図１０Ｄ】本明細書に記載の実装例に従う、拡張現実および／または仮想現実環境での選択された仮想オブジェクトの操作時の複数の６ＤＯＦコントローラの使用の例示的な実装を示す図である。
【図１１Ａ】本明細書に記載の実装例に従う、例示的なＨＭＤの斜視図である。
【図１１Ｂ】本明細書に記載の実装例に従う、例示的なＨＭＤの斜視図である。
【図１２】本明細書に記載の実装例に従う、拡張および／または仮想現実システムのブロック図である。
【図１３】本明細書に記載の実装例に従う方法のフローチャートの図である。
【図１４】本明細書に記載の技法を実現するために使用され得るコンピュータデバイスおよびモバイルコンピュータデバイスの例を示す図である。
【発明を実施するための形態】
【００１０】
詳細な説明
たとえばヘッドマウントディスプレイ（head mounted display：ＨＭＤ）デバイスを装着し仮想環境に没入しているユーザは、仮想環境を探検することができ、多種多様な入力を通して仮想環境の中の仮想の物体、要素、特徴などと対話することができる。これらの入力は、たとえば、ＨＭＤとは別の電子装置の操作および／もしくはＨＭＤ自体の操作、ならびに／または目の注視の方向、ならびに／または頭部の動きならびに／または手／腕のジェスチャなどを含み得る。ユーザは、ＨＭＤに作動的に結合されたまたはＨＭＤとペアリングされた１つ以上のハンドヘルド電子装置、またはコントローラを操作して、仮想環境で所望の行動を生じさせることができる。ユーザは、たとえば、コントローラのタッチ面へのタッチ入力、コントローラ上の入力ボタンおよび／またはスイッチの操作、コントローラ自体の物理的な動きなどの多種多様な方法でコントローラを操作して、仮想環境で実行されることになる入力を提供することができる。たとえば、ある実装例では、コントローラを操作して、仮想環境でユーザに表示される仮想コンテンツの視覚サイズおよび／または外観および／または位置を調整することができる。この能力によって、ユーザ入力を提供する際の柔軟性および利便性が提供され得、ユーザの仮想体験が向上し得る。
【００１１】
本明細書に記載の実装例に従うシステムおよび方法では、仮想現実環境でユーザ入力を提供する複数のコントローラの動き、および特に複数のコントローラの回転が単一の座標系に変換されて、特定の仮想オブジェクトに対して意図された実装が判断され得る。
【００１２】
以下、単に説明および図示を簡単にするために、拡張および／または仮想現実環境での対話に用いられることになる１つ以上のハンドヘルド電子装置をコントローラと称することにする。しかし、本明細書に記載の原理は、拡張および／または仮想現実環境での対話のためにユーザに提示される仮想の物体、仮想の特徴などと対話するために用いられ得るその他の種類の外部電子装置にも適用され得る。
【００１３】
図１に示す例示的な実装例では、ＨＭＤ１００を装着しているユーザが、第１の携帯型ハンドヘルド電子装置Ａ、または第１のコントローラＡを片手に持ち、第２の携帯型ハンドヘルド電子装置Ｂ、または第２のコントローラＢをもう片方の手に持っている。コントローラＡ、Ｂの一方または両方は、たとえば、ジャイロマウス、スマートフォン、特定のシステムと動作するように構成されたコントローラ、または、ＨＭＤ１００が生成する没入型仮想環境での対話のためにＨＭＤ１００とペアリングされ得るかもしくはＨＭＤ１００と通信し得るその他の種類のコントローラであってもよい。ある実装例では、コントローラＡ、Ｂの６ＤＯＦの位置および向きが、コントローラＡ、Ｂに含まれるさまざまなセンサに基づいて追跡され得る。これらのセンサは、たとえば、加速度計、ジャイロスコープ、ジャイロスコープ内の磁気計などを含むたとえば慣性測定装置、またはこの態様で適合されたスマートフォンを含み得る。ある実装例では、コントローラＡ、Ｂの６ＤＯＦの位置および向きは、システム内のその他のセンサが検出したそれぞれのコントローラＡ、Ｂの位置に基づいて追跡され得る。これら他のセンサは、たとえばＨＭＤ１００上に含まれる画像センサを、コントローラＡ、Ｂに含まれる方向付けセンサとともに含み得る。コントローラＡ、Ｂは、たとえば、有線接続、たとえばｗｉｆｉもしくはＢｌｕｅｔｏｏｔｈ（登録商標）接続などの無線接続などを介してＨＭＤ１００に作動的に結合されるかまたはＨＭＤ１００とペアリングされて、コントローラＡ、ＢとＨＭＤ２００との間のデータ交換および通信を提供し得る。ＨＭＤとコントローラＡ、Ｂとの間のこの接続によって、ユーザは、コントローラＡ、Ｂの一方または両方の操作を通して、ＨＭＤ２００が生成した仮想環境で対話することができる。すなわち、コントローラＡ、Ｂの一方または両方の操作、たとえば、コントローラＡ、Ｂのタッチ面上に受信した物理的な動きおよび／もしくは入力、または仮想環境で仮想オブジェクトに向けてユーザが方向付けるコントローラＡ、Ｂが発する仮想の光線もしくはビームが、仮想環境での対応する対話または動きに変換され得る。
【００１４】
上述のように、ある実装例では、コントローラＡ、Ｂの一方または両方が、ジャイロマウスのような能力を備えていてもよく、たとえば、仮想環境で仮想オブジェクトを選択し、操作し、かつその他の態様で仮想オブジェクトと対話するように、自由空間で動作可能であってもよい。ジャイロマウス能力を含む１つ以上のコントローラＡ、Ｂを用いることによって、システムが動作している３次元（３Ｄ）空間、または実世界環境での６ＤＯＦの場所（位置および向き）の比較的正確な追跡が本質的に可能となり得る。
【００１５】
たとえば、コントローラＡ、Ｂは、コントローラＡ、Ｂの角運動を示す信号を生成するジャイロスコープを含み得る。検出されたコントローラＡ、Ｂの角運動は、仮想環境での方向性運動に変換され得る。ある実装例では、コントローラＡ、Ｂは、コントローラＡ、Ｂの加速度、たとえば、ジャイロスコープが生成する方向性信号に対応する方向における加速度を示す信号を生成する加速度計も含み得る。ある実装例では、コントローラＡ、Ｂは、検出された磁場の強度および／または方向に基づいて実世界環境でのコントローラＡ、Ｂの相対位置を示す信号を生成する磁気計も含み得る。検出された実世界環境でのコントローラＡ、Ｂの３次元の位置は、ジャイロスコープおよび／または加速度計および／または磁気計によって提供されるコントローラＡ、Ｂに関連する向き情報とともに、コントローラＡ、Ｂの各々の６ＤＯＦの追跡を提供し得る。これによって、コントローラＡ、Ｂのユーザ操作を、仮想環境での目標とされたもしくは意図された対話に、および／または仮想環境での選択された仮想オブジェクトに向けられることになる行動に変換することができる。
【００１６】
ある実装例では、コントローラＡ、Ｂの一方または両方は、多種多様なユーザ入力を受信するように構成された操作装置を含み得る。たとえば、ある実装例では、コントローラＡ、Ｂは、たとえば、タッチ入力、タッチおよびドラッグ入力、ピンチおよびズーム入力などを受信するように構成されたタッチ面を含み得る。コントローラＡ、Ｂは、たとえば、ユーザ入力を受信するように構成された１つ以上のボタン、１つ以上のトグルスイッチ、１つ以上のジョイスティックなどのその他の操作装置も含み得る。
【００１７】
このように装備されたコントローラＡ、Ｂは、仮想環境での対応する対話に変換されることになるユーザ入力を多種多様な入力モードで受信し得る。これらのユーザ入力モードは、たとえば、コントローラＡ、Ｂに含まれるセンサが検出して追跡する位置、向きおよび方向性運動に基づくコントローラＡ、Ｂの物理的な動きまたはジェスチャを含み得る。これらのユーザ入力モードは、コントローラＡ、Ｂのタッチ面上に検出されるタッチ入力（タッチおよびドラッグ、ピンチおよびズームなどを含む）、コントローラＡ、Ｂの操作装置の１つで受信される選択、ならびにその他のこのような入力も含み得る。ある実装例では、コントローラＡ、Ｂは、これらのユーザ入力モードの組合せを含むユーザコマンド、またはこれらのユーザ入力の一連の適用を受信し得る。
【００１８】
たとえば上述のような第１のコントローラＡおよび第２のコントローラＢなどの複数の６ＤＯＦコントローラを用いて仮想環境で対話する場合、２つの６ＤＯＦコントローラを用いて仮想オブジェクトを変換し、一様にスケール変更し、回転させる方法によって、ユーザは、第１のコントローラＡを片手に持ち、第２のコントローラＢをもう片方の手に持った状態で、自然に仮想オブジェクトと対話することができる。本明細書に記載の実装例に従うシステムおよび方法では、単一の、一貫した、共通の座標系が、同一の仮想環境（および同一の実世界環境）で動作する複数の６ＤＯＦコントローラについて定義され得る。コントローラの各々は、それぞれの座標系内で独立して動く。
【００１９】
上述のように、上述の第１および第２のコントローラＡ、Ｂなどの仮想現実６ＤＯＦコントローラは、位置および向き情報を提供し得る。仮想環境での対話のためにユーザによって動作される単一のコントローラを操作して、仮想環境での仮想オブジェクトの位置および向きを直接制御することができる。同様に、たとえば上述の第１および第２のコントローラＡ、Ｂなどの複数のコントローラからの位置および向き情報を用いて、図７に示すように、たとえば第１および第２のコントローラＡ、Ｂの平均位置に基づいて、仮想環境での仮想オブジェクトの位置を制御することができる。同様に、上述の第１および第２のコントローラＡ、Ｂなどの複数のコントローラからの位置および向き情報を用いて、図８に示すように、たとえば第１および第２のコントローラＡ、Ｂの既知の開始位置と、第１および第２のコントローラＡ、Ｂの検出された位置変化とに基づいて、仮想オブジェクトのスケールを制御することができる。本明細書に記載の実装例に従うシステムおよび方法では、上述の第１および第２のコントローラＡ、Ｂなどの複数のコントローラからの位置および向き情報を用いて、図９に示すように、仮想オブジェクトの回転を制御することができる。
【００２０】
たとえば、複数のコントローラＡ、Ｂを用いる動作中に、第１および第２のコントローラＡ、Ｂの回転運動に応じて、仮想環境での仮想オブジェクトの向きを判断して制御することは、付加的な難題をもたらし得るか、または過度に制約された課題をもたらし得る。すなわち、第１のコントローラＡの位置および動きは、仮想オブジェクトについての第１の目標とされたまたは意図された向きを意味し得、第２のコントローラＢの位置および動きは、第１のコントローラＡが意味する第１の目標とされたまたは意図された向きとは異なる、仮想オブジェクトについての第２の目標とされたまたは意図された向きを意味し得る。ある実装例では、２つの別個のコントローラＡ、Ｂがその中でそれぞれ動作する２つの別個の座標系が、単一の共通の座標系に変換され得る。アルゴリズムが、第１のコントローラＡの位置および動き、特に回転と、第２のコントローラＢの位置および動き、特に回転とを、この共通の座標系に変換し得る。アルゴリズムによって提供されるこの変換によって、たとえば選択された仮想オブジェクトの向きの変化に影響を及ぼす、第１および第２のコントローラＡ、Ｂの動きによって目標とされたまたは意図された入力が判断され得る。
【００２１】
この共通の座標系では、共通の座標系の第１の軸１は、同じ時点における第１のコントローラＡの位置と第２のコントローラＢの位置との間に延びるベクトルによって定義され得る。たとえば、図２に示すように、第１の軸１は、第１のコントローラＡの予め規定された中央部Ａ１と第２のコントローラＢの予め規定された中央部Ｂ１との間に延びるベクトルによって定義され得る。
【００２２】
共通の座標系の第２の軸２は、同じ時点における第１のコントローラＡの方向と第２のコントローラＢの方向との平均によって定義され得る。アルゴリズムは、中心座標系が可能な限り安定し続け得るように、この方向を、連続した時点において、第１の軸１に最も直交するコントローラＡ、Ｂの動きの方向であると動的に選択し得る。たとえば、第２の軸２は、第１のコントローラＡのＸ軸、またはＹ軸、またはＺ軸のうちのどれが第１の軸１に最も直交しているかに応じて、Ｘ、ＹまたはＺ軸であると動的に選択され得る。ある実装例では、最も直交している軸、たとえばこの例では第１のコントローラＡのＸ軸、Ｙ軸またはＺ軸のうちの最も直交している軸が、直角に最も近い角度で、または９０度に最も近い角度で第１の軸１に交差する軸であり得る。図２に示す例では、第１のコントローラＡおよび第２のコントローラＢは本質的に同様の方向に向いており、たとえば、本質的にユーザの前にある仮想オブジェクトと対話している。図２に示す例では、第１の軸１が第１のコントローラＡの中央部Ａ１と第２のコントローラＢの中央部Ｂ１との間に延びるように、コントローラＡおよびＢはユーザによって本質的に真っ直ぐに、かつ本質的に平行に保持されている。この例では、第１および第２のコントローラＡ、Ｂならびに第１の軸１の相対位置に基づいて、アルゴリズムは、Ｙ軸またはＺ軸の一方が第１の軸１に最も直交することになるため、Ｙ軸またはＺ軸のいずれか一方を第２の軸２として選択することになる。
【００２３】
共通の座標系の第３の軸３は、第１の軸１と第２の軸２との外積であり得る。すなわち、第３の軸３は、第１の軸１が表わすベクトルと第２の軸２が表わすベクトルとの外積である第３のベクトルを表わし得る。
【００２４】
図３は、ユーザが第１のコントローラＡおよび第２のコントローラＢを動かして仮想オブジェクトを回転させ得る、たとえば、仮想の自動車のハンドル、仮想のダイアルなどの仮想オブジェクトを時計回りにまたは反時計回りに回転させ得る例を示す。第１および第２のコントローラＡおよびＢの動き、ならびに結果として生じる仮想オブジェクトの回転は、たとえばユーザが装着しているＨＭＤ１００のディスプレイ上に表示され得る。図３に示す例では、第１のコントローラＡおよび第２のコントローラＢは実質的に垂直に方向付けられており、動きの開始直前に本質的に同様の方向に向いている。矢印Ａ３によって示すような第１のコントローラＡの上方向の動き、および矢印Ｂ３によって示すような第２のコントローラＢの下方向の動きによって、仮想オブジェクトの時計回りの回転が生じ得る。仮想オブジェクトの回転量は、上述のようにアルゴリズムによって第１および第２のコントローラＡ、Ｂの動きを共通の座標系に変換することによって求められ得る。
【００２５】
図４は、ユーザが第１のコントローラＡおよび第２のコントローラＢを動かして、仮想オブジェクトを、たとえば直立の、実質的に垂直の位置から、うつぶせのまたは実質的に水平の位置に回転させ得る例を示す。図４に示す例では、第１のコントローラＡおよび第２のコントローラＢは実質的に垂直に方向付けられており、動きの開始直前に本質的に同様の方向に向いている。矢印Ａ４によって示すような第１のコントローラＡのＸ軸の周りの回転運動、および矢印Ｂ４によって示すような第２のコントローラＢのＸ軸の周りの回転運動によって、仮想オブジェクトの対応する回転運動が生じ得る。仮想オブジェクトの回転量は、上述のようにアルゴリズムによって第１および第２のコントローラＡ、Ｂの回転運動を共通の座標系に変換することによって求められ得る。
【００２６】
図５は、第１のコントローラＡおよび第２のコントローラＢが回転運動の開始前に異なる方向に向けられている例を示す。図５に示す例では、第１のコントローラＡは第１の方向に（すなわち図５の右側に）向けられており、第２のコントローラＢは第２の方向に（すなわち図５の左側に）向けられている。この例では、第１および第２のコントローラは実質的に反対方向に向けられているが、説明される原理は、必ずしも正反対方向とは限らない異なる方向に向いているコントローラＡ、Ｂに適用され得る。コントローラＡ、Ｂのいずれの向きの方向も変えずに、矢印Ａ５に示すように第１のコントローラＡが上方向に動き、矢印Ｂ５に示すように第２のコントローラＢが下方向に動くと、仮想オブジェクトの反転するような動きが生じ得る。仮想オブジェクトの反転する動き量は、上述のようにアルゴリズムによって第１および第２のコントローラＡ、Ｂの回転運動を共通の座標系に変換することによって求められ得る。
【００２７】
図６は、第１および第２のコントローラＡ、Ｂを用いる対話のために仮想オブジェクト２００がユーザによって選択される例を示す。この例では、動きの開始前に、第１のコントローラＡは第１の方向に向けられており、第２のコントローラＢは第２の方向に向けられている。矢印Ａ６によって示すような第１のコントローラＡの時計回りの回転運動、および矢印Ｂ６によって示すような第２のコントローラＢの時計回りの回転運動によって、仮想オブジェクト２００の回転運動が生じ得る。第１および第２のコントローラＡ、Ｂの回転に応じた仮想オブジェクト２００の回転運動量は、上述のようにアルゴリズムによって第１および第２のコントローラＡ、Ｂのそれぞれの座標系内の検出された回転運動を共通の座標系に変換することによって求められ得る。
【００２８】
すなわち、第１のコントローラＡおよび第２のコントローラＢについて共通の座標系を確立する際、共通の座標系の第１の軸１は、第１のコントローラＡの中央部Ａ１と第２のコントローラＢの中央部Ｂ１との間に延びる線によって定義され得る。そして、第１のコントローラＡおよび第２のコントローラＢの各々が独立して動くと、第２の軸がアルゴリズムによって動的に割当てられ得る。アルゴリズムは、中心座標系が可能な限り安定し続け得るように、第２の軸の方向を、連続した時点において、第１の軸に最も直交するコントローラＡ、Ｂの動きの方向と対応するように動的に選択し得る。図６に示す例では、表わされる時点における第２の軸２は、たとえば第１のコントローラＡのＺ軸であり得る。共通の座標系の第３の軸は、各時点について、第１の軸１と第２の軸２との外積であり得る。
【００２９】
第１のコントローラＡおよび第２のコントローラＢの各々が独立して動くかまたは回転すると、コントローラＡ、Ｂの動きがシステムによって動的に検出されて追跡され得る。動的に検出されたコントローラＡ、Ｂの動きは、各時点において共通の座標系に対する単一の動きに変換され得、その単一の動きが、選択された仮想オブジェクト２００に適用され得る。選択された仮想オブジェクト２００の動きは、ユーザが装着しているＨＭＤ１００のディスプレイ上でユーザに表示され得る。
【００３０】
上述のように、ある実装例では、第１のコントローラＡおよび第２のコントローラＢがその中でそれぞれ動作する２つの別個の座標系が、第１および第２のコントローラＡ、Ｂの動作を動的に平均するアルゴリズムによって単一の共通の座標系に変換され得る。たとえば、検出された第１および第２のコントローラＡ、Ｂの動きに基づいて仮想オブジェクト２００に適用される平行移動量は、コントローラＡ、Ｂの平均の位置変化に基づいて求められ得る。同様に、検出された第１および第２のコントローラＡ、Ｂの動きに基づいて仮想オブジェクト２００に適用されるスケール変更は、コントローラＡ、Ｂ間の距離変化に基づいて求められ得る。検出された第１および第２のコントローラＡ、Ｂの動きに基づいて仮想オブジェクト２００に適用される回転入力は、コントローラＡ、Ｂ間のベクトル変化に基づいて求められ得る。したがって、仮想オブジェクトの回転は、共通の座標系に対する第１および第２のコントローラＡ、Ｂの各々の回転によって主に規定され得る。検出された第１および第２のコントローラＡ、Ｂの動きに基づいて選択された仮想オブジェクト２００に対して取るべき目標とされたまたは意図された行動を判断する際、これらの行動は個別に（たとえば連続して）実現されてもよく、および／または同時に実現されてもよい。
【００３１】
図７に示すように、第１および第２のコントローラＡ、Ｂなどの複数のコントローラの動きに応じた仮想オブジェクト２００の平行移動量は、コントローラＡ、Ｂの平均の位置変化に基づいて求められ得る。図７に示す例では、第１のコントローラＡおよび第２のコントローラＢは実質的に垂直に方向付けられており、動きの開始直前に本質的に同様の方向に向いている。矢印Ａ７によって示すような第１のコントローラＡの上方向の動き、および矢印Ｂ７によって示すような第２のコントローラＢの上方向の動きによって、仮想オブジェクト２００の対応する上方向の動き、または上向きの平行移動が生じ得る。第１および第２のコントローラＡ、Ｂの上方向の動きに応じた仮想オブジェクト２００の上方向の動き量は、第１のコントローラＡの上方向の動きと第２のコントローラＢの上方向の動きとの平均に基づき得る。第１および第２のコントローラＡ、Ｂの動き量は、動きの開始直前の第１のコントローラＡおよび第２のコントローラＢの既知の位置に基づいて求められて動的に更新され得、第１および第２のコントローラＡ、Ｂの６ＤＯＦの動きとしての第１のコントローラＡおよび第２のコントローラＢの既知の位置が上述のように追跡される。
【００３２】
図８に示すように、第１および第２のコントローラＡ、Ｂなどの複数のコントローラの動きに応じた仮想オブジェクト２００のスケーリング量は、コントローラＡ、Ｂ間の平均の距離変化に基づいて求められ得る。図８に示す例では、第１のコントローラＡおよび第２のコントローラＢは実質的に垂直に方向付けられており、動きの開始直前に本質的に同様の方向に向いている。矢印Ａ８によって示すような第１のコントローラＡの第１の方向の動き、および矢印Ｂ８によって示すような第２のコントローラＢの第１の方向とは異なる、たとえば第１の方向と反対の第２の方向の動きによって、仮想オブジェクト２００の対応するスケーリング、たとえば均一のスケーリングが生じ得る。第１のコントローラＡの第１の方向の動きおよび第２のコントローラＢの第２の方向の動きに応じた仮想オブジェクト２００のスケーリング量は、検出された第１および第２のコントローラＡ、Ｂ間の距離変化に基づき得る。たとえば、第１および第２のコントローラＡ、Ｂ間の距離は、動きの開始直前の第１のコントローラＡおよび第２のコントローラＢの既知の位置に基づいて求められて動的に更新され得、第１および第２のコントローラＡ、Ｂの６ＤＯＦの動きとしての第１のコントローラＡおよび第２のコントローラＢの既知の位置が上述のように追跡される。図８に示す例では、第１および第２のコントローラＡ、Ｂは実質的に反対方向に向けられているが、図８に関して説明される原理は、必ずしも正反対方向とは限らない異なる方向に向いている第１および第２のコントローラＡ、Ｂに適用され得る。
【００３３】
図９に示すように、第１および第２のコントローラＡ、Ｂなどの複数のコントローラの動きに応じた仮想オブジェクト２００の回転量は、第１のコントローラＡと第２のコントローラＢとの間のベクトル変化に基づいて求められ得る。上述のように、検出された第１のコントローラＡの動きおよび検出された第２のコントローラＢの動きに基づく、仮想オブジェクト２００の目標とされたもしくは意図された平行移動の判断、および／または選択された仮想オブジェクト２００の目標とされたもしくは意図されたスケールの判断は、仮想環境での対話のための第１および第２のコントローラＡ、Ｂの動作時の連続した時点におけるこれらの原理の比較的直接的な適用であり得る。しかし、検出された第１のコントローラＡの動きおよび検出された第２のコントローラＢの動きに基づく、選択された仮想オブジェクト２００の目標とされたまたは意図された回転運動の判断は、付加的な難題をもたらし得る。たとえば、ある実装例では、検出された第１のコントローラＡの動きおよび検出された第２のコントローラＢの動きに基づく、選択された仮想オブジェクト２００の目標とされたまたは意図された回転運動の判断は、２つのベクトル同士の間の以前の軸および現在の軸に基づく四元数の実行を含み得る。
【００３４】
図９に示す例では、第１のコントローラＡおよび第２のコントローラＢは実質的に垂直に方向付けられており、動きの開始直前に本質的に同様の方向に向いている。矢印Ａ９によって示すような第１のコントローラＡの第１の方向、たとえば上方向の動き、および矢印Ｂ９によって示すような第２のコントローラＢの第２の方向、たとえば下方向の動きによって、仮想オブジェクト２００が時計回りに回転し得る。検出された第１および第２のコントローラＡ、Ｂの動きに基づく仮想オブジェクト２００の回転量は、コントローラＡ、Ｂの以前のベクトル軸およびコントローラＡ、Ｂの現在のベクトル軸に基づく四元数の実行を通して求められ得る。各コントローラＡ、Ｂの回転を、結果として得られる軸に制約する際、アルゴリズムを適用して、以前の四元数から現在の四元数への調整四元数が計算され得る。次に調整四元数のログの虚部が得られ、調整用の回転軸がもたらされ得る。この新たな調整は、以前の軸と調整軸との間の指数内積を取ることによって制約され得る。
【００３５】
上述のように、検出された第１のコントローラＡの動きおよび検出された第２のコントローラＢの動きに基づく、選択された仮想オブジェクト２００の目標とされたまたは意図された回転運動の判断は、２つのベクトル同士の間の以前の軸および現在の軸に基づく四元数の実行を含み得る。第１および第２のコントローラＡ、Ｂの向きに基づく仮想オブジェクトの回転は、各コントローラＡ、Ｂの回転を制約することによって達成される。各コントローラＡ、Ｂの回転の制約は、以前の四元数から現在の四元数に至る調整四元数を計算し、次に、調整のための回転軸を定義する調整四元数のログの虚部を得ることによって、達成され得る。そして、当該システムは、特定された軸と調整軸との間の指数内積を取ることによって新たな調整を制約し得る。
【００３６】
図１０Ａは、ＨＭＤ１００が生成する仮想環境を体験しながら、ＨＭＤ１００を装着して第１のコントローラＡを片手に持ち第２のコントローラＢをもう片方の手に持っている物理空間内のユーザの第三者視点である。図１０Ａに示す例では、説明および図示を簡単にするために、ＨＭＤ１００を装着しながら仮想環境を体験する際にユーザが見ることができる仮想シーン４００の一例が差込み図として表わされている。ユーザは、仮想シーン４００内に表示される仮想オブジェクトのうちの１つを選択して、多種多様な態様で対話および／または操作などを行なうことができる。図１０Ｂに示す例では、ユーザは、たとえば、コントローラＡ、Ｂの一方または両方を用いて仮想ハンドル４２０と仮想的に接触し、仮想ビームをコントローラＡ、Ｂの一方または両方から仮想ハンドル４２０に方向付けることなどによって、仮想ハンドル４２０と対話することを選択している。仮想オブジェクト、この例では仮想ハンドル４２０がユーザによって選択されると、ユーザは、たとえば、第１および／または第２のコントローラＡ、Ｂの動き、コントローラＡ、Ｂの一方または両方の上の操作装置の作動などを通して、第１のコントローラＡおよび／または第２のコントローラＢを用いて仮想ハンドル４２０と対話することができる。
【００３７】
たとえば、図３および／または図９に示すような第１のコントローラＡおよび第２のコントローラＢの動きに応じて、仮想ハンドル４２０は図１０Ｃに示すように時計回りに回転し得る。仮想ハンドル４２０の回転量は、図３および図９に関して上記に詳述したように、検出された第１のコントローラＡの動きと、検出された第２のコントローラＢの動きと、検出された第１のコントローラＡおよび第２のコントローラＢの動きの共通の座標系への変換とに基づいて求められ得る。仮想ハンドル４２０のこの回転は、ユーザが装着しているＨＭＤ１００のディスプレイ上でユーザに表示され得る。
【００３８】
図１０Ａ〜図１０Ｃは、上述のような第１のコントローラＡおよび第２のコントローラＢの回転運動に応じた仮想オブジェクト４２０の回転の単に一例を示す。仮想オブジェクトの平行移動、および仮想オブジェクトのスケーリングに加えて、上述のような第１のコントローラＡおよび第２のコントローラＢなどの複数のコントローラの検出された動き、特に回転運動に応じて、選択された仮想オブジェクトの多数のその他の動きが生じ得る。このような動きは、たとえば、単独のまたは組合わされた、軸Ｘ、Ｙおよび／またはＺの１つ以上の周りの回転を含み得、平行移動およびスケーリングと組合わされてもよい。仮想オブジェクトのこれらの動きは、第１および／または第２のコントローラＡ、Ｂの対応する動きに応じて、連続しておよび／または同時に仮想環境で生じ得る。
【００３９】
上述のように、ある実装例では、第１のコントローラＡおよび第２のコントローラＢの位置および向きが動的に追跡され得、第１および第２のコントローラＡ、Ｂの動きが共通の座標系に動的に変換され得るため、入力は仮想環境で動的に適用され得る。したがって、第１および第２のコントローラＡ、Ｂの連続した動き、および組合わされた動きが共通の座標系に動的に変換され得る。これによって、本質的に無限の動作の収集を検出し、追跡し、共通の座標系に変換し、仮想環境で入力として反映することができる。たとえば、本システムおよび方法は、ユーザが、たとえば作図、描画などのために作図用具または描画用具を選択し得る仮想環境で適用され得る。
【００４０】
たとえば、図１０Ｄに示すように、拡張および／または仮想現実環境で作図アプリケーションを使用しているユーザが、軌道４５０Ａによって示されるように、多数の連続した回転運動および平行移動を含む連続した組合わされた動きで第１のコントローラＡを動かして仮想パターン４６０Ａを生成し得る。仮想パターン４６０Ａは、ＨＭＤ１００が生成する仮想環境でユーザに表示される。同様に、ユーザは、軌道４６０Ｂによって示されるように、多数の連続した回転運動および平行移動を含む連続した組合わされた動きで第２のコントローラＢを動かして仮想パターン４６０Ｂを生成し得る。仮想パターン４６０Ｂは、ＨＭＤ１００が生成する仮想環境でユーザに表示される。図１０Ｄに示す例では、単一の仮想オブジェクトが、対話および／または操作のために第１および第２のコントローラＡ、Ｂを介してユーザによって具体的に選択されていない。したがって、この状況では、コントローラＡ、Ｂの動きが上述のように追跡されて、コントローラＡ、Ｂのそれぞれの個別の座標系の周りに検出された動きに基づいて、所望の仮想効果が生成され得る。
【００４１】
図１１Ａおよび図１１Ｂは、たとえば図１および図１０Ａのユーザが装着しているＨＭＤ１００のような例示的なＨＭＤの斜視図である。図１２は、たとえば第１の外部装置３０２Ａおよび第２の外部装置３０２Ｂを含む複数の異なる第２の電子装置３０２と通信する第１の電子装置を含む拡張現実および／または仮想現実システムのブロック図である。第１の電子装置３００は、たとえば拡張および／または仮想現実環境を生成するＨＭＤであってもよく、第２の電子装置３０２は第１の電子装置３００と通信してもよく、上述の能力を含むように装備されてもよい。
【００４２】
図１１Ａおよび図１１Ｂに示すように、例示的なＨＭＤは、フレーム１２０に結合された筐体１１０を含み得る。たとえばヘッドフォンに搭載されたスピーカを含む音声出力装置１３０がフレーム１２０に結合されている。図１１Ｂでは、筐体１１０の前部１１０ａは、筐体１１０に収容されている部品の一部が見えるように、筐体１１０の基部１１０ｂから回転して離れている。ディスプレイ１４０が筐体１１０の前部１１０ａの内部に面する側に搭載されていてもよい。レンズ１５０は、筐体１１０の内部において、前部１１０ａが筐体１１０の基部１１０ｂに対して閉じられた位置にあるときにユーザの目とディスプレイ１４０との間になるように装着され得る。ある実装例では、ＨＭＤ１００は、たとえば、音声センサ、画像／光センサ、位置センサ（たとえばジャイロスコープおよび加速度計を含む慣性測定装置）などのさまざまなセンサを含む検知システム１６０を含み得る。ＨＭＤ１００は、プロセッサ１９０およびＨＭＤ１００の操作を容易にするさまざまな制御システム装置を含む制御システム１７０も含み得る。
【００４３】
ある実装例では、ＨＭＤ１００は、静止画および動画を撮影するカメラ１８０を含み得る。カメラ１８０が撮影した画像は、ユーザおよび／もしくはコントローラ１０２の物理位置の追跡に役立つように用いられてもよく、ならびに／またはユーザに対してパススルーモードでディスプレイ１４０に表示されてもよい。ある実装例では、ＨＭＤ１００は、ユーザの目の注視を検出して追跡する１つ以上の画像センサ１６５Ａを含む注視追跡装置１６５を含み得る。ある実装例では、ＨＭＤ１００は、検出された注視が拡張現実および／または仮想現実環境での対応する対話に変換されることになるユーザ入力として処理されるように構成されてもよい。
【００４４】
図１２に示すように、第１の電子装置３００は、検知システム３７０と制御システム３８０とを含み得る。これらのシステムは、図１０Ａおよび図１０Ｂに示す検知システム１６０および制御システム１７０とそれぞれ同様であってもよい。検知システム３７０は、たとえば、光センサ、音声センサ、画像センサ、距離／近接センサ、位置センサ、ならびに／または、たとえばユーザの目の注視を検出して追跡するように位置決めされた画像センサを含む、その他のセンサおよび／もしくはセンサの各種組合せを含み得る。制御システム３８０は、たとえば、電源／停止制御装置、音声およびビデオ制御装置、光学制御装置、遷移制御装置、ならびに／またはその他のこのような装置および／もしくは装置の各種組合せを含み得る。検知システム３７０および／または制御システム３８０は、特定の実装例に応じて、より多いまたはより少ない装置を含んでいてもよく、示されるのとは異なる物理的な配置を有していてもよい。第１の電子装置３００はまた、検知システム３７０および制御システム３８０と通信するプロセッサ３９０と、メモリ３８５と、第１の電子装置３００とたとえば第２の電子装置３０２などの別の外部装置との間の通信を提供する通信モジュール３５０とを含み得る。
【００４５】
第２の電子装置３０２（３０２Ａ／３０２Ｂ）は、第２の電子装置３０２の各々とたとえば第１の電子装置３００などの別の装置との間の通信を提供する通信モジュール３０６を含み得る。第２の電子装置３０２の各々は検知システム３０４を含み得る。検知システム３０４は、たとえば、カメラおよびマイクに含まれるような画像センサおよび音声センサ、慣性測定装置、コントローラまたはスマートフォンのタッチセンシティブ画面に含まれるようなタッチセンサ、ならびにその他のこのようなセンサおよび／またはセンサの各種組合せを含む。プロセッサ３０９は、第２の電子装置３０２の各々の検知システム３０４および制御部３０５と通信してもよい。制御部３０５は、メモリ３０８にアクセスすることができ、第２の電子装置３０２の全体の動作を制御する。
【００４６】
本明細書に記載の実装例に従う、拡張および／または仮想現実環境での入力のために、複数のコントローラの回転運動を共通の座標系に変換する方法９００を図１３に示す。
【００４７】
仮想および／または拡張現実体験を開始した（ブロック９１０）後、コントローラの動き、たとえばＨＭＤ１００が生成する仮想環境で検出される１つ以上の６ＤＯＦコントローラの動きが上述のように追跡され得る（ブロック９２０）。たとえば上述のような第１および第２のコントローラＡおよびＢなどの複数のコントローラが仮想環境で検出されると、検出された複数のコントローラの動きが動的に追跡され得、図２〜図１０Ｃに関して上記に詳述したように、検出された複数のコントローラの動きが単一の共通の座標系に変換される（ブロック９４０）。次に、共通の座標系に変換された複数のコントローラの動きに基づいて（ブロック９４５）、または単一のコントローラのその座標系の周りに検出された動きに基づいて（ブロック９５０）、対応する入力が選択された仮想オブジェクトに適用され得る。この処理は、仮想体験が終了する（ブロック９６０）まで継続され得る。
【００４８】
図１４は、本明細書に記載の技法とともに用いられ得るコンピュータデバイス１０００およびモバイルコンピュータデバイス１０５０の例を示す。コンピューティングデバイス１０００は、プロセッサ１００２と、メモリ１００４と、記憶装置１００６と、メモリ１００４および高速拡張ポート１０１０に接続する高速インターフェイス１００８と、低速バス１０１４および記憶装置１００６に接続する低速インターフェイス１０１２とを含む。コンポーネント１００２、１００４、１００６、１００８、１０１０、および１０１２の各々は、さまざまなバスを使用して相互接続されており、共通のマザーボード上にまたはその他の態様で適宜搭載されてもよい。プロセッサ１００２は、コンピューティングデバイス１０００内で実行される命令を処理可能であり、これらの命令は、ＧＵＩのためのグラフィカル情報を、高速インターフェイス１００８に結合されたディスプレイ１０１６などの外部入出力デバイス上に表示するために、メモリ１００４内または記憶装置１００６上に格納された命令を含む。その他の実装例では、複数のプロセッサおよび／または複数のバスが、複数のメモリおよび複数のタイプのメモリとともに適宜使用されてもよい。また、複数のコンピューティングデバイス１０００が接続されてもよく、各デバイスは（たとえば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして）必要な動作の一部を提供する。
【００４９】
メモリ１００４は、情報をコンピューティングデバイス１０００内に格納する。一実装例では、メモリ１００４は１つまたは複数の揮発性メモリユニットである。別の実装例では、メモリ１００４は１つまたは複数の不揮発性メモリユニットである。メモリ１００４はまた、磁気ディスクまたは光ディスクといった別の形態のコンピュータ可読媒体であってもよい。
【００５０】
記憶装置１００６は、コンピューティングデバイス１０００のための大容量記憶を提供可能である。一実装例では、記憶装置１００６は、フロッピー（登録商標）ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくはその他の同様のソリッドステートメモリデバイス、または、ストレージエリアネットワークもしくはその他の構成におけるデバイスを含むデバイスのアレイといった、コンピュータ可読媒体であってもよく、または当該コンピュータ可読媒体を含んでいてもよい。コンピュータプログラムプロダクトが情報担体において有形に具体化され得る。コンピュータプログラムプロダクトはまた、実行されると上述の方法のような１つ以上の方法を行なう命令を含んでいてもよい。情報担体は、メモリ１００４、記憶装置１００６、またはプロセッサ１００２上のメモリといった、コンピュータ可読媒体または機械可読媒体である。
【００５１】
高速コントローラ１００８はコンピューティングデバイス１０００のための帯域幅集約的な動作を管理し、一方、低速コントローラ１０１２はより低い帯域幅集約的な動作を管理する。機能のこのような割当ては例示にすぎない。一実装例では、高速コントローラ１００８は、メモリ１００４、ディスプレイ１０１６に（たとえば、グラフィックスプロセッサまたはアクセラレータを介して）、および、さまざまな拡張カード（図示せず）を受付け得る高速拡張ポート１０１０に結合される。この実装例では、低速コントローラ１０１２は、記憶装置１００６および低速拡張ポート１０１４に結合される。さまざまな通信ポート（たとえば、ＵＳＢ、Ｂｌｕｅｔｏｏｔｈ、イーサネット（登録商標）、無線イーサネット）を含み得る低速拡張ポートは、キーボード、ポインティングデバイス、スキャナなどの１つ以上の入出力デバイスに、または、スイッチもしくはルータなどのネットワーキングデバイスに、たとえばネットワークアダプタを介して結合されてもよい。
【００５２】
コンピューティングデバイス１０００は、図に示すように多くの異なる形態で実装されてもよい。たとえばそれは、標準サーバ１０２０として、またはこのようなサーバのグループで複数回実装されてもよい。それはまた、ラックサーバシステム１０２４の一部として実装されてもよい。加えて、それは、ラップトップコンピュータ１０２２などのパーソナルコンピュータにおいて実装されてもよい。これに代えて、コンピューティングデバイス１０００からのコンポーネントは、デバイス１０５０などのモバイル機器（図示せず）におけるその他のコンポーネントと組合されてもよい。このようなデバイスの各々は、コンピューティングデバイス１０００、１０５０のうちの１つ以上を含んでいてもよく、システム全体が、互いに通信する複数のコンピューティングデバイス１０００、１０５０で構成されてもよい。
【００５３】
コンピューティングデバイス１０５０は、数あるコンポーネントの中でも特に、プロセッサ１０５２と、メモリ１０６４と、ディスプレイ１０５４などの入出力デバイスと、通信インターフェイス１０６６と、送受信機１０６８とを含む。デバイス１０５０にはまた、追加の格納を提供するために、マイクロドライブまたはその他のデバイスなどの記憶装置が設けられてもよい。コンポーネント１０５０、１０５２、１０６４、１０５４、１０６６、および１０６８の各々は、さまざまなバスを使用して相互接続されており、当該コンポーネントのうちのいくつかは、共通のマザーボード上にまたはその他の態様で適宜搭載されてもよい。
【００５４】
プロセッサ１０５２は、メモリ１０６４に格納された命令を含む、コンピューティングデバイス１０５０内の命令を実行可能である。プロセッサは、別個の複数のアナログおよびデジタルプロセッサを含むチップのチップセットとして実装されてもよい。プロセッサは、たとえば、ユーザインターフェイス、デバイス１０５０が実行するアプリケーション、およびデバイス１０５０による無線通信の制御といった、デバイス１０５０のその他のコンポーネント同士の連携を提供してもよい。
【００５５】
プロセッサ１０５２は、ディスプレイ１０５４に結合された制御インターフェイス１０５８およびディスプレイインターフェイス１０５６を介してユーザと通信してもよい。ディスプレイ１０５４は、たとえば、ＴＦＴ  ＬＣＤ（Thin-Film-Transistor Liquid Crystal Display：薄膜トランジスタ液晶ディスプレイ）、またはＯＬＥＤ（Organic Light Emitting Diode：有機発光ダイオード）ディスプレイ、またはその他の適切なディスプレイ技術であってもよい。ディスプレイインターフェイス１０５６は、ディスプレイ１０５４を駆動してグラフィカル情報およびその他の情報をユーザに提示するための適切な回路を含んでいてもよい。制御インターフェイス１０５８は、ユーザからコマンドを受信し、それらをプロセッサ１０５２に送出するために変換してもよい。加えて、デバイス１０５０とその他のデバイスとの近接通信を可能にするように、外部インターフェイス１０６２がプロセッサ１０５２と通信した状態で設けられてもよい。外部インターフェイス１０６２は、たとえば、ある実装例では有線通信を提供してもよく、またはその他の実装例では無線通信を提供してもよく、複数のインターフェイスも使用されてもよい。
【００５６】
メモリ１０６４は、情報をコンピューティングデバイス１０５０内に格納する。メモリ１０６４は、１つもしくは複数のコンピュータ可読媒体、１つもしくは複数の揮発性メモリユニット、または、１つもしくは複数の不揮発性メモリユニットの１つ以上として実装されてもよい。拡張メモリ１０７４も設けられ、拡張インターフェイス１０７２を介してデバイス１０５０に接続されてもよく、拡張インターフェイス１０７２は、たとえばＳＩＭＭ（Single In Line Memory Module）カードインターフェイスを含んでいてもよい。このような拡張メモリ１０７４は、デバイス１０５０に余分の格納スペースを提供してもよく、または、デバイス１０５０のためのアプリケーションもしくはその他の情報も格納してもよい。具体的には、拡張メモリ１０７４は、上述のプロセスを実行または補足するための命令を含んでいてもよく、セキュアな情報も含んでいてもよい。このため、たとえば、拡張メモリ１０７４はデバイス１０５０のためのセキュリティモジュールとして設けられてもよく、デバイス１０５０のセキュアな使用を許可する命令でプログラムされてもよい。加えて、ハッキング不可能な態様でＳＩＭＭカード上に識別情報を乗せるといったように、セキュアなアプリケーションが追加情報とともにＳＩＭＭカードを介して提供されてもよい。
【００５７】
メモリはたとえば、以下に述べるようなフラッシュメモリおよび／またはＮＶＲＡＭメモリを含んでいてもよい。一実装例では、コンピュータプログラムプロダクトが情報担体において有形に具体化される。コンピュータプログラムプロダクトは、実行されると上述の方法のような１つ以上の方法を行なう命令を含む。情報担体は、メモリ１０６４、拡張メモリ１０７４、またはプロセッサ１０５２上のメモリといった、コンピュータ可読媒体または機械可読媒体であり、たとえば送受信機１０６８または外部インターフェイス１０６２上で受信されてもよい。
【００５８】
デバイス１０５０は、必要に応じてデジタル信号処理回路を含み得る通信インターフェイス１０６６を介して無線通信してもよい。通信インターフェイス１０６６は、とりわけ、ＧＳＭ（登録商標）音声通話、ＳＭＳ、ＥＭＳ、またはＭＭＳメッセージング、ＣＤＭＡ、ＴＤＭＡ、ＰＤＣ、ＷＣＤＭＡ（登録商標）、ＣＤＭＡ２０００、またはＧＰＲＳといった、さまざまなモードまたはプロトコル下での通信を提供してもよい。このような通信は、たとえば無線周波数送受信機１０６８を介して生じてもよい。加えて、Ｂｌｕｅｔｏｏｔｈ、Ｗｉ−Ｆｉ、またはその他のこのような送受信機（図示せず）使用するなどして、短距離通信が生じてもよい。加えて、ＧＰＳ（Global Positioning System：全地球測位システム）受信機モジュール１０７０が、追加のナビゲーション関連および位置関連の無線データをデバイス１０５０に提供してもよく、このデータは、デバイス１０５０上で実行されるアプリケーションによって適宜使用されてもよい。
【００５９】
デバイス１０５０はまた、ユーザから口頭情報を受信してそれを使用可能なデジタル情報に変換し得る音声コーデック１０６０を使用して、音声通信してもよい。音声コーデック１０６０は同様に、たとえばデバイス１０５０のハンドセットにおいて、スピーカを介すなどして、ユーザに聞こえる音を生成してもよい。このような音は、音声電話からの音を含んでいてもよく、録音された音（たとえば、音声メッセージ、音楽ファイルなど）を含んでいてもよく、デバイス１０５０上で動作するアプリケーションが生成する音も含んでいてもよい。
【００６０】
コンピューティングデバイス１０５０は、図に示すように多くの異なる形態で実装されてもよい。たとえばそれは、携帯電話１０８０として実装されてもよい。それはまた、スマートフォン１０８２、携帯情報端末、またはその他の同様のモバイル機器の一部として実装されてもよい。
【００６１】
本明細書に記載のシステムおよび技法のさまざまな実装例は、デジタル電子回路、集積回路、特別設計されたＡＳＩＣ（application specific integrated circuit：特定用途向け集積回路）、コンピュータハードウェア、ファームウェア、ソフトウェア、および／またはそれらの組合せにおいて実現されてもよい。これらのさまざまな実装例は、少なくとも１つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能および／または解釈可能な１つ以上のコンピュータプログラムにおける実装例を含んでいてもよく、このプロセッサは専用であっても汎用であってもよく、ストレージシステム、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスからデータおよび命令を受信するとともに、これらにデータおよび命令を送信するように結合されてもよい。
【００６２】
これらのコンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても公知）は、プログラマブルプロセッサのための機械命令を含んでおり、高レベル手続き型および／もしくはオブジェクト指向プログラミング言語で、ならびに／またはアセンブリ／機械言語で実装されてもよい。ここに使用されるように、「機械可読媒体」「コンピュータ可読媒体」という用語は、機械命令および／またはデータをプログラマブルプロセッサに提供するために使用される任意のコンピュータプログラムプロダクト、装置および／またはデバイス（たとえば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス（Programmable Logic Device：ＰＬＤ））を指し、機械命令を機械可読信号として受信する機械可読媒体を含む。「機械可読信号」という用語は、機械命令および／またはデータをプログラマブルプロセッサに提供するために使用される任意の信号を指す。
【００６３】
ユーザとの対話を提供するために、本明細書に記載のシステムおよび技法は、情報をユーザに表示するためのディスプレイ装置（たとえば、ＣＲＴ（cathode ray tube：陰極線管）またはＬＣＤ（liquid crystal display：液晶ディスプレイ）モニタ）と、ユーザが入力をコンピュータに提供できるようにするキーボードおよびポインティングデバイス（たとえば、マウスまたはトラックボール）とを有するコンピュータ上で実装されてもよい。その他の種類の装置を使用してユーザとの対話を提供してもよく、たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック（たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック）であってもよく、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形態で受信されてもよい。
【００６４】
本明細書に記載のシステムおよび技法は、（たとえばデータサーバとしての）バックエンドコンポーネントを含む、またはミドルウェアコンポーネント（たとえばアプリケーションサーバ）を含む、またはフロントエンドコンポーネント（たとえば、ユーザが本明細書に記載のシステムおよび技法の実装例と対話できるようにするグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータ）を含む、または、このようなバックエンド、ミドルウェア、もしくはフロントエンドコンポーネントの任意の組合せを含む、コンピューティングシステムにおいて実装されてもよい。システムのコンポーネントは、任意の形態または媒体のデジタルデータ通信（たとえば通信ネットワーク）によって相互接続されてもよい。通信ネットワークの例として、ローカルエリアネットワーク（local area network：ＬＡＮ）、ワイドエリアネットワーク（wide area network：ＷＡＮ）、およびインターネットがある。
【００６５】
コンピューティングシステムは、クライアントおよびサーバを含んでいてもよい。クライアントおよびサーバは一般に互いにリモートであり、典型的には通信ネットワークを介して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって生じる。
【００６６】
ある実装例では、図１０に示すコンピューティングデバイスは、仮想現実（ＶＲヘッドセット／ＨＭＤデバイス１０９０）とインターフェイス接続するセンサを含み得る。たとえば、図１０に示すコンピューティングデバイス１０５０または他のコンピューティングデバイス上に含まれる１つ以上のセンサは、ＶＲヘッドセット１０９０への入力を提供でき、または一般に、ＶＲ空間への入力を提供できる。センサは、タッチスクリーン、加速度計、ジャイロスコープ、圧力センサ、生体認証センサ、温度センサ、湿度センサ、および周囲光センサを含み得るものの、それらに限定されない。コンピューティングデバイス１０５０はこれらのセンサを使用して、ＶＲ空間におけるコンピューティングデバイスの絶対位置および／または検出された回転を判断可能であり、それは次に、ＶＲ空間への入力として使用され得る。たとえば、コンピューティングデバイス１０５０は、コントローラ、レーザポインタ、キーボード、武器などの仮想オブジェクトとしてＶＲ空間に組込まれてもよい。ＶＲ空間に組込まれた場合のコンピューティングデバイス／仮想オブジェクトのユーザによる位置付けは、ユーザが、ＶＲ空間において仮想オブジェクトをある態様で見るようにコンピューティングデバイスを位置付けることを可能にし得る。たとえば、仮想オブジェクトがレーザポインタを表わす場合、ユーザは、コンピューティングデバイスを、実際のレーザポインタであるかのように操作することができる。ユーザはコンピューティングデバイスをたとえば左右に、上下に、円形に動かして、レーザポインタを使用するのと同様の態様でデバイスを使用することができる。
【００６７】
ある実装例では、コンピューティングデバイス１０５０上に含まれる、またはコンピューティングデバイス１０５０に接続される１つ以上の入力デバイスは、ＶＲ空間への入力として使用され得る。入力デバイスは、タッチスクリーン、キーボード、１つ以上のボタン、トラックパッド、タッチパッド、ポインティングデバイス、マウス、トラックボール、ジョイスティック、カメラ、マイク、入力機能性を有するイヤホンもしくは小型イヤホン、ゲーミングコントローラ、またはその他の接続可能な入力デバイスを含み得るものの、それらに限定されない。コンピューティングデバイスがＶＲ空間に組込まれた場合にコンピューティングデバイス１０５０上に含まれる入力デバイスと対話するユーザは、特定のアクションをＶＲ空間に生じさせることができる。
【００６８】
ある実装例では、コンピューティングデバイス１０５０のタッチスクリーンは、ＶＲ空間においてタッチパッドとしてレンダリングされ得る。ユーザは、コンピューティングデバイス１０５０のタッチスクリーンと対話することができる。対話は、たとえばＶＲヘッドセット１０９０において、ＶＲ空間におけるレンダリングされたタッチパッド上の動きとしてレンダリングされる。レンダリングされた動きは、ＶＲ空間においてオブジェクトを制御することができる。
【００６９】
ある実装例では、コンピューティングデバイス１０５０上に含まれる１つ以上の出力デバイスは、ＶＲ空間においてＶＲヘッドセット１０９０のユーザに出力および／またはフィードバックを提供することができる。出力およびフィードバックは、視覚、触覚、または音声によるものであり得る。出力および／またはフィードバックは、振動、１つ以上のライトまたはストロボをオンオフすることもしくは点滅および／または明滅させること、アラームを鳴らすこと、チャイムを鳴らすこと、歌を演奏すること、および音声ファイルを演奏することを含み得るものの、それらに限定されない。出力デバイスは、振動モータ、振動コイル、圧電デバイス、静電デバイス、発光ダイオード（ＬＥＤ）、ストロボ、およびスピーカを含み得るものの、それらに限定されない。
【００７０】
ある実装例では、コンピューティングデバイス１０５０は、コンピュータが生成した３Ｄ環境において別のオブジェクトのように見えてもよい。ユーザによるコンピューティングデバイス１０５０との対話（たとえば、タッチスクリーンを回転させること、振動させること、タッチスクリーンに触れること、指でタッチスクリーンをスワイプすること）は、ＶＲ空間におけるオブジェクトとの対話と解釈され得る。ＶＲ空間におけるレーザポインタの例では、コンピューティングデバイス１０５０は、コンピュータが生成した３Ｄ環境において仮想レーザポインタのように見える。ユーザがコンピューティングデバイス１０５０を操作すると、ユーザはＶＲ空間においてレーザポインタの動きを見る。ユーザは、コンピューティングデバイス１０５０上またはＶＲヘッドセット１０９０上で、ＶＲ環境におけるコンピューティングデバイス１０５０との対話からフィードバックを受信する。
【００７１】
ある実装例では、コンピューティングデバイス１０５０はタッチスクリーンを含み得る。たとえば、ユーザは、タッチスクリーン上で生じることを模倣してＶＲ空間内で生じさせることができる特定のやり方で、タッチスクリーンと対話することができる。たとえば、ユーザは、つまむ（pinching）タイプの動きを用いて、タッチスクリーン上に表示されているコンテンツの大きさを変えることができる。このタッチスクリーン上におけるつまむタイプの動きは、ＶＲ空間内で提供されている情報の大きさを変えることができる。別の例において、コンピューティングデバイスは、コンピュータによって生成された３Ｄ環境における仮想ブックとしてレンダリングされてもよい。ＶＲ空間では、このブックのページがＶＲ空間内で表示され、ユーザの指でタッチスクリーンをスワイプすることは、仮想ブックのページを裏返す／めくることと解釈することができる。各ページを裏返す／めくると、ページの内容が変わるのが見え、それに加えて、本のページを裏返す音などの音声フィードバックをユーザに与えることができる。
【００７２】
ある実装例では、コンピューティングデバイスに加えて１つ以上の入力デバイス（たとえばマウス、キーボード）が、コンピュータが生成した３Ｄ環境においてレンダリングされ得る。レンダリングされた入力デバイス（たとえば、レンダリングされたマウス、レンダリングされたキーボード）は、ＶＲ空間においてオブジェクトを制御するために、ＶＲ空間においてレンダリングされたとして使用され得る。
【００７３】
コンピューティングデバイス１０００は、さまざまな形態のデジタルコンピュータおよびデバイスを表わすよう意図されている。これらのデジタルコンピュータおよびデバイスは、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、およびその他の適切なコンピュータを含むものの、それらに限定されない。コンピューティングデバイス１０５０は、携帯情報端末、携帯電話、スマートフォン、およびその他の同様のコンピューティングデバイスといった、さまざまな形態のモバイル機器を表わすよう意図されている。ここに示すコンポーネント、それらの接続および関係、ならびにそれらの機能は、単なる例示であるよう意図されており、本文書に記載のおよび／または請求項に記載の本発明の実装例を限定するよう意図されてはいない。
【００７４】
多くの実施形態が説明された。しかしながら、明細書の精神および範囲から逸脱することなくさまざまな変形が加えられ得ることが理解されるであろう。
【００７５】
加えて、図面に示す論理フローは、所望の結果を達成するために、示された特定の順序または順番を必要としない。加えて、説明されたフローに対してその他のステップが提供されてもよく、またはステップが除去されてもよく、説明されたシステムに対してその他のコンポーネントが追加されてもよく、または除去されてもよい。したがって、その他の実施形態は以下の特許請求の範囲内にある。
【００７６】
本明細書に記載の通り、記載されている実装例の一定の特徴が例示されたが、ここで、当業者は、数多くの変形、代用、変更、および均等物を想到するであろう。したがって、添付の特許請求の範囲は、実装例の範囲に含まれるすべてのこのような変形および変更を網羅するよう意図されていることを理解すべきである。それらは限定ではなく専ら例示を目的として提示されており、形態および詳細事項にさまざまな変更が加えられ得ることを理解すべきである。本明細書に記載の装置および／または方法はいずれの部分も、相互に相容れない組合せを除いて、任意の組合せが可能である。本明細書に記載の実装例は、記載されている異なる実装例の機能、構成要素および／または特徴のさまざまな組合せおよび／または下位の組合せを含み得る。
【図１】
2019532396.tif 000003
【図２】
2019532396.tif 000004
【図３】
2019532396.tif 000005
【図４】
2019532396.tif 000006
【図５】
2019532396.tif 000007
【図６】
2019532396.tif 000008
【図７】
2019532396.tif 000009
【図８】
2019532396.tif 000010
【図９】
2019532396.tif 000011
【図１０Ａ】
2019532396.tif 000012
【図１０Ｂ】
2019532396.tif 000013
【図１０Ｃ】
2019532396.tif 000014
【図１０Ｄ】
2019532396.tif 000015
【図１１Ａ】
2019532396.tif 000016
【図１１Ｂ】
2019532396.tif 000017
【図１２】
2019532396.tif 000018
【図１３】
2019532396.tif 000019
【図１４】
2019532396.tif 000020
【手続補正書】
【提出日】令和1年5月9日(2019.5.9)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
方法であって、
３次元（３Ｄ）仮想環境を生成することと、
物理環境での第１のコントローラの６自由度（６ＤＯＦ）の位置および向きを追跡することと、
前記物理環境での第２のコントローラの６ＤＯＦの位置および向きを追跡することと、
前記仮想環境で表示される仮想オブジェクトの選択を検出することと、
前記物理環境で検出された第１の座標系に対する前記第１のコントローラの動き、および前記物理環境で検出された第２の座標系に対する前記第２のコントローラの動きに基づいて、選択された前記仮想オブジェクトについて目標とされた入力を検出することと、
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することと、
前記コマンドの動きに応じて、選択された前記仮想オブジェクトを操作することとを備える、方法。
【請求項２】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
前記共通の座標系の第１の軸を定義することを含み、前記第１の軸は前記第１のコントローラの中央部から前記第２のコントローラの中央部に延び、前記変換することはさらに、
前記共通の座標系の第２の軸を定義することを含み、前記第２の軸は前記第１の座標系のＸ軸、Ｙ軸、またはＺ軸の１つから選択され、前記変換することはさらに、
前記共通の座標系の第３の軸を定義することを含み、前記第３の軸は前記第１の軸と前記第２の軸との外積である、請求項１に記載の方法。
【請求項３】
前記共通の座標系の前記第２の軸を定義することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸のうちのどれが前記第１の軸に最も直交しているかを判断することと、
前記Ｘ軸、前記Ｙ軸または前記Ｚ軸のうちの最も直交している軸を前記共通の座標系の前記第２の軸として設定することとを含む、請求項２に記載の方法。
【請求項４】
前記第１の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、連続した時点において前記第１の軸を動的に再び定義することを含む、請求項３に記載の方法。
【請求項５】
前記第２の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、かつ前記第１の軸が動的に再び定義されると、連続した時点において前記第２の軸を動的に再び定義することを含む、請求項４に記載の方法。
【請求項６】
前記第３の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、かつ前記第１の軸および前記第２の軸が動的に再び定義されると、連続した時点において前記第３の軸を動的に再び定義することを含む、請求項５に記載の方法。
【請求項７】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きに基づいて、選択された前記仮想オブジェクトについて目標とされた入力を検出することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸の少なくとも１つの周りの前記第１のコントローラの回転運動を検出すること、または
前記第２の座標系のＸ軸、Ｙ軸またはＺ軸の少なくとも１つの周りの前記第２のコントローラの回転運動を検出すること、の少なくとも一方を含む、請求項２〜請求項６のいずれか１項に記載の方法。
【請求項８】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
検出された前記第１のコントローラの前記回転運動または検出された前記第２のコントローラの前記回転運動の少なくとも一方に基づいて、前記共通の座標系に対する回転コマンドの動きを判断することと、
前記回転コマンドの動きを、選択された前記仮想オブジェクトの操作に適用することとを含む、請求項７に記載の方法。
【請求項９】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きに基づいて、選択された前記仮想オブジェクトについて目標とされた入力を検出することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸の少なくとも１つに対する、かつ前記第２のコントローラの位置に対する前記第１のコントローラの動きを検出すること、または
前記第２の座標系のＸ軸、Ｙ軸またはＺ軸の少なくとも１つに対する、かつ前記第１のコントローラの位置に対する前記第２のコントローラの動きを検出すること、の少なくとも一方を含む、請求項２〜請求項８のいずれか１項に記載の方法。
【請求項１０】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
検出された前記第１のコントローラの前記動きまたは検出された前記第２のコントローラの前記動きの少なくとも一方に基づいて、前記共通の座標系に対する選択された動きの方向および選択された動きの量を求めることと、
前記選択された動きの方向における前記選択された動きの量を、選択された前記仮想オブジェクトの操作に適用することとを含む、請求項９に記載の方法。
【請求項１１】
前記３Ｄ仮想環境を生成することは、ヘッドマウントディスプレイ（ＨＭＤ）デバイスのディスプレイ上に前記仮想環境を表示することを含み、前記第１および第２のコントローラは前記ＨＭＤに作動的に結合されるハンドヘルドコントローラであり、その結果、前記物理環境での前記第１および第２のコントローラの物理的な動きは、前記仮想環境で表示される選択された仮想オブジェクトに対して実行されることになるユーザコマンドに対応する、請求項１〜請求項１０のいずれか１項に記載の方法。
【請求項１２】
方法であって、
仮想環境で表示される仮想オブジェクトの選択を検出することと、
検出された第１の座標系に対する第１のコントローラの動き、および検出された第２の座標系に対する第２のコントローラの動きに応じて、前記仮想環境で表示される選択された前記仮想オブジェクトについて目標とされた入力を検出することとを備え、前記第１のコントローラおよび前記第２のコントローラは物理環境で動作し、前記方法はさらに、
検出された前記第１のコントローラの前記動き、および検出された前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することと、
前記コマンドの動きに応じて、選択された前記仮想オブジェクトを前記仮想環境で回転させることとを備える、方法。
【請求項１３】
検出された前記第１のコントローラの前記動き、および検出された前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
前記共通の座標系の第１の軸を定義することを含み、前記第１の軸は前記第１のコントローラの中央部から前記第２のコントローラの中央部に延び、前記変換することはさらに、
前記共通の座標系の第２の軸を定義することを含み、前記第２の軸を定義することは、
前記第１の座標系のＸ軸、Ｙ軸またはＺ軸のうちのどれが前記第１の軸に最も直交しているかを判断することと、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸のうちの最も直交している軸を前記共通の座標系の前記第２の軸として設定することとを含み、前記変換することはさらに、
前記共通の座標系の第３の軸を定義することを含み、前記第３の軸は前記第１の軸と前記第２の軸との外積である、請求項１２に記載の方法。
【請求項１４】
前記第１の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、連続した時点において前記第１の軸を動的に再び定義することを含み、
前記第２の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、かつ前記第１の軸が動的に再び定義されると、連続した時点において前記第２の軸を動的に再び定義することを含み、
前記第３の軸を定義することは、前記第１のコントローラおよび前記第２のコントローラが前記物理環境において、かつそれに対応して前記仮想環境に対して動くと、かつ前記第１の軸および前記第２の軸が動的に再び定義されると、連続した時点において前記第３の軸を動的に再び定義することを含む、請求項１３に記載の方法。
【請求項１５】
検出された前記第１のコントローラの前記動き、および検出された第２のコントローラの前記動きに応じて、選択された前記仮想オブジェクトについて目標とされた入力を検出することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸の少なくとも１つの周りの前記第１のコントローラの回転運動を検出すること、または
前記第２の座標系のＸ軸、Ｙ軸またはＺ軸の少なくとも１つの周りの前記第２のコントローラの回転運動を検出すること、の少なくとも一方を含む、請求項１３または請求項１４に記載の方法。
【請求項１６】
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
検出された前記第１のコントローラの前記回転運動または検出された前記第２のコントローラの前記回転運動の少なくとも一方に基づいて、前記共通の座標系に対する回転コマンドの動きを判断することと、
前記回転コマンドの動きを、選択された前記仮想オブジェクトの操作に適用することとを含む、請求項１５に記載の方法。
【請求項１７】
前記物理環境での前記第１のコントローラの６自由度（６ＤＯＦ）の位置および向きを追跡することと、
前記物理環境での前記第２のコントローラの６ＤＯＦの位置および向きを追跡することと、
前記第１のコントローラの前記６ＤＯＦの追跡に基づいて、前記第１のコントローラの前記動きを検出することと、
前記第２のコントローラの前記６ＤＯＦの追跡に基づいて、前記第２のコントローラの前記動きを検出することとをさらに備える、請求項１２〜請求項１６のいずれか１項に記載の方法。
【請求項１８】
コンピュータプログラムであって、一連の命令を含み、前記命令はプロセッサによって実行されると前記プロセッサに方法を実行させ、前記方法は、
３次元（３Ｄ）仮想環境を生成することと、
物理環境での第１のコントローラの６自由度（６ＤＯＦ）の位置および向きを追跡することと、
前記物理環境での第２のコントローラの６ＤＯＦの位置および向きを追跡することと、
前記仮想環境で表示される仮想オブジェクトの選択を検出することと、
前記物理環境で検出された第１の座標系に対する前記第１のコントローラの動き、および前記物理環境で検出された第２の座標系に対する前記第２のコントローラの動きに基づいて、選択された前記仮想オブジェクトについて目標とされた入力を検出することと、
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することと、
前記コマンドの動きに応じて、選択された前記仮想オブジェクトを操作することとを備える、コンピュータプログラム。
【請求項１９】
検出された前記第１のコントローラの前記動き、および検出された前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
前記共通の座標系の第１の軸を定義することを含み、前記第１の軸は前記第１のコントローラの中央部から前記第２のコントローラの中央部に延び、前記変換することはさらに、
前記共通の座標系の第２の軸を定義することを含み、前記第２の軸を定義することは、
前記第１の座標系のＸ軸、Ｙ軸またはＺ軸のうちのどれが前記第１の軸に最も直交しているかを判断することと、
前記Ｘ軸、前記Ｙ軸または前記Ｚ軸のうちの最も直交している軸を前記共通の座標系の前記第２の軸として設定することとを含み、前記変換することはさらに、
前記共通の座標系の第３の軸を定義することを含み、前記第３の軸は前記第１の軸と前記第２の軸との外積である、請求項１８に記載のコンピュータプログラム。
【請求項２０】
検出された前記第１のコントローラの前記動き、および検出された第２のコントローラの前記動きに応じて、選択された前記仮想オブジェクトについて目標とされた入力を検出することは、
前記第１の座標系の前記Ｘ軸、前記Ｙ軸または前記Ｚ軸の少なくとも１つの周りの前記第１のコントローラの回転運動を検出すること、または
前記第２の座標系のＸ軸、Ｙ軸またはＺ軸の少なくとも１つの周りの前記第２のコントローラの回転運動を検出すること、の少なくとも一方を含み、
検出された前記第１の座標系に対する前記第１のコントローラの前記動き、および検出された前記第２の座標系に対する前記第２のコントローラの前記動きを、共通の座標系に対するコマンドの動きに変換することは、
検出された前記第１のコントローラの前記回転運動または検出された前記第２のコントローラの前記回転運動の少なくとも一方に基づいて、前記共通の座標系に対する回転コマンドの動きを判断することと、
前記回転コマンドの動きを、選択された前記仮想オブジェクトの操作に適用することとを含む、請求項１９に記載のコンピュータプログラム。
【国際調査報告】
2019532396.tif 000021
2019532396.tif 000022