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