(57)【要約】【課題】ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することを可能とする情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法を提供する。【解決手段】複数のオブジェクトを３次元仮想空間のそれぞれの位置に配置し、第１面および当該第１面と交差する部分において所定の角を成す第２面を少なくとも含む移動可能面を、複数のオブジェクトそれぞれに定義する。そして、ユーザ入力に基づいて、オブジェクトに定義された移動可能面に沿って当該オブジェクトを移動させる。【選択図】図１３
2020140618.tif 000002
【特許請求の範囲】
【請求項１】
３次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
複数のオブジェクトを、前記３次元仮想空間のそれぞれの位置に配置する配置手段と、
前記３次元仮想空間における第１面および当該第１面と交差する部分において所定の角を成す第２面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第１のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段として機能させる、情報処理プログラム。
【請求項２】
前記３次元仮想空間の画像を取得する仮想カメラを当該３次元仮想空間内に配置して制御する仮想カメラ制御手段として、さらに前記コンピュータを機能させ、
前記移動可能面定義手段は、前記３次元仮想空間における前記仮想カメラの周囲に前記移動可能面を定義する、請求項１に記載の情報処理プログラム。
【請求項３】
前記移動可能面定義手段は、前記移動可能面を、前記オブジェクトの位置に基づいて定義する、請求項１または２に記載の情報処理プログラム。
【請求項４】
前記移動可能面定義手段は、前記３次元仮想空間において前記仮想カメラの姿勢が変更された場合であっても、前記移動可能面の位置を固定して定義する、請求項２に記載の情報処理プログラム。
【請求項５】
前記移動可能面定義手段は、積層して配置される複数の移動可能面を定義し、
前記移動手段は、第２のユーザ入力に基づいて、前記オブジェクトの位置が含まれる当該オブジェクトの移動可能面から、当該移動可能面とは別の移動可能面へ当該オブジェクトを移動させる、請求項１乃至４の何れか１つに記載の情報処理プログラム。
【請求項６】
前記移動手段は、第２のユーザ入力に基づいて、前記オブジェクトに対応付けて定義された前記移動可能面以外の位置に当該オブジェクトを移動させ、
前記移動可能面定義手段は、前記第２のユーザ入力に基づいて前記オブジェクトが移動した場合、当該変更された後の当該オブジェクトの位置に基づいて、当該オブジェクトの移動可能面を定義する、請求項１乃至４の何れか１つに記載の情報処理プログラム。
【請求項７】
前記移動手段は、前記第１面と前記第２面とで、当該第１面と当該第２面が交差する位置を経て相互に前記オブジェクトを移動させる、請求項１乃至６の何れか１つに記載の情報処理プログラム。
【請求項８】
前記移動手段は、前記オブジェクトが前記第１面に沿った移動から前記第２面に沿った移動に移る場合、前記３次元仮想空間において当該オブジェクトの姿勢を保持しながら当該オブジェクトを移動させる、請求項１乃至７の何れか１つに記載の情報処理プログラム。
【請求項９】
ユーザの目を少なくとも覆う位置に装着され、前記仮想カメラから見た前記３次元仮想空間の画像を当該ユーザが視認可能に表示する表示画面を有するゴーグル装置の姿勢を取得する姿勢取得手段として、さらに前記コンピュータを機能させ、
前記仮想カメラ制御手段は、前記ゴーグル装置の姿勢に基づいて前記仮想カメラを制御する、請求項２または４に記載の情報処理プログラム。
【請求項１０】
前記仮想カメラから見た前記３次元仮想空間の画像を表示装置に表示する表示制御手段と、
前記表示装置の姿勢を取得する姿勢取得手段として、さらに前記コンピュータを機能させ、
前記仮想カメラ制御手段は、前記表示装置の姿勢に基づいて前記仮想カメラを制御する、請求項２または４に記載の情報処理プログラム。
【請求項１１】
前記移動手段は、前記第１のユーザ入力に含まれる角速度に基づいて、前記オブジェクトを移動させる、請求項１乃至１０の何れか１つに記載の情報処理プログラム。
【請求項１２】
前記第１面および前記第２面は、それぞれ平面である、請求項１乃至１１の何れか１つに記載の情報処理プログラム。
【請求項１３】
前記第１面および前記第２面は、前記交差する部分において直角で交差する、請求項１乃至１２の何れか１つに記載の情報処理プログラム。
【請求項１４】
前記移動可能面を構成する複数の面のうち、前記第１のユーザ入力に基づいて移動させる前記オブジェクトの位置が含まれる面を他の面とは異なる表示態様で表示する、請求項１乃至１３の何れか１つに記載の情報処理プログラム。
【請求項１５】
３次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置であって、
複数のオブジェクトを前記３次元仮想空間のそれぞれの位置に配置する配置手段と、
前記３次元仮想空間における第１面および当該第１面と交差する部分において所定の角を成す第２面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第１のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段とを備える、情報処理装置。
【請求項１６】
前記情報処理装置は、操作装置と通信可能であり、
前記操作装置は、当該操作装置に生じる角速度を検出するジャイロセンサを備え、
前記移動手段は、前記ジャイロセンサによって検出された角速度を前記第１のユーザ入力として、前記オブジェクトを移動させる、請求項１５に記載の情報処理装置。
【請求項１７】
３次元仮想空間内においてオブジェクトを配置または移動させる情報処理システムであって、
複数のオブジェクトを前記３次元仮想空間のそれぞれの位置に配置する配置手段と、
前記３次元仮想空間における第１面および当該第１面と交差する部分において所定の角を成す第２面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第１のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段とを備える、情報処理システム。
【請求項１８】
３次元仮想空間内においてオブジェクトを配置または移動させる情報処理方法であって、
複数のオブジェクトを前記３次元仮想空間のそれぞれの位置に配置する配置ステップと、
前記３次元仮想空間における第１面および当該第１面と交差する部分において所定の角を成す第２面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義ステップと、
第１のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動ステップとを含む、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想空間内でオブジェクトを移動させる処理を行う情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法に関する。
【背景技術】
【０００２】
従来、ユーザの操作に応じて、仮想空間内でオブジェクトを移動させる表示装置がある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−１８９１９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記特許文献１で開示された表示装置では、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することに関して、改良の余地がある。
【０００５】
それ故に、本発明の目的は、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することを可能とする情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法を提供することである。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、本発明は例えば以下のような構成を採用し得る。なお、特許請求の範囲の記載を解釈する際に、特許請求の範囲の記載によってのみその範囲が解釈されるべきであることが理解され、特許請求の範囲の記載と本欄の記載とが矛盾する場合には、特許請求の範囲の記載が優先する。
【０００７】
本発明の情報処理プログラムの一構成例は、３次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置のコンピュータで実行される。情報処理プログラムは、配置手段、移動可能面定義手段、および移動手段として、コンピュータを機能させる。配置手段は、複数のオブジェクトを３次元仮想空間のそれぞれの位置に配置する。移動可能面定義手段は、３次元仮想空間における第１面および当該第１面と交差する部分において所定の角を成す第２面を少なくとも含む移動可能面を、複数のオブジェクトそれぞれに定義する。移動手段は、第１のユーザ入力に基づいて、オブジェクトに定義された移動可能面に沿って当該オブジェクトを移動させる。
【０００８】
上記によれば、仮想空間内において、オブジェクトを移動させる場合、交差する部分において所定の角を成す複数の構成面を有する移動可能面に沿って移動させることができるため、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することが可能となる。
【０００９】
また、上記情報処理プログラムは、仮想カメラ制御手段として、さらにコンピュータを機能させてもよい。仮想カメラ制御手段は、３次元仮想空間の画像を取得する仮想カメラを当該３次元仮想空間内に配置して制御する。この場合、上記移動可能面定義手段は、３次元仮想空間における仮想カメラの周囲に移動可能面を定義してもよい。
【００１０】
上記によれば、仮想カメラの周辺に移動可能面が定義されるため、視点の周辺にオブジェクトを移動させて配置することが可能となる。
【００１１】
また、上記移動可能面定義手段は、移動可能面を、オブジェクトの位置に基づいて定義してもよい。
【００１２】
上記によれば、オブジェクトの位置に基づいて移動可能面が定義されるため、オブジェクト位置に応じた適切な移動可能面を設定することができる。
【００１３】
また、上記移動可能面定義手段は、３次元仮想空間において仮想カメラの姿勢が変更された場合であっても、移動可能面の位置を固定して定義してもよい。
【００１４】
上記によれば、仮想空間に固定された移動可能面に沿ってオブジェクトを移動させることができるため、仮想カメラの動きに応じた位置ずれ等を防止することができる。
【００１５】
また、上記移動可能面定義手段は、積層して配置される複数の移動可能面を定義してもよい。上記移動手段は、第２のユーザ入力に基づいて、オブジェクトの位置が含まれる当該オブジェクトの移動可能面から、当該移動可能面とは別の移動可能面へ当該オブジェクトを移動させてもよい。
【００１６】
上記によれば、他の移動可能面を用いてオブジェクトを移動させることも可能となるため、多様なオブジェクト移動が可能となる。
【００１７】
また、上記移動手段は、第２のユーザ入力に基づいて、オブジェクトに対応付けて定義された移動可能面以外の位置に当該オブジェクトを移動させてもよい。上記移動可能面定義手段は、第２のユーザ入力に基づいてオブジェクトが移動した場合、当該変更された後の当該オブジェクトの位置に基づいて、当該オブジェクトの移動可能面を定義してもよい。
【００１８】
上記によれば、新たに定義される移動可能面を用いてオブジェクトを移動させることも可能となるため、多様なオブジェクト移動が可能となる。
【００１９】
また、上記移動手段は、第１面と第２面とで、当該第１面と当該第２面が交差する位置を経て相互にオブジェクトを移動させてもよい。
【００２０】
上記によれば、操作方法を変えなくても、他の面に沿ったオブジェクト移動に切り替えることが可能となる。
【００２１】
また、上記移動手段は、オブジェクトが第１面に沿った移動から第２面に沿った移動に移る場合、３次元仮想空間において当該オブジェクトの姿勢を保持しながら当該オブジェクトを移動させてもよい。
【００２２】
上記によれば、オブジェクトの移動方向が変わった場合であっても、オブジェクトの姿勢が変わらないため、オブジェクトの姿勢を変えずに移動する場合に好適となる。
【００２３】
また、上記情報処理プログラムは、姿勢取得手段として、さらにコンピュータを機能させてもよい。姿勢取得手段は、ユーザの目を少なくとも覆う位置に装着され、仮想カメラから見た３次元仮想空間の画像を当該ユーザが視認可能に表示する表示画面を有するゴーグル装置の姿勢を取得する。この場合、上記仮想カメラ制御手段は、ゴーグル装置の姿勢に基づいて仮想カメラを制御してもよい。
【００２４】
上記によれば、ゴーグル装置を装着して表示画面を視認するユーザに立体視可能な画像を提供することができ、当該ゴーグルを装着したユーザの動きに応じて表示領域を変化させることができる。
【００２５】
また、上記情報処理プログラムは、表示制御手段および姿勢取得手段として、さらにコンピュータを機能させてもよい。表示制御手段は、仮想カメラから見た３次元仮想空間の画像を表示装置に表示する。姿勢取得手段は、表示装置の姿勢を取得する。この場合、上記仮想カメラ制御手段は、表示装置の姿勢に基づいて仮想カメラを制御してもよい。
【００２６】
上記によれば、仮想空間画像を表示する表示装置の姿勢に応じて表示範囲を変化させることができるため、表示装置を介して仮想空間を覗いているようなリアリティある画像を提供することができる。
【００２７】
また、上記移動手段は、第１のユーザ入力に含まれる角速度に基づいて、オブジェクトを移動させてもよい。
【００２８】
上記によれば、角速度に基づいてオブジェクトを動かすような操作が可能となる。
【００２９】
また、上記第１面および第２面は、それぞれ平面でもよい。
【００３０】
上記によれば、オブジェクトを角度の異なる平面に沿って移動することが可能となる。
【００３１】
また、上記第１面および第２面は、交差する部分において直角で交差してもよい。
【００３２】
上記によれば、仮想空間における前後左右方向を基準として整列した配置が容易となる。
【００３３】
また、上記移動可能面を構成する複数の面のうち、第１のユーザ入力に基づいて移動させるオブジェクトの位置が含まれる面を他の面とは異なる表示態様で表示してもよい。
【００３４】
上記によれば、移動させているオブジェクトの移動基準を容易に把握することができる。
【００３５】
また、本発明は、情報処理装置、情報処理システム、および情報処理方法の形態で実施されてもよい。
【００３６】
また、上記情報処理装置は、操作装置と通信可能でもよい。上記操作装置は、当該操作装置に生じる角速度を検出するジャイロセンサを備えてもよい。この場合、上記移動手段は、ジャイロセンサによって検出された角速度を第１のユーザ入力として、オブジェクトを移動させてもよい。
【００３７】
上記によれば、操作装置を動かした位置にオブジェクトを動かすような操作が可能となる。
【発明の効果】
【００３８】
本発明によれば、仮想空間内において、オブジェクトを移動させる場合、交差する部分において所定の角を成す複数の構成面を有する移動可能面に沿って移動させることができるため、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することが可能となる。
【図面の簡単な説明】
【００３９】
【図１】本実施形態におけるゲームシステム１の一例において、本体装置２に左コントローラ３および右コントローラ４を装着した状態を示す図
【図２】本体装置２から左コントローラ３および右コントローラ４をそれぞれ外した状態の一例を示す図
【図３】本体装置２の一例を示す六面図
【図４】左コントローラ３の一例を示す六面図
【図５】右コントローラ４の一例を示す六面図
【図６】本体装置２の内部構成の一例を示すブロック図
【図７】ゲームシステム１の内部構成の一例を示すブロック図
【図８】左コントローラ３および右コントローラ４を本体装置２から取り外した状態において、１人のユーザが本体装置２と右コントローラ４とを操作してゲームシステム１を利用する様子の一例を示す図
【図９】操作対象に選択された第１のオブジェクトＯＢＪ１におけるワールド座標位置の例を示す図
【図１０】操作対象に選択された第１のオブジェクトＯＢＪ１に対して設定される直方体形状の移動可能面ＭＳの例を示す図
【図１１】移動可能面ＭＳに沿って第１のオブジェクトＯＢＪ１が移動する一例を上面側から見た図
【図１２】移動可能面ＭＳに沿って第１のオブジェクトＯＢＪ１が移動する他の例を右側面側から見た図
【図１３】移動可能面ＭＳの一部の構成面を可視グリッドＧｍｓ１で表示する一例を示す
【図１４】複数のオブジェクトＯＢＪ１〜ＯＢＪ３毎にそれぞれ設定される移動可能面ＭＳ１〜ＭＳ３の一例を示す図
【図１５】複数のオブジェクトＯＢＪ４〜ＯＢＪ６毎にそれぞれ設定される移動可能面ＭＳ４〜ＭＳ６の他の例を示す図
【図１６】本実施形態において本体装置２のＤＲＡＭ８５に設定されるデータ領域の一例を示す図
【図１７】ゲームシステム１で実行される情報処理の一例を示すフローチャート
【図１８】図１７におけるステップＳ１０６において行われるオブジェクト移動処理の詳細な一例を示すサブルーチン
【発明を実施するための形態】
【００４０】
以下、本実施形態の一例に係る情報処理システムについて説明する。本実施形態における情報処理システムは、一例としてゲームシステム１を用いており、本体装置（情報処理装置；本実施形態ではゲーム装置本体として機能する）２と、操作装置の一例として左コントローラ３および右コントローラ４とを含む。本体装置２は、左コントローラ３および右コントローラ４がそれぞれ着脱可能である。つまり、ゲームシステム１は、左コントローラ３および右コントローラ４をそれぞれ本体装置２に装着して一体化された装置として利用できる。また、ゲームシステム１は、本体装置２と左コントローラ３および右コントローラ４とを別体として利用することもできる（図２参照）。以下では、本実施形態のゲームシステム１のハードウェア構成について説明し、その後に本実施形態のゲームシステム１の制御について説明する。
【００４１】
図１は、本体装置２に左コントローラ３および右コントローラ４を装着した状態の一例を示す図である。図１に示すように、左コントローラ３および右コントローラ４は、それぞれ本体装置２に装着されて一体化されている。本体装置２は、ゲームシステム１における各種の処理（例えば、ゲーム処理）を実行する装置である。本体装置２は、ディスプレイ１２を備える。左コントローラ３および右コントローラ４は、ユーザが入力を行うための操作部を備える装置である。
【００４２】
図２は、本体装置２から左コントローラ３および右コントローラ４をそれぞれ外した状態の一例を示す図である。図１および図２に示すように、左コントローラ３および右コントローラ４は、本体装置２に着脱可能である。なお、以下において、左コントローラ３および右コントローラ４の総称として「コントローラ」と記載することがある。
【００４３】
図３は、本体装置２の一例を示す六面図である。図３に示すように、本体装置２は、略板状のハウジング１１を備える。本実施形態において、ハウジング１１の主面（換言すれば、表側の面、すなわち、ディスプレイ１２が設けられる面）は、大略的には矩形形状である。
【００４４】
なお、ハウジング１１の形状および大きさは、任意である。一例として、ハウジング１１は、携帯可能な大きさであってよい。また、本体装置２単体または本体装置２に左コントローラ３および右コントローラ４が装着された一体型装置は、携帯型装置となってもよい。また、本体装置２または一体型装置が手持ち型の装置となってもよい。また、本体装置２または一体型装置が可搬型装置となってもよい。
【００４５】
図３に示すように、本体装置２は、ハウジング１１の主面に設けられるディスプレイ１２を備える。ディスプレイ１２は、本体装置２が生成した画像を表示する。本実施形態においては、ディスプレイ１２は、液晶表示装置（ＬＣＤ）とする。ただし、ディスプレイ１２は任意の種類の表示装置であってよい。
【００４６】
また、本体装置２は、ディスプレイ１２の画面上にタッチパネル１３を備える。本実施形態においては、タッチパネル１３は、マルチタッチ入力が可能な方式（例えば、静電容量方式）のものである。ただし、タッチパネル１３は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式（例えば、抵抗膜方式）のものであってもよい。
【００４７】
本体装置２は、ハウジング１１の内部においてスピーカ（すなわち、図６に示すスピーカ８８）を備えている。図３に示すように、ハウジング１１の主面には、スピーカ孔１１ａおよび１１ｂが形成される。そして、スピーカ８８の出力音は、これらのスピーカ孔１１ａおよび１１ｂからそれぞれ出力される。
【００４８】
また、本体装置２は、本体装置２が左コントローラ３と有線通信を行うための端子である左側端子１７と、本体装置２が右コントローラ４と有線通信を行うための右側端子２１を備える。
【００４９】
図３に示すように、本体装置２は、スロット２３を備える。スロット２３は、ハウジング１１の上側面に設けられる。スロット２３は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム１およびそれと同種の情報処理装置に専用の記憶媒体（例えば、専用メモリカード）である。所定の種類の記憶媒体は、例えば、本体装置２で利用されるデータ（例えば、アプリケーションのセーブデータ等）、および／または、本体装置２で実行されるプログラム（例えば、アプリケーションのプログラム等）を記憶するために用いられる。また、本体装置２は、電源ボタン２８を備える。
【００５０】
本体装置２は、下側端子２７を備える。下側端子２７は、本体装置２がクレードルと通信を行うための端子である。本実施形態において、下側端子２７は、ＵＳＢコネクタ（より具体的には、メス側コネクタ）である。上記一体型装置または本体装置２単体をクレードルに載置した場合、ゲームシステム１は、本体装置２が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置２単体を充電する機能を有する。また、クレードルは、ハブ装置（具体的には、ＵＳＢハブ）の機能を有する。
【００５１】
本体装置２は、照度センサ２９を備える。本実施例においては、照度センサ２９は、ハウジング１１の主面下部に設けられ、ハウジング１１の主面側から入射する光の照度（明るさ）を検出する。なお、照度センサ２９によって検出された光の照度に応じて、ディスプレイ１２を適切な明るさにして画像を表示することができるが、本実施例においては当該検出された照度に基づいて、本体装置２が後述するゴーグル装置に装着されているか否かを判定することが可能となる。
【００５２】
図４は、左コントローラ３の一例を示す六面図である。図４に示すように、左コントローラ３は、ハウジング３１を備える。本実施形態においては、ハウジング３１は、縦長の形状、すなわち、上下方向（すなわち、図１および図４に示すｙ軸方向）に長い形状である。左コントローラ３は、本体装置２から外された状態において、縦長となる向きで把持されることも可能である。ハウジング３１は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ３は、横長となる向きで把持されることも可能である。左コントローラ３が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【００５３】
左コントローラ３は、アナログスティック３２を備える。図４に示すように、アナログスティック３２は、ハウジング３１の主面に設けられる。アナログスティック３２は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック３２を傾倒することによって傾倒方向に応じた方向の入力（および、傾倒した角度に応じた大きさの入力）が可能である。なお、左コントローラ３は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック３２を押下する入力が可能である。
【００５４】
左コントローラ３は、各種操作ボタンを備える。左コントローラ３は、ハウジング３１の主面上に４つの操作ボタン３３〜３６（具体的には、右方向ボタン３３、下方向ボタン３４、上方向ボタン３５、および左方向ボタン３６）を備える。さらに、左コントローラ３は、録画ボタン３７および−（マイナス）ボタン４７を備える。左コントローラ３は、ハウジング３１の側面の左上に第１Ｌボタン３８およびＺＬボタン３９を備える。また、左コントローラ３は、ハウジング３１の側面の、本体装置２に装着される際に装着される側の面に第２Ｌボタン４３および第２Ｒボタン４４を備える。これらの操作ボタンは、本体装置２で実行される各種プログラム（例えば、ＯＳプログラムやアプリケーションプログラム）に応じた指示を行うために用いられる。
【００５５】
また、左コントローラ３は、左コントローラ３が本体装置２と有線通信を行うための端子４２を備える。
【００５６】
図５は、右コントローラ４の一例を示す六面図である。図５に示すように、右コントローラ４は、ハウジング５１を備える。本実施形態においては、ハウジング５１は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ４は、本体装置２から外された状態において、縦長となる向きで把持されることも可能である。ハウジング５１は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ４は、横長となる向きで把持されることも可能である。右コントローラ４が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【００５７】
右コントローラ４は、左コントローラ３と同様、方向入力部としてアナログスティック５２を備える。本実施形態においては、アナログスティック５２は、左コントローラ３のアナログスティック３２と同じ構成である。また、右コントローラ４は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ４は、左コントローラ３と同様、ハウジング５１の主面上に４つの操作ボタン５３〜５６（具体的には、Ａボタン５３、Ｂボタン５４、Ｘボタン５５、およびＹボタン５６）を備える。さらに、右コントローラ４は、＋（プラス）ボタン５７およびホームボタン５８を備える。また、右コントローラ４は、ハウジング５１の側面の右上に第１Ｒボタン６０およびＺＲボタン６１を備える。また、右コントローラ４は、左コントローラ３と同様、第２Ｌボタン６５および第２Ｒボタン６６を備える。
【００５８】
また、右コントローラ４は、右コントローラ４が本体装置２と有線通信を行うための端子６４を備える。
【００５９】
図６は、本体装置２の内部構成の一例を示すブロック図である。本体装置２は、図３に示す構成の他、図６に示す各構成要素８１〜９１、９７、および９８を備える。これらの構成要素８１〜９１、９７、および９８のいくつかは、電子部品として電子回路基板上に実装されてハウジング１１内に収納されてもよい。
【００６０】
本体装置２は、プロセッサ８１を備える。プロセッサ８１は、本体装置２において実行される各種の情報処理を実行する情報処理部であって、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のみから構成されてもよいし、ＣＰＵ機能、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）機能等の複数の機能を含むＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ）から構成されてもよい。プロセッサ８１は、記憶部（具体的には、フラッシュメモリ８４等の内部記憶媒体、あるいは、スロット２３に装着される外部記憶媒体等）に記憶される情報処理プログラム（例えば、ゲームプログラム）を実行することによって、各種の情報処理を実行する。
【００６１】
本体装置２は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ８４およびＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）８５を備える。フラッシュメモリ８４およびＤＲＡＭ８５は、プロセッサ８１に接続される。フラッシュメモリ８４は、主に、本体装置２に保存される各種のデータ（プログラムであってもよい）を記憶するために用いられるメモリである。ＤＲＡＭ８５は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【００６２】
本体装置２は、スロットインターフェース（以下、「Ｉ／Ｆ」と略記する。）９１を備える。スロットＩ／Ｆ９１は、プロセッサ８１に接続される。スロットＩ／Ｆ９１は、スロット２３に接続され、スロット２３に装着された所定の種類の記憶媒体（例えば、専用メモリカード）に対するデータの読み出しおよび書き込みを、プロセッサ８１の指示に応じて行う。
【００６３】
プロセッサ８１は、フラッシュメモリ８４およびＤＲＡＭ８５、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【００６４】
本体装置２は、ネットワーク通信部８２を備える。ネットワーク通信部８２は、プロセッサ８１に接続される。ネットワーク通信部８２は、ネットワークを介して外部の装置と通信（具体的には、無線通信）を行う。本実施形態においては、ネットワーク通信部８２は、第１の通信態様としてＷｉ−Ｆｉの規格に準拠した方式により、無線ＬＡＮに接続して外部装置と通信を行う。また、ネットワーク通信部８２は、第２の通信態様として所定の通信方式（例えば、独自プロトコルによる通信や、赤外線通信）により、同種の他の本体装置２との間で無線通信を行う。なお、上記第２の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置２との間で無線通信可能であり、複数の本体装置２の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【００６５】
本体装置２は、コントローラ通信部８３を備える。コントローラ通信部８３は、プロセッサ８１に接続される。コントローラ通信部８３は、左コントローラ３および／または右コントローラ４と無線通信を行う。本体装置２と左コントローラ３および右コントローラ４との通信方式は任意であるが、本実施形態においては、コントローラ通信部８３は、左コントローラ３との間および右コントローラ４との間で、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従った通信を行う。
【００６６】
プロセッサ８１は、上述の左側端子１７、右側端子２１、および下側端子２７に接続される。プロセッサ８１は、左コントローラ３と有線通信を行う場合、左側端子１７を介して左コントローラ３へデータを送信するとともに、左側端子１７を介して左コントローラ３から操作データを受信する。また、プロセッサ８１は、右コントローラ４と有線通信を行う場合、右側端子２１を介して右コントローラ４へデータを送信するとともに、右側端子２１を介して右コントローラ４から操作データを受信する。また、プロセッサ８１は、クレードルと通信を行う場合、下側端子２７を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置２は、左コントローラ３および右コントローラ４との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ３および右コントローラ４が本体装置２に装着された一体型装置または本体装置２単体がクレードルに装着された場合、本体装置２は、クレードルを介してデータ（例えば、画像データや音声データ）を据置型モニタ等に出力することができる。
【００６７】
ここで、本体装置２は、複数の左コントローラ３と同時に（換言すれば、並行して）通信を行うことができる。また、本体装置２は、複数の右コントローラ４と同時に（換言すれば、並行して）通信を行うことができる。したがって、複数のユーザは、左コントローラ３および右コントローラ４のセットをそれぞれ用いて、本体装置２に対する入力を同時に行うことができる。一例として、第１ユーザが左コントローラ３および右コントローラ４の第１セットを用いて本体装置２に対して入力を行うと同時に、第２ユーザが左コントローラ３および右コントローラ４の第２セットを用いて本体装置２に対して入力を行うことが可能となる。
【００６８】
本体装置２は、タッチパネル１３の制御を行う回路であるタッチパネルコントローラ８６を備える。タッチパネルコントローラ８６は、タッチパネル１３とプロセッサ８１との間に接続される。タッチパネルコントローラ８６は、タッチパネル１３からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ８１へ出力する。
【００６９】
また、ディスプレイ１２は、プロセッサ８１に接続される。プロセッサ８１は、（例えば、上記の情報処理の実行によって）生成した画像および／または外部から取得した画像をディスプレイ１２に表示する。
【００７０】
本体装置２は、コーデック回路８７およびスピーカ（具体的には、左スピーカおよび右スピーカ）８８を備える。コーデック回路８７は、スピーカ８８および音声入出力端子２５に接続されるとともに、プロセッサ８１に接続される。コーデック回路８７は、スピーカ８８および音声入出力端子２５に対する音声データの入出力を制御する回路である。
【００７１】
また、本体装置２は、加速度センサ８９を備える。本実施形態においては、加速度センサ８９は、所定の３軸（例えば、図１に示すｘｙｚ軸）方向に沿った加速度の大きさを検出する。なお、加速度センサ８９は、１軸方向あるいは２軸方向の加速度を検出するものであってもよい。
【００７２】
また、本体装置２は、角速度センサ９０を備える。本実施形態においては、角速度センサ９０は、所定の３軸（例えば、図１に示すｘｙｚ軸）回りの角速度を検出する。なお、角速度センサ９０は、１軸回りあるいは２軸回りの角速度を検出するものであってもよい。
【００７３】
加速度センサ８９および角速度センサ９０は、プロセッサ８１に接続され、加速度センサ８９および角速度センサ９０の検出結果は、プロセッサ８１へ出力される。プロセッサ８１は、上記の加速度センサ８９および角速度センサ９０の検出結果に基づいて、本体装置２の動きおよび／または姿勢に関する情報を算出することが可能である。
【００７４】
照度センサ２９は、プロセッサ８１に接続され、照度センサ２９の検出結果は、プロセッサ８１へ出力される。プロセッサ８１は、照度センサ２９の検出結果に基づいて、本体装置２周辺の明るさに関する情報を算出することが可能である。一例として、本体装置２が後述するゴーグル装置に装着された場合、本体装置２周辺の明るさが低下するため、プロセッサ８１は、照度センサ２９の検出結果に基づいて、本体装置２が当該ゴーグル装置に装着されているか否かを判定することができる。
【００７５】
本体装置２は、電力制御部９７およびバッテリ９８を備える。電力制御部９７は、バッテリ９８およびプロセッサ８１に接続される。また、図示しないが、電力制御部９７は、本体装置２の各部（具体的には、バッテリ９８の電力の給電を受ける各部、左側端子１７、および右側端子２１）に接続される。電力制御部９７は、プロセッサ８１からの指令に基づいて、バッテリ９８から上記各部への電力供給を制御する。
【００７６】
また、バッテリ９８は、下側端子２７に接続される。外部の充電装置（例えば、クレードル）が下側端子２７に接続され、下側端子２７を介して本体装置２に電力が供給される場合、供給された電力がバッテリ９８に充電される。
【００７７】
図７は、本体装置２と左コントローラ３および右コントローラ４との内部構成の一例を示すブロック図である。なお、本体装置２に関する内部構成の詳細については、図６で示しているため図７では省略している。
【００７８】
左コントローラ３は、本体装置２との間で通信を行う通信制御部１０１を備える。図７に示すように、通信制御部１０１は、端子４２を含む各構成要素に接続される。本実施形態においては、通信制御部１０１は、端子４２を介した有線通信と、端子４２を介さない無線通信との両方で本体装置２と通信を行うことが可能である。通信制御部１０１は、左コントローラ３が本体装置２に対して行う通信方法を制御する。すなわち、左コントローラ３が本体装置２に装着されている場合、通信制御部１０１は、端子４２を介して本体装置２と通信を行う。また、左コントローラ３が本体装置２から外されている場合、通信制御部１０１は、本体装置２（具体的には、コントローラ通信部８３）との間で無線通信を行う。コントローラ通信部８３と通信制御部１０１との間の無線通信は、例えばＢｌｕｅｔｏｏｔｈ（登録商標）の規格に従って行われる。
【００７９】
また、左コントローラ３は、例えばフラッシュメモリ等のメモリ１０２を備える。通信制御部１０１は、例えばマイコン（マイクロプロセッサとも言う）で構成され、メモリ１０２に記憶されるファームウェアを実行することによって各種の処理を実行する。
【００８０】
左コントローラ３は、各ボタン１０３（具体的には、ボタン３３〜３９、４３、４４、および４７）を備える。また、左コントローラ３は、アナログスティック（図７では「スティック」と記載する）３２を備える。各ボタン１０３およびアナログスティック３２は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部１０１へ出力する。
【００８１】
左コントローラ３は、慣性センサを備える。具体的には、左コントローラ３は、加速度センサ１０４を備える。また、左コントローラ３は、角速度センサ１０５を備える。本実施形態においては、加速度センサ１０４は、所定の３軸（例えば、図４に示すｘｙｚ軸）方向に沿った加速度の大きさを検出する。なお、加速度センサ１０４は、１軸方向あるいは２軸方向の加速度を検出するものであってもよい。本実施形態においては、角速度センサ１０５は、所定の３軸（例えば、図４に示すｘｙｚ軸）回りの角速度を検出する。なお、角速度センサ１０５は、１軸回りあるいは２軸回りの角速度を検出するものであってもよい。加速度センサ１０４および角速度センサ１０５は、それぞれ通信制御部１０１に接続される。そして、加速度センサ１０４および角速度センサ１０５の検出結果は、適宜のタイミングで繰り返し通信制御部１０１へ出力される。
【００８２】
通信制御部１０１は、各入力部（具体的には、各ボタン１０３、アナログスティック３２、各センサ１０４および１０５）から、入力に関する情報（具体的には、操作に関する情報、またはセンサによる検出結果）を取得する。通信制御部１０１は、取得した情報（または取得した情報に所定の加工を行った情報）を含む操作データを本体装置２へ送信する。なお、操作データは、所定時間に１回の割合で繰り返し送信される。なお、入力に関する情報が本体装置２へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【００８３】
上記操作データが本体装置２へ送信されることによって、本体装置２は、左コントローラ３に対して行われた入力を得ることができる。すなわち、本体装置２は、各ボタン１０３およびアナログスティック３２に対する操作を、操作データに基づいて判別することができる。また、本体装置２は、左コントローラ３の動きおよび／または姿勢に関する情報を、操作データ（具体的には、加速度センサ１０４および角速度センサ１０５の検出結果）に基づいて算出することができる。
【００８４】
左コントローラ３は、電力供給部１０８を備える。本実施形態において、電力供給部１０８は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ３の各部（具体的には、バッテリの電力の給電を受ける各部）に接続される。
【００８５】
図７に示すように、右コントローラ４は、本体装置２との間で通信を行う通信制御部１１１を備える。また、右コントローラ４は、通信制御部１１１に接続されるメモリ１１２を備える。通信制御部１１１は、端子６４を含む各構成要素に接続される。通信制御部１１１およびメモリ１１２は、左コントローラ３の通信制御部１０１およびメモリ１０２と同様の機能を有する。したがって、通信制御部１１１は、端子６４を介した有線通信と、端子６４を介さない無線通信（具体的には、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従った通信）との両方で本体装置２と通信を行うことが可能であり、右コントローラ４が本体装置２に対して行う通信方法を制御する。
【００８６】
右コントローラ４は、左コントローラ３の各入力部と同様の各入力部を備える。具体的には、各ボタン１１３、アナログスティック５２、および慣性センサ（加速度センサ１１４および角速度センサ１１５）を備える。これらの各入力部については、左コントローラ３の各入力部と同様の機能を有し、同様に動作する。
【００８７】
右コントローラ４は、電力供給部１１８を備える。電力供給部１１８は、左コントローラ３の電力供給部１０８と同様の機能を有し、同様に動作する。
【００８８】
以上に説明したように、本実施形態におけるゲームシステム１については左コントローラ３および右コントローラ４が本体装置２から着脱可能である。以下、左コントローラ３および右コントローラ４を本体装置２から取り外した状態で、本体装置２から画像を出力する利用態様におけるゲームシステムを用いて説明する。左コントローラ３および右コントローラ４を本体装置２から取り外した状態でゲームシステム１を利用してアプリケーション（例えば、仮想空間を生成／編集するエディターやゲームアプリケーション）に対する操作を行う場合の態様としては、１人のユーザが本体装置２と左コントローラ３または右コントローラ４とを用いる態様が考えられる。
【００８９】
図８は、左コントローラ３および右コントローラ４を本体装置２から取り外した状態において、１人のユーザが本体装置２と右コントローラ４とを操作してゲームシステム１を利用する様子の一例を示す図である。図８に示すように、ユーザが本体装置２を左手で把持し、右コントローラ４を右手で把持して、本体装置２に表示された画像を見ながら操作することができる。
【００９０】
例えば、本実施例では、ユーザは、縦長の略板状である右コントローラ４の長手方向（図１に示す上方向（ｙ軸正方向））によって本体装置２のディスプレイ１２を指し示すように、本体装置２に装着された際に当該本体装置２と接する側面（スライダ６２が設けられている側面）が左方に向き、かつ、右コントローラ４の主面（アナログスティック５２等が設けられる面）が上に向くように右コントローラ４を片手（例えば、右手）で把持する。つまり、ユーザの一方の手によって把持されている右コントローラ４は、ｙ軸正方向がユーザの前方を向き、ｚ軸正方向が上を向いた状態となる。
【００９１】
また、本実施例では、ユーザは、横長の略板状である本体装置２の長手方向（図１に示すｘ軸方向）が水平となり、本体装置２の主面（ディスプレイ１２等が設けられている面）がユーザ側となるように、本体装置２を他方の手（例えば、左手）で把持する。ユーザの他方の手によって把持されている本体装置２は、ｚ軸負方向がユーザ側を向き、ｘ軸方向が水平となった状態となる。
【００９２】
このように、ユーザの一方の手で把持された右コントローラ４の各操作ボタンやスティックの操作や右コントローラ４本体を動かす操作に応じて、仮想空間の生成／編集や仮想空間を用いたゲームプレイが行われる。例えば、右コントローラ４の加速度センサ１１４は、上記ｘｙｚ軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ１１５は、上記ｘｙｚ軸方向周りの角速度をそれぞれ操作入力として検出可能であり、当該加速度および／または角速度を用いて右コントローラ４本体の動きや姿勢を算出することが可能となる。本実施例では、一例として、右コントローラ４を用いたユーザ操作に応じて、ディスプレイ１２に表示された仮想空間内に配置されたオブジェクトを移動させることができる。
【００９３】
また、本実施例では、ユーザの他方の手で把持された本体装置２本体を動かす操作に応じて、ディスプレイ１２に表示する表示範囲を変化させることができる。例えば、本体装置２の加速度センサ８９は、上記ｘｙｚ軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ９０は、上記ｘｙｚ軸方向周りの角速度をそれぞれ操作入力として検出可能であり、当該加速度および／または角速度を用いて本体装置２本体の動きや姿勢を算出することが可能となる。本実施例では、一例として、実空間における本体装置２の姿勢変化に応じて、ディスプレイ１２に画像を表示するために仮想空間内に設定される仮想カメラの姿勢を変化させることができる。具体的には、実空間における本体装置２の姿勢変化と同じ変化を仮想空間内の固定位置に配置された仮想カメラに与えることによって、本体装置２のディスプレイ１２を介して仮想空間内を覗いているかのような仮想空間の画像を生成することができる。なお、他の例として、上記姿勢変化に加えて、実空間における本体装置２の移動（位置変化）に応じて、仮想空間内において上記仮想カメラの位置を移動させてもよい。
【００９４】
図８は、本体装置２および右コントローラ４を操作して仮想空間内のオブジェクトを移動させる処理において表示される画像例を示している。図８に示すように、本処理例では、複数のオブジェクト（図８の例では、第１のオブジェクトＯＢＪ１および第２のオブジェクトＯＢＪ２）が仮想空間内に配置された画像が本体装置２に表示される。そして、ユーザは、右コントローラ４のアナログスティック５２および操作ボタン５３〜５６を操作したり、右コントローラ４本体を動かす操作をしたりすることによって、仮想空間内に配置された複数のオブジェクトの何れかを操作対象として選択したり、当該操作対象として選択されたオブジェクトを仮想空間内で移動させたりすることができる。また、ユーザは、本体装置２の姿勢を変化させることによって、仮想空間に設定されている仮想カメラの姿勢を変化させることができ、ディスプレイ１２に表示される仮想空間の範囲を変化させることができる。
【００９５】
例えば、ディスプレイ１２には、右コントローラ４本体によって指し示されている位置を示す標識Ｔが表示される。一例として、標識Ｔは、ディスプレイ１２における初期位置（例えば、ディスプレイ１２の中央）に表示された後、右コントローラ４本体の姿勢変化に応じてその表示位置が変化する。そして、ユーザが右コントローラ４を用いて所定の操作（例えば、操作ボタン（Ａボタン）５３を押下する操作や操作ボタン（Ｒボタン）６０を押下する操作）を行った場合、当該操作時点で標識Ｔと重畳して表示されているオブジェクトＯＢＪが操作対象として選択される。その後、上記選択操作が継続されている期間において上記操作対象を選択している状態が継続され、当該選択操作が終了することによって上記操作対象を選択している状態が解除される。
【００９６】
操作対象として設定されたオブジェクトＯＢＪは、右コントローラ４を用いたその後の操作に応じて、仮想空間内を移動させることができる。例えば、操作対象を設定する操作を継続している状態において、右コントローラ４本体によって指し示す位置を上下左右に移動させた場合、仮想空間において当該操作対象に設定されているオブジェクトＯＢＪを仮想カメラ周りとなる上下左右に移動させる。また、操作対象を設定する操作を継続している状態において、右コントローラ４のスティック５２を前後に傾倒させた場合、仮想空間において当該操作対象に設定されているオブジェクトＯＢＪを仮想カメラから遠ざけるまたは近づけるように移動させる。そして、操作対象を設定する操作が終了した場合、当該操作対象の移動を停止し、当該終了時点における仮想空間内の位置に当該操作対象のオブジェクトを配置して、オブジェクトを移動させる処理を解除する。
【００９７】
なお、操作対象として設定されたオブジェクトＯＢＪを移動させる操作方法は、上記操作方法でなくてもかまわない。例えば、右コントローラ４のスティック５２を傾倒させる操作に応じて、操作対象に設定されているオブジェクトＯＢＪを仮想カメラ周りとなる仮想空間の上下左右に移動させてもかまわない。また、右コントローラ４の操作ボタン６０および６１を押下する操作に応じて、操作対象に設定されているオブジェクトＯＢＪを仮想カメラから遠ざけるまたは近づけるように仮想空間において移動させてもかまわない。また、オブジェクトＯＢＪがマウスで操作される場合、マウスを操作して指定する指示位置に応じて、操作対象に設定されているオブジェクトＯＢＪを仮想カメラ周りとなる仮想空間の上下左右に移動させ、マウスを右クリックおよび左クリックする操作に応じて、操作対象に設定されているオブジェクトＯＢＪを仮想カメラから遠ざけるまたは近づけるように仮想空間において移動させてもかまわない。また、オブジェクトＯＢＪがタッチパッドで操作される場合、タッチパッドを操作して指定する指示位置に応じて、操作対象に設定されているオブジェクトＯＢＪを仮想カメラ周りとなる仮想空間の上下左右に移動させ、タッチパッドを固定位置で長押しする位置に応じて、操作対象に設定されているオブジェクトＯＢＪを仮想カメラから遠ざけるまたは近づけるように仮想空間において移動させてもかまわない。
【００９８】
また、左コントローラ３および右コントローラ４をそれぞれ本体装置２に装着して一体化された装置の形態で操作することも可能であり、この場合、左コントローラ３および右コントローラ４と本体装置２とが一体化しているため、左コントローラ３および／または右コントローラ４が指し示す位置に基づいた操作は難しくなる。したがって、上記一体化装置を用いて操作対象として設定されたオブジェクトＯＢＪを移動させる操作方法は、左右のスティック３２および５２を用いることが考えられる。例えば、上記一体化装置を用いた操作においても、本体装置２に装着された右コントローラ４の操作ボタン（Ａボタン）５３を押下する操作や操作ボタン（Ｒボタン）６０を押下する操作が行われた場合、当該操作時点で標識Ｔと重畳して表示されているオブジェクトＯＢＪを操作対象として選択する。そして、本体装置２に装着された左コントローラ３のスティック３２を傾倒させる操作に応じて、操作対象に設定されているオブジェクトＯＢＪを仮想カメラ周りとなる仮想空間の上下左右に移動させる。また、本体装置２に装着された右コントローラ３４のスティック５２を傾倒させる操作に応じて、操作対象に設定されているオブジェクトＯＢＪを仮想カメラから遠ざけるまたは近づけるように仮想空間において移動させる。このように一体化装置を用いて操作を行う場合、実空間における一体化装置の姿勢に応じてディスプレイ１２に表示される仮想空間の方向も変化するため、当該仮想空間の方向の変化に応じてスティックの傾倒方向も変化させることが考えられる。例えば、上記一体化装置の下方向（図１に示すｙ軸負方向）が実空間の鉛直方向となった姿勢では、ディスプレイ１２の下方向（図１に示すｙ軸負方向）が仮想空間における鉛直方向となる。したがって、左コントローラ３のスティック３２を下方向（図１に示すｙ軸負方向）に傾倒させる操作が行われた場合、ディスプレイ１２に表示された仮想空間における下方向への操作指示にすることが直感的であり、当該スティック３２を下方向に傾倒させる操作においてオブジェクトを仮想空間の下方向へ移動させる。一方、上記一体化装置の右方向（図１に示すｘ軸正方向）が実空間の鉛直方向となった姿勢では、ディスプレイ１２の右方向（図１に示すｘ軸正方向）が仮想空間における鉛直方向となる。したがって、左コントローラ３のスティック３２を右方向（図１に示すｘ軸正方向）に傾倒させる操作が行われた場合、ディスプレイ１２に表示された仮想空間における下方向への操作指示にすることが直感的であり、当該スティック３２を右方向に傾倒させる操作においてオブジェクトを仮想空間の下方向へ移動させる。
【００９９】
本実施例では、仮想空間内でオブジェクトを移動させる場合、当該仮想空間内に当該オブジェクトが移動可能となる移動可能面が定義される。以下、図９〜図１５を用いて、仮想空間内に設定される移動可能面について説明する。なお、図９は、操作対象に選択された第１のオブジェクトＯＢＪ１におけるワールド座標位置の例を示す図である。図１０は、操作対象に選択された第１のオブジェクトＯＢＪ１に対して設定される直方体形状の移動可能面ＭＳの例を示す図である。図１１は、移動可能面ＭＳに沿ってオブジェクトＯＢＪが移動する一例を上面側から見た図である。図１２は、移動可能面ＭＳに沿ってオブジェクトＯＢＪが移動する他の例を右側面側から見た図である。図１３は、移動可能面ＭＳの一部の構成面を可視グリッドＧｍｓ１で表示する一例を示す図である。図１４は、複数のオブジェクトＯＢＪ１〜ＯＢＪ３毎にそれぞれ設定される移動可能面ＭＳ１〜ＭＳ３の一例を示す図である。図１５は、複数のオブジェクトＯＢＪ４〜ＯＢＪ６毎にそれぞれ設定される移動可能面ＭＳ４〜ＭＳ６の他の例を示す図である。
【０１００】
図９において、第１のオブジェクトＯＢＪ１が操作対象として選択された場合、第１のオブジェクトＯＢＪ１の位置が取得される。例えば、本実施例では、仮想カメラの位置を基準としたワールド座標系であるＸＹＺ軸座標を設定し、当該ＸＹＺ軸座標に基づいて第１のオブジェクトＯＢＪ１の位置座標Ｐ１（Ａｘ、Ａｙ、Ａｚ）が取得される。ここで、仮想カメラの位置を基準としたＸＹＺ軸座標は、当該仮想カメラの視点位置を原点として、当該仮想カメラの初期位置における当該仮想カメラの視線方向となる水平方向をＺ軸正方向とし、当該仮想カメラの初期位置における当該仮想カメラの右水平方向をＸ軸正方向とし、当該仮想カメラの初期位置における当該仮想カメラの直上方向をＹ軸正方向とする。そして、ＸＹＺ軸座標系における第１のオブジェクトＯＢＪ１における基準（例えば、重心）の位置座標が、第１のオブジェクトＯＢＪ１の位置座標Ｐ１（Ａｘ、Ａｙ、Ａｚ）として取得される。
【０１０１】
第１のオブジェクトＯＢＪ１の位置座標Ｐ１（Ａｘ、Ａｙ、Ａｚ）に基づいて、直方体形状の移動可能面ＭＳが定義され、第１のオブジェクトＯＢＪ１が移動可能面ＭＳに沿ってユーザ操作に応じて移動可能となる。一例として、第１のオブジェクトＯＢＪ１の位置座標Ｐ１（Ａｘ、Ａｙ、Ａｚ）のうち、ＡｘとＡｚの絶対値の大きい方をＡＬとする。そして、第１の例として、２次元座標系における原点と点（ＡＬ、Ａｙ）とを結ぶ線分と横軸（水平方向軸）との角度が第１の角度（例えば、６０°）以上の場合は、操作対象の第１のオブジェクトＯＢＪ１が直方体形状である移動可能面ＭＳの上面（Ｙ軸正方向側に形成される面）に配置されているとして、当該移動可能面ＭＳを設定する。第２の例として、２次元座標系における原点と点（ＡＬ、Ａｙ）とを結ぶ線分と横軸（水平方向軸）との角度が第２の角度（例えば、−６０°）以下の場合は、操作対象の第１のオブジェクトＯＢＪ１が直方体形状である移動可能面ＭＳの下面（Ｙ軸負方向側に形成される面）に配置されているとして、当該移動可能面ＭＳを設定する。第３の例として、上記第１の例および上記第２の例の何れでもない場合（すなわち、２次元座標系における原点と点（ＡＬ、Ａｙ）とを結ぶ線分と横軸（水平方向軸）との角度が第１の角度（例えば、６０°）より小さく第２の角度（例えば、−６０°）より大きい場合）、操作対象の第１のオブジェクトＯＢＪ１が直方体形状である移動可能面ＭＳのＡＬ方向の面（ＡＬが正の値のＡｘの場合はＸ軸正方向側に形成される右側面、ＡＬが負の値のＡｘの場合はＸ軸負方向側に形成される左側面、ＡＬが正の値のＡｚの場合はＺ軸正方向側に形成される前面、ＡＬが負の値のＡｚの場合はＺ軸負方向側に形成される背面）に配置されているとして、当該移動可能面ＭＳを設定する。
【０１０２】
例えば、上記第１の例および上記第２の例の場合、直方体形状である移動可能面ＭＳの上面（Ｙ軸正方向側に形成される面）から下面（Ｙ軸負方向側に形成される面）までの長さを｜Ａｙ｜の２倍に設定して、当該直方体の他の辺の長さを予め設定された辺比率に基づいて決定する。また、上記第３の例の場合、直方体形状である移動可能面ＭＳのＡＬ方向の面から当該面と対向する対面までの長さ（ＡＬがＡｘの場合はＸ軸正方向側に形成される右側面とＸ軸負方向側に形成される左側面との間の長さ、ＡＬがＡｚの場合はＺ軸正方向側に形成される前面とＺ軸負方向側に形成される背面との間の長さ）を｜ＡＬ｜の２倍に設定して、当該直方体の他の辺の長さを予め設定された辺比率に基づいて決定する。
【０１０３】
一例として、図１０に示すように、Ａｘの絶対値よりＡｚの絶対値の大きい方が大きく、Ａｚが正の値であり、第１のオブジェクトＯＢＪ１の位置座標Ｐ１（Ａｘ、Ａｙ、Ａｚ）が上記第３の例に該当する場合、操作対象である第１のオブジェクトＯＢＪ１は、直方体形状である移動可能面ＭＳの前面（Ｚ軸正方向側に形成される面）に配置されているとして、当該移動可能面ＭＳが設定される。例えば、上記直方体の前面は、第１のオブジェクトＯＢＪ１の位置座標Ｐ１（Ａｘ、Ａｙ、Ａｚ）を含むＺ＝Ａｚとなる面となる。そして、上記直方体の背面は、Ｚ＝−Ａｚとなる面となり、当該直方体の前面と背面との間の長さが｜Ａｚ｜の２倍となる。また、上記直方体の右側面がＡｚに予め設定された比率（係数ｓ）を乗算したＸ＝Ａｚ＊ｓとなる面となり、上記直方体の左側面がＸ＝−Ａｚ＊ｓとなる面となり、当該直方体の右側面と左側面との間の長さが｜Ａｚ＊ｓ｜の２倍となる。また、第１のオブジェクトＯＢＪ１の位置座標Ｐ１（Ａｘ、Ａｙ、Ａｚ）が上記第１の例に該当する状態まで移動した場合に上記直方体の上面に配置されるようにするために、当該直方体の上面がＡｚを２倍したＹ＝２Ａｚとなる面となる。また、第１のオブジェクトＯＢＪ１の位置座標Ｐ１（Ａｘ、Ａｙ、Ａｚ）が上記第２の例に該当する状態まで移動した場合に上記直方体の下面に配置されるようにするために、当該直方体の下面がＡｚを２倍した負の値であるＹ＝−２Ａｚとなる面となり、当該直方体の上面と下面との間の長さが｜Ａｚ｜の４倍となる。なお、直方体形状である移動可能面ＭＳは、６つの構成面（前面、背面、左側面、右側面、上面、下面）によって構成され、本実施例では、第１面および第２面の一例として当該構成面のうち隣接して交差する２つの構成面を用いている。
【０１０４】
操作対象の第１のオブジェクトＯＢＪ１は、上述した仮想カメラ周りとなる上下左右に移動させる操作が行われた場合、当該第１のオブジェクトＯＢＪ１の位置に基づいて設定された移動可能面ＭＳに沿って移動する。そして、移動可能面ＭＳが直方体形状に形成されることから明らかなように、移動可能面ＭＳの各構成面は、他の構成面と交差する部分において直交する。したがって、操作対象の第１のオブジェクトＯＢＪ１が移動可能面ＭＳに沿って仮想カメラ周りとなる上下左右に移動する場合、上記構成面が交差する部分を通過することによって、配置方向が９０°異なる面に沿った移動に変化することになる。
【０１０５】
例えば、図１１に示すように、操作対象のオブジェクトＯＢＪの移動が移動可能面ＭＳを形成する直方体の前面に沿ったＸ軸負方向への移動から当該直方体の左側面に沿った移動に移る場合、当該前面に沿ったＸ軸負方向への移動（オブジェクトＯＢＪａとして図示する）から当該左側面に沿ったＺ軸負方向への移動（オブジェクトＯＢＪｂとして図示する）にオブジェクトＯＢＪの移動方向が変化することになる。つまり、操作対象のオブジェクトＯＢＪを仮想空間における左方向へ移動させる操作が行われた場合、仮想カメラから左方向へ離れる前面に沿った移動だけでなく、左側面と交差する部分を通過することによってその移動方向が当該左側面に沿った後方向に変化するため、仮想空間において複数の直線移動を組み合わせながら仮想カメラ周りを周回するような移動が可能となる。
【０１０６】
また、図１２に示すように、操作対象のオブジェクトＯＢＪの移動が移動可能面ＭＳを形成する直方体の前面に沿ったＹ軸正方向への移動から当該直方体の上面に沿った移動に移る場合、当該前面に沿ったＹ軸正方向への移動（オブジェクトＯＢＪｃとして図示する）から当該上面に沿ったＺ軸負方向への移動（オブジェクトＯＢＪｄとして図示する）にオブジェクトＯＢＪの移動方向が変化することになる。つまり、操作対象のオブジェクトＯＢＪを仮想空間における上方向へ移動させる操作が行われた場合、仮想カメラから上方向へ離れる前面に沿った移動だけでなく、上面と交差する部分を通過することによってその移動方向が当該上面に沿った後方向に変化するため、仮想空間において複数の直線移動を組み合わせながら仮想カメラ周りを周回するような移動が可能となる。
【０１０７】
なお、図１１および図１２に例示しているように、操作対象のオブジェクトＯＢＪの移動が他の構成面に移る際、当該オブジェクトＯＢＪの姿勢を変えずに移動方向を変化させる。つまり、仮想空間において移動させるオブジェクトＯＢＪは、移動前の姿勢を変えることなく他の位置へ移動することが可能となる。したがって、仮想カメラから見た操作対象のオブジェクトＯＢＪは、仮想空間内の仮想カメラ周りを周回するように移動する場合、仮想カメラ側から見えるオブジェクトＯＢＪの部分が変化することになる。他の例として、操作対象のオブジェクトＯＢＪの移動が他の構成面に移る際、当該オブジェクトＯＢＪの姿勢を変えながら（例えば、姿勢を回転させながら）移動方向を変化させてもよい。この場合、仮想空間において移動させるオブジェクトＯＢＪは、他の構成面を用いた移動に移る際、姿勢を変えて他の位置へ移動することになる。一例として、操作対象のオブジェクトＯＢＪ自体に設定される移動方向が変わらないように（例えば、オブジェクトＯＢＪが移動する先頭部分が他の構成面に移っても変わらないように）、他の構成面に移る際に当該オブジェクトＯＢＪの姿勢を９０°回転させて移動方向を変化させてもよい。
【０１０８】
操作対象のオブジェクトＯＢＪは、上述した仮想カメラから遠ざけるまたは近づけるように移動させる奥行移動操作が行われた場合、当該奥行移動操作が行われる前のオブジェクトＯＢＪの位置に基づいて設定された移動可能面ＭＳとは異なる移動可能面ＭＳが、当該奥行移動操作によって移動したオブジェクトＯＢＪの位置に基づいて再設定される。そして、上記奥行移動操作後に操作対象のオブジェクトＯＢＪを仮想カメラ周りとなる上下左右に移動させる操作が行われた場合、当該奥行移動操作によって移動したオブジェクトＯＢＪの位置に基づいて再設定された移動可能面ＭＳに沿って移動する。なお、上記奥行移動操作によって再設定される移動可能面ＭＳは、上述と同様に奥行移動後のオブジェクトＯＢＪの位置に基づいた直方体形状に設定される。そして、上記奥行移動操作によって再設定される移動可能面ＭＳは、当該奥行移動操作前に設定されている移動可能面ＭＳの直方体形状各辺の比率を保ったまま、当該奥行移動操作によって変化した操作対象のオブジェクトＯＢＪと仮想カメラとの位置関係（距離）に応じて拡縮する。そして、上記奥行移動操作によって再設定される移動可能面ＭＳの各構成面も、他の構成面と交差する部分において直交する。したがって、上記奥行移動操作後に操作対象のオブジェクトＯＢＪが再設定された移動可能面ＭＳに沿って仮想カメラ周りとなる上下左右に移動する場合、上記構成面が交差する部分を通過することによって、配置方向が９０°異なる面に沿った移動に変化することになる。
【０１０９】
また、移動可能面ＭＳを構成する複数の構成面のうち、操作対象となったオブジェクトＯＢＪが配置されている構成面を、他の構成面とは異なる表示態様で表示してもかまわない。例えば、図１３に示すように、移動可能面ＭＳを構成する複数の構成面のうち、操作対象となったオブジェクトＯＢＪが配置されている構成面が定義されている範囲に可視グリッドＧｍｓ１を表示してもよい。この場合、操作対象となったオブジェクトＯＢＪが配置されている構成面以外の構成面を未表示または可視グリッドとは異なる表示形態で表示することによって、現時点でオブジェクトＯＢＪが移動可能な基準面をユーザに意識させることができる。なお、本実施例では、他の面とは異なる表示態様でオブジェクトＯＢＪが配置されている構成面を表示することの一例として、可視グリッドＧｍｓ１を用いている。
【０１１０】
なお、移動可能面ＭＳは、仮想空間において仮想カメラの姿勢が変化したとしても、仮想空間内において固定して定義される。つまり、移動可能面ＭＳは、仮想空間内における仮想カメラを基準としたオブジェクトＯＢＪの位置に基づいて、ワールド座標系に固定して設定され、定義された移動可能面ＭＳに沿ってオブジェクトＯＢＪが移動している状態では仮想カメラの姿勢が変化しても当該移動可能面ＭＳの位置やサイズが変化することはない。
【０１１１】
また、上述した移動可能面ＭＳは、仮想空間内に複数のオブジェクトＯＢＪが配置されている場合、当該複数のオブジェクトＯＢＪそれぞれに定義される。典型的には、複数のオブジェクトＯＢＪそれぞれに定義される移動可能面ＭＳは、仮想カメラの周辺に異なるサイズで定義される。
【０１１２】
例えば、図１４に示すように、仮想空間内に３つのオブジェクトＯＢＪ１〜ＯＢＪ３が配置されている場合、３つのオブジェクトＯＢＪ１〜ＯＢＪ３の位置に基づいて、３つのオブジェクトＯＢＪ１〜ＯＢＪ３に異なる移動可能面ＭＳ１〜ＭＳ３がそれぞれ定義される。なお、移動可能面ＭＳ１〜ＭＳ３は、何れも上述した直方体形状であり、各辺の比率は同じである。したがって、移動可能面ＭＳ１〜ＭＳ３は、それぞれ仮想カメラを中心とした当該仮想カメラ周辺に定義され、オブジェクトＯＢＪ１〜ＯＢＪ３と仮想カメラとのそれぞれの位置関係（距離）に応じて拡縮した直方体形状となる。したがって、仮想空間内に配置されている複数のオブジェクトＯＢＪそれぞれに定義される移動可能面ＭＳは、仮想カメラを中心に積層するような位置にそれぞれ定義されることになる。なお、上記積層は、最も仮想カメラ側に定義される移動可動面ＭＳに対して平行に、当該仮想カメラから相対的に遠い別の移動可能面ＭＳが当該仮想カメラ周辺を囲うように定義されることを示しており、移動可能面ＭＳにおける各構成面は、仮想カメラから離れた位置に定義される程、相対的に広い面となって定義される。
【０１１３】
なお、上述した奥行移動操作によって移動したオブジェクトＯＢＪの位置に基づいて再設定される移動可能面ＭＳは、当該移動前に設定されていた移動可能面ＭＳに対して積層して配置されることになるが、当該積層状態の移動可能面ＭＳを定義するタイミングは、当該移動前でもよいし当該移動中または当該移動後でもよい。前者の場合、奥行移動操作によって移動可能なオブジェクトＯＢＪの位置に応じて、積層された複数の移動可能面ＭＳを予め定義しておき、奥行移動操作によって移動したオブジェクトＯＢＪの位置に応じて、当該複数の移動可能面ＭＳから選択して再設定することが考えられる。後者の場合、奥行移動操作によって移動する度にオブジェクトＯＢＪの位置に基づいて移動可能面ＭＳを定義し、奥行移動操作が確定したオブジェクトＯＢＪの位置に応じて、その後に用いる移動可能面ＭＳを再設定することが考えられる。
【０１１４】
このように、本実施例では、仮想空間内において、オブジェクトＯＢＪを移動させる場合、交差する部分において所定の角（例えば、９０°）を成す複数の構成面を有する移動可能面ＭＳに沿って移動させることができるため、ユーザが意図するように仮想空間内でオブジェクトＯＢＪを移動させて配置することが可能となる。また、本実施例では、仮想空間に固定された移動可能面ＭＳに沿ってオブジェクトＯＢＪを移動させることができるため、オブジェクトＯＢＪを移動させる際の仮想カメラの動きによる位置ずれ等を防止することができる。また、本実施例では、オブジェクトＯＢＪの移動が他の構成面に沿った移動に移る場合、オブジェクトＯＢＪの移動方向が変わることになるが、移動方向が変わってもオブジェクトＯＢＪの姿勢が変わらないため、オブジェクトＯＢＪの姿勢を変えずに移動する場合に好適となる。さらに、本実施例では、移動の際に用いる構成面によって、仮想空間における上下前後左右方向（すなわち、上下方向となるＹ軸方向、前後方向となるＺ軸方向、および左右方向となるＸ軸方向）の何れかに沿ったオブジェクト移動が可能となるため、仮想空間における上下前後左右方向を基準として整列させたオブジェクト配置が容易となる。また、本実施例では、仮想カメラの周辺に直方体形状の移動可能面が定義されるため、仮想カメラの視界から遠く離れるようなオブジェクト移動を防止して仮想カメラ周辺へのオブジェクト移動に制限する可能であることに加えて、上述したオブジェクトの整列配置を可能にするオブジェクト移動が可能となる。
【０１１５】
なお、上述した説明では、移動可能面ＭＳを複数の平面を組み合わせた直方体形状で構成する例を用いたが、移動可能面ＭＳは、他の立体で構成されてもよい。例えば、移動可能面ＭＳは、他の角柱形状、角錐形状、角錐台形状、正多面体形状等、複数の平面を組み合わせた他の立体形状によって構成されてもよい。この場合、移動可能面ＭＳを構成する構成面同士が交差する部分において形成される角度は、９０°でなくてもよく、鋭角や鈍角であってもよい。また、移動可能面ＭＳを構成する複数の構成面において、隣り合って定義される構成面の間の少なくとも１箇所に空隙が形成されていてもよい。
【０１１６】
また、移動可能面ＭＳを構成する構成面の少なくとも一つは、曲面で構成されてもかまわない。例えば、図１５に示すように、横断面が扇型となった扇柱形状で移動可能面ＭＳを構成してもよい。一例として、移動可能面ＭＳを構成する扇柱形状の内部に仮想カメラが配置されるように移動可能面ＭＳを構成してもよい。この場合、上記扇柱形状の重心となる位置に仮想カメラの視点が配置されるように移動可能面ＭＳを構成してもよいし、上記扇柱形状の重心から扇型の要側に所定長さずれた位置に仮想カメラの視点が配置されるように移動可能面ＭＳを構成してもよい。他の例として、移動可能面ＭＳを構成する扇柱形状における扇型の要となる位置に仮想カメラが配置されるように移動可能面ＭＳを構成してもよい。
【０１１７】
このように、移動可能面ＭＳを構成する構成面の少なくとも一つが曲面で構成される場合であっても、仮想空間に設定された複数のオブジェクトＯＢＪそれぞれに定義される移動可能面ＭＳが異なるサイズで定義されてもよい。例えば、図１５に示すように、仮想空間内に３つのオブジェクトＯＢＪ４〜ＯＢＪ６が配置されている場合、３つのオブジェクトＯＢＪ４〜ＯＢＪ６の位置に基づいて、３つのオブジェクトＯＢＪ４〜ＯＢＪ６に異なる移動可能面ＭＳ４〜ＭＳ６がそれぞれ定義される。なお、移動可能面ＭＳ４〜ＭＳ６は、何れも１つの構成面（図１５の例では、前面）が曲面となった扇柱形状であり、各辺および円弧の比率は同じである。したがって、移動可能面ＭＳ４〜ＭＳ６は、それぞれ仮想カメラ周辺に定義され、オブジェクトＯＢＪ４〜ＯＢＪ６と仮想カメラとのそれぞれの位置関係（距離）に応じて拡縮した扇柱形状となる。したがって、仮想空間内に配置されている複数のオブジェクトＯＢＪそれぞれに定義される移動可能面ＭＳは、仮想カメラ周辺に積層するような位置にそれぞれ定義されることになる。
【０１１８】
また、移動可能面ＭＳは、複数の構成面を有する立体形状で構成されるが、当該構成面の少なくとも１面をオブジェクトが移動できない面として設けてもよいし、当該構成面の一部分にオブジェクトが移動できない部分を設けてもよい。第１の例として、移動可能面ＭＳを構成する複数の構成面のうち、仮想空間の下方に位置する下面（Ｙ軸負方向側に形成される構成面）および／または仮想空間の上方に位置する上面（Ｙ軸正方向側に形成される構成面）をオブジェクトが移動できない面としてもよい。第２の例として、移動可能面ＭＳを構成する複数の構成面のうち、仮想空間の後方に位置する下面（Ｚ軸負方向側に形成される構成面）をオブジェクトが移動できない面としてもよい。第３の例として、移動可能面ＭＳを構成する複数の構成面のうち、仮想空間におけるフィールド面より下方に形成される部分をオブジェクトが移動できない面としてもよい。第４の例として、移動可能面ＭＳを構成する複数の構成面のうち、ディスプレイ１２に表示されない領域（例えば、仮想カメラの死角となって表示されない黒塗りつぶし領域）と重複する部分をオブジェクトが移動できない面としてもよい。
【０１１９】
また、移動可能面ＭＳは、複数の構成面を有していればよく、立体形状でなくてもよい。例えば、移動可能面ＭＳは、仮想カメラから見た仮想空間の前方に形成される前面と左方に形成される左面と右方に形成される右面との３面や、仮想カメラから見た仮想空間の左前方に形成される左斜面と右前方に形成される右斜面との２面によって形成される衝立状で構成されてもよい。
【０１２０】
また、上述した実施例では、仮想カメラの姿勢が変化した場合であっても、仮想空間において移動可能面ＭＳを固定して定義しているが、仮想カメラの動きに応じて移動可能面ＭＳの位置を変化させてもかまわない。一例として、仮想カメラの姿勢変化と連動して同じ回転角度で移動可能面ＭＳの各構成面の方向を回転させるとともに、回転後の仮想カメラと操作対象のオブジェクトとの方向および当該方向への距離に基づいて、移動可能面ＭＳのサイズを再設定してもよい。この場合、移動可能面ＭＳを仮想空間に固定されたワールド座標系に定義するのではなく、仮想カメラの姿勢を基準とした画面座標系におけるオブジェクトの位置座標に基づいて移動可能面ＭＳを定義することが可能となる。他の例として、仮想空間内の所定位置に仮想カメラを固定するのではなく、仮想カメラの配置位置が移動する場合、当該仮想カメラの位置の変化と連動して移動可能面ＭＳを移動させてもよい。この場合、仮想空間における移動可動面ＭＳの位置は、仮想カメラの移動と連動して移動するが、移動可能面ＭＳの各構成面の方向は回転させずに、変化した仮想カメラと操作対象のオブジェクトとの距離に応じて移動可能面ＭＳのサイズを再設定することが考えられる。これらの例のように、仮想カメラの動きに応じて移動可能面ＭＳの位置を変化させることによって、オブジェクトの移動に関し、ユーザの意図を反映させつつ、仮想カメラの姿勢に応じた柔軟な移動が実現可能となる。
【０１２１】
また、上述した実施例は、立体視可能な画像を表示する場合にも適用することができる。例えば、仮想空間を立体視するための互いに示唆のある左目用画像および右目用画像を、ディスプレイ１２の左側領域および右側領域にそれぞれ表示する。そして、本体装置２が装着された場合に、左目用レンズを介して上記左側領域に表示されている左目用画像のみを見ることが可能であり、右目用レンズを介して上記右側領域に表示されている右目用画像のみを見ることが可能となるゴーグル装置を用いて、ディスプレイ１２に表示された左目用画像および右目用画像をユーザが左右の目で見ることによって、立体視可能な仮想空間画像を表示することができる。このように、立体視可能な仮想空間画像をディスプレイ１２に表示する場合であっても、仮想空間に設定されている一対の左目用仮想カメラおよび右目用仮想カメラの組を基準として、同様に移動可能面ＭＳを当該仮想空間内に定義することによって、操作対象となったオブジェクトを移動させる処理を同様に実現することができる。なお、本体装置２をゴーグル装置に装着して立体視可能な画像を見る場合、本体装置２の姿勢に応じて仮想カメラの姿勢を制御してもよいし、ゴーグル装置の姿勢に応じて仮想カメラの姿勢を制御してもよい。本体装置２に設けられた慣性センサ（加速度センサ８９および／または角速度センサ９０）によって検出されたデータを用いれば、本体装置２の姿勢だけでなくゴーグル装置の姿勢の算出も可能であることは言うまでもない。また、表示画面および慣性センサを有するゴーグル装置を用いる場合、上述した立体視可能な仮想空間画像を当該表示画面に表示してもよく、この場合は、当該ゴーグル装置に設けられた慣性センサの検出に基づいて、仮想カメラの姿勢を制御してもよい。
【０１２２】
次に、図１６〜図１８を参照して、本実施形態においてゲームシステム１で実行される具体的な処理の一例について説明する。図１６は、本実施形態において本体装置２のＤＲＡＭ８５に設定されるデータ領域の一例を示す図である。なお、ＤＲＡＭ８５には、図１６に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
【０１２３】
ＤＲＡＭ８５のプログラム記憶領域には、ゲームシステム１で実行される各種プログラムＰａが記憶される。本実施形態においては、各種プログラムＰａは、上述した左コントローラ３および／または右コントローラ４との間で無線通信するための通信プログラムや、左コントローラ３および／または右コントローラ４から取得したデータや本体装置２の姿勢に基づいた情報処理を行うためのアプリケーションプログラム（例えば、仮想空間を生成／編集するエディターやゲームプログラム）等が記憶される。なお、各種プログラムＰａは、フラッシュメモリ８４に予め記憶されていてもよいし、ゲームシステム１に着脱可能な記憶媒体（例えば、スロット２３に装着された所定の種類の記憶媒体）から取得されてＤＲＡＭ８５に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてＤＲＡＭ８５に記憶されてもよい。プロセッサ８１は、ＤＲＡＭ８５に記憶された各種プログラムＰａを実行する。
【０１２４】
また、ＤＲＡＭ８５のデータ記憶領域には、ゲームシステム１において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、ＤＲＡＭ８５には、操作データＤａ、角速度データＤｂ、加速度データＤｃ、姿勢データＤｄ、操作対象データＤｅ、移動フラグデータＤｆ、移動可能面データＤｇ、オブジェクトデータＤｈ、仮想カメラデータＤｉ、および画像データＤｊ等が記憶される。
【０１２５】
操作データＤａは、左コントローラ３および／または右コントローラ４からそれぞれ適宜取得した操作データである。上述したように、左コントローラ３および／または右コントローラ４からそれぞれ送信される操作データには、各入力部（具体的には、各ボタン、アナログスティック、各センサ）からの入力に関する情報（具体的には、操作に関する情報や各センサによる検出結果）が含まれている。本実施形態では、無線通信によって左コントローラ３および／または右コントローラ４からそれぞれ所定周期で操作データが送信されており、当該受信した操作データを用いて操作データＤａが適宜更新される。なお、操作データＤａの更新周期は、後述するゲームシステム１で実行される処理の周期である１フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
【０１２６】
角速度データＤｂは、本体装置２に生じている角速度を示すデータである。例えば、角速度データＤｂは、本体装置２に生じているｘｙｚ軸周りの角速度を示すデータ等を含んでいる。
【０１２７】
加速度データＤｃは、本体装置２に生じている加速度を示すデータである。例えば、加速度データＤｃは、本体装置２に生じているｘｙｚ軸方向の加速度を示すデータ等を含んでいる。
【０１２８】
姿勢データＤｄは、実空間における本体装置２の姿勢と左コントローラ３および／または右コントローラ４の姿勢とを示すデータである。一例として、姿勢データＤｄは、基準姿勢に基づいた本体装置２の姿勢に関するデータと、基準姿勢に基づいた左コントローラ３および／または右コントローラ４の姿勢に関するデータとである。
【０１２９】
操作対象データＤｅは、仮想空間において移動させる操作対象として設定されたオブジェクトを示すデータである。移動フラグデータＤｆは、操作対象が設定されている状態であるか否かを示す移動フラグを示すデータである。移動可能面データＤｇは、操作対象に設定されたオブジェクトに対して設定される移動可能面を示すデータである。
【０１３０】
オブジェクトデータＤｈは、仮想空間に配置されているオブジェクトそれぞれの位置、方向、形状、およびサイズ等を示すデータである。
【０１３１】
仮想カメラデータＤｉは、仮想空間における仮想カメラの位置および方向を示すデータである。
【０１３２】
画像データＤｊは、表示画面（例えば、本体装置２のディスプレイ１２）に画像（例えば、オブジェクトの画像、可視グリッドの画像、フィールド画像、背景画像等）を表示するためのデータである。
【０１３３】
次に、図１７および図１８を参照して、本実施形態における情報処理の詳細な一例を説明する。図１７は、ゲームシステム１で実行される情報処理の一例を示すフローチャートである。図１８は、図１７におけるステップＳ１０６において行われるオブジェクト移動処理の詳細な一例を示すサブルーチンである。本実施形態においては、図１７および図１８に示す一連の処理は、プロセッサ８１が各種プログラムＰａに含まれる通信プログラムや所定のアプリケーションプログラム（エディターやゲームプログラム）を実行することによって行われる。また、図１７および図１８に示す情報処理が開始されるタイミングは任意である。
【０１３４】
なお、図１７および図１８に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて（または代えて）別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をプロセッサ８１が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、プロセッサ８１以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置２において実行される処理の一部は、本体装置２と通信可能な他の情報処理装置（例えば、本体装置２とネットワークを介して通信可能なサーバ）によって実行されてもよい。すなわち、図１７および図１８に示す各処理は、本体装置２を含む複数の情報処理装置が協働することによって実行されてもよい。
【０１３５】
図１７において、プロセッサ８１は、情報処理における初期設定を行い（ステップＳ１０１）、次のステップに処理を進める。例えば、上記初期設定では、プロセッサ８１は、以下に説明する処理を行うためのパラメータを初期化する。例えば、プロセッサ８１は、仮想空間における仮想カメラの位置および姿勢（例えば、視線方向を水平方向とする姿勢）を初期設定し、当該初期設定された位置および姿勢を用いて仮想カメラデータＤｉを更新する。また、プロセッサ８１は、初期設定された仮想カメラの視点を原点とし、仮想カメラの視線方向をＺ軸正方向、当該視線方向に対して垂直な水平方向である仮想カメラの右方向をＸ軸正方向とし、当該視線方向および当該右方向に対して垂直な仮想カメラの直上方向をＹ軸正方向とするＸＹＺ軸座標系を設定する。そして、プロセッサ８１は、ＸＹＺ軸座標系が設定された仮想空間に複数のオブジェクトを配置して仮想空間の初期状態を生成して、オブジェクトそれぞれの位置、方向、形状、およびサイズ等を用いてオブジェクトデータＤｈを更新する。さらに、プロセッサ８１は、実空間における本体装置２と左コントローラ３および／または右コントローラ４との初期姿勢を設定し、姿勢データＤｄを更新する。例えば、プロセッサ８１は、本体装置２のディスプレイ１２の奥行方向が実空間において水平方向となり、本体装置２の下方向（図１に示すｙ軸負方向）が実空間の鉛直方向となる姿勢を、本体装置２の初期姿勢として設定する。また、プロセッサ８１は、左コントローラ３および／または右コントローラ４の長手方向（図１に示すｙ軸正方向）が本体装置２のディスプレイ１２の奥行方向となってディスプレイ１２の中央を指し示している姿勢を、左コントローラ３および／または右コントローラ４の初期姿勢として設定する。なお、配置手段は、複数のオブジェクトを３次元仮想空間のそれぞれの位置に配置する処理を行うものであり、一例としてステップＳ１０１の処理を行うプロセッサ８１に相当する。
【０１３６】
次に、プロセッサ８１は、左コントローラ３および／または右コントローラ４から操作データを取得して操作データＤａを更新し（ステップＳ１０２）、次のステップに処理を進める。
【０１３７】
次に、プロセッサ８１は、本体装置２に設けられている慣性センサ（加速度センサ８９および／または角速度センサ９０）から慣性データ（加速度データおよび／または角速度データ）を取得して、加速度データＤｃおよび／または角速度データＤｂを更新し（ステップＳ１０３）、次のステップに処理を進める。
【０１３８】
次に、プロセッサ８１は、本体装置２と左コントローラ３および／または右コントローラ４との姿勢を算出し（ステップＳ１０４）、次のステップに処理を進める。例えば、プロセッサ８１は、角速度データＤｂに格納されている角速度データを用いて、本体装置２のｘｙｚ軸周りの角速度を取得する。そして、プロセッサ８１は、姿勢データＤｄが示す本体装置２の姿勢におけるｘｙｚ軸を、取得された角速度に応じてそれぞれ回転させて、当該回転後のｘｙｚ軸の方向を用いて姿勢データＤｄにおける本体装置２の姿勢を示すデータを更新する。また、プロセッサ８１は、操作データＤａに格納されている左コントローラ３および／または右コントローラ４の角速度センサ１０５および／または１１５によって検出された角速度データを用いて、左コントローラ３および／または右コントローラ４のｘｙｚ軸周りの角速度を取得する。そして、プロセッサ８１は、姿勢データＤｄが示す左コントローラ３および／または右コントローラ４の姿勢におけるｘｙｚ軸を、取得された角速度に応じてそれぞれ回転させて、当該回転後のｘｙｚ軸の方向を用いて姿勢データＤｄにおける左コントローラ３および／または右コントローラ４の姿勢を示すデータを更新する。なお、姿勢取得手段は、表示装置の姿勢を取得する処理を行うものであり、一例としてステップＳ１０４の処理を行うプロセッサ８１に相当する。
【０１３９】
次に、プロセッサ８１は、仮想カメラを設定し（ステップＳ１０５）、次のステップに処理を進める。例えば、プロセッサ８１は、上記ステップＳ１０４において算出された実空間における本体装置２の姿勢変化と同じように、仮想空間における仮想カメラの姿勢を変化させ、当該変化後の仮想カメラの姿勢を用いて仮想カメラデータＤｉを更新する。なお、仮想カメラの姿勢変化は、本体装置２のｘｙｚ軸周りに生じている角速度に基づいて、仮想カメラの上下左右前後軸をそれぞれ回転させ算出されてもかまわない。なお、仮想カメラ制御手段は、３次元仮想空間の画像を取得する仮想カメラを当該３次元仮想空間内に配置して制御する処理を行うものであり、一例としてステップＳ１０５の処理を行うプロセッサ８１に相当する。
【０１４０】
次に、プロセッサ８１は、左コントローラ３および／または右コントローラ４によって指し示されている指し示し位置を算出し（ステップＳ１０６）、次のステップに処理を進める。例えば、プロセッサ８１は、姿勢データＤｄが示す本体装置２の姿勢と左コントローラ３および／または右コントローラ４の姿勢とを示すデータに基づいて、左コントローラ３および／または右コントローラ４が指し示しているディスプレイ１２上の位置を、指し示し位置として算出する。一例として、プロセッサ８１は、左コントローラ３および／または右コントローラ４の長手方向（図１に示すｙ軸正方向）と本体装置２のディスプレイ１２と交差する位置を指し示し位置として算出するが、ディスプレイ１２の外側の位置が算出されることもあり得る。なお、本実施例では、第１のユーザ入力の一例として、左コントローラ３および／または右コントローラ４によって指し示す操作による指し示し位置を用いている。
【０１４１】
なお、上記指し示し位置は、本体装置２の姿勢のみに基づいて算出してもよいし、左コントローラ３および／または右コントローラ４の姿勢のみに基づいて算出してもよい。例えば、前者の場合、ディスプレイ１２における所定位置（例えば、中央位置）と重なる仮想空間内の位置を上記指し示し位置として設定する。この場合、本体装置２の姿勢を変えることによってディスプレイ１２に表示する仮想空間の範囲を設定する仮想カメラの姿勢を変化させることができるため、結果的に本体装置２の姿勢を変えることによってディスプレイ１２における所定位置と重なる仮想空間内の位置を変化させる、すなわち上記指し示し位置を変化させることができる。また、例えば、後者の場合、実空間において固定された表示装置（例えば、本体装置２）を用いる場合、左コントローラ３および／または右コントローラ４の姿勢のみに基づいて上記指し示し位置を算出することが可能となる。
【０１４２】
次に、プロセッサ８１は、オブジェクト移動処理を行い（ステップＳ１０７）、ステップＳ１０８に処理を進める。以下、図１８を参照して、上記ステップＳ１０７において行われるオブジェクト移動処理について説明する。
【０１４３】
図１８において、プロセッサ８１は、操作対象を決定する操作が行われているか否かを判定する（ステップＳ１１１）。例えば、プロセッサ８１は、操作データＤａを参照して、複数のオブジェクトから操作対象を選択して決定する操作（例えば、右コントローラ４の操作ボタン（Ａボタン）５３の押下を開始する操作や操作ボタン（Ｒボタン）６０の押下を開始する操作）が行われている場合、上記ステップＳ１１１において肯定判定する。そして、プロセッサ８１は、操作対象を決定する操作が行われている場合、ステップＳ１１２に処理を進める。一方、プロセッサ８１は、操作対象を決定する操作が行われていない場合、ステップＳ１１４に処理を進める。
【０１４４】
ステップＳ１１２において、プロセッサ８１は、操作対象を決定する処理を行い、次のステップに処理を進める。例えば、プロセッサ８１は、後述するステップＳ１０８における画像生成表示制御処理においてディスプレイ１２に表示される仮想空間画像に基づいて、上記指し示し位置（標識Ｔが表示される位置）と重畳して表示されているオブジェクトを操作対象として決定し、当該オブジェクトを示すデータを用いて操作対象データＤｅを更新する。なお、プロセッサ８１は、上記指し示し位置（標識Ｔが表示される位置）と重畳するオブジェクトが表示されていない場合、操作対象を未設定として次のステップに処理を進める。
【０１４５】
次に、プロセッサ８１は、移動フラグをオンに設定し、ステップＳ１１４に処理を進める。例えば、プロセッサ８１は、移動フラグをオンに設定して、移動フラグデータＤｆを更新する。なお、上記ステップＳ１１２において、操作対象が無設定である場合、プロセッサ８１は、移動フラグのオフを維持する。
【０１４６】
ステップＳ１１４において、プロセッサ８１は、移動フラグデータＤｆを参照して、移動フラグがオンに設定されているか否かを判定する。そして、プロセッサ８１は、移動フラグがオンに設定されている場合、ステップＳ１１５に処理を進める。一方、プロセッサ８１は、移動フラグがオフに設定されている場合、当該サブルーチンによる処理を終了する。
【０１４７】
ステップＳ１１５において、プロセッサ８１は、移動対象に設定されているオブジェクト位置に基づいて、仮想空間に移動可能面を設定し、次のステップに処理を進める。例えば、プロセッサ８１は、移動対象データＤｅおよびオブジェクトデータＤｈを用いて、移動対象に設定されているオブジェクトのＸＹＺ軸座標系における位置座標を取得し、当該位置座標に基づいて当該オブジェクトを移動させるための移動可能面ＭＳを設定して、移動可能面データＤｇを更新する。なお、移動可能面ＭＳの定義方法については、図９〜図１５等を用いて説明した方法と同様であるため、ここでは詳細な説明を省略する。また、移動可能面定義手段は、３次元仮想空間における第１面および当該第１面と交差する部分において所定の角を成す第２面を少なくとも含む移動可能面を定義する処理を行うものであり、一例としてステップＳ１１５の処理を行うプロセッサ８１に相当する。
【０１４８】
次に、プロセッサ８１は、操作対象であるオブジェクトを上下左右方向に移動させる操作が行われているか否かを判定する（ステップＳ１１６）。例えば、プロセッサ８１は、上記ステップＳ１０６において算出された指し示し位置を上下左右に移動させる操作が行われている場合、上記ステップＳ１１６において肯定判定する。そして、プロセッサ８１は、オブジェクトを上下左右方向に移動させる操作が行われている場合、ステップＳ１１７に処理を進める。一方、プロセッサ８１は、オブジェクトを上下左右方向に移動させる操作が行われていない場合、ステップＳ１１８に処理を進める。なお、本実施例では、第１のユーザ入力の一例として、上下左右方向に移動させる操作を用いている。
【０１４９】
ステップＳ１１７において、プロセッサ８１は、上下左右方向に移動させる操作に応じて、操作対象であるオブジェクトを移動可能面に沿って移動させ、ステップＳ１１８に処理を進める。例えば、プロセッサ８１は、移動可能面データＤｇが示す移動可能面ＭＳの構成面のうち、操作対象であるオブジェクトが配置されている構成面を選択し、上記ステップＳ１０６において算出されている指し示し位置と重畳して表示されている当該構成面内の位置を算出する。そして、プロセッサ８１は、オブジェクト姿勢を維持した状態で上記算出された構成面内の位置に操作対象であるオブジェクトを移動させ、移動後の位置を用いてオブジェクトデータＤｈを更新する。なお、プロセッサ８１は、上記指し示し位置と重畳する位置が操作対象であるオブジェクトが配置されている構成面と隣接する別の構成面となる場合、当該指し示し位置と重畳して表示されている当該別の構成面内の位置を、当該オブジェクトの移動先の位置として算出する。また、プロセッサ８１は、上記指し示し位置がディスプレイ１２の外側となる場合、当該指し示し位置と操作対象のオブジェクトの位置（重心位置）またはディスプレイ１２の中心とを結ぶ直線がディスプレイ１２の外縁と交差する当該指し示し位置側の位置を、オブジェクト移動先を算出するための指示位置として、当該指示位置を用いてオブジェクトの移動先の位置を算出してもよい。なお、移動手段は、第１のユーザ入力に基づいて、オブジェクトに定義された移動可能面に沿って当該オブジェクトを移動させる処理を行うものであり、一例としてステップＳ１１７の処理を行うプロセッサ８１に相当する。
【０１５０】
ステップＳ１１８において、操作対象であるオブジェクトを奥行移動させる操作が行われているか否かを判定する。例えば、プロセッサ８１は、操作データＤａを参照して、仮想カメラから遠ざけるまたは近づけるように操作対象を移動させる操作（例えば、右コントローラ４のスティック５２を前後に傾倒させる操作）が行われている場合、上記ステップＳ１１８において肯定判定する。そして、プロセッサ８１は、オブジェクトを奥行方向に移動させる操作が行われている場合、ステップＳ１１９に処理を進める。一方、プロセッサ８１は、オブジェクトを奥行方向に移動させる操作が行われていない場合、ステップＳ１２０に処理を進める。なお、本実施例では、第２のユーザ入力の一例として、奥行移動させる操作を用いている。
【０１５１】
ステップＳ１１９において、プロセッサ８１は、奥行方向に移動させる操作に応じて、操作対象であるオブジェクトを仮想カメラから遠ざけるまたは近づけるように移動させ、ステップＳ１２０に処理を進める。例えば、プロセッサ８１は、操作データＤａが右コントローラ４のスティック５２を前に傾倒させる操作が行われていることを示している場合、当該傾倒角度に応じた移動距離だけ仮想カメラから遠ざける位置に操作対象であるオブジェクトを移動させ、移動後の位置を用いてオブジェクトデータＤｈを更新する。また、プロセッサ８１は、操作データＤａが右コントローラ４のスティック５２を後ろに傾倒させる操作が行われていることを示している場合、当該傾倒角度に応じた移動距離だけ仮想カメラに近づける位置に操作対象であるオブジェクトを移動させ、移動後の位置を用いてオブジェクトデータＤｈを更新する。
【０１５２】
ステップＳ１２０において、プロセッサ８１は、操作対象を解除する操作が行われているか否かを判定する。例えば、プロセッサ８１は、操作データＤａを参照して、操作対象を解除する操作（例えば、右コントローラ４の操作ボタン（Ａボタン）５３の押下を終了させる操作や操作ボタン（Ｒボタン）６０の押下を終了させる操作）が行われている場合、上記ステップＳ１２０において肯定判定する。そして、プロセッサ８１は、操作対象を解除する操作が行われている場合、ステップＳ１２１に処理を進める。一方、プロセッサ８１は、操作対象を解除する操作が行われていない場合、当該サブルーチンによる処理を終了する。
【０１５３】
ステップＳ１２１において、プロセッサ８１は、操作対象を解除する処理を行い、次のステップに処理を進める。例えば、プロセッサ８１は、操作対象として設定されているオブジェクトの操作対象指定を解除するために、操作対象が設定されていないことを示すデータ（例えば、ヌル（ｎｕｌｌ））を用いて操作対象データＤｅを更新する。
【０１５４】
次に、プロセッサ８１は、移動フラグをオフに設定し、当該サブルーチンによる処理を終了する。例えば、プロセッサ８１は、移動フラグをオフに設定して、移動フラグデータＤｆを更新する。
【０１５５】
図１７に戻り、上記ステップＳ１０７のオブジェクト移動処理の後、プロセッサ８１は、画像生成表示制御処理を行い（ステップＳ１０８）、次のステップに処理を進める。例えば、プロセッサ８１は、オブジェクトデータＤｈに基づいて、仮想空間に複数のオブジェクトを配置して、仮想空間を生成する。また、プロセッサ８１は、移動フラグデータＤｆが示す移動フラグがオンに設定されている場合（オブジェクトを移動させる処理が行われている場合）、操作対象データＤｅおよび移動可能面データＤｇを参照して、上記仮想空間に定義されている移動可能面ＭＳの構成面のうち、操作対象のオブジェクトが配置されている構成面に可視グリッドＧｍｓ１を配置する。また、プロセッサ８１は、移動フラグデータＤｆが示す移動フラグがオフに設定されている場合（オブジェクトを移動させる処理が行われていない場合）、上記ステップＳ１０６において算出されている指し示し位置に標識Ｔを配置する。そして、プロセッサ８１は、仮想カメラデータＤｉに基づいて、仮想空間に仮想カメラを配置し、当該仮想カメラから見た仮想空間画像を取得して、ディスプレイ１２に表示する。なお、標識Ｔは、複数のオブジェクト等が配置されている仮想空間を仮想カメラから見た仮想空間画像に重畳して合成されてもよい。
【０１５６】
次に、プロセッサ８１は、処理を終了するか否かを判定する（ステップＳ１０９）。上記ステップＳ１０９において処理を終了する条件としては、例えば、処理が終了される条件が満たされたことや、ユーザが処理を終了する操作を行ったこと等がある。プロセッサ８１は、処理を終了しない場合に上記ステップＳ１０２に戻って処理を繰り返し、処理を終了する場合に当該フローチャートによる処理を終了する。以降、ステップＳ１０２〜ステップＳ１０９の一連の処理は、ステップＳ１０９で処理を終了すると判定されるまで繰り返し実行される。
【０１５７】
このように、本実施例においては、仮想空間において、オブジェクトを上下左右に移動させる場合、交差する部分において所定の角（例えば、９０°）を成す複数の構成面を有する移動可能面に沿って移動させることができるため、ユーザが意図からずれた位置に移動すること等を防止することができ、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することが可能となる。
【０１５８】
なお、上述した実施例において、本体装置２、左コントローラ３、および右コントローラ４の姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて本体装置２、左コントローラ３、および右コントローラ４の姿勢を検出してもよい。また、オブジェクトを移動させる操作を行うコントローラは、左コントローラ３または右コントローラ４だけでなく、他のコントローラでもよい。
【０１５９】
また、ゲームシステム１は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器（ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、携帯電話、パーソナルコンピュータ、カメラ、タブレット等）等であってもよい。この場合、オブジェクトを移動する操作を行うための入力装置は、左コントローラ３や右コントローラ４でなくてもよく、別のコントローラ、マウス、タッチパッド、タッチパネル、トラックボール、キーボード、十字キー、スライドパッド等であってもよい。
【０１６０】
また、上述した説明では情報処理をゲームシステム１でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、ゲームシステム１がさらに他の装置（例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末）と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理は、少なくとも１つの情報処理装置により構成される情報処理システムに含まれる１つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、ゲームシステム１のプロセッサ８１が所定のプログラムを実行することによって情報処理を行うことが可能であるが、ゲームシステム１が備える専用回路によって上記処理の一部または全部が行われてもよい。
【０１６１】
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置（据置型のゲーム装置）と携帯型の情報処理装置（携帯型のゲーム装置）との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
【０１６２】
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
【０１６３】
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じてゲームシステム１に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、ＣＤ−ＲＯＭ、ＤＶＤ、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
【０１６４】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書（定義を含めて）が優先する。
【産業上の利用可能性】
【０１６５】
以上のように、本発明は、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置すること等を可能とする情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法等として利用することができる。
【符号の説明】
【０１６６】
１…情報処理システム
２…本体装置
３…左コントローラ
４…右コントローラ
１１…ハウジング
１２…ディスプレイ
１７…左側端子
２１…右側端子
２７…下側端子
２９…照度センサ
３２、５２…アナログスティック
４２、６４…端子
８１…プロセッサ
８２…ネットワーク通信部
８３…コントローラ通信部
８５…ＤＲＡＭ
１０１、１１１…通信制御部
８９、１０４、１１４…加速度センサ
９０、１０５、１１５…角速度センサ
【図１】
2020140618.tif 000003
【図２】
2020140618.tif 000004
【図３】
2020140618.tif 000005
【図４】
2020140618.tif 000006
【図５】
2020140618.tif 000007
【図６】
2020140618.tif 000008
【図７】
2020140618.tif 000009
【図８】
2020140618.tif 000010
【図９】
2020140618.tif 000011
【図１０】
2020140618.tif 000012
【図１１】
2020140618.tif 000013
【図１２】
2020140618.tif 000014
【図１３】
2020140618.tif 000015
【図１４】
2020140618.tif 000016
【図１５】
2020140618.tif 000017
【図１６】
2020140618.tif 000018
【図１７】
2020140618.tif 000019
【図１８】
2020140618.tif 000020