(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-13
(45)【発行日】2023-04-21
(54)【発明の名称】情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法
(51)【国際特許分類】
G06F 3/04815 20220101AFI20230414BHJP
A63F 13/25 20140101ALI20230414BHJP
A63F 13/428 20140101ALI20230414BHJP
A63F 13/52 20140101ALI20230414BHJP
A63F 13/55 20140101ALI20230414BHJP
G06F 3/01 20060101ALI20230414BHJP
G06F 3/0484 20220101ALI20230414BHJP
G06T 19/00 20110101ALI20230414BHJP
G09G 5/00 20060101ALI20230414BHJP
【FI】
G06F3/04815
A63F13/25
A63F13/428
A63F13/52
A63F13/55
G06F3/01 510
G06F3/0484
G06T19/00 A
G09G5/00 510G
G09G5/00 510H
G09G5/00 550C
(21)【出願番号】P 2019037455
(22)【出願日】2019-03-01
【審査請求日】2022-01-27
(73)【特許権者】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】100158780
【氏名又は名称】寺本 亮
(74)【代理人】
【識別番号】100121359
【氏名又は名称】小沢 昌弘
(74)【代理人】
【識別番号】100130269
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】岩田 健志
(72)【発明者】
【氏名】小倉 佑太
【審査官】滝谷 亮一
(56)【参考文献】
【文献】米国特許出願公開第2005/0285339(US,A1)
【文献】特開2018-010473(JP,A)
【文献】米国特許出願公開第2015/0332508(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/04815
A63F 13/25
A63F 13/428
A63F 13/52
A63F 13/55
G06F 3/01
G06F 3/0484
G06T 19/00
G09G 5/00
(57)【特許請求の範囲】
【請求項1】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
複数のオブジェクトを、前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段と
、
前記3次元仮想空間の画像を取得する仮想カメラを当該3次元仮想空間内に配置して制御する仮想カメラ制御手段として機能させ
、
前記移動可能面定義手段は、前記3次元仮想空間における前記仮想カメラの周囲に前記移動可能面を定義する、情報処理プログラム。
【請求項2】
前記移動可能面定義手段は、前記移動可能面を、前記オブジェクトの位置に基づいて定義する、請求項
1に記載の情報処理プログラム。
【請求項3】
前記移動可能面定義手段は、前記3次元仮想空間において前記仮想カメラの姿勢が変更された場合であっても、前記移動可能面の位置を固定して定義する、請求項
1に記載の情報処理プログラム。
【請求項4】
前記移動可能面定義手段は、積層して配置される複数の移動可能面を定義し、
前記移動手段は、第2のユーザ入力に基づいて、前記オブジェクトの位置が含まれる当該オブジェクトの移動可能面から、当該移動可能面とは別の移動可能面へ当該オブジェクトを移動させる、請求項1乃至
3の何れか1つに記載の情報処理プログラム。
【請求項5】
前記移動手段は、第2のユーザ入力に基づいて、前記オブジェクトに対応付けて定義された前記移動可能面以外の位置に当該オブジェクトを移動させ、
前記移動可能面定義手段は、前記第2のユーザ入力に基づいて前記オブジェクトが移動した場合、当該変更された後の当該オブジェクトの位置に基づいて、当該オブジェクトの移動可能面を定義する、請求項1乃至
3の何れか1つに記載の情報処理プログラム。
【請求項6】
前記移動手段は、前記第1面と前記第2面とで、当該第1面と当該第2面が交差する位置を経て相互に前記オブジェクトを移動させる、請求項1乃至
5の何れか1つに記載の情報処理プログラム。
【請求項7】
前記移動手段は、前記オブジェクトが前記第1面に沿った移動から前記第2面に沿った移動に移る場合、前記3次元仮想空間において当該オブジェクトの姿勢を保持しながら当該オブジェクトを移動させる、請求項1乃至
6の何れか1つに記載の情報処理プログラム。
【請求項8】
ユーザの目を少なくとも覆う位置に装着され、前記仮想カメラから見た前記3次元仮想空間の画像を当該ユーザが視認可能に表示する表示画面を有するゴーグル装置の姿勢を取得する姿勢取得手段として、さらに前記コンピュータを機能させ、
前記仮想カメラ制御手段は、前記ゴーグル装置の姿勢に基づいて前記仮想カメラを制御する、請求項
1または
3に記載の情報処理プログラム。
【請求項9】
前記仮想カメラから見た前記3次元仮想空間の画像を表示装置に表示する表示制御手段と、
前記表示装置の姿勢を取得する姿勢取得手段として、さらに前記コンピュータを機能させ、
前記仮想カメラ制御手段は、前記表示装置の姿勢に基づいて前記仮想カメラを制御する、請求項
1または
3に記載の情報処理プログラム。
【請求項10】
前記移動手段は、前記第1のユーザ入力に含まれる角速度に基づいて、前記オブジェクトを移動させる、請求項1乃至
9の何れか1つに記載の情報処理プログラム。
【請求項11】
前記第1面および前記第2面は、それぞれ平面である、請求項1乃至1
0の何れか1つに記載の情報処理プログラム。
【請求項12】
前記第1面および前記第2面は、前記交差する部分において直角で交差する、請求項1乃至1
1の何れか1つに記載の情報処理プログラム。
【請求項13】
前記移動可能面を構成する複数の面のうち、前記第1のユーザ入力に基づいて移動させる前記オブジェクトの位置が含まれる面を他の面とは異なる表示態様で表示する、請求項1乃至1
2の何れか1つに記載の情報処理プログラム。
【請求項14】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
複数のオブジェクトを、前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段として機能させ、
前記移動可能面定義手段は、積層して配置される複数の移動可能面を定義し、
前記移動手段は、第2のユーザ入力に基づいて、前記オブジェクトの位置が含まれる当該オブジェクトの移動可能面から、当該移動可能面とは別の移動可能面へ当該オブジェクトを移動させる、情報処理プログラム。
【請求項15】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
複数のオブジェクトを、前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段として機能させ、
前記移動手段は、第2のユーザ入力に基づいて、前記オブジェクトに対応付けて定義された前記移動可能面以外の位置に当該オブジェクトを移動させ、
前記移動可能面定義手段は、前記第2のユーザ入力に基づいて前記オブジェクトが移動した場合、当該変更された後の当該オブジェクトの位置に基づいて、当該オブジェクトの移動可能面を定義する、情報処理プログラム。
【請求項16】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
複数のオブジェクトを、前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段として機能させ、
前記移動手段は、前記オブジェクトが前記第1面に沿った移動から前記第2面に沿った移動に移る場合、前記3次元仮想空間において当該オブジェクトの姿勢を保持しながら当該オブジェクトを移動させる、情報処理プログラム。
【請求項17】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置であって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段と
、
前記3次元仮想空間の画像を取得する仮想カメラを当該3次元仮想空間内に配置して制御する仮想カメラ制御手段とを備え
、
前記移動可能面定義手段は、前記3次元仮想空間における前記仮想カメラの周囲に前記移動可能面を定義する、情報処理装置。
【請求項18】
前記情報処理装置は、操作装置と通信可能であり、
前記操作装置は、当該操作装置に生じる角速度を検出するジャイロセンサを備え、
前記移動手段は、前記ジャイロセンサによって検出された角速度を前記第1のユーザ入力として、前記オブジェクトを移動させる、請求項1
7に記載の情報処理装置。
【請求項19】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置であって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段とを備え、
前記移動可能面定義手段は、積層して配置される複数の移動可能面を定義し、
前記移動手段は、第2のユーザ入力に基づいて、前記オブジェクトの位置が含まれる当該オブジェクトの移動可能面から、当該移動可能面とは別の移動可能面へ当該オブジェクトを移動させる、情報処理装置。
【請求項20】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置であって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段とを備え、
前記移動手段は、第2のユーザ入力に基づいて、前記オブジェクトに対応付けて定義された前記移動可能面以外の位置に当該オブジェクトを移動させ、
前記移動可能面定義手段は、前記第2のユーザ入力に基づいて前記オブジェクトが移動した場合、当該変更された後の当該オブジェクトの位置に基づいて、当該オブジェクトの移動可能面を定義する、情報処理装置。
【請求項21】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置であって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段とを備え、
前記移動手段は、前記オブジェクトが前記第1面に沿った移動から前記第2面に沿った移動に移る場合、前記3次元仮想空間において当該オブジェクトの姿勢を保持しながら当該オブジェクトを移動させる、情報処理装置。
【請求項22】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理システムであって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段と
、
前記3次元仮想空間の画像を取得する仮想カメラを当該3次元仮想空間内に配置して制御する仮想カメラ制御手段とを備え
、
前記移動可能面定義手段は、前記3次元仮想空間における前記仮想カメラの周囲に前記移動可能面を定義する、情報処理システム。
【請求項23】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理システムであって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段とを備え、
前記移動可能面定義手段は、積層して配置される複数の移動可能面を定義し、
前記移動手段は、第2のユーザ入力に基づいて、前記オブジェクトの位置が含まれる当該オブジェクトの移動可能面から、当該移動可能面とは別の移動可能面へ当該オブジェクトを移動させる、情報処理システム。
【請求項24】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理システムであって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段とを備え、
前記移動手段は、第2のユーザ入力に基づいて、前記オブジェクトに対応付けて定義された前記移動可能面以外の位置に当該オブジェクトを移動させ、
前記移動可能面定義手段は、前記第2のユーザ入力に基づいて前記オブジェクトが移動した場合、当該変更された後の当該オブジェクトの位置に基づいて、当該オブジェクトの移動可能面を定義する、情報処理システム。
【請求項25】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理システムであって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置手段と、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義手段と、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動手段とを備え、
前記移動手段は、前記オブジェクトが前記第1面に沿った移動から前記第2面に沿った移動に移る場合、前記3次元仮想空間において当該オブジェクトの姿勢を保持しながら当該オブジェクトを移動させる、情報処理システム。
【請求項26】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理方法であって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置ステップと、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義ステップと、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動ステップと
、
前記3次元仮想空間の画像を取得する仮想カメラを当該3次元仮想空間内に配置して制御する仮想カメラ制御ステップとを含
み、
前記移動可能面定義ステップでは、前記3次元仮想空間における前記仮想カメラの周囲に前記移動可能面が定義される、情報処理方法。
【請求項27】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理方法であって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置ステップと、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義ステップと、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動ステップとを含み、
前記移動可能面定義ステップでは、積層して配置される複数の移動可能面が定義され、
前記移動ステップでは、第2のユーザ入力に基づいて、前記オブジェクトの位置が含まれる当該オブジェクトの移動可能面から、当該移動可能面とは別の移動可能面へ当該オブジェクトを移動させる、情報処理方法。
【請求項28】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理方法であって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置ステップと、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義ステップと、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動ステップとを含み、
前記移動ステップでは、第2のユーザ入力に基づいて、前記オブジェクトに対応付けて定義された前記移動可能面以外の位置に当該オブジェクトを移動させ、
前記移動可能面定義ステップでは、前記第2のユーザ入力に基づいて前記オブジェクトが移動した場合、当該変更された後の当該オブジェクトの位置に基づいて、当該オブジェクトの移動可能面が定義される、情報処理方法。
【請求項29】
3次元仮想空間内においてオブジェクトを配置または移動させる情報処理方法であって、
複数のオブジェクトを前記3次元仮想空間のそれぞれの位置に配置する配置ステップと、
前記3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、前記複数のオブジェクトそれぞれに定義する移動可能面定義ステップと、
第1のユーザ入力に基づいて、前記オブジェクトに定義された前記移動可能面に沿って当該オブジェクトを移動させる移動ステップとを含み、
前記移動ステップでは、前記オブジェクトが前記第1面に沿った移動から前記第2面に沿った移動に移る場合、前記3次元仮想空間において当該オブジェクトの姿勢を保持しながら当該オブジェクトを移動させる、情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想空間内でオブジェクトを移動させる処理を行う情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法に関する。
【背景技術】
【0002】
従来、ユーザの操作に応じて、仮想空間内でオブジェクトを移動させる表示装置がある(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記特許文献1で開示された表示装置では、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することに関して、改良の余地がある。
【0005】
それ故に、本発明の目的は、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することを可能とする情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法を提供することである。
【課題を解決するための手段】
【0006】
上記目的を達成するために、本発明は例えば以下のような構成を採用し得る。なお、特許請求の範囲の記載を解釈する際に、特許請求の範囲の記載によってのみその範囲が解釈されるべきであることが理解され、特許請求の範囲の記載と本欄の記載とが矛盾する場合には、特許請求の範囲の記載が優先する。
【0007】
本発明の情報処理プログラムの一構成例は、3次元仮想空間内においてオブジェクトを配置または移動させる情報処理装置のコンピュータで実行される。情報処理プログラムは、配置手段、移動可能面定義手段、および移動手段として、コンピュータを機能させる。配置手段は、複数のオブジェクトを3次元仮想空間のそれぞれの位置に配置する。移動可能面定義手段は、3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を、複数のオブジェクトそれぞれに定義する。移動手段は、第1のユーザ入力に基づいて、オブジェクトに定義された移動可能面に沿って当該オブジェクトを移動させる。
【0008】
上記によれば、仮想空間内において、オブジェクトを移動させる場合、交差する部分において所定の角を成す複数の構成面を有する移動可能面に沿って移動させることができるため、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することが可能となる。
【0009】
また、上記情報処理プログラムは、仮想カメラ制御手段として、さらにコンピュータを機能させてもよい。仮想カメラ制御手段は、3次元仮想空間の画像を取得する仮想カメラを当該3次元仮想空間内に配置して制御する。この場合、上記移動可能面定義手段は、3次元仮想空間における仮想カメラの周囲に移動可能面を定義してもよい。
【0010】
上記によれば、仮想カメラの周辺に移動可能面が定義されるため、視点の周辺にオブジェクトを移動させて配置することが可能となる。
【0011】
また、上記移動可能面定義手段は、移動可能面を、オブジェクトの位置に基づいて定義してもよい。
【0012】
上記によれば、オブジェクトの位置に基づいて移動可能面が定義されるため、オブジェクト位置に応じた適切な移動可能面を設定することができる。
【0013】
また、上記移動可能面定義手段は、3次元仮想空間において仮想カメラの姿勢が変更された場合であっても、移動可能面の位置を固定して定義してもよい。
【0014】
上記によれば、仮想空間に固定された移動可能面に沿ってオブジェクトを移動させることができるため、仮想カメラの動きに応じた位置ずれ等を防止することができる。
【0015】
また、上記移動可能面定義手段は、積層して配置される複数の移動可能面を定義してもよい。上記移動手段は、第2のユーザ入力に基づいて、オブジェクトの位置が含まれる当該オブジェクトの移動可能面から、当該移動可能面とは別の移動可能面へ当該オブジェクトを移動させてもよい。
【0016】
上記によれば、他の移動可能面を用いてオブジェクトを移動させることも可能となるため、多様なオブジェクト移動が可能となる。
【0017】
また、上記移動手段は、第2のユーザ入力に基づいて、オブジェクトに対応付けて定義された移動可能面以外の位置に当該オブジェクトを移動させてもよい。上記移動可能面定義手段は、第2のユーザ入力に基づいてオブジェクトが移動した場合、当該変更された後の当該オブジェクトの位置に基づいて、当該オブジェクトの移動可能面を定義してもよい。
【0018】
上記によれば、新たに定義される移動可能面を用いてオブジェクトを移動させることも可能となるため、多様なオブジェクト移動が可能となる。
【0019】
また、上記移動手段は、第1面と第2面とで、当該第1面と当該第2面が交差する位置を経て相互にオブジェクトを移動させてもよい。
【0020】
上記によれば、操作方法を変えなくても、他の面に沿ったオブジェクト移動に切り替えることが可能となる。
【0021】
また、上記移動手段は、オブジェクトが第1面に沿った移動から第2面に沿った移動に移る場合、3次元仮想空間において当該オブジェクトの姿勢を保持しながら当該オブジェクトを移動させてもよい。
【0022】
上記によれば、オブジェクトの移動方向が変わった場合であっても、オブジェクトの姿勢が変わらないため、オブジェクトの姿勢を変えずに移動する場合に好適となる。
【0023】
また、上記情報処理プログラムは、姿勢取得手段として、さらにコンピュータを機能させてもよい。姿勢取得手段は、ユーザの目を少なくとも覆う位置に装着され、仮想カメラから見た3次元仮想空間の画像を当該ユーザが視認可能に表示する表示画面を有するゴーグル装置の姿勢を取得する。この場合、上記仮想カメラ制御手段は、ゴーグル装置の姿勢に基づいて仮想カメラを制御してもよい。
【0024】
上記によれば、ゴーグル装置を装着して表示画面を視認するユーザに立体視可能な画像を提供することができ、当該ゴーグルを装着したユーザの動きに応じて表示領域を変化させることができる。
【0025】
また、上記情報処理プログラムは、表示制御手段および姿勢取得手段として、さらにコンピュータを機能させてもよい。表示制御手段は、仮想カメラから見た3次元仮想空間の画像を表示装置に表示する。姿勢取得手段は、表示装置の姿勢を取得する。この場合、上記仮想カメラ制御手段は、表示装置の姿勢に基づいて仮想カメラを制御してもよい。
【0026】
上記によれば、仮想空間画像を表示する表示装置の姿勢に応じて表示範囲を変化させることができるため、表示装置を介して仮想空間を覗いているようなリアリティある画像を提供することができる。
【0027】
また、上記移動手段は、第1のユーザ入力に含まれる角速度に基づいて、オブジェクトを移動させてもよい。
【0028】
上記によれば、角速度に基づいてオブジェクトを動かすような操作が可能となる。
【0029】
また、上記第1面および第2面は、それぞれ平面でもよい。
【0030】
上記によれば、オブジェクトを角度の異なる平面に沿って移動することが可能となる。
【0031】
また、上記第1面および第2面は、交差する部分において直角で交差してもよい。
【0032】
上記によれば、仮想空間における前後左右方向を基準として整列した配置が容易となる。
【0033】
また、上記移動可能面を構成する複数の面のうち、第1のユーザ入力に基づいて移動させるオブジェクトの位置が含まれる面を他の面とは異なる表示態様で表示してもよい。
【0034】
上記によれば、移動させているオブジェクトの移動基準を容易に把握することができる。
【0035】
また、本発明は、情報処理装置、情報処理システム、および情報処理方法の形態で実施されてもよい。
【0036】
また、上記情報処理装置は、操作装置と通信可能でもよい。上記操作装置は、当該操作装置に生じる角速度を検出するジャイロセンサを備えてもよい。この場合、上記移動手段は、ジャイロセンサによって検出された角速度を第1のユーザ入力として、オブジェクトを移動させてもよい。
【0037】
上記によれば、操作装置を動かした位置にオブジェクトを動かすような操作が可能となる。
【発明の効果】
【0038】
本発明によれば、仮想空間内において、オブジェクトを移動させる場合、交差する部分において所定の角を成す複数の構成面を有する移動可能面に沿って移動させることができるため、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することが可能となる。
【図面の簡単な説明】
【0039】
【
図1】本実施形態におけるゲームシステム1の一例において、本体装置2に左コントローラ3および右コントローラ4を装着した状態を示す図
【
図2】本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図
【
図6】本体装置2の内部構成の一例を示すブロック図
【
図7】ゲームシステム1の内部構成の一例を示すブロック図
【
図8】左コントローラ3および右コントローラ4を本体装置2から取り外した状態において、1人のユーザが本体装置2と右コントローラ4とを操作してゲームシステム1を利用する様子の一例を示す図
【
図9】操作対象に選択された第1のオブジェクトOBJ1におけるワールド座標位置の例を示す図
【
図10】操作対象に選択された第1のオブジェクトOBJ1に対して設定される直方体形状の移動可能面MSの例を示す図
【
図11】移動可能面MSに沿って第1のオブジェクトOBJ1が移動する一例を上面側から見た図
【
図12】移動可能面MSに沿って第1のオブジェクトOBJ1が移動する他の例を右側面側から見た図
【
図13】移動可能面MSの一部の構成面を可視グリッドGms1で表示する一例を示す
【
図14】複数のオブジェクトOBJ1~OBJ3毎にそれぞれ設定される移動可能面MS1~MS3の一例を示す図
【
図15】複数のオブジェクトOBJ4~OBJ6毎にそれぞれ設定される移動可能面MS4~MS6の他の例を示す図
【
図16】本実施形態において本体装置2のDRAM85に設定されるデータ領域の一例を示す図
【
図17】ゲームシステム1で実行される情報処理の一例を示すフローチャート
【
図18】
図17におけるステップS106において行われるオブジェクト移動処理の詳細な一例を示すサブルーチン
【発明を実施するための形態】
【0040】
以下、本実施形態の一例に係る情報処理システムについて説明する。本実施形態における情報処理システムは、一例としてゲームシステム1を用いており、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と、操作装置の一例として左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(
図2参照)。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
【0041】
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
【0042】
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。
図1および
図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0043】
図3は、本体装置2の一例を示す六面図である。
図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
【0044】
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
【0045】
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
【0046】
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
【0047】
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、
図6に示すスピーカ88)を備えている。
図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
【0048】
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
【0049】
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
【0050】
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
【0051】
本体装置2は、照度センサ29を備える。本実施例においては、照度センサ29は、ハウジング11の主面下部に設けられ、ハウジング11の主面側から入射する光の照度(明るさ)を検出する。なお、照度センサ29によって検出された光の照度に応じて、ディスプレイ12を適切な明るさにして画像を表示することができるが、本実施例においては当該検出された照度に基づいて、本体装置2が後述するゴーグル装置に装着されているか否かを判定することが可能となる。
【0052】
図4は、左コントローラ3の一例を示す六面図である。
図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、
図1および
図4に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0053】
左コントローラ3は、アナログスティック32を備える。
図4に示すように、アナログスティック32は、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
【0054】
左コントローラ3は、各種操作ボタンを備える。左コントローラ3は、ハウジング31の主面上に4つの操作ボタン33~36(具体的には、右方向ボタン33、下方向ボタン34、上方向ボタン35、および左方向ボタン36)を備える。さらに、左コントローラ3は、録画ボタン37および-(マイナス)ボタン47を備える。左コントローラ3は、ハウジング31の側面の左上に第1Lボタン38およびZLボタン39を備える。また、左コントローラ3は、ハウジング31の側面の、本体装置2に装着される際に装着される側の面に第2Lボタン43および第2Rボタン44を備える。これらの操作ボタンは、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
【0055】
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
【0056】
図5は、右コントローラ4の一例を示す六面図である。
図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0057】
右コントローラ4は、左コントローラ3と同様、方向入力部としてアナログスティック52を備える。本実施形態においては、アナログスティック52は、左コントローラ3のアナログスティック32と同じ構成である。また、右コントローラ4は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ4は、左コントローラ3と同様、ハウジング51の主面上に4つの操作ボタン53~56(具体的には、Aボタン53、Bボタン54、Xボタン55、およびYボタン56)を備える。さらに、右コントローラ4は、+(プラス)ボタン57およびホームボタン58を備える。また、右コントローラ4は、ハウジング51の側面の右上に第1Rボタン60およびZRボタン61を備える。また、右コントローラ4は、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。
【0058】
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
【0059】
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、
図3に示す構成の他、
図6に示す各構成要素81~91、97、および98を備える。これらの構成要素81~91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
【0060】
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0061】
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0062】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
【0063】
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0064】
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi-Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【0065】
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
【0066】
プロセッサ81は、上述の左側端子17、右側端子21、および下側端子27に接続される。プロセッサ81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、プロセッサ81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、プロセッサ81は、クレードルと通信を行う場合、下側端子27を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードルに装着された場合、本体装置2は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
【0067】
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
【0068】
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
【0069】
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
【0070】
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
【0071】
また、本体装置2は、加速度センサ89を備える。本実施形態においては、加速度センサ89は、所定の3軸(例えば、
図1に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ89は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。
【0072】
また、本体装置2は、角速度センサ90を備える。本実施形態においては、角速度センサ90は、所定の3軸(例えば、
図1に示すxyz軸)回りの角速度を検出する。なお、角速度センサ90は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。
【0073】
加速度センサ89および角速度センサ90は、プロセッサ81に接続され、加速度センサ89および角速度センサ90の検出結果は、プロセッサ81へ出力される。プロセッサ81は、上記の加速度センサ89および角速度センサ90の検出結果に基づいて、本体装置2の動きおよび/または姿勢に関する情報を算出することが可能である。
【0074】
照度センサ29は、プロセッサ81に接続され、照度センサ29の検出結果は、プロセッサ81へ出力される。プロセッサ81は、照度センサ29の検出結果に基づいて、本体装置2周辺の明るさに関する情報を算出することが可能である。一例として、本体装置2が後述するゴーグル装置に装着された場合、本体装置2周辺の明るさが低下するため、プロセッサ81は、照度センサ29の検出結果に基づいて、本体装置2が当該ゴーグル装置に装着されているか否かを判定することができる。
【0075】
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
【0076】
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
【0077】
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、
図6で示しているため
図7では省略している。
【0078】
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。
図7に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施形態においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
【0079】
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
【0080】
左コントローラ3は、各ボタン103(具体的には、ボタン33~39、43、44、および47)を備える。また、左コントローラ3は、アナログスティック(
図7では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
【0081】
左コントローラ3は、慣性センサを備える。具体的には、左コントローラ3は、加速度センサ104を備える。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、加速度センサ104は、所定の3軸(例えば、
図4に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。本実施形態においては、角速度センサ105は、所定の3軸(例えば、
図4に示すxyz軸)回りの角速度を検出する。なお、角速度センサ105は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。加速度センサ104および角速度センサ105は、それぞれ通信制御部101に接続される。そして、加速度センサ104および角速度センサ105の検出結果は、適宜のタイミングで繰り返し通信制御部101へ出力される。
【0082】
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【0083】
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
【0084】
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
【0085】
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
【0086】
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、アナログスティック52、および慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
【0087】
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
【0088】
以上に説明したように、本実施形態におけるゲームシステム1については左コントローラ3および右コントローラ4が本体装置2から着脱可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、本体装置2から画像を出力する利用態様におけるゲームシステムを用いて説明する。左コントローラ3および右コントローラ4を本体装置2から取り外した状態でゲームシステム1を利用してアプリケーション(例えば、仮想空間を生成/編集するエディターやゲームアプリケーション)に対する操作を行う場合の態様としては、1人のユーザが本体装置2と左コントローラ3または右コントローラ4とを用いる態様が考えられる。
【0089】
図8は、左コントローラ3および右コントローラ4を本体装置2から取り外した状態において、1人のユーザが本体装置2と右コントローラ4とを操作してゲームシステム1を利用する様子の一例を示す図である。
図8に示すように、ユーザが本体装置2を左手で把持し、右コントローラ4を右手で把持して、本体装置2に表示された画像を見ながら操作することができる。
【0090】
例えば、本実施例では、ユーザは、縦長の略板状である右コントローラ4の長手方向(
図1に示す上方向(y軸正方向))によって本体装置2のディスプレイ12を指し示すように、本体装置2に装着された際に当該本体装置2と接する側面(スライダ62が設けられている側面)が左方に向き、かつ、右コントローラ4の主面(アナログスティック52等が設けられる面)が上に向くように右コントローラ4を片手(例えば、右手)で把持する。つまり、ユーザの一方の手によって把持されている右コントローラ4は、y軸正方向がユーザの前方を向き、z軸正方向が上を向いた状態となる。
【0091】
また、本実施例では、ユーザは、横長の略板状である本体装置2の長手方向(
図1に示すx軸方向)が水平となり、本体装置2の主面(ディスプレイ12等が設けられている面)がユーザ側となるように、本体装置2を他方の手(例えば、左手)で把持する。ユーザの他方の手によって把持されている本体装置2は、z軸負方向がユーザ側を向き、x軸方向が水平となった状態となる。
【0092】
このように、ユーザの一方の手で把持された右コントローラ4の各操作ボタンやスティックの操作や右コントローラ4本体を動かす操作に応じて、仮想空間の生成/編集や仮想空間を用いたゲームプレイが行われる。例えば、右コントローラ4の加速度センサ114は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ115は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能であり、当該加速度および/または角速度を用いて右コントローラ4本体の動きや姿勢を算出することが可能となる。本実施例では、一例として、右コントローラ4を用いたユーザ操作に応じて、ディスプレイ12に表示された仮想空間内に配置されたオブジェクトを移動させることができる。
【0093】
また、本実施例では、ユーザの他方の手で把持された本体装置2本体を動かす操作に応じて、ディスプレイ12に表示する表示範囲を変化させることができる。例えば、本体装置2の加速度センサ89は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ90は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能であり、当該加速度および/または角速度を用いて本体装置2本体の動きや姿勢を算出することが可能となる。本実施例では、一例として、実空間における本体装置2の姿勢変化に応じて、ディスプレイ12に画像を表示するために仮想空間内に設定される仮想カメラの姿勢を変化させることができる。具体的には、実空間における本体装置2の姿勢変化と同じ変化を仮想空間内の固定位置に配置された仮想カメラに与えることによって、本体装置2のディスプレイ12を介して仮想空間内を覗いているかのような仮想空間の画像を生成することができる。なお、他の例として、上記姿勢変化に加えて、実空間における本体装置2の移動(位置変化)に応じて、仮想空間内において上記仮想カメラの位置を移動させてもよい。
【0094】
図8は、本体装置2および右コントローラ4を操作して仮想空間内のオブジェクトを移動させる処理において表示される画像例を示している。
図8に示すように、本処理例では、複数のオブジェクト(
図8の例では、第1のオブジェクトOBJ1および第2のオブジェクトOBJ2)が仮想空間内に配置された画像が本体装置2に表示される。そして、ユーザは、右コントローラ4のアナログスティック52および操作ボタン53~56を操作したり、右コントローラ4本体を動かす操作をしたりすることによって、仮想空間内に配置された複数のオブジェクトの何れかを操作対象として選択したり、当該操作対象として選択されたオブジェクトを仮想空間内で移動させたりすることができる。また、ユーザは、本体装置2の姿勢を変化させることによって、仮想空間に設定されている仮想カメラの姿勢を変化させることができ、ディスプレイ12に表示される仮想空間の範囲を変化させることができる。
【0095】
例えば、ディスプレイ12には、右コントローラ4本体によって指し示されている位置を示す標識Tが表示される。一例として、標識Tは、ディスプレイ12における初期位置(例えば、ディスプレイ12の中央)に表示された後、右コントローラ4本体の姿勢変化に応じてその表示位置が変化する。そして、ユーザが右コントローラ4を用いて所定の操作(例えば、操作ボタン(Aボタン)53を押下する操作や操作ボタン(Rボタン)60を押下する操作)を行った場合、当該操作時点で標識Tと重畳して表示されているオブジェクトOBJが操作対象として選択される。その後、上記選択操作が継続されている期間において上記操作対象を選択している状態が継続され、当該選択操作が終了することによって上記操作対象を選択している状態が解除される。
【0096】
操作対象として設定されたオブジェクトOBJは、右コントローラ4を用いたその後の操作に応じて、仮想空間内を移動させることができる。例えば、操作対象を設定する操作を継続している状態において、右コントローラ4本体によって指し示す位置を上下左右に移動させた場合、仮想空間において当該操作対象に設定されているオブジェクトOBJを仮想カメラ周りとなる上下左右に移動させる。また、操作対象を設定する操作を継続している状態において、右コントローラ4のスティック52を前後に傾倒させた場合、仮想空間において当該操作対象に設定されているオブジェクトOBJを仮想カメラから遠ざけるまたは近づけるように移動させる。そして、操作対象を設定する操作が終了した場合、当該操作対象の移動を停止し、当該終了時点における仮想空間内の位置に当該操作対象のオブジェクトを配置して、オブジェクトを移動させる処理を解除する。
【0097】
なお、操作対象として設定されたオブジェクトOBJを移動させる操作方法は、上記操作方法でなくてもかまわない。例えば、右コントローラ4のスティック52を傾倒させる操作に応じて、操作対象に設定されているオブジェクトOBJを仮想カメラ周りとなる仮想空間の上下左右に移動させてもかまわない。また、右コントローラ4の操作ボタン60および61を押下する操作に応じて、操作対象に設定されているオブジェクトOBJを仮想カメラから遠ざけるまたは近づけるように仮想空間において移動させてもかまわない。また、オブジェクトOBJがマウスで操作される場合、マウスを操作して指定する指示位置に応じて、操作対象に設定されているオブジェクトOBJを仮想カメラ周りとなる仮想空間の上下左右に移動させ、マウスを右クリックおよび左クリックする操作に応じて、操作対象に設定されているオブジェクトOBJを仮想カメラから遠ざけるまたは近づけるように仮想空間において移動させてもかまわない。また、オブジェクトOBJがタッチパッドで操作される場合、タッチパッドを操作して指定する指示位置に応じて、操作対象に設定されているオブジェクトOBJを仮想カメラ周りとなる仮想空間の上下左右に移動させ、タッチパッドを固定位置で長押しする位置に応じて、操作対象に設定されているオブジェクトOBJを仮想カメラから遠ざけるまたは近づけるように仮想空間において移動させてもかまわない。
【0098】
また、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置の形態で操作することも可能であり、この場合、左コントローラ3および右コントローラ4と本体装置2とが一体化しているため、左コントローラ3および/または右コントローラ4が指し示す位置に基づいた操作は難しくなる。したがって、上記一体化装置を用いて操作対象として設定されたオブジェクトOBJを移動させる操作方法は、左右のスティック32および52を用いることが考えられる。例えば、上記一体化装置を用いた操作においても、本体装置2に装着された右コントローラ4の操作ボタン(Aボタン)53を押下する操作や操作ボタン(Rボタン)60を押下する操作が行われた場合、当該操作時点で標識Tと重畳して表示されているオブジェクトOBJを操作対象として選択する。そして、本体装置2に装着された左コントローラ3のスティック32を傾倒させる操作に応じて、操作対象に設定されているオブジェクトOBJを仮想カメラ周りとなる仮想空間の上下左右に移動させる。また、本体装置2に装着された右コントローラ34のスティック52を傾倒させる操作に応じて、操作対象に設定されているオブジェクトOBJを仮想カメラから遠ざけるまたは近づけるように仮想空間において移動させる。このように一体化装置を用いて操作を行う場合、実空間における一体化装置の姿勢に応じてディスプレイ12に表示される仮想空間の方向も変化するため、当該仮想空間の方向の変化に応じてスティックの傾倒方向も変化させることが考えられる。例えば、上記一体化装置の下方向(
図1に示すy軸負方向)が実空間の鉛直方向となった姿勢では、ディスプレイ12の下方向(
図1に示すy軸負方向)が仮想空間における鉛直方向となる。したがって、左コントローラ3のスティック32を下方向(
図1に示すy軸負方向)に傾倒させる操作が行われた場合、ディスプレイ12に表示された仮想空間における下方向への操作指示にすることが直感的であり、当該スティック32を下方向に傾倒させる操作においてオブジェクトを仮想空間の下方向へ移動させる。一方、上記一体化装置の右方向(
図1に示すx軸正方向)が実空間の鉛直方向となった姿勢では、ディスプレイ12の右方向(
図1に示すx軸正方向)が仮想空間における鉛直方向となる。したがって、左コントローラ3のスティック32を右方向(
図1に示すx軸正方向)に傾倒させる操作が行われた場合、ディスプレイ12に表示された仮想空間における下方向への操作指示にすることが直感的であり、当該スティック32を右方向に傾倒させる操作においてオブジェクトを仮想空間の下方向へ移動させる。
【0099】
本実施例では、仮想空間内でオブジェクトを移動させる場合、当該仮想空間内に当該オブジェクトが移動可能となる移動可能面が定義される。以下、
図9~
図15を用いて、仮想空間内に設定される移動可能面について説明する。なお、
図9は、操作対象に選択された第1のオブジェクトOBJ1におけるワールド座標位置の例を示す図である。
図10は、操作対象に選択された第1のオブジェクトOBJ1に対して設定される直方体形状の移動可能面MSの例を示す図である。
図11は、移動可能面MSに沿ってオブジェクトOBJが移動する一例を上面側から見た図である。
図12は、移動可能面MSに沿ってオブジェクトOBJが移動する他の例を右側面側から見た図である。
図13は、移動可能面MSの一部の構成面を可視グリッドGms1で表示する一例を示す図である。
図14は、複数のオブジェクトOBJ1~OBJ3毎にそれぞれ設定される移動可能面MS1~MS3の一例を示す図である。
図15は、複数のオブジェクトOBJ4~OBJ6毎にそれぞれ設定される移動可能面MS4~MS6の他の例を示す図である。
【0100】
図9において、第1のオブジェクトOBJ1が操作対象として選択された場合、第1のオブジェクトOBJ1の位置が取得される。例えば、本実施例では、仮想カメラの位置を基準としたワールド座標系であるXYZ軸座標を設定し、当該XYZ軸座標に基づいて第1のオブジェクトOBJ1の位置座標P1(Ax、Ay、Az)が取得される。ここで、仮想カメラの位置を基準としたXYZ軸座標は、当該仮想カメラの視点位置を原点として、当該仮想カメラの初期位置における当該仮想カメラの視線方向となる水平方向をZ軸正方向とし、当該仮想カメラの初期位置における当該仮想カメラの右水平方向をX軸正方向とし、当該仮想カメラの初期位置における当該仮想カメラの直上方向をY軸正方向とする。そして、XYZ軸座標系における第1のオブジェクトOBJ1における基準(例えば、重心)の位置座標が、第1のオブジェクトOBJ1の位置座標P1(Ax、Ay、Az)として取得される。
【0101】
第1のオブジェクトOBJ1の位置座標P1(Ax、Ay、Az)に基づいて、直方体形状の移動可能面MSが定義され、第1のオブジェクトOBJ1が移動可能面MSに沿ってユーザ操作に応じて移動可能となる。一例として、第1のオブジェクトOBJ1の位置座標P1(Ax、Ay、Az)のうち、AxとAzの絶対値の大きい方をALとする。そして、第1の例として、2次元座標系における原点と点(AL、Ay)とを結ぶ線分と横軸(水平方向軸)との角度が第1の角度(例えば、60°)以上の場合は、操作対象の第1のオブジェクトOBJ1が直方体形状である移動可能面MSの上面(Y軸正方向側に形成される面)に配置されているとして、当該移動可能面MSを設定する。第2の例として、2次元座標系における原点と点(AL、Ay)とを結ぶ線分と横軸(水平方向軸)との角度が第2の角度(例えば、-60°)以下の場合は、操作対象の第1のオブジェクトOBJ1が直方体形状である移動可能面MSの下面(Y軸負方向側に形成される面)に配置されているとして、当該移動可能面MSを設定する。第3の例として、上記第1の例および上記第2の例の何れでもない場合(すなわち、2次元座標系における原点と点(AL、Ay)とを結ぶ線分と横軸(水平方向軸)との角度が第1の角度(例えば、60°)より小さく第2の角度(例えば、-60°)より大きい場合)、操作対象の第1のオブジェクトOBJ1が直方体形状である移動可能面MSのAL方向の面(ALが正の値のAxの場合はX軸正方向側に形成される右側面、ALが負の値のAxの場合はX軸負方向側に形成される左側面、ALが正の値のAzの場合はZ軸正方向側に形成される前面、ALが負の値のAzの場合はZ軸負方向側に形成される背面)に配置されているとして、当該移動可能面MSを設定する。
【0102】
例えば、上記第1の例および上記第2の例の場合、直方体形状である移動可能面MSの上面(Y軸正方向側に形成される面)から下面(Y軸負方向側に形成される面)までの長さを|Ay|の2倍に設定して、当該直方体の他の辺の長さを予め設定された辺比率に基づいて決定する。また、上記第3の例の場合、直方体形状である移動可能面MSのAL方向の面から当該面と対向する対面までの長さ(ALがAxの場合はX軸正方向側に形成される右側面とX軸負方向側に形成される左側面との間の長さ、ALがAzの場合はZ軸正方向側に形成される前面とZ軸負方向側に形成される背面との間の長さ)を|AL|の2倍に設定して、当該直方体の他の辺の長さを予め設定された辺比率に基づいて決定する。
【0103】
一例として、
図10に示すように、Axの絶対値よりAzの絶対値の大きい方が大きく、Azが正の値であり、第1のオブジェクトOBJ1の位置座標P1(Ax、Ay、Az)が上記第3の例に該当する場合、操作対象である第1のオブジェクトOBJ1は、直方体形状である移動可能面MSの前面(Z軸正方向側に形成される面)に配置されているとして、当該移動可能面MSが設定される。例えば、上記直方体の前面は、第1のオブジェクトOBJ1の位置座標P1(Ax、Ay、Az)を含むZ=Azとなる面となる。そして、上記直方体の背面は、Z=-Azとなる面となり、当該直方体の前面と背面との間の長さが|Az|の2倍となる。また、上記直方体の右側面がAzに予め設定された比率(係数s)を乗算したX=Az*sとなる面となり、上記直方体の左側面がX=-Az*sとなる面となり、当該直方体の右側面と左側面との間の長さが|Az*s|の2倍となる。また、第1のオブジェクトOBJ1の位置座標P1(Ax、Ay、Az)が上記第1の例に該当する状態まで移動した場合に上記直方体の上面に配置されるようにするために、当該直方体の上面がAzを2倍したY=2Azとなる面となる。また、第1のオブジェクトOBJ1の位置座標P1(Ax、Ay、Az)が上記第2の例に該当する状態まで移動した場合に上記直方体の下面に配置されるようにするために、当該直方体の下面がAzを2倍した負の値であるY=-2Azとなる面となり、当該直方体の上面と下面との間の長さが|Az|の4倍となる。なお、直方体形状である移動可能面MSは、6つの構成面(前面、背面、左側面、右側面、上面、下面)によって構成され、本実施例では、第1面および第2面の一例として当該構成面のうち隣接して交差する2つの構成面を用いている。
【0104】
操作対象の第1のオブジェクトOBJ1は、上述した仮想カメラ周りとなる上下左右に移動させる操作が行われた場合、当該第1のオブジェクトOBJ1の位置に基づいて設定された移動可能面MSに沿って移動する。そして、移動可能面MSが直方体形状に形成されることから明らかなように、移動可能面MSの各構成面は、他の構成面と交差する部分において直交する。したがって、操作対象の第1のオブジェクトOBJ1が移動可能面MSに沿って仮想カメラ周りとなる上下左右に移動する場合、上記構成面が交差する部分を通過することによって、配置方向が90°異なる面に沿った移動に変化することになる。
【0105】
例えば、
図11に示すように、操作対象のオブジェクトOBJの移動が移動可能面MSを形成する直方体の前面に沿ったX軸負方向への移動から当該直方体の左側面に沿った移動に移る場合、当該前面に沿ったX軸負方向への移動(オブジェクトOBJaとして図示する)から当該左側面に沿ったZ軸負方向への移動(オブジェクトOBJbとして図示する)にオブジェクトOBJの移動方向が変化することになる。つまり、操作対象のオブジェクトOBJを仮想空間における左方向へ移動させる操作が行われた場合、仮想カメラから左方向へ離れる前面に沿った移動だけでなく、左側面と交差する部分を通過することによってその移動方向が当該左側面に沿った後方向に変化するため、仮想空間において複数の直線移動を組み合わせながら仮想カメラ周りを周回するような移動が可能となる。
【0106】
また、
図12に示すように、操作対象のオブジェクトOBJの移動が移動可能面MSを形成する直方体の前面に沿ったY軸正方向への移動から当該直方体の上面に沿った移動に移る場合、当該前面に沿ったY軸正方向への移動(オブジェクトOBJcとして図示する)から当該上面に沿ったZ軸負方向への移動(オブジェクトOBJdとして図示する)にオブジェクトOBJの移動方向が変化することになる。つまり、操作対象のオブジェクトOBJを仮想空間における上方向へ移動させる操作が行われた場合、仮想カメラから上方向へ離れる前面に沿った移動だけでなく、上面と交差する部分を通過することによってその移動方向が当該上面に沿った後方向に変化するため、仮想空間において複数の直線移動を組み合わせながら仮想カメラ周りを周回するような移動が可能となる。
【0107】
なお、
図11および
図12に例示しているように、操作対象のオブジェクトOBJの移動が他の構成面に移る際、当該オブジェクトOBJの姿勢を変えずに移動方向を変化させる。つまり、仮想空間において移動させるオブジェクトOBJは、移動前の姿勢を変えることなく他の位置へ移動することが可能となる。したがって、仮想カメラから見た操作対象のオブジェクトOBJは、仮想空間内の仮想カメラ周りを周回するように移動する場合、仮想カメラ側から見えるオブジェクトOBJの部分が変化することになる。他の例として、操作対象のオブジェクトOBJの移動が他の構成面に移る際、当該オブジェクトOBJの姿勢を変えながら(例えば、姿勢を回転させながら)移動方向を変化させてもよい。この場合、仮想空間において移動させるオブジェクトOBJは、他の構成面を用いた移動に移る際、姿勢を変えて他の位置へ移動することになる。一例として、操作対象のオブジェクトOBJ自体に設定される移動方向が変わらないように(例えば、オブジェクトOBJが移動する先頭部分が他の構成面に移っても変わらないように)、他の構成面に移る際に当該オブジェクトOBJの姿勢を90°回転させて移動方向を変化させてもよい。
【0108】
操作対象のオブジェクトOBJは、上述した仮想カメラから遠ざけるまたは近づけるように移動させる奥行移動操作が行われた場合、当該奥行移動操作が行われる前のオブジェクトOBJの位置に基づいて設定された移動可能面MSとは異なる移動可能面MSが、当該奥行移動操作によって移動したオブジェクトOBJの位置に基づいて再設定される。そして、上記奥行移動操作後に操作対象のオブジェクトOBJを仮想カメラ周りとなる上下左右に移動させる操作が行われた場合、当該奥行移動操作によって移動したオブジェクトOBJの位置に基づいて再設定された移動可能面MSに沿って移動する。なお、上記奥行移動操作によって再設定される移動可能面MSは、上述と同様に奥行移動後のオブジェクトOBJの位置に基づいた直方体形状に設定される。そして、上記奥行移動操作によって再設定される移動可能面MSは、当該奥行移動操作前に設定されている移動可能面MSの直方体形状各辺の比率を保ったまま、当該奥行移動操作によって変化した操作対象のオブジェクトOBJと仮想カメラとの位置関係(距離)に応じて拡縮する。そして、上記奥行移動操作によって再設定される移動可能面MSの各構成面も、他の構成面と交差する部分において直交する。したがって、上記奥行移動操作後に操作対象のオブジェクトOBJが再設定された移動可能面MSに沿って仮想カメラ周りとなる上下左右に移動する場合、上記構成面が交差する部分を通過することによって、配置方向が90°異なる面に沿った移動に変化することになる。
【0109】
また、移動可能面MSを構成する複数の構成面のうち、操作対象となったオブジェクトOBJが配置されている構成面を、他の構成面とは異なる表示態様で表示してもかまわない。例えば、
図13に示すように、移動可能面MSを構成する複数の構成面のうち、操作対象となったオブジェクトOBJが配置されている構成面が定義されている範囲に可視グリッドGms1を表示してもよい。この場合、操作対象となったオブジェクトOBJが配置されている構成面以外の構成面を未表示または可視グリッドとは異なる表示形態で表示することによって、現時点でオブジェクトOBJが移動可能な基準面をユーザに意識させることができる。なお、本実施例では、他の面とは異なる表示態様でオブジェクトOBJが配置されている構成面を表示することの一例として、可視グリッドGms1を用いている。
【0110】
なお、移動可能面MSは、仮想空間において仮想カメラの姿勢が変化したとしても、仮想空間内において固定して定義される。つまり、移動可能面MSは、仮想空間内における仮想カメラを基準としたオブジェクトOBJの位置に基づいて、ワールド座標系に固定して設定され、定義された移動可能面MSに沿ってオブジェクトOBJが移動している状態では仮想カメラの姿勢が変化しても当該移動可能面MSの位置やサイズが変化することはない。
【0111】
また、上述した移動可能面MSは、仮想空間内に複数のオブジェクトOBJが配置されている場合、当該複数のオブジェクトOBJそれぞれに定義される。典型的には、複数のオブジェクトOBJそれぞれに定義される移動可能面MSは、仮想カメラの周辺に異なるサイズで定義される。
【0112】
例えば、
図14に示すように、仮想空間内に3つのオブジェクトOBJ1~OBJ3が配置されている場合、3つのオブジェクトOBJ1~OBJ3の位置に基づいて、3つのオブジェクトOBJ1~OBJ3に異なる移動可能面MS1~MS3がそれぞれ定義される。なお、移動可能面MS1~MS3は、何れも上述した直方体形状であり、各辺の比率は同じである。したがって、移動可能面MS1~MS3は、それぞれ仮想カメラを中心とした当該仮想カメラ周辺に定義され、オブジェクトOBJ1~OBJ3と仮想カメラとのそれぞれの位置関係(距離)に応じて拡縮した直方体形状となる。したがって、仮想空間内に配置されている複数のオブジェクトOBJそれぞれに定義される移動可能面MSは、仮想カメラを中心に積層するような位置にそれぞれ定義されることになる。なお、上記積層は、最も仮想カメラ側に定義される移動可動面MSに対して平行に、当該仮想カメラから相対的に遠い別の移動可能面MSが当該仮想カメラ周辺を囲うように定義されることを示しており、移動可能面MSにおける各構成面は、仮想カメラから離れた位置に定義される程、相対的に広い面となって定義される。
【0113】
なお、上述した奥行移動操作によって移動したオブジェクトOBJの位置に基づいて再設定される移動可能面MSは、当該移動前に設定されていた移動可能面MSに対して積層して配置されることになるが、当該積層状態の移動可能面MSを定義するタイミングは、当該移動前でもよいし当該移動中または当該移動後でもよい。前者の場合、奥行移動操作によって移動可能なオブジェクトOBJの位置に応じて、積層された複数の移動可能面MSを予め定義しておき、奥行移動操作によって移動したオブジェクトOBJの位置に応じて、当該複数の移動可能面MSから選択して再設定することが考えられる。後者の場合、奥行移動操作によって移動する度にオブジェクトOBJの位置に基づいて移動可能面MSを定義し、奥行移動操作が確定したオブジェクトOBJの位置に応じて、その後に用いる移動可能面MSを再設定することが考えられる。
【0114】
このように、本実施例では、仮想空間内において、オブジェクトOBJを移動させる場合、交差する部分において所定の角(例えば、90°)を成す複数の構成面を有する移動可能面MSに沿って移動させることができるため、ユーザが意図するように仮想空間内でオブジェクトOBJを移動させて配置することが可能となる。また、本実施例では、仮想空間に固定された移動可能面MSに沿ってオブジェクトOBJを移動させることができるため、オブジェクトOBJを移動させる際の仮想カメラの動きによる位置ずれ等を防止することができる。また、本実施例では、オブジェクトOBJの移動が他の構成面に沿った移動に移る場合、オブジェクトOBJの移動方向が変わることになるが、移動方向が変わってもオブジェクトOBJの姿勢が変わらないため、オブジェクトOBJの姿勢を変えずに移動する場合に好適となる。さらに、本実施例では、移動の際に用いる構成面によって、仮想空間における上下前後左右方向(すなわち、上下方向となるY軸方向、前後方向となるZ軸方向、および左右方向となるX軸方向)の何れかに沿ったオブジェクト移動が可能となるため、仮想空間における上下前後左右方向を基準として整列させたオブジェクト配置が容易となる。また、本実施例では、仮想カメラの周辺に直方体形状の移動可能面が定義されるため、仮想カメラの視界から遠く離れるようなオブジェクト移動を防止して仮想カメラ周辺へのオブジェクト移動に制限する可能であることに加えて、上述したオブジェクトの整列配置を可能にするオブジェクト移動が可能となる。
【0115】
なお、上述した説明では、移動可能面MSを複数の平面を組み合わせた直方体形状で構成する例を用いたが、移動可能面MSは、他の立体で構成されてもよい。例えば、移動可能面MSは、他の角柱形状、角錐形状、角錐台形状、正多面体形状等、複数の平面を組み合わせた他の立体形状によって構成されてもよい。この場合、移動可能面MSを構成する構成面同士が交差する部分において形成される角度は、90°でなくてもよく、鋭角や鈍角であってもよい。また、移動可能面MSを構成する複数の構成面において、隣り合って定義される構成面の間の少なくとも1箇所に空隙が形成されていてもよい。
【0116】
また、移動可能面MSを構成する構成面の少なくとも一つは、曲面で構成されてもかまわない。例えば、
図15に示すように、横断面が扇型となった扇柱形状で移動可能面MSを構成してもよい。一例として、移動可能面MSを構成する扇柱形状の内部に仮想カメラが配置されるように移動可能面MSを構成してもよい。この場合、上記扇柱形状の重心となる位置に仮想カメラの視点が配置されるように移動可能面MSを構成してもよいし、上記扇柱形状の重心から扇型の要側に所定長さずれた位置に仮想カメラの視点が配置されるように移動可能面MSを構成してもよい。他の例として、移動可能面MSを構成する扇柱形状における扇型の要となる位置に仮想カメラが配置されるように移動可能面MSを構成してもよい。
【0117】
このように、移動可能面MSを構成する構成面の少なくとも一つが曲面で構成される場合であっても、仮想空間に設定された複数のオブジェクトOBJそれぞれに定義される移動可能面MSが異なるサイズで定義されてもよい。例えば、
図15に示すように、仮想空間内に3つのオブジェクトOBJ4~OBJ6が配置されている場合、3つのオブジェクトOBJ4~OBJ6の位置に基づいて、3つのオブジェクトOBJ4~OBJ6に異なる移動可能面MS4~MS6がそれぞれ定義される。なお、移動可能面MS4~MS6は、何れも1つの構成面(
図15の例では、前面)が曲面となった扇柱形状であり、各辺および円弧の比率は同じである。したがって、移動可能面MS4~MS6は、それぞれ仮想カメラ周辺に定義され、オブジェクトOBJ4~OBJ6と仮想カメラとのそれぞれの位置関係(距離)に応じて拡縮した扇柱形状となる。したがって、仮想空間内に配置されている複数のオブジェクトOBJそれぞれに定義される移動可能面MSは、仮想カメラ周辺に積層するような位置にそれぞれ定義されることになる。
【0118】
また、移動可能面MSは、複数の構成面を有する立体形状で構成されるが、当該構成面の少なくとも1面をオブジェクトが移動できない面として設けてもよいし、当該構成面の一部分にオブジェクトが移動できない部分を設けてもよい。第1の例として、移動可能面MSを構成する複数の構成面のうち、仮想空間の下方に位置する下面(Y軸負方向側に形成される構成面)および/または仮想空間の上方に位置する上面(Y軸正方向側に形成される構成面)をオブジェクトが移動できない面としてもよい。第2の例として、移動可能面MSを構成する複数の構成面のうち、仮想空間の後方に位置する下面(Z軸負方向側に形成される構成面)をオブジェクトが移動できない面としてもよい。第3の例として、移動可能面MSを構成する複数の構成面のうち、仮想空間におけるフィールド面より下方に形成される部分をオブジェクトが移動できない面としてもよい。第4の例として、移動可能面MSを構成する複数の構成面のうち、ディスプレイ12に表示されない領域(例えば、仮想カメラの死角となって表示されない黒塗りつぶし領域)と重複する部分をオブジェクトが移動できない面としてもよい。
【0119】
また、移動可能面MSは、複数の構成面を有していればよく、立体形状でなくてもよい。例えば、移動可能面MSは、仮想カメラから見た仮想空間の前方に形成される前面と左方に形成される左面と右方に形成される右面との3面や、仮想カメラから見た仮想空間の左前方に形成される左斜面と右前方に形成される右斜面との2面によって形成される衝立状で構成されてもよい。
【0120】
また、上述した実施例では、仮想カメラの姿勢が変化した場合であっても、仮想空間において移動可能面MSを固定して定義しているが、仮想カメラの動きに応じて移動可能面MSの位置を変化させてもかまわない。一例として、仮想カメラの姿勢変化と連動して同じ回転角度で移動可能面MSの各構成面の方向を回転させるとともに、回転後の仮想カメラと操作対象のオブジェクトとの方向および当該方向への距離に基づいて、移動可能面MSのサイズを再設定してもよい。この場合、移動可能面MSを仮想空間に固定されたワールド座標系に定義するのではなく、仮想カメラの姿勢を基準とした画面座標系におけるオブジェクトの位置座標に基づいて移動可能面MSを定義することが可能となる。他の例として、仮想空間内の所定位置に仮想カメラを固定するのではなく、仮想カメラの配置位置が移動する場合、当該仮想カメラの位置の変化と連動して移動可能面MSを移動させてもよい。この場合、仮想空間における移動可動面MSの位置は、仮想カメラの移動と連動して移動するが、移動可能面MSの各構成面の方向は回転させずに、変化した仮想カメラと操作対象のオブジェクトとの距離に応じて移動可能面MSのサイズを再設定することが考えられる。これらの例のように、仮想カメラの動きに応じて移動可能面MSの位置を変化させることによって、オブジェクトの移動に関し、ユーザの意図を反映させつつ、仮想カメラの姿勢に応じた柔軟な移動が実現可能となる。
【0121】
また、上述した実施例は、立体視可能な画像を表示する場合にも適用することができる。例えば、仮想空間を立体視するための互いに示唆のある左目用画像および右目用画像を、ディスプレイ12の左側領域および右側領域にそれぞれ表示する。そして、本体装置2が装着された場合に、左目用レンズを介して上記左側領域に表示されている左目用画像のみを見ることが可能であり、右目用レンズを介して上記右側領域に表示されている右目用画像のみを見ることが可能となるゴーグル装置を用いて、ディスプレイ12に表示された左目用画像および右目用画像をユーザが左右の目で見ることによって、立体視可能な仮想空間画像を表示することができる。このように、立体視可能な仮想空間画像をディスプレイ12に表示する場合であっても、仮想空間に設定されている一対の左目用仮想カメラおよび右目用仮想カメラの組を基準として、同様に移動可能面MSを当該仮想空間内に定義することによって、操作対象となったオブジェクトを移動させる処理を同様に実現することができる。なお、本体装置2をゴーグル装置に装着して立体視可能な画像を見る場合、本体装置2の姿勢に応じて仮想カメラの姿勢を制御してもよいし、ゴーグル装置の姿勢に応じて仮想カメラの姿勢を制御してもよい。本体装置2に設けられた慣性センサ(加速度センサ89および/または角速度センサ90)によって検出されたデータを用いれば、本体装置2の姿勢だけでなくゴーグル装置の姿勢の算出も可能であることは言うまでもない。また、表示画面および慣性センサを有するゴーグル装置を用いる場合、上述した立体視可能な仮想空間画像を当該表示画面に表示してもよく、この場合は、当該ゴーグル装置に設けられた慣性センサの検出に基づいて、仮想カメラの姿勢を制御してもよい。
【0122】
次に、
図16~
図18を参照して、本実施形態においてゲームシステム1で実行される具体的な処理の一例について説明する。
図16は、本実施形態において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、
図16に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
【0123】
DRAM85のプログラム記憶領域には、ゲームシステム1で実行される各種プログラムPaが記憶される。本実施形態においては、各種プログラムPaは、上述した左コントローラ3および/または右コントローラ4との間で無線通信するための通信プログラムや、左コントローラ3および/または右コントローラ4から取得したデータや本体装置2の姿勢に基づいた情報処理を行うためのアプリケーションプログラム(例えば、仮想空間を生成/編集するエディターやゲームプログラム)等が記憶される。なお、各種プログラムPaは、フラッシュメモリ84に予め記憶されていてもよいし、ゲームシステム1に着脱可能な記憶媒体(例えば、スロット23に装着された所定の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。プロセッサ81は、DRAM85に記憶された各種プログラムPaを実行する。
【0124】
また、DRAM85のデータ記憶領域には、ゲームシステム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データDa、角速度データDb、加速度データDc、姿勢データDd、操作対象データDe、移動フラグデータDf、移動可能面データDg、オブジェクトデータDh、仮想カメラデータDi、および画像データDj等が記憶される。
【0125】
操作データDaは、左コントローラ3および/または右コントローラ4からそれぞれ適宜取得した操作データである。上述したように、左コントローラ3および/または右コントローラ4からそれぞれ送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報や各センサによる検出結果)が含まれている。本実施形態では、無線通信によって左コントローラ3および/または右コントローラ4からそれぞれ所定周期で操作データが送信されており、当該受信した操作データを用いて操作データDaが適宜更新される。なお、操作データDaの更新周期は、後述するゲームシステム1で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
【0126】
角速度データDbは、本体装置2に生じている角速度を示すデータである。例えば、角速度データDbは、本体装置2に生じているxyz軸周りの角速度を示すデータ等を含んでいる。
【0127】
加速度データDcは、本体装置2に生じている加速度を示すデータである。例えば、加速度データDcは、本体装置2に生じているxyz軸方向の加速度を示すデータ等を含んでいる。
【0128】
姿勢データDdは、実空間における本体装置2の姿勢と左コントローラ3および/または右コントローラ4の姿勢とを示すデータである。一例として、姿勢データDdは、基準姿勢に基づいた本体装置2の姿勢に関するデータと、基準姿勢に基づいた左コントローラ3および/または右コントローラ4の姿勢に関するデータとである。
【0129】
操作対象データDeは、仮想空間において移動させる操作対象として設定されたオブジェクトを示すデータである。移動フラグデータDfは、操作対象が設定されている状態であるか否かを示す移動フラグを示すデータである。移動可能面データDgは、操作対象に設定されたオブジェクトに対して設定される移動可能面を示すデータである。
【0130】
オブジェクトデータDhは、仮想空間に配置されているオブジェクトそれぞれの位置、方向、形状、およびサイズ等を示すデータである。
【0131】
仮想カメラデータDiは、仮想空間における仮想カメラの位置および方向を示すデータである。
【0132】
画像データDjは、表示画面(例えば、本体装置2のディスプレイ12)に画像(例えば、オブジェクトの画像、可視グリッドの画像、フィールド画像、背景画像等)を表示するためのデータである。
【0133】
次に、
図17および
図18を参照して、本実施形態における情報処理の詳細な一例を説明する。
図17は、ゲームシステム1で実行される情報処理の一例を示すフローチャートである。
図18は、
図17におけるステップS106において行われるオブジェクト移動処理の詳細な一例を示すサブルーチンである。本実施形態においては、
図17および
図18に示す一連の処理は、プロセッサ81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(エディターやゲームプログラム)を実行することによって行われる。また、
図17および
図18に示す情報処理が開始されるタイミングは任意である。
【0134】
なお、
図17および
図18に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をプロセッサ81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、プロセッサ81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち、
図17および
図18に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
【0135】
図17において、プロセッサ81は、情報処理における初期設定を行い(ステップS101)、次のステップに処理を進める。例えば、上記初期設定では、プロセッサ81は、以下に説明する処理を行うためのパラメータを初期化する。例えば、プロセッサ81は、仮想空間における仮想カメラの位置および姿勢(例えば、視線方向を水平方向とする姿勢)を初期設定し、当該初期設定された位置および姿勢を用いて仮想カメラデータDiを更新する。また、プロセッサ81は、初期設定された仮想カメラの視点を原点とし、仮想カメラの視線方向をZ軸正方向、当該視線方向に対して垂直な水平方向である仮想カメラの右方向をX軸正方向とし、当該視線方向および当該右方向に対して垂直な仮想カメラの直上方向をY軸正方向とするXYZ軸座標系を設定する。そして、プロセッサ81は、XYZ軸座標系が設定された仮想空間に複数のオブジェクトを配置して仮想空間の初期状態を生成して、オブジェクトそれぞれの位置、方向、形状、およびサイズ等を用いてオブジェクトデータDhを更新する。さらに、プロセッサ81は、実空間における本体装置2と左コントローラ3および/または右コントローラ4との初期姿勢を設定し、姿勢データDdを更新する。例えば、プロセッサ81は、本体装置2のディスプレイ12の奥行方向が実空間において水平方向となり、本体装置2の下方向(
図1に示すy軸負方向)が実空間の鉛直方向となる姿勢を、本体装置2の初期姿勢として設定する。また、プロセッサ81は、左コントローラ3および/または右コントローラ4の長手方向(
図1に示すy軸正方向)が本体装置2のディスプレイ12の奥行方向となってディスプレイ12の中央を指し示している姿勢を、左コントローラ3および/または右コントローラ4の初期姿勢として設定する。なお、配置手段は、複数のオブジェクトを3次元仮想空間のそれぞれの位置に配置する処理を行うものであり、一例としてステップS101の処理を行うプロセッサ81に相当する。
【0136】
次に、プロセッサ81は、左コントローラ3および/または右コントローラ4から操作データを取得して操作データDaを更新し(ステップS102)、次のステップに処理を進める。
【0137】
次に、プロセッサ81は、本体装置2に設けられている慣性センサ(加速度センサ89および/または角速度センサ90)から慣性データ(加速度データおよび/または角速度データ)を取得して、加速度データDcおよび/または角速度データDbを更新し(ステップS103)、次のステップに処理を進める。
【0138】
次に、プロセッサ81は、本体装置2と左コントローラ3および/または右コントローラ4との姿勢を算出し(ステップS104)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbに格納されている角速度データを用いて、本体装置2のxyz軸周りの角速度を取得する。そして、プロセッサ81は、姿勢データDdが示す本体装置2の姿勢におけるxyz軸を、取得された角速度に応じてそれぞれ回転させて、当該回転後のxyz軸の方向を用いて姿勢データDdにおける本体装置2の姿勢を示すデータを更新する。また、プロセッサ81は、操作データDaに格納されている左コントローラ3および/または右コントローラ4の角速度センサ105および/または115によって検出された角速度データを用いて、左コントローラ3および/または右コントローラ4のxyz軸周りの角速度を取得する。そして、プロセッサ81は、姿勢データDdが示す左コントローラ3および/または右コントローラ4の姿勢におけるxyz軸を、取得された角速度に応じてそれぞれ回転させて、当該回転後のxyz軸の方向を用いて姿勢データDdにおける左コントローラ3および/または右コントローラ4の姿勢を示すデータを更新する。なお、姿勢取得手段は、表示装置の姿勢を取得する処理を行うものであり、一例としてステップS104の処理を行うプロセッサ81に相当する。
【0139】
次に、プロセッサ81は、仮想カメラを設定し(ステップS105)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS104において算出された実空間における本体装置2の姿勢変化と同じように、仮想空間における仮想カメラの姿勢を変化させ、当該変化後の仮想カメラの姿勢を用いて仮想カメラデータDiを更新する。なお、仮想カメラの姿勢変化は、本体装置2のxyz軸周りに生じている角速度に基づいて、仮想カメラの上下左右前後軸をそれぞれ回転させ算出されてもかまわない。なお、仮想カメラ制御手段は、3次元仮想空間の画像を取得する仮想カメラを当該3次元仮想空間内に配置して制御する処理を行うものであり、一例としてステップS105の処理を行うプロセッサ81に相当する。
【0140】
次に、プロセッサ81は、左コントローラ3および/または右コントローラ4によって指し示されている指し示し位置を算出し(ステップS106)、次のステップに処理を進める。例えば、プロセッサ81は、姿勢データDdが示す本体装置2の姿勢と左コントローラ3および/または右コントローラ4の姿勢とを示すデータに基づいて、左コントローラ3および/または右コントローラ4が指し示しているディスプレイ12上の位置を、指し示し位置として算出する。一例として、プロセッサ81は、左コントローラ3および/または右コントローラ4の長手方向(
図1に示すy軸正方向)と本体装置2のディスプレイ12と交差する位置を指し示し位置として算出するが、ディスプレイ12の外側の位置が算出されることもあり得る。なお、本実施例では、第1のユーザ入力の一例として、左コントローラ3および/または右コントローラ4によって指し示す操作による指し示し位置を用いている。
【0141】
なお、上記指し示し位置は、本体装置2の姿勢のみに基づいて算出してもよいし、左コントローラ3および/または右コントローラ4の姿勢のみに基づいて算出してもよい。例えば、前者の場合、ディスプレイ12における所定位置(例えば、中央位置)と重なる仮想空間内の位置を上記指し示し位置として設定する。この場合、本体装置2の姿勢を変えることによってディスプレイ12に表示する仮想空間の範囲を設定する仮想カメラの姿勢を変化させることができるため、結果的に本体装置2の姿勢を変えることによってディスプレイ12における所定位置と重なる仮想空間内の位置を変化させる、すなわち上記指し示し位置を変化させることができる。また、例えば、後者の場合、実空間において固定された表示装置(例えば、本体装置2)を用いる場合、左コントローラ3および/または右コントローラ4の姿勢のみに基づいて上記指し示し位置を算出することが可能となる。
【0142】
次に、プロセッサ81は、オブジェクト移動処理を行い(ステップS107)、ステップS108に処理を進める。以下、
図18を参照して、上記ステップS107において行われるオブジェクト移動処理について説明する。
【0143】
図18において、プロセッサ81は、操作対象を決定する操作が行われているか否かを判定する(ステップS111)。例えば、プロセッサ81は、操作データDaを参照して、複数のオブジェクトから操作対象を選択して決定する操作(例えば、右コントローラ4の操作ボタン(Aボタン)53の押下を開始する操作や操作ボタン(Rボタン)60の押下を開始する操作)が行われている場合、上記ステップS111において肯定判定する。そして、プロセッサ81は、操作対象を決定する操作が行われている場合、ステップS112に処理を進める。一方、プロセッサ81は、操作対象を決定する操作が行われていない場合、ステップS114に処理を進める。
【0144】
ステップS112において、プロセッサ81は、操作対象を決定する処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、後述するステップS108における画像生成表示制御処理においてディスプレイ12に表示される仮想空間画像に基づいて、上記指し示し位置(標識Tが表示される位置)と重畳して表示されているオブジェクトを操作対象として決定し、当該オブジェクトを示すデータを用いて操作対象データDeを更新する。なお、プロセッサ81は、上記指し示し位置(標識Tが表示される位置)と重畳するオブジェクトが表示されていない場合、操作対象を未設定として次のステップに処理を進める。
【0145】
次に、プロセッサ81は、移動フラグをオンに設定し、ステップS114に処理を進める。例えば、プロセッサ81は、移動フラグをオンに設定して、移動フラグデータDfを更新する。なお、上記ステップS112において、操作対象が無設定である場合、プロセッサ81は、移動フラグのオフを維持する。
【0146】
ステップS114において、プロセッサ81は、移動フラグデータDfを参照して、移動フラグがオンに設定されているか否かを判定する。そして、プロセッサ81は、移動フラグがオンに設定されている場合、ステップS115に処理を進める。一方、プロセッサ81は、移動フラグがオフに設定されている場合、当該サブルーチンによる処理を終了する。
【0147】
ステップS115において、プロセッサ81は、移動対象に設定されているオブジェクト位置に基づいて、仮想空間に移動可能面を設定し、次のステップに処理を進める。例えば、プロセッサ81は、移動対象データDeおよびオブジェクトデータDhを用いて、移動対象に設定されているオブジェクトのXYZ軸座標系における位置座標を取得し、当該位置座標に基づいて当該オブジェクトを移動させるための移動可能面MSを設定して、移動可能面データDgを更新する。なお、移動可能面MSの定義方法については、
図9~
図15等を用いて説明した方法と同様であるため、ここでは詳細な説明を省略する。また、移動可能面定義手段は、3次元仮想空間における第1面および当該第1面と交差する部分において所定の角を成す第2面を少なくとも含む移動可能面を定義する処理を行うものであり、一例としてステップS115の処理を行うプロセッサ81に相当する。
【0148】
次に、プロセッサ81は、操作対象であるオブジェクトを上下左右方向に移動させる操作が行われているか否かを判定する(ステップS116)。例えば、プロセッサ81は、上記ステップS106において算出された指し示し位置を上下左右に移動させる操作が行われている場合、上記ステップS116において肯定判定する。そして、プロセッサ81は、オブジェクトを上下左右方向に移動させる操作が行われている場合、ステップS117に処理を進める。一方、プロセッサ81は、オブジェクトを上下左右方向に移動させる操作が行われていない場合、ステップS118に処理を進める。なお、本実施例では、第1のユーザ入力の一例として、上下左右方向に移動させる操作を用いている。
【0149】
ステップS117において、プロセッサ81は、上下左右方向に移動させる操作に応じて、操作対象であるオブジェクトを移動可能面に沿って移動させ、ステップS118に処理を進める。例えば、プロセッサ81は、移動可能面データDgが示す移動可能面MSの構成面のうち、操作対象であるオブジェクトが配置されている構成面を選択し、上記ステップS106において算出されている指し示し位置と重畳して表示されている当該構成面内の位置を算出する。そして、プロセッサ81は、オブジェクト姿勢を維持した状態で上記算出された構成面内の位置に操作対象であるオブジェクトを移動させ、移動後の位置を用いてオブジェクトデータDhを更新する。なお、プロセッサ81は、上記指し示し位置と重畳する位置が操作対象であるオブジェクトが配置されている構成面と隣接する別の構成面となる場合、当該指し示し位置と重畳して表示されている当該別の構成面内の位置を、当該オブジェクトの移動先の位置として算出する。また、プロセッサ81は、上記指し示し位置がディスプレイ12の外側となる場合、当該指し示し位置と操作対象のオブジェクトの位置(重心位置)またはディスプレイ12の中心とを結ぶ直線がディスプレイ12の外縁と交差する当該指し示し位置側の位置を、オブジェクト移動先を算出するための指示位置として、当該指示位置を用いてオブジェクトの移動先の位置を算出してもよい。なお、移動手段は、第1のユーザ入力に基づいて、オブジェクトに定義された移動可能面に沿って当該オブジェクトを移動させる処理を行うものであり、一例としてステップS117の処理を行うプロセッサ81に相当する。
【0150】
ステップS118において、操作対象であるオブジェクトを奥行移動させる操作が行われているか否かを判定する。例えば、プロセッサ81は、操作データDaを参照して、仮想カメラから遠ざけるまたは近づけるように操作対象を移動させる操作(例えば、右コントローラ4のスティック52を前後に傾倒させる操作)が行われている場合、上記ステップS118において肯定判定する。そして、プロセッサ81は、オブジェクトを奥行方向に移動させる操作が行われている場合、ステップS119に処理を進める。一方、プロセッサ81は、オブジェクトを奥行方向に移動させる操作が行われていない場合、ステップS120に処理を進める。なお、本実施例では、第2のユーザ入力の一例として、奥行移動させる操作を用いている。
【0151】
ステップS119において、プロセッサ81は、奥行方向に移動させる操作に応じて、操作対象であるオブジェクトを仮想カメラから遠ざけるまたは近づけるように移動させ、ステップS120に処理を進める。例えば、プロセッサ81は、操作データDaが右コントローラ4のスティック52を前に傾倒させる操作が行われていることを示している場合、当該傾倒角度に応じた移動距離だけ仮想カメラから遠ざける位置に操作対象であるオブジェクトを移動させ、移動後の位置を用いてオブジェクトデータDhを更新する。また、プロセッサ81は、操作データDaが右コントローラ4のスティック52を後ろに傾倒させる操作が行われていることを示している場合、当該傾倒角度に応じた移動距離だけ仮想カメラに近づける位置に操作対象であるオブジェクトを移動させ、移動後の位置を用いてオブジェクトデータDhを更新する。
【0152】
ステップS120において、プロセッサ81は、操作対象を解除する操作が行われているか否かを判定する。例えば、プロセッサ81は、操作データDaを参照して、操作対象を解除する操作(例えば、右コントローラ4の操作ボタン(Aボタン)53の押下を終了させる操作や操作ボタン(Rボタン)60の押下を終了させる操作)が行われている場合、上記ステップS120において肯定判定する。そして、プロセッサ81は、操作対象を解除する操作が行われている場合、ステップS121に処理を進める。一方、プロセッサ81は、操作対象を解除する操作が行われていない場合、当該サブルーチンによる処理を終了する。
【0153】
ステップS121において、プロセッサ81は、操作対象を解除する処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、操作対象として設定されているオブジェクトの操作対象指定を解除するために、操作対象が設定されていないことを示すデータ(例えば、ヌル(null))を用いて操作対象データDeを更新する。
【0154】
次に、プロセッサ81は、移動フラグをオフに設定し、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、移動フラグをオフに設定して、移動フラグデータDfを更新する。
【0155】
図17に戻り、上記ステップS107のオブジェクト移動処理の後、プロセッサ81は、画像生成表示制御処理を行い(ステップS108)、次のステップに処理を進める。例えば、プロセッサ81は、オブジェクトデータDhに基づいて、仮想空間に複数のオブジェクトを配置して、仮想空間を生成する。また、プロセッサ81は、移動フラグデータDfが示す移動フラグがオンに設定されている場合(オブジェクトを移動させる処理が行われている場合)、操作対象データDeおよび移動可能面データDgを参照して、上記仮想空間に定義されている移動可能面MSの構成面のうち、操作対象のオブジェクトが配置されている構成面に可視グリッドGms1を配置する。また、プロセッサ81は、移動フラグデータDfが示す移動フラグがオフに設定されている場合(オブジェクトを移動させる処理が行われていない場合)、上記ステップS106において算出されている指し示し位置に標識Tを配置する。そして、プロセッサ81は、仮想カメラデータDiに基づいて、仮想空間に仮想カメラを配置し、当該仮想カメラから見た仮想空間画像を取得して、ディスプレイ12に表示する。なお、標識Tは、複数のオブジェクト等が配置されている仮想空間を仮想カメラから見た仮想空間画像に重畳して合成されてもよい。
【0156】
次に、プロセッサ81は、処理を終了するか否かを判定する(ステップS109)。上記ステップS109において処理を終了する条件としては、例えば、処理が終了される条件が満たされたことや、ユーザが処理を終了する操作を行ったこと等がある。プロセッサ81は、処理を終了しない場合に上記ステップS102に戻って処理を繰り返し、処理を終了する場合に当該フローチャートによる処理を終了する。以降、ステップS102~ステップS109の一連の処理は、ステップS109で処理を終了すると判定されるまで繰り返し実行される。
【0157】
このように、本実施例においては、仮想空間において、オブジェクトを上下左右に移動させる場合、交差する部分において所定の角(例えば、90°)を成す複数の構成面を有する移動可能面に沿って移動させることができるため、ユーザが意図からずれた位置に移動すること等を防止することができ、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置することが可能となる。
【0158】
なお、上述した実施例において、本体装置2、左コントローラ3、および右コントローラ4の姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて本体装置2、左コントローラ3、および右コントローラ4の姿勢を検出してもよい。また、オブジェクトを移動させる操作を行うコントローラは、左コントローラ3または右コントローラ4だけでなく、他のコントローラでもよい。
【0159】
また、ゲームシステム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。この場合、オブジェクトを移動する操作を行うための入力装置は、左コントローラ3や右コントローラ4でなくてもよく、別のコントローラ、マウス、タッチパッド、タッチパネル、トラックボール、キーボード、十字キー、スライドパッド等であってもよい。
【0160】
また、上述した説明では情報処理をゲームシステム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、ゲームシステム1がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、ゲームシステム1のプロセッサ81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、ゲームシステム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
【0161】
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
【0162】
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
【0163】
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じてゲームシステム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD-ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
【0164】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。
【産業上の利用可能性】
【0165】
以上のように、本発明は、ユーザが意図するように仮想空間内でオブジェクトを移動させて配置すること等を可能とする情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法等として利用することができる。
【符号の説明】
【0166】
1…情報処理システム
2…本体装置
3…左コントローラ
4…右コントローラ
11…ハウジング
12…ディスプレイ
17…左側端子
21…右側端子
27…下側端子
29…照度センサ
32、52…アナログスティック
42、64…端子
81…プロセッサ
82…ネットワーク通信部
83…コントローラ通信部
85…DRAM
101、111…通信制御部
89、104、114…加速度センサ
90、105、115…角速度センサ