<第1の実施形態>
[1.ゲームシステムの全体構成]
図1を参照して、本発明の第1の実施形態に係るゲームシステムについて説明する。図1は、ゲームシステムの外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図1において、ゲームシステム1は、テレビジョン受像器(以下、単に「テレビ」と記載する)2、ゲーム装置3、光ディスク4、コントローラ5、およびマーカ装置6を含む。本システムは、コントローラ5を用いたゲーム操作に基づいてゲーム装置3でゲーム処理を実行するものである。
なお、ゲームシステム1は、操作装置(コントローラ5)の姿勢に基づいてポインティングを行うためのポインティングシステムの一例である。本実施形態においては、図1に示す各装置を含む構成であるゲームシステム1を例として説明するが、ゲームシステム1は、操作装置の姿勢を算出し、ポインティング位置(ポインティング操作によって指示される位置)を表すポインティング座標を当該姿勢に基づいて算出することができる構成を有していればよい。例えば、ゲームシステム1はゲーム装置3とコントローラ5のみを含む構成であってもよい。また、他の実施形態においては、姿勢算出処理と、ポインティング座標の算出処理とを実行可能な携帯型(可搬型)の情報処理装置によって、本実施形態における情報処理が実行されてもよい。
ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置3において実行されるための情報処理プログラム(典型的にはゲームプログラム)が記憶されている。ゲーム装置3の前面には光ディスク4の挿入口が設けられている。ゲーム装置3は、挿入口に挿入された光ディスク4に記憶されている情報処理プログラムを読み出して実行することによってゲーム処理を実行する。
ゲーム装置3には、表示装置の一例であるテレビ2が接続コードを介して接続される。テレビ2は、ゲーム装置3において実行されるゲーム処理によって得られるゲーム画像を表示する。テレビ2はスピーカ2a(図2)を有しており、スピーカ2aは、上記ゲーム処理の結果得られるゲーム音声を出力する。なお、他の実施形態においては、ゲーム装置3と据置型の表示装置とは一体となっていてもよい。また、ゲーム装置3とテレビ2との通信は無線通信であってもよい。
テレビ2の画面の周辺(図1では画面の上側)には、マーカ装置6が設置される。詳細は後述するが、ユーザ(プレイヤ)はコントローラ5を動かすゲーム操作を行うことができ、マーカ装置6は、コントローラ5の動きや位置や姿勢等をゲーム装置3が算出するために用いられる。マーカ装置6は、その両端に2つのマーカ6Rおよび6Lを備えている。マーカ6R(マーカ6Lも同様)は、具体的には1以上の赤外LED(Light Emitting Diode)であり、テレビ2の前方に向かって赤外光を出力する。マーカ装置6は有線で(無線であってもよい)ゲーム装置3に接続されており、ゲーム装置3はマーカ装置6が備える各赤外LEDの点灯を制御することが可能である。なお、マーカ装置6は可搬型であり、ユーザはマーカ装置6を自由な位置に設置することができる。図1ではマーカ装置6がテレビ2の上に設置された態様を表しているが、マーカ装置6を設置する位置および向きは任意である。
コントローラ5は、自機に対して行われた操作の内容を表す操作データをゲーム装置3に与えるものである。コントローラ5とゲーム装置3とは無線通信によって通信可能である。本実施形態では、コントローラ5とゲーム装置3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ5とゲーム装置3とは有線で接続されてもよい。また、図1では、ゲームシステム1に含まれるコントローラ5は1つとするが、ゲームシステム1は複数のコントローラ5を含んでいてもよい。つまり、ゲーム装置3は複数のコントローラと通信可能であり、所定台数のコントローラを同時に使用することによって複数人でゲームをプレイすることが可能である。コントローラ5の詳細な構成については後述する。
[2.ゲーム装置3の内部構成]
次に、図2を参照して、ゲーム装置3の内部構成について説明する。図2は、ゲーム装置3の構成を示すブロック図である。ゲーム装置3は、CPU10、システムLSI11、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15等を有する。
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムLSI11の内部構成について後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
また、システムLSI11には、入出力プロセッサ(I/Oプロセッサ)11a、GPU(Graphics Processor Unit)11b、DSP(Digital Signal Processor)11c、VRAM11d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、画像がテレビ2に表示されるとともに音がスピーカ2aから出力される。
入出力プロセッサ11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、およびメモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
ゲーム装置3は、インターネット等のネットワークに接続して外部の情報処理装置(例えば他のゲーム装置や、各種サーバ等)と通信を行うことが可能である。すなわち、入出力プロセッサ11aは、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置3と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
また、ゲーム装置3は、コントローラ5からの操作データを受信することが可能である。すなわち、入出力プロセッサ11aは、コントローラ5から送信される操作データをアンテナ23および無線コントローラモジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
また、ゲーム装置3は、他の機器や外部記憶媒体に接続することが可能である。すなわち、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
ゲーム装置3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、図示しないACアダプタによって外部の電源からゲーム装置3の各構成要素に対して電力が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
[3.コントローラ5の構成]
次に、図3〜図7を参照して、コントローラ5について説明する。図3は、コントローラ5の外観構成を示す斜視図である。図4は、コントローラ5の外観構成を示す斜視図である。図3は、コントローラ5の上側後方から見た斜視図であり、図4は、コントローラ5を下側前方から見た斜視図である。
図3および図4において、コントローラ5は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。ユーザは、コントローラ5に設けられたボタンを押下すること、および、コントローラ5自体を動かしてその位置や姿勢(傾き)を変えることによってゲーム操作を行うことができる。
ハウジング31には、複数の操作ボタンが設けられる。図3に示すように、ハウジング31の上面には、十字ボタン32a、1番ボタン32b、2番ボタン32c、Aボタン32d、マイナスボタン32e、ホームボタン32f、プラスボタン32g、および電源ボタン32hが設けられる。本明細書では、これらのボタン32a〜32hが設けられるハウジング31の上面を「ボタン面」と呼ぶことがある。一方、図4に示すように、ハウジング31の下面には凹部が形成されており、当該凹部の後面側傾斜面にはBボタン32iが設けられる。これらの各操作ボタン32a〜32iには、ゲーム装置3が実行する情報処理プログラムに応じた機能が適宜割り当てられる。また、電源ボタン32hは遠隔からゲーム装置3本体の電源をオン/オフするためのものである。ホームボタン32fおよび電源ボタン32hは、その上面がハウジング31の上面に埋没している。これによって、ユーザがホームボタン32fまたは電源ボタン32hを誤って押下することを防止することができる。
ハウジング31の後面にはコネクタ33が設けられている。コネクタ33は、コントローラ5に他の機器(例えば、他のセンサユニットやコントローラ)を接続するために利用される。また、ハウジング31の後面におけるコネクタ33の両側には、上記他の機器が容易に離脱することを防止するために係止穴33aが設けられている。
ハウジング31上面の後方には複数(図3では4つ)のLED34a〜34dが設けられる。ここで、コントローラ5には、他のコントローラと区別するためにコントローラ種別(番号)が付与される。各LED34a〜34dは、コントローラ5に現在設定されている上記コントローラ種別をユーザに通知したり、コントローラ5の電池残量をユーザに通知したりする等の目的で用いられる。具体的には、コントローラ5を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のLED34a〜34dのいずれか1つが点灯する。
また、コントローラ5は撮像情報演算部35(図6)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。光入射面35aは、マーカ6Rおよび6Lからの赤外光を少なくとも透過する材質で構成される。
ハウジング31上面における1番ボタン32bとホームボタン32fとの間には、コントローラ5に内蔵されるスピーカ47(図5)からの音を外部に放出するための音抜き孔31aが形成されている。
次に、図5および図6を参照して、コントローラ5の内部構造について説明する。図5および図6は、コントローラ5の内部構造を示す図である。なお、図5は、コントローラ5の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6は、コントローラ5の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6に示す斜視図は、図5に示す基板30を裏面から見た斜視図となっている。
図5において、ハウジング31の内部には基板30が固設されており、当該基板30の上主面上に各操作ボタン32a〜32h、各LED34a〜34d、加速度センサ37、アンテナ45、およびスピーカ47等が設けられる。これらは、基板30等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図6参照)に接続される。本実施形態では、加速度センサ37は、X軸方向に関してコントローラ5の中心からずれた位置に配置されている。これによって、コントローラ5をZ軸回りに回転させたときのコントローラ5の動きが算出しやすくなる。また、加速度センサ37は、長手方向(Z軸方向)に関してコントローラ5の中心よりも前方に配置されている。また、無線モジュール44(図6)およびアンテナ45によって、コントローラ5がワイヤレスコントローラとして機能する。
一方、図6において、基板30の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ5の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を備えている。これらの部材38〜41はそれぞれ基板30の下主面に取り付けられる。
さらに、基板30の下主面上には、上記マイコン42およびバイブレータ46が設けられている。バイブレータ46は、例えば振動モータやソレノイドであり、基板30等に形成された配線によってマイコン42と接続される。マイコン42の指示によりバイブレータ46が作動することによってコントローラ5に振動が発生する。これによって、コントローラ5を把持しているユーザの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ46は、ハウジング31のやや前方寄りに配置される。つまり、バイブレータ46がコントローラ5の中心よりも端側に配置することによって、バイブレータ46の振動によりコントローラ5全体を大きく振動させることができる。また、コネクタ33は、基板30の下主面上の後端縁に取り付けられる。なお、図5および図6に示す他、コントローラ5は、マイコン42の基本クロックを生成する水晶振動子、スピーカ47に音声信号を出力するアンプ等を備えている。
なお、図3〜図6に示したコントローラ5の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であってもよい。また、本実施形態では、撮像手段による撮像方向はZ軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ5における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。
図7は、コントローラ5の構成を示すブロック図である。コントローラ5は、操作部32(各操作ボタン32a〜32i)、撮像情報演算部35、通信部36、加速度センサ37、およびジャイロセンサ48を備えている。コントローラ5は、自機に対して行われた操作内容を表すデータを操作データとしてゲーム装置3へ送信するものである。
操作部32は、上述した各操作ボタン32a〜32iを含み、各操作ボタン32a〜32iに対する入力状態(各操作ボタン32a〜32iが押下されたか否か)を表す操作ボタンデータを通信部36のマイコン42へ出力する。
撮像情報演算部35は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部35は、例えば最大200フレーム/秒程度のサンプリング周期を有するので、比較的高速なコントローラ5の動きでも追跡して解析することができる。
撮像情報演算部35は、赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を含んでいる。赤外線フィルタ38は、コントローラ5の前方から入射する光から赤外線のみを通過させる。レンズ39は、赤外線フィルタ38を透過した赤外線を集光して撮像素子40へ入射させる。撮像素子40は、例えばCMOSセンサやあるいはCCDセンサのような固体撮像素子であり、レンズ39が集光した赤外線を受光して画像信号を出力する。ここで、撮像対象となるマーカ装置6は、赤外光を出力するマーカで構成される。したがって、赤外線フィルタ38を設けることによって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを受光して画像データを生成するので、撮像対象(マーカ装置6)の画像をより正確に撮像することができる。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象の位置を算出する。画像処理回路41は、算出された位置を示す座標を通信部36のマイコン42へ出力する。この座標のデータは、マイコン42によって操作データとしてゲーム装置3に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ5自体の向き(傾斜角度)や位置に対応して変化するので、ゲーム装置3はこのマーカ座標を用いてコントローラ5の向きや位置を算出することができる。
なお、他の実施形態においては、コントローラ5は画像処理回路41を備えていない構成であってもよく、撮像画像自体がコントローラ5からゲーム装置3へ送信されてもよい。このとき、ゲーム装置3は、画像処理回路41と同様の機能を有する回路あるいはプログラムを有しており、上記マーカ座標を算出するようにしてもよい。
加速度センサ37は、コントローラ5の加速度(重力加速度を含む)を検出する、すなわち、コントローラ5に加わる力(重力を含む)を検出する。加速度センサ37は、当該加速度センサ37の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度(直線加速度)の値を検出する。例えば、2軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。なお、加速度センサ37は、例えば静電容量式のMEMS(Micro Electro Mechanical System)型加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
本実施形態では、加速度センサ37は、コントローラ5を基準とした上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ5を基準に設定されるXYZ座標系(コントローラ座標系)における3次元のベクトルとして表される。
加速度センサ37が検出した加速度を表すデータ(加速度データ)は、通信部36へ出力される。なお、加速度センサ37が検出した加速度は、コントローラ5自体の向き(傾斜角度)や移動に対応して変化するので、ゲーム装置3は取得された加速度データを用いてコントローラ5の向きや移動を算出することができる。本実施形態では、ゲーム装置3は、取得された加速度データに基づいてコントローラ5の姿勢や傾斜角度等を算出する。
なお、加速度センサ37から出力される加速度の信号に基づいて、ゲーム装置3のプロセッサ(例えばCPU10)またはコントローラ5のプロセッサ(例えばマイコン42)等のコンピュータが処理を行うことによって、コントローラ5に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ37を搭載するコントローラ5が静止状態であることを前提としてコンピュータ側の処理が実行される場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理が実行される場合)、コントローラ5が現実に静止状態であれば、検出された加速度に基づいてコントローラ5の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ37の検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かによって、コントローラ5が基準に対して傾いているか否かを知ることができるし、その大きさによって基準に対してどの程度傾いているかも知ることができる。また、多軸の加速度センサ37の場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ5がどの程度傾いているかをより詳細に知ることができる。この場合において、プロセッサは、加速度センサ37からの出力に基づいてコントローラ5の傾斜角度を算出してもよいし、当該傾斜角度を算出せずに、コントローラ5の傾斜方向を算出するようにしてもよい。このように、加速度センサ37をプロセッサと組み合わせて用いることによって、コントローラ5の傾斜角度または姿勢を判定することができる。
一方、コントローラ5が動的な状態(コントローラ5が動かされている状態)であることを前提とする場合には、加速度センサ37は重力加速度に加えてコントローラ5の移動に応じた加速度を検出するので、検出された加速度から重力加速度の成分を所定の処理により除去することによってコントローラ5の移動方向を知ることができる。また、コントローラ5が動的な状態であることを前提とする場合であっても、検出された加速度から、加速度センサの移動に応じた加速度の成分を所定の処理により除去することによって、重力方向に対するコントローラ5の傾きを知ることが可能である。なお、他の実施例では、加速度センサ37は、内蔵の加速度検出手段で検出された加速度信号をマイコン42へ出力する前に当該加速度信号に対して所定の処理を行うための、組込み式の処理装置または他の種類の専用の処理装置を備えていてもよい。組込み式または専用の処理装置は、例えば、加速度センサ37が静的な加速度(例えば、重力加速度)を検出するために用いられる場合、加速度信号を傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
ジャイロセンサ48は、3軸(本実施形態では、XYZ軸)回りの角速度を検出する。本明細書では、コントローラ5の撮像方向(Z軸正方向)を基準として、X軸回りの回転方向をピッチ方向、Y軸回りの回転方向をヨー方向、Z軸回りの回転方向をロール方向と呼ぶ。ジャイロセンサ48は、3軸回りの角速度を検出することができればよく、用いるジャイロセンサの数および組み合わせはどのようなものであってもよい。例えば、ジャイロセンサ48は、3軸ジャイロセンサであってもよいし、2軸ジャイロセンサと1軸ジャイロセンサとを組み合わせて3軸周りの角速度を検出するものであってもよい。ジャイロセンサ48で検出された角速度を表すデータは、通信部36へ出力される。また、ジャイロセンサ48は1軸または2軸回りの角速度を検出するものであってもよい。
通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理を行う際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータをゲーム装置3へ無線送信する無線モジュール44を制御する。
操作部32、撮像情報演算部35、加速度センサ37、およびジャイロセンサ48からマイコン42へ出力されたデータは、一時的にメモリ43に格納される。これらのデータは、操作データ(コントローラ操作データ)としてゲーム装置3へ送信される。すなわち、マイコン42は、ゲーム装置3の無線コントローラモジュール19への送信タイミングが到来すると、メモリ43に格納されている操作データを無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変調されてコントローラ5から送信される。微弱電波信号はゲーム装置3側の無線コントローラモジュール19で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、コントローラ5から取得した操作データを用いてゲーム処理を行う。なお、通信部36から無線コントローラモジュール19への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ5の通信部36は、例えば1/200秒に1回の割合で操作データをゲーム装置3の無線コントローラモジュール19へ出力する。
以上のように、コントローラ5は、自機に対する操作を表す操作データとして、マーカ座標データ、加速度データ、角速度データ、および操作ボタンデータを送信可能である。また、ゲーム装置3は、上記操作データをゲーム入力として用いてゲーム処理を実行する。したがって、上記コントローラ5を用いることによって、ユーザは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ5自体を動かすゲーム操作を行うことができる。例えば、コントローラ5を任意の姿勢に傾ける操作、コントローラ5によって画面上の任意の位置を指示する操作、および、コントローラ5自体を動かす操作等を行うことが可能となる。
なお、コントローラ5は、コントローラ5の動き(位置や姿勢、あるいは、位置や姿勢の変化を含む)を算出するための構成として、ジャイロセンサ48、加速度センサ37、ならびに撮像素子40を有する入力装置8を例として説明する。ただし、他の実施形態においては、コントローラ5は、これらの構成のうち1つまたは2つのみを備える構成であってもよい。また、他の実施形態においては、これらの構成に代えて、または、これらの構成とともに、他のセンサを備えていてもよい。
[4.ポインティング座標の算出処理の概要]
次に、図8〜図10を参照して、ゲーム装置3において実行されるポインティング座標(コントローラ5によってポインティングされた位置を表す座標)の算出処理の概要を説明する。本実施形態では、ユーザ(プレイヤ)は、コントローラ5を用いて、空間あるいは平面における位置を指定するポインティング操作を行うことが可能である。ユーザは、ポインティング操作を含むコントローラ5に対する操作によってゲーム操作を行う。
まず、ポインティング座標の算出方法の概要を説明する。図8は、ポインティング座標を算出するために設定される所定空間を示す図である。図8において、所定空間(仮想空間)には、コントローラ5と座標面Qとが配置される。所定空間は、現実の空間を表すものであってもよいし、ゲーム空間を表すものであってもよい。つまり、所定空間における位置を表すための空間座標系(X’Y’Z’座標系)は、現実の空間内における位置を表すように設定されてもよいし、所定のゲーム空間等における位置を表すように設定されてもよい。本実施形態においては、Y’軸が所定空間における鉛直方向(Y’軸負方向が重力方向)を向き、X’軸およびZ’軸が所定空間における水平方向を向くように空間座標系が設定される。座標面Qは、ポインティング座標を算出するために設定される平面座標系(ab座標系)によって規定される面である。つまり、空間座標系とは異なる平面座標系が座標面Q上に設定され、座標面Q上の位置がポインティング位置として算出される。本実施形態においては、所定空間においてコントローラ5の位置は固定的に配置され、座標面Qはコントローラ5から所定距離だけ離れた位置に配置される。
ゲーム装置3は、上記ポインティング座標をコントローラ5の姿勢に基づいて算出する。本実施形態においては、ポインティング座標はコントローラ5の指示方向に基づいて算出される。指示方向とは、コントローラ5の姿勢によって決まる方向である。本実施形態においては、指示方向は、長手形状であるコントローラ5の長手方向(ベクトルZの方向)である。図8に示すように、ゲーム装置3は、平面座標系によって規定される座標面Q上において指示方向が指し示す位置を表すポインティング座標を算出する。ここで、「座標面Q上において指示方向が指し示す位置」とは、理想的には、コントローラ5の位置を通り指示方向に延びる直線と座標面Qとの交点Rの位置である。ただし実際には、ゲーム装置3は、ポインティング座標として上記交点Rの座標を厳密に算出する必要はなく、当該交点Rの付近の位置を表す座標を算出すればよい。以上のように、本実施形態においては、ユーザは、コントローラ5の指示方向を変化させることによってポインティング位置を変更することができるので、コントローラ5を用いてポインティング操作を容易に行うことができる。なお、他の実施形態においては、ポインティング座標は、姿勢に基づいて算出されればよく、姿勢に応じて変化する位置であって、上記交点Rの位置とは異なる他の位置を表す座標であってもよい。
本実施形態においては、ユーザは、座標面Q(平面座標系)を所望の位置に設定することができる。図9は、座標面Qの設定時におけるコントローラ5と座標面Qとを示す図である。コントローラ5に対する所定の設定操作がユーザによって行われた場合、ゲーム装置3は、設定操作時における指示方向の先に座標面Qを配置する。図9に示すように、座標面Qは、コントローラ5の位置から指示方向へ延ばした直線上に原点Oが位置するように配置される。座標面Qは、コントローラ5の位置から所定距離だけ離れた位置に、指示方向と垂直となるように配置される。座標面Qが配置された後、設定操作が再度行われるまでの間は、配置された座標面Q(平面座標系)を用いてポインティング座標が算出される。したがって、ユーザは、コントローラ5を自由な方向に向けて設定操作を行うことによって、設定操作時におけるコントローラ5の方向を基準としてポインティング操作を行うことができる。
また、ゲーム装置3は、上記所定空間を基準として(所定空間における所定方向を基準として)上記平面座標系の座標軸の向きを設定することが可能であるとともに、コントローラ5を基準として(コントローラ5の向きを基準として)当該座標軸の向きを設定することが可能である。本実施形態においては、コントローラ5の指示方向が水平方向に近い場合、所定空間における所定方向を基準として座標軸の向きが設定される。具体的には、図9に示すように、座標面Qの上方向に対応するb軸が所定空間における鉛直上向き(Y’軸正方向)を向くように平面座標系が設定される。
また、図10は、指示方向が鉛直方向に近い場合における、設定時におけるコントローラ5と座標面Qとを示す図である。本実施形態においては、コントローラ5の指示方向が鉛直方向に近い場合、コントローラ5の向きを基準として座標軸の向きが設定される。具体的には、図10に示すように、座標面Qの上方向に対応するb軸がコントローラ5における上方向(ベクトルY)を向くように平面座標系が設定される。なお、コントローラ5の指示方向が鉛直方向に近い場合も指示方向が水平方向に近い場合と同様、座標面Qは、コントローラ5の位置から指示方向へ所定距離だけ離れた位置に、指示方向と垂直となるように配置される。
以上のように、本実施形態においては、座標面Qの座標軸の向きは、設定操作時における指示方向に応じて決定される。すなわち、ゲーム装置3は、指示方向が所定の基準よりも水平方向に近い場合、所定空間における鉛直方向を基準として座標軸の向きを設定し(図9)、指示方向が所定の基準よりも鉛直方向に近い場合、コントローラ5の所定方向を基準として当該座標軸の向きを設定する(図10)。つまり、ゲーム装置3は、異なる2種類の基準を指示方向に応じて使い分けることによって座標軸の向きを設定する。
ここで、座標軸の向きを単一の基準で設定する方法では、座標軸の向きを適切に設定することができない場合がある。例えば、所定空間における所定方向を常に基準として座標軸の向きを設定する方法では、コントローラ5の指示方向が鉛直方向に近い場合(図10)において、座標軸の向きを適切に設定することができないおそれがある。すなわち、上記の方法によれば、指示方向が鉛直方向に近い場合、指示方向と鉛直方向との差が小さいために、指示方向が少し変化するだけで座標軸の向きが大きく変化してしまう。そのため、算出されるコントローラ5の姿勢に若干の誤差があったり、ユーザが意図している姿勢と実際に算出される姿勢との間に若干の差があったりするだけで、座標軸の向きがユーザが想定している向きから大きく異なってしまう。そして、座標軸の向きがユーザの意図とは異なる向きに設定される結果、ユーザはポインティング操作に違和感を抱いてしまう。また、指示方向が鉛直方向と一致する場合には、当該鉛直方向を基準にして座標軸の向きを決定することができないので、座標軸の向きを適切に設定することができない。
また例えば、コントローラ5の所定方向を常に基準として座標軸の向きを設定する方法では、コントローラ5の指示方向が水平方向に近い場合(図9)において、座標軸の向きを適切に設定することができないおそれがある。すなわち、上記の方法によれば、コントローラ5の向きによって座標系の向きが変化することになるので、ユーザによるコントローラ5の持ち方によって座標系の向きが異なる。例えば、ユーザがコントローラ5の上方向が所定空間における水平方向を向くようにコントローラ5を持っている場合、上記の方法では、座標系の上方向が所定空間における水平方向となるように座標系が設定される。しかしながら、指示方向が水平方向に近い場合には、コントローラ5の向きあるいは持ち方に関わらず、所定空間における向きと座標系の向きとが一致する(具体的には、所定空間における鉛直上向きが座標系の上方向となる)ことがユーザにとって自然で違和感がないと考えられる。つまり、上記の方法によれば、指示方向が水平方向に近い場合においては、コントローラ5の持ち方によって座標系の上方向が変化してしまう結果、座標軸の向きに関してユーザが違和感を抱く場合がある。
以上のように、座標軸の向きを単一の基準で設定する方法では、指示方向がある方向となる場合に座標軸の向きを適切に設定することができない結果、座標系の向きにユーザが違和感を抱き、ポインティング操作の操作性が悪くなるおそれがある。
これに対して、本実施形態によれば、ゲーム装置3は、異なる2種類の基準によって座標軸の向きを設定することが可能である。すなわち、指示方向が所定の基準よりも水平方向に近い場合には、所定空間における鉛直方向を基準として上記平面座標系の座標軸の向きが設定され(図9)、指示方向が所定の基準よりも鉛直方向に近い場合には、コントローラ5の所定方向を基準として当該座標軸の向きが設定される(図10)。これによれば、指示方向が所定の基準よりも水平方向に近い場合には、所定空間における向きと座標系の向きとが一致する(具体的には、所定空間における鉛直上向きが座標系の上方向となる)ようにすることによって、ユーザにとって適切な座標系を設定することができる。また、指示方向が所定の基準よりも鉛直方向に近い場合には、コントローラ5の向きに応じた座標軸の向きとすることによって、ユーザにとって適切な座標系を設定することができる。このように、本実施形態によれば、指示方向が水平方向に近い場合であっても鉛直方向に近い場合であっても、座標系を適切に設定することができ、操作性の良いポインティング操作をユーザに提供することができる。
[5.ゲーム処理の詳細]
次に、本ゲームシステム1において実行されるゲーム処理(情報処理)の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図11は、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図11に示すように、ゲーム装置3のメインメモリには、ゲームプログラム50、操作データ51、および処理用データ56が記憶される。なお、メインメモリには、図11に示すデータの他、ゲームに登場する各種オブジェクトの画像データやゲームに使用される音声データ等、ゲームに必要なデータが記憶される。また、図11に示す各データが記憶される記憶手段はどのようなものであってもよく、他の実施形態においては、当該各データの一部はフラッシュメモリ17やVRAM11d等に記憶されてもよい。
ゲームプログラム50は、適宜の方法でゲーム装置3に取得され、ゲーム装置3において実行される。本実施形態においては、ゲームプログラム50は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。なお、ゲームプログラム50は、光ディスク4に代えて、フラッシュメモリ17やゲーム装置3の外部装置から(例えばインターネットを介して)取得されてもよい。また、ゲームプログラム50に含まれる一部(例えば、コントローラ5の姿勢を算出するためのプログラム)または全部が、ゲーム装置3内に予め記憶されていてもよい。
操作データ51は、コントローラ5に対するユーザ(プレイヤ)の操作を表すデータである。操作データ51は、コントローラ5から送信されてゲーム装置3において受信(取得)され、メインメモリに記憶される。なお、ゲーム装置3は、複数のコントローラと通信可能であり、各コントローラから操作データをそれぞれ取得することが可能である。コントローラが複数である場合、各コントローラからそれぞれ送信されてくる各操作データがメインメモリにそれぞれ記憶される。メインメモリには、コントローラ5毎に最新の(最後に取得された)ものから順に所定個数の操作データが記憶されてもよい。本実施形態においては、操作データ51には、角速度データ52、加速度データ53、マーカ座標データ54、および操作ボタンデータ55が含まれる。
角速度データ52は、ジャイロセンサ48によって検出された角速度を表すデータである。角速度データ52は、コントローラ5の角速度を表すものであればよく、本実施形態においては、図3に示すXYZの3軸回りのそれぞれの角速度を表す。なお、他の実施形態においては、角速度データ52は、任意の1以上の方向に関する角速度を表すものであってもよい。
加速度データ53は、加速度センサ37によって検出された加速度(加速度ベクトル)を表すデータである。加速度データ53は、コントローラ5の加速度を表すものであればよく、本実施形態においては、図3に示すXYZの3軸の方向に関する加速度を各成分とする3次元の加速度ベクトルを表す。なお、他の実施形態においては、加速度データ53は、任意の1以上の方向に関する加速度を表すものであってもよい。
マーカ座標データ54は、撮像情報演算部35の画像処理回路41によって算出される座標、すなわち上記マーカ座標を表すデータである。マーカ座標は、撮像画像に対応する平面上の位置を表すための2次元座標系で表現される。なお、撮像素子40の撮像可能な範囲内にマーカ6Rおよび6Lがそれぞれ含まれるかどうかによって、マーカ座標データ54は、2つのマーカ座標を表す場合もあるし、1つのマーカ座標を表す場合もあるし、マーカ座標がないことを表す場合もある。
操作ボタンデータ55は、各操作ボタン32a〜32iに対する入力状態を示すデータである。
なお、操作データ51は、コントローラ5に対するプレイヤの操作を表すものであればよく、本実施形態において操作データ51に含まれる各データの一部のみを含むものであってもよい。また、コントローラ5が他の入力手段(例えば、タッチパネルやアナログスティック等)を有する場合には、操作データ51は、当該他の入力手段に対する操作を表すデータを含んでいてもよい。なお、コントローラ5自体の姿勢をゲーム操作として用いる場合には、操作データ51は、角速度データ52、加速度データ53、またはマーカ座標データ54のように、コントローラ5自体の姿勢に応じて値が変化するデータを含むようにする。
処理用データ56は、後述するゲーム処理(図12)において用いられるデータである。処理用データ56は、姿勢データ57、傾斜度データ58、座標面データ59、ポインティング座標データ63を含む。なお、図11に示すデータの他、処理用データ56は、ゲームに登場する各種オブジェクトに設定される各種パラメータを表すデータ等、ゲーム処理において用いられる各種データを含む。
姿勢データ57は、コントローラ5の姿勢を表すデータである。コントローラ5の姿勢は、例えば、所定の基準姿勢から現在の姿勢への回転を表す回転行列によって表現されてもよいし、3次のベクトルまたは3つの角度によって表現されてもよい。また、本実施形態においては、コントローラ5の姿勢として3次元空間における姿勢が用いられるが、他の実施形態においては、2次元平面における姿勢が用いられてもよい。本実施形態では、姿勢データ57は、上記操作データ51に含まれる角速度データ52、加速度データ53、およびマーカ座標データ54に基づいて算出される。姿勢データ57の算出方法についてはステップS3で後述する。
傾斜度データ58は、コントローラ5の指示方向の傾斜度を表すデータである。傾斜度は、指示方向が所定空間における鉛直方向(または水平方向)からどの程度傾いているかを示す。傾斜度データ58は、姿勢データ57に基づいて算出される。
座標面データ59は、上述の座標面Qの姿勢を表すデータである。座標面データ59は、上方向データ60、右方向データ61、および奥行き方向データ62を含む。上方向データ60は、座標面Q(ab座標系)における上方向を表し、具体的には、b軸正方向を向く単位ベクトルを表す。右方向データ61は、座標面Q(ab座標系)における右方向を表し、具体的には、a軸正方向を向く単位ベクトルを表す。奥行き方向データ62は、座標面Q(ab座標系)における奥行き方向を表し、具体的には、座標面Qに垂直であり、コントローラ5の位置から原点Oの方を向く単位ベクトルを表す。座標面データ59は、姿勢データ57および傾斜度データ58に基づいて算出される。
ポインティング座標データ63は、上述のポインティング座標を表すデータである。すなわち、ポインティング座標データ63は、ab座標系における2次元座標を表す。ポインティング座標データ63は、上記姿勢データ57および座標面データ59に基づいて算出される。
次に、ゲーム装置3において実行されるゲーム処理の詳細を、図12〜図17を用いて説明する。図12は、ゲーム装置3において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図12に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。なお、ゲーム装置3においては、電源投入後にゲームプログラムがすぐに実行される構成であってもよいし、電源投入後にまず所定のメニュー画面を表示する内蔵プログラムが実行され、その後例えばプレイヤによるメニュー画面に対する選択操作によってゲームの開始が指示されたことに応じてゲームプログラムが実行される構成であってもよい。
なお、以下で説明するフローチャート(図12および図13)における各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判断ステップで利用される閾値も、単なる一例に過ぎず、必要に応じて他の値を採用してもよい。また、本実施形態では、上記フローチャートの各ステップの処理をCPU10が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、CPU10以外のプロセッサや専用回路が実行するようにしてもよい。
まずステップS1において、CPU10は初期処理を実行する。初期処理は、仮想のゲーム空間を構築し、ゲーム空間に登場する各オブジェクトを初期位置に配置したり、ゲーム処理で用いる各種パラメータの初期値を設定したりする処理である。本実施形態においては、初期処理において座標面は所定の初期位置および初期姿勢に設定される。すなわち、所定の初期位置および初期姿勢を表すデータが座標面データ59としてメインメモリに記憶される。なお、他の実施形態においては、初期処理において座標面は設定されなくてもよい。このとき、後述するステップS2〜S8の処理ループにおいて、設定操作が最初に行われるまでは、ポインティング座標を算出する処理(ステップS6)は実行されなくてもよい。上記ステップS1の次にステップS2の処理が実行される。以降、ステップS2〜S8の一連の処理からなる処理ループが所定時間(1フレーム時間)に1回の割合で繰り返し実行される。
ステップS2において、CPU10は、コントローラ5から操作データを取得する。すなわち、コントローラ5は操作データをゲーム装置3へ繰り返し送信するので、ゲーム装置3においては、無線コントローラモジュール19が操作データを逐次受信し、受信された操作データが入出力プロセッサ11aによってメインメモリに逐次記憶される。メインメモリに記憶される操作データ51は、後述するステップS3〜S7の処理における適宜のタイミングで読み出される。ステップS2の次にステップS3の処理が実行される。
ステップS3において、CPU10は、コントローラ5の姿勢を算出する。本実施形態においては、コントローラ5の姿勢は、操作データ51が表す、姿勢を算出するための物理量に基づいて算出される。なお、本実施形態においては、姿勢を算出するための物理量として、角速度データ52が表す角速度と、加速度データ53が表す加速度と、マーカ座標データ54が表すマーカ座標とが用いられる。以下、姿勢算出処理の詳細について説明する。
姿勢算出処理においては、まず、CPU10は、角速度データ52に基づいてコントローラ5の姿勢を算出する。角速度に基づく姿勢を算出する方法はどのような方法であってもよいが、当該姿勢は、前回の姿勢(前回の処理ループにおけるステップS3で算出された姿勢)と、今回の角速度(今回の処理ループにおけるステップS2で取得された角速度)とを用いて算出される。具体的には、CPU10は、前回の姿勢を今回の角速度で単位時間分だけ回転させることによって姿勢を算出する。算出された姿勢を表すデータはメインメモリに記憶される。
なお、角速度から姿勢を算出する場合、初期姿勢を定めておくのがよい。つまり、コントローラ5の姿勢を角速度から算出する場合には、CPU10は、最初にコントローラ5の初期姿勢を設定しておく。コントローラ5の初期姿勢は、加速度データ53に基づいて算出されてもよいし、コントローラ5を特定の姿勢にした状態でプレイヤに所定の操作を行わせることで、所定の操作が行われた時点における特定の姿勢を初期姿勢として設定するようにしてもよい。なお、空間における所定方向を基準とした絶対的な姿勢としてコントローラ5の姿勢を算出する場合には上記初期姿勢を算出することが良い。一方、例えばゲーム開始時点におけるコントローラ5の姿勢を基準とした相対的な姿勢としてコントローラ5の姿勢を算出する場合には、上記初期姿勢は算出されなくてもよい。
角速度に基づいて姿勢を算出すると次に、CPU10は、算出された姿勢を、コントローラ5の加速度に基づいて補正する。ここで、コントローラ5がほぼ静止している状態では、コントローラ5に対して加えられる加速度は重力加速度に相当する。つまり、この状態では、加速度データ53が表す加速度ベクトルは、コントローラ5における重力方向を表す。したがって、CPU10は、角速度に基づいて算出された姿勢の下方向(重力方向)を、加速度ベクトルの表す重力方向へ近づける補正を行う。すなわち、上記下方向が加速度ベクトルの表す重力方向へ所定の割合で近づくように、上記姿勢を回転させる。これによって、角速度に基づく姿勢を、加速度に基づく重力方向を考慮した姿勢となるように補正することができる。なお、上記所定の割合は、予め定められた固定値であってもよいし、検出される加速度等に応じて設定されてもよい。
加速度に基づく補正を行うと次に、CPU10は、マーカ座標に基づいてコントローラ5の姿勢を補正する。まず、CPU10は、マーカ座標に基づくコントローラ5の姿勢を算出する。マーカ座標は、撮像画像内における2つのマーカ(マーカ6Lおよび6R、または、マーカ55Aおよび55B)の位置を示すので、これらの位置からコントローラ5の姿勢を算出することができる。次に、CPU10は、マーカ座標に基づく姿勢を用いて、角速度に基づく姿勢を補正する。具体的には、CPU10は、角速度に基づく姿勢をマーカ座標に基づく姿勢へ所定の割合で近づける補正を行う。この所定の割合は、例えば予め定められた固定値である。以上のようにして得られた補正後の姿勢が、コントローラ5の姿勢として用いられる。すなわち、当該補正後の姿勢を表すデータが姿勢データ57としてメインメモリに記憶される。なお、コントローラ5の姿勢はどのような形式で表現されてもよいが、本実施形態においては、当該姿勢は、所定空間においてコントローラ5の先端方向を表すベクトル(後述するベクトルZ)と、コントローラ5の上方向を表すベクトル(後述するベクトルY)とを含む形式で表される。また、本実施形態においては、ベクトルYおよびベクトルZはそれぞれ、長さが1の単位ベクトルに正規化されるものとする。上記ステップS3の次にステップS4の処理が実行される。
以上のように、本実施形態においては、コントローラ5は、ジャイロセンサ48および加速度センサ37を含むセンサ部を備え、ゲーム装置3は、センサ部の検出結果(角速度データ52および加速度データ53)に基づいてコントローラ5の姿勢を算出する。これによって、コントローラ5がどのような向きであってもコントローラ5の姿勢を算出することができる。なお、本実施形態においては、角速度と加速度とマーカ座標という3つの情報に基づいてコントローラ5の姿勢が算出されたが、他の実施形態においては、上記3つの情報のうちの1つまたは2つに基づいて姿勢が算出されてもよい。また、他の実施形態においては、上記3つの情報とは異なる他の情報に基づいて姿勢が算出されてもよい。例えば、ゲームシステム1がコントローラ5を撮像するカメラを備えている場合には、ゲーム装置3は、当該カメラによって撮像された撮像結果を取得し、撮像結果を用いてコントローラ5の姿勢を算出するようにしてもよい。
ステップS4において、CPU10は、座標系を設定するための所定の条件が満たされたか否かを判定する。この所定の条件はどのような条件であってもよく、本実施形態においては、所定の設定操作が行われたことである。つまり、ステップS4においてCPU10は、設定操作が行われたか否かを判定する。設定操作は、ポインティング座標を算出するための座標面Qを設定(あるいは再設定)するための操作である。設定操作はどのような操作であってもよく、本実施形態においては、コントローラ5の所定のボタン(例えばBボタン32i)を押下する操作である。CPU10は、操作データ51をメインメモリから読み出し、上記設定操作が行われたか否かを操作データ51に基づいて判定する。ステップS4の判定結果が肯定である場合、ステップS5の処理が実行される。一方、ステップS4の判定結果が否定である場合、ステップS5の処理がスキップされてステップS6の処理が実行される。
なお、他の実施形態においては、上記所定の条件は、例えばゲームに関する条件であってもよい。具体的には、特定のアイテムを使用する際にポインティング操作が可能となるゲームにおいて、ゲーム装置3は、当該アイテムを取得したこと、あるいは、アイテムの使用が開始されることを上記所定の条件として用いてもよい。
ステップS5において、CPU10は座標系設定処理を実行する。座標系設定処理は、ポインティング座標を算出するための平面座標系(座標面Q)を所定空間に設定する処理である。つまり、本実施形態においては、設定操作が行われたことに応じて、平面座標系が設定される。また、すでに平面座標系が設定されている場合には、設定操作が行われたことに応じて、平面座標系が再設定される。
本実施形態においては、座標系設定処理において、CPU10は、コントローラ5の指示方向が所定の基準よりも水平方向に近い場合(後述する傾斜度A=1の場合)、所定空間における鉛直方向を基準として座標軸の向きを設定する。また、指示方向が所定の基準よりも鉛直方向に近い場合(傾斜度A=0の場合)、CPU10は、コントローラ5の所定方向を基準として座標軸の向きを設定する。このような座標系設定処理によって、指示方向が水平方向に近い場合も鉛直方向に近い場合も、座標系を適切な方向に設定することができる。以下、図13を参照して、座標系設定処理の詳細について説明する。
図13は、図12に示す座標系設定処理(ステップS5)の詳細な流れを示すフローチャートである。座標系設定処理においてはまずステップS11において、CPU10はコントローラ5の指示方向の傾斜度Aを算出する。傾斜度Aは、指示方向が所定空間における水平方向(または鉛直方向)からの傾き度合を示す。ここで、本実施形態における座標系算出処理では、CPU10は、コントローラ5の指示方向が所定空間における水平方向に近いほど、座標系の所定軸(b軸)が鉛直方向に近くなり、指示方向が鉛直方向に近いほど、当該所定軸がコントローラ5の所定方向(上方向)に近くなるように座標系を設定する。上記傾斜度Aは、指示方向が所定空間における水平方向(あるいは鉛直方向)に近いかどうかの指標として用いるために算出される。傾斜度Aは、ステップS3で算出されたコントローラ5の姿勢に基づいて算出される。以下、図14を参照して、傾斜度Aの算出方法を説明する。
図14は、コントローラ5の姿勢と傾斜度Aとの関係を示す図である。傾斜度Aは、所定空間における鉛直方向(図14に示すY’軸方向)または水平方向に対して指示方向が傾斜している度合を表すように算出されれば、どのような方法で算出されてもよい。本実施形態においては、傾斜度Aは、指示方向(ここではコントローラ5の先端方向)を表すベクトルZを用いて算出される。具体的には、図14に示すように、CPU10は、指示方向(ベクトルZ)が水平方向となる場合に最大値(ここでは“1”)となり、指示方向が鉛直方向に近づくにつれて減少し、指示方向が鉛直方向となる場合に最小値(ここでは“0”)となるように傾斜度Aを算出する。具体的には、傾斜度Aは、以下の式(1)に従って算出される。
A=1−Zy×Zy …(1)
上式(1)における変数Zyは、上記ベクトルZのY’成分の値である。なお、本実施形態においては、上式(1)に示すように、指示方向が水平方向に近い場合の他、指示方向が水平方向と鉛直方向との中間の方向となる場合には、傾斜度Aは“1”に近い値となる。ステップS11の具体的な処理としては、CPU10は、姿勢データ57をメインメモリから読み出し、ベクトルZを用いて上式(1)に従って傾斜度Aを算出する。そして、算出した傾斜度Aを表すデータを傾斜度データ58としてメインメモリに記憶する。ステップS11の次にステップS12の処理が実行される。
ステップS12において、CPU10は、設定すべき座標面Qの上方向(b軸)に対応するベクトルU’を算出する。ステップS12で算出されるベクトルU’は、上記上方向に対応するベクトルであり、上方向を正確に表す必要はない。ここでは、ベクトルU’は、当該ベクトルU’を座標面Qに投影したベクトルが座標面Qの上方向(b軸)を表すようなベクトルである。本実施形態においては、座標面Qの上方向は、所定空間における鉛直方向および/またはコントローラ5の上方向を基準として設定される。そのため、ベクトルU’は、上記鉛直方向を向くベクトルPと、コントローラ5の上方向を表すベクトルYとに基づいて算出される。以下、図15を参照して、ベクトルU’の算出方法を声明する。
図15は、ベクトルP、ベクトルY、およびベクトルU’の関係を示す図である。なお、図15においては、コントローラ5のボタン面の側をコントローラ5における上側とし、ボタン面に垂直なベクトルYの方向がコントローラ5の上方向であるとする。ただし、コントローラ5の上方向は、ベクトルYの方向に限らず、コントローラ5を基準とした所定方向であればよい。例えば他の実施形態において、ユーザがコントローラ5のボタン面(ベクトルY)を水平方向に向けてゲーム操作を行う使用態様が想定される場合には、ゲーム装置3は、コントローラ5の側面方向(図3に示すX軸方向)をコントローラ5の上方向として処理を行ってもよい。また、本実施形態においては、ベクトルPは、Y’軸正方向を向く単位ベクトル(=(0,1,0))である。
図15に示すように、ベクトルU’の方向は、所定空間における鉛直方向(ベクトルP)、コントローラ5の上方向(ベクトルY)、あるいはこれら2方向の間の方向を向くように算出される。ベクトルU’は、傾斜度Aが大きいほど鉛直方向に近づき、小さいほどコントローラ5の上方向に近づくように算出される。具体的には、ベクトルU’=(Ux’,Uy’,Uz’)は、以下の式(2)に従って算出される。
Ux’=(0−Yx)×A+Yx
Uy’=(1−Yy)×A+Yy
Uz’=(0−Yz)×A+Yz …(2)
上式(2)において、変数Yx,Yy,およびYzは、それぞれ、ベクトルYのX’成分値、Y’成分値、およびZ’成分値である。上式(2)に示すように、ベクトルU’の終点は、ベクトルYの終点とベクトルPの終点とをA:(1−A)に内分する点となる。
ステップS12の具体的な処理としては、CPU10は、姿勢データ57および傾斜度データ58をメインメモリから読み出し、ベクトルYの各成分値と傾斜度Aを用いて上式(2)に従ってベクトルU’を算出する。そして、算出したベクトルU’を表すデータを上方向データ60としてメインメモリに記憶する。ステップS12の次にステップS13の処理が実行される。
上記ステップS12によって、平面座標系(座標面Q)の上方向(b軸)に対応するベクトルU’が算出される。ここで、傾斜度A=1である場合、ベクトルU’はベクトルPと一致する。つまり、平面座標系の上方向は所定空間における鉛直上方向を向き、平面座標系の上方向は所定空間における鉛直下方向(重力方向)を向く。一方、傾斜度A=0である場合、ベクトルU’はベクトルYと一致する。つまり、平面座標系の上方向(下方向)はコントローラ5の上方向(下方向)を向く。
なお、上述のようにベクトルU’の方向は座標面Qの上方向に一致するとは限らず、ベクトルU’は座標面Qと平行になるとは限らない。そのため、本実施形態においては、以下のステップS13〜S15の処理において、CPU10は、座標面Qの上方向を表す上方向ベクトルUをベクトルU’に基づいて算出する(ベクトルU’をベクトルUへと補正する)。
ステップS13において、CPU10は、設定すべき座標面Qの奥行き方向ベクトルVを算出する。奥行き方向ベクトルVは、座標面Qに垂直であり、コントローラ5の位置から原点Oへの方向を表す。図16は、コントローラ5の姿勢を表す各ベクトルZおよびU’と、座標面Qの姿勢を表す各ベクトルU,V,Wとを示す図である。図16に示すように、奥行き方向ベクトルVは、コントローラ5の指示方向を表すベクトルZと一致する。すなわち、奥行き方向ベクトルV=(Vx,Vy,Vz)は、以下の式(3)に従って算出される。
Vx=Zx
Vy=Zy
Vz=Zz …(3)
上式(3)において、変数Zx,Zy,およびZzは、それぞれ、ベクトルZのX’成分値、Y’成分値、およびZ’成分値である。ステップS13の具体的な処理としては、CPU10は、姿勢データ57をメインメモリから読み出し、ベクトルZの各成分値を用いて上式(3)に従ってベクトルVを算出する。そして、算出したベクトルVを表すデータを奥行き方向データ62としてメインメモリに記憶する。ステップS13の次にステップS14の処理が実行される。
ステップS14において、CPU10は、設定すべき座標面Qの右方向ベクトルWを算出する。右方向ベクトルWは、座標面Qの右方向(a軸正方向)を表す。右方向ベクトルWは、上記ベクトルU’に垂直で、かつ、上記奥行き方向ベクトルVに垂直となるように算出される(図16参照)。具体的には、右方向ベクトルW=(Wx,Wy,Wz)は、以下の式(4)に基づいて算出される。
Wx=Uz’×Vy−Uy’×Vz
Wy=Ux’×Vz−Uz’×Vx
Wz=Uy’×Vx−Ux’×Vy …(4)
上式(4)に示すように、右方向ベクトルWは奥行き方向ベクトルVとベクトルU’との外積として算出される。ステップS14の具体的な処理としては、CPU10は、上方向データ60および奥行き方向データ62をメインメモリから読み出し、ベクトルU’および奥行き方向ベクトルVを用いて上式(4)に従って右方向ベクトルWを算出する。そして、算出された右方向ベクトルを正規化し(長さを1にする)。正規化された右方向ベクトルWを表すデータを右方向データ61としてメインメモリに記憶する。ステップS14の次にステップS15の処理が実行される。
なお、上記ステップS14において、ベクトルU’と奥行き方向ベクトルVとが同方向となる場合には、奥行き方向ベクトルVとベクトルU’との外積が“0”になり、右方向ベクトルWを算出することができない。そのため、上記の場合には、CPU10は、1つ前に算出された姿勢(前回の処理ループにおけるステップS3で算出された姿勢)に基づいて座標系設定処理をやり直すようにしてもよい。あるいは、1つ後に算出された姿勢(次回の処理ループにおけるステップS3で算出された姿勢)に基づいて座標系設定処理をやり直すようにしてもよい。また、上記の場合には、設定操作が無効とされてもよい。すなわち、CPU10は、上記の場合には座標系設定処理を中止し、座標系を設定しないようにしてもよい。
ステップS15において、CPU10は、設定すべき座標面Qの上方向ベクトルUを算出する。上方向ベクトルUは、座標面Qの上方向(b軸正方向)を表す。図16に示すように、上方向ベクトルUは、奥行き方向ベクトルVに垂直で、かつ、右方向ベクトルWに垂直となるように算出される。具体的には、上方向ベクトルU=(Ux,Uy,Uz)は、以下の式(5)に基づいて算出される。
Ux=Vz×Wy−Vy×Wz
Uy=Vx×Wz−Vz×Wx
Uz=Vy×Wx−Vx×Wy …(5)
上式(5)に示すように、上方向ベクトルUは右方向ベクトルWと奥行き方向ベクトルVとの外積として算出される。ステップS15の具体的な処理としては、CPU10は、右方向データ61および奥行き方向データ62をメインメモリから読み出し、右方向ベクトルWおよび奥行き方向ベクトルVを用いて上式(5)に従って上方向ベクトルUを算出する。そして、算出された上方向ベクトルUを表すデータを上方向データ60としてメインメモリに記憶する。ステップS15の後、CPU10は座標系設定処理を終了する。
以上のように、座標系設定処理においては、傾斜度Aは、コントローラ5の指示方向が所定空間における水平方向となる場合に最大値となり、指示方向が所定空間における鉛直方向に近づくにつれて減少し、指示方向が鉛直方向となる場合に最小値となるように算出される(ステップS11)。そして、ベクトルU’は、傾斜度Aが大きいほど鉛直方向に近づき、小さいほどコントローラ5の上方向に近づくように算出される(ステップS12)。その結果、座標面Qの上方向を表すb軸は、指示方向が水平方向に近いほど鉛直方向に近くなり、指示方向が鉛直方向に近いほどコントローラ5の上方向に近くなるように設定される(ステップS15)。
なお、本実施形態においては、指示方向が水平方向となる場合、CPU10は、平面座標系における下方向が所定空間における重力方向を向くように平面座標系を設定する。また、指示方向が鉛直方向となる場合、平面座標系における下方向がコントローラ5の下方向を向くように平面座標系を設定する。したがって、本実施形態においては、指示方向が水平方向となる場合も鉛直方向となる場合も、ユーザにとって違和感なく上方向が設定される。これによって、ポインティング操作の操作性を向上することができる。
また、本実施形態においては、設定操作時における平面座標系の向きは、設定操作時におけるコントローラ5の指示方向に応じて連続的に変化するように設定される。すなわち、平面座標系は、指示方向が水平方向に近いほど所定軸(b軸)が鉛直方向に近くなり、指示方向が鉛直方向に近いほど、当該所定軸がコントローラ5の所定方向(上方向)に近くなるように設定される。換言すれば、指示方向が水平方向に近い場合には、平面座標系の上方向は概ね鉛直方向を向き、指示方向が鉛直方向に近い場合には、平面座標系の上方向は概ねコントローラ5の上方向を向く。したがって、本実施形態においては、指示方向が任意の方向となる場合において、ユーザにとって違和感のない向きに平面座標系が設定される。
なお、他の実施形態においては、設定操作時における平面座標系の向きは、指示方向に応じて連続的に変化するものに限らない。例えば、他の実施形態においては、CPU10は、指示方向が所定の基準より水平方向に近いか、あるいは、鉛直方向に近いかに応じて、平面座標系の所定軸が鉛直方向を向くか、あるいは、当該所定軸がコントローラ5の所定方向を向くかを決定するようにしてもよい。具体的には、上記傾斜度Aが所定の閾値よりも大きい場合、所定軸(b軸)が所定空間における鉛直方向を向き、上記傾斜度Aが当該閾値以下である場合、所定軸(b軸)がコントローラ5の所定方向を向くように、平面座標系が設定されてもよい。これによっても本実施形態と同様、指示方向が任意の方向となる場合において、ユーザにとって違和感のない向きに平面座標系を設定することができる。
なお、本実施形態において、平面座標系の上方向あるいは下方向といった、「平面座標系における方向」は、典型的には、ポインティング操作によってユーザが指示する方向に対応する。例えば、平面座標系の下方向に関するポインティング操作(例えばポインティング座標が下方向に移動される操作)が行われた場合、ゲーム装置3は、ユーザによって下方向の指示が行われたと判断し、カーソルを画面の下方向へ移動させる等の処理を実行する。ただし、座標系における方向は、ポインティング操作によってユーザが指示する方向と必ずしも対応していなくてもよい。
また、上記座標系設定処理においては、上方向ベクトルU、右方向ベクトルW、および奥行き方向ベクトルVが算出されることによって、座標面Q(ab座標系)が設定されたことになる。ここで、本実施形態においては、後述するポインティング座標の算出処理(ステップS6)において原点Oの位置を用いない方法でポインティング座標を算出しているので、座標系設定処理においては原点Oの位置を算出していない。ただし、本実施形態においては、コントローラ5の位置と、コントローラ5から座標面Qまでの距離との情報が予め定められているので、原点Oの位置は、コントローラ5の位置と、当該距離と、ベクトルZとから一意に決まる。つまり、本実施形態では、座標系設定処理において座標面Qの位置は明示的に算出されていないが、実質的には座標面Qの位置が決定されていると言える。なお、他の実施形態においては、座標系設定処理においてCPU10は座標面Qの位置(例えば原点Oの位置)を算出する処理を実行するようにしてもよい。
図12の説明に戻り、ステップS6において、CPU10は、コントローラ5の姿勢に基づいてポインティング座標を算出する。ポインティング座標は、ステップS4で設定された平面座標系(座標面Q)に対するコントローラ5の姿勢の関係に基づいて算出される。ポインティング座標の具体的な算出方法はどのような方法であってもよいが、本実施形態においては、ポインティング座標は、コントローラ5の姿勢によって決まる上記指示方向に基づいて算出される。具体的には、CPU10は、座標面Q上においてコントローラ5の指示方向が指し示す位置、より具体的には、座標面Qと指示方向の延長線との交点の位置を表す座標をポインティング座標として算出する(図8参照)。以下、図17を参照して、ポインティング座標の算出方法を説明する。
図17は、コントローラ5の指示方向を表すベクトルZと、座標面Q上におけるポインティング位置Rとの関係を示す図である。図17において、ベクトルZaはa軸方向に関するベクトルZの成分であり、ベクトルZbはb軸方向に関するベクトルZの成分であり、ベクトルZcは座標面Qに垂直な方向に関するベクトルZの成分である。図17から明らかなように、位置Rのa軸成分の座標値RaとベクトルZaの大きさとの比は、コントローラ5から座標面Qまでの距離LとベクトルZcの大きさとの比に等しい。したがって、座標値Raは、以下の式(6)に従って算出することができる。
Ra=L×|Za|/|Zc| …(6)
また、b軸成分についてもa軸成分と同様、位置Rのb軸成分の座標値RbとベクトルZbの大きさとの比は、コントローラ5から座標面Qまでの距離LとベクトルZcの大きさとの比に等しい。したがって、座標値Rbは、以下の式(7)に従って算出することができる。
Rb=L×|Zb|/|Zc| …(7)
上式(6)および(7)において、ベクトルZaの大きさ|Za|は、ベクトルZと上記右方向ベクトルWとの内積として算出することができる。つまり、“|Za|”は、符号付きの大きさであり、ベクトルZaがa軸負方向を向く場合には座標値Raは負の値となる(“|Zb|”および“|Zc|”についても同様である)。ベクトルZbの大きさ|Zb|は、ベクトルZと上記上方向ベクトルUとの内積として算出することができる。ベクトルZcの大きさ|Zc|は、ベクトルZと上記奥行き方向ベクトルVとの内積として算出することができる。したがって、ポインティング座標(Ra,Rb)は、座標面Qの姿勢(3つのベクトルU,V,W)と、指示方向(ベクトルZ)と、距離Lとに基づいて算出することができる。
なお、ポインティング座標の算出方法はどのような方法であってもよい。例えば、上述の交点Rの位置を表す座標をポインティング座標として算出する場合には、CPU10は、原点Oの空間座標系での座標と交点Rの空間座標系での座標とを算出し、これら2つの座標の位置関係から平面座標系での交点Rの座標を算出してもよい。また、上記交点Rの位置を表す座標とは異なる他の位置を表す座標がポインティング座標として算出されてもよい。例えば、CPU10は、設定操作時における指示方向を基準として、指示方向の変化方向に応じた方向へ、変化量に応じた移動量だけ原点Oから移動した位置を表す座標をポインティング座標として算出してもよい。
ステップS6の具体的な処理としては、CPU10は、姿勢データ57および座標面データ59をメインメモリから読み出し、上式(6)および(7)に従ってポインティング座標を算出する。そして、算出されたポインティング座標を表すデータをポインティング座標データ63としてメインメモリに記憶する。ステップS6の次にステップS7の処理が実行される。
ステップS7において、CPU10は、ポインティング座標を用いた情報処理(ゲーム処理)を実行する。この情報処理は、ステップS6で算出されたポインティング座標を入力として用いる処理であればどのような処理であってもよい。本実施形態においては、CPU10は、ポインティング座標データ63をメインメモリから読み出し、ポインティング座標を用いた情報処理を実行し、当該情報処理の実行結果を表す画像(ゲーム画像)を生成して表示装置(テレビ2)に出力する。例えば、CPU10は、ゲーム操作を行うためのカーソルがポインティング座標に応じた位置に配置されたゲーム画像を生成してテレビ2に表示してもよい。またCPU10は、ゲーム空間に登場するオブジェクトをポインティング座標に応じて動作させ、当該オブジェクトを含むゲーム空間の画像を生成してテレビ2に表示してもよい。ステップS7の次にステップS8の処理が実行される。
ステップS8において、CPU10は、ゲームを終了するか否かを判定する。ステップS8の判定は、例えば、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS8の判定結果が否定の場合、ステップS2の処理が再度実行される。一方、ステップS8の判定結果が肯定の場合、CPU10は図12に示すゲーム処理を終了する。なお、ゲーム処理を終了する際には、ゲームデータをメモリカード等にセーブする等の処理が実行されてもよい。以降、ステップS2〜S8の一連の処理は、ステップS8でゲームを終了すると判定されるまで繰り返し実行される。
以上のように、本実施形態においては、設定操作が行われた場合(ステップS4でYes)に、コントローラ5の指示方向の先に平面座標系が設定され(ステップS5)、設定された平面座標系を用いてポインティング座標が算出される(ステップS6)。したがって、ユーザは、所望の向きにコントローラ5を向けて設定操作を行うことで設定操作を行った時点でのコントローラ5の向きを基準(正面)としてポインティング操作を行うことができる。このとき、本実施形態においては、平面座標系の座標軸の向きが指示方向の向きに応じて適切に設定されるので、コントローラ5をどの向きに向けてユーザが設定操作を行っても、ゲームシステム1は、ポインティング操作が行いやすい座標系を設定することができる。本実施形態によれば、ユーザは、任意の方向に向けてポインティング操作を容易に行うことができる。例えば寝ころんだ状態で上方向に向けてポインティング操作を行ったり、地面に向かってポインティング操作を行ったりする場合でも違和感なくポインティング操作を行うことができる。
[6.変形例]
上記実施形態は本発明を実施する一例であり、他の実施形態においては例えば以下に説明する構成で第1の実施形態を実施することも可能である。
図18は、上記実施形態の変形例を示す図である。上記実施形態においては、操作装置の一例としてコントローラ5を用いるシステムについて説明した。ここで、操作装置は、ユーザが動かして操作することができる任意の装置であってもよい。本変形例においては、コントローラ5に代えて、表示装置を有する携帯型(可搬型)の端末装置70が操作装置として用いられる。ゲームシステム1は、コントローラ5に代えて(またはコントローラ5とともに)端末装置70を含んでいる。なお、端末装置70は、ゲームプログラムを実行することによってゲーム処理を実行可能な携帯型のゲーム装置であってもよい。
まず、端末装置70の構成について説明する。図18に示すように、端末装置70は、板状の形状である。したがって、ユーザは、板状の端末装置70の左右の両辺または一方の辺を把持して操作を行うことが可能である。
端末装置70は、ゲーム装置3と通信可能な通信部を備えている。ゲーム装置3との間で送受信されるデータはどのようなデータであってもよい。本変形例では、通信部は、端末装置70に対するユーザの操作を表す操作データをゲーム装置3へ送信する。また、通信部は、ゲーム装置3で生成された画像のデータをゲーム装置3から受信する。
端末装置70は、自機の姿勢を算出するための物理量を検出するセンサ部を備えている。本変形例においては、端末装置70は、センサ部として、コントローラ5と同様のジャイロセンサおよび/または加速度センサを備える。なお、他の実施形態においては、センサ部は上記物理量を検出可能なものであってもよく、例えば磁気センサを備えていてもよい。また、他の実施形態においては、ゲームシステム1が端末装置70を撮像するカメラを備え、ゲーム装置3は、当該カメラによって撮像された撮像結果を取得し、撮像結果を用いて端末装置70の姿勢を算出するようにしてもよい。
端末装置70は、LCD等の表示部を備えている。端末装置70は、ゲーム装置3によって生成された画像のデータを受信し、表示部に表示する。なお、他の実施形態においては、端末装置70は、ゲーム装置3から受信されるデータに基づいて画像を生成することが可能であってもよい。
端末装置70は、端末装置70を動かす操作とは別の他の操作を行うための操作部を備える。操作部はどのようなものであってもよいが、本変形例においては、端末装置70は、操作部として、1以上のボタンと、方向入力が可能なスティックと、表示部の画面上に設けられるタッチパネルとを備えている。
次に、仮想空間に設定される対象(設定対象)について説明する。上記実施形態においては、設定対象は座標系(座標面Q)であったが、設定対象はどのようなものであってもよい。本変形例においては、図18に示すように、設定対象は画像(画像を表すオブジェクト)72である。画像72は、どのような内容であってもよいが、例えばWebページの画像である。すなわち、本変形例におけるゲームシステム(情報処理システム)1は、端末装置70によってWebページを閲覧するためのシステムである。端末装置70における表示部の画面71には、Webページの一部の領域(図18では領域73)の画像が表示される。詳細は後述するが、ユーザは、端末装置70を動かす(姿勢を変化させる)ことで画像72上における領域73を移動させることができ、Webページのうちの所望の部分を見ることができる。なお、他の実施形態においては、仮想空間に設定される対象は、平面的な形状に限らず、立体的な形状のものであってもよい。
本変形例において仮想空間に画像72を配置(設定)する処理は、上記実施形態において座標面Qを設定する処理と同様である。すなわち、ゲーム装置3は、仮想空間内における端末装置70の姿勢を算出する。本変形例における端末装置70の姿勢の算出方法は、どのような方法であってもよく、例えば上記実施形態におけるコントローラ5の姿勢の算出方法と同じであってもよい。
また、本変形例において、ユーザによって設定操作(ここでは、端末装置70に対する所定の操作)が行われた場合、上記実施形態と同様のステップS11〜S15の処理によって画像72が仮想空間に設定される。すなわち、ゲーム装置3は、設定捜査時における端末装置70の姿勢によって決まる指示方向が所定の基準よりも仮想空間における水平方向に近い場合、仮想空間における鉛直方向(Y’軸方向)を基準として設定対象の向きを設定する。つまり、指示方向が水平方向に近い場合は、仮想空間における鉛直方向が上方向となるように画像72が配置される。なお、本変形例では、端末装置70の指示方向(ベクトルZ)は、端末装置70の板状の面に垂直な方向(より具体的には、画面71の手前から奥へ向かう方向)として決められる。一方、ゲーム装置3は、指示方向が所定の基準よりも鉛直方向に近い場合、端末装置70の所定方向を基準として設定対象の向きを設定する。なお、本変形例では、端末装置70の上方向は、表示部の画面71の上方向である。つまり、鉛直方向に近い場合は、端末装置70における上方向が上方向となるように画像72が配置される。以上によって、本変形例においては、指示方向が水平方向に近い場合にも鉛直方向に近い場合にも、画像72が適切な向きに配置される。これによって、ユーザにとって画像72が見やすく端末装置70に表示されるとともに、後述する領域73を移動させる操作の操作性も向上する。
本変形例においては、ゲーム装置3は、仮想空間内に仮想カメラを設定し、仮想カメラから見た画像72の一部の画像を端末装置70に表示させる。仮想カメラは、端末装置70の姿勢に応じて視野範囲(画像72上における領域73)が変化するように設定される。具体的には、ゲーム装置3は、端末装置70の位置に仮想カメラを配置し、端末装置70の指示方向が視線方向となるように仮想カメラの姿勢を制御する。これによって、仮想カメラの視野範囲は画像72上の領域73となり、ユーザは、端末装置70の姿勢を変化させる操作によって画像72上の領域73を移動させることができる。このように、本変形例においては、上記実施形態のようなポインティング操作は行われない。上記実施形態における設定対象に対する設定方法は、ポインティング座標を算出する場合の座標系に限らず、任意のオブジェクトを設定する処理に適用することができる。
<第2の実施形態>
次に、本発明の第2の実施形態に係るゲームシステムについて説明する。上述の第1の実施形態においては、ゲームシステム1は、所定の設定操作が行われた場合に座標面Qを移動(再配置)した。これに対して、第2の実施形態においては、コントローラ5の指示方向が座標面Qから外れた(指示方向が座標面Q内の位置を指し示さない)場合、ゲームシステム1は、指示方向が座標面Qから外れないように座標面Qを移動する。
ここで、ユーザは現実空間においてコントローラ5を自由に動かすことができるので、意図せずにコントローラ5の指示方向を座標面Qから外れた方向にしてしまう場合がある。例えば、座標面Qの外周付近を指定しようとしたもののコントローラ5を動かしすぎて指示方向が座標面Qから外れてしまったり、気づかないうちにコントローラ5の向きを次第に変化させてしまう結果、指示方向が座標面Qから外れてしまったりする場合がある。本実施形態によれば、このような場合であっても、ユーザが指定する位置として、座標面Q内の位置(ポインティング座標)を算出することができるので、操作性を向上することができる。以下、第2の実施形態の詳細について説明する。
なお、第2の実施形態におけるゲームシステム1のハードウェア構成は第1の実施形態と同じであるので、説明を省略する。
[1.座標面の移動処理の概要]
図19は、指示方向が座標面Qから外れる場合の一例を示す図である。図19に示すように、第2の実施形態においては、座標面Qは、所定の大きさの矩形領域であるとする。例えば、座標面Qの形状は、表示装置(テレビ2)の画面の形状に応じた形状に決定される。また、図19において、位置Rは、座標面Qから外れる直前における指示方向が指し示す位置(ポインティング座標)であり、位置R’は、座標面Qから外れた直後における指示方向が指し示す位置である。
図19においては、仮想空間において、コントローラ5の指示方向が座標面Qから外れている。つまり、指示方向が指し示す位置R’は座標面Q外の位置となっている。なお、図19において、位置R’は、座標面Qを含む平面と、コントローラ5の位置を通り指示方向に延びる直線(図19に示す点線)との交点の位置である。上述した第1の実施形態におけるステップS6の処理によれば、座標面Q内の位置であっても座標面Q外の位置であっても、上記交点の位置座標をポインティング座標として算出することが可能である。つまり、ゲームシステム1は、座標面Q外であっても位置R’を(ポインティング座標として)算出することが可能である。
上記のように、コントローラ5の指示方向が座標面Qから外れている場合には、ポインティング座標が座標面Q内の位置ではなくなる。そのため、このようなポインティング座標を用いて情報処理(ステップS7)が実行されると、当該情報処理がユーザの意図した通りの結果にならなかったり、正しく実行されなかったりするおそれがある。そこで、第2の実施形態においては、ゲームシステム1は、コントローラ5の指示方向が座標面Qから外れている場合、座標面Qを移動する処理を実行する。なお、この移動処理は、ユーザの操作(上記の設定操作)が無くても実行される。換言すれば、移動処理は、ユーザの操作とは独立して実行される。
図20は、移動前後の座標面Qの一例を示す図である。図20においては、移動前の座標面Qを点線で示し、移動後の座標面Qを実線で示している。図20に示すように、上記移動処理において、ゲームシステム1は、指示方向が(移動後における)座標面Q内の位置を指し示すように座標面Qを移動する。これによって、指示方向が指し示す位置R’は座標面Q内の位置となる。したがって、指示方向が座標面Qから外れてしまった場合に、ユーザは、コントローラ5の姿勢を元に戻したり、上述の設定操作を行ったりする等、特別な操作を行わなくても、座標面Q内の位置を指定することができる。このように、第2の実施形態によれば、ユーザは座標面Q内の位置を指定しやすくなるので、コントローラ5を用いた操作の操作性を向上することができる。
また、第2の実施形態では、位置R’が座標面Qの外周付近の位置(かつ、座標面Q内の位置)となるように、座標面Qが移動される。すなわち、ゲームシステム1は、指示方向が座標面Q外を指し示す場合、座標面Qの外周付近の位置を指示方向が指し示すように、座標面Qを移動する(図20参照)。換言すれば、指示方向が指し示す位置が座標面Qのある一辺から(その一辺を超えて)外へ移動した場合、移動後における座標面Q上における位置R’は、当該ある一辺の付近の位置となる(図20参照)。
ここで、上記位置R’が座標面Qの中央付近の位置となるように座標面Qを移動するとすれば、情報処理に用いられるポインティング座標の値は、指示方向が座標面Q外となる前後において大きく変化してしまう。その結果、ユーザが操作に違和感を抱くおそれがある。これに対して、第2の実施形態によれば、情報処理に用いられる値の変化を抑制することができ、ユーザの違和感を軽減または抑止することができる。
なお、詳細は後述するが、本実施形態においては、ゲームシステム1は、移動後における座標面Qの外周に位置R’が厳密に位置するのではなく、座標面Qの外周付近に位置R’が位置するように座標系Qを移動する(図23)。このように、ゲームシステム1は、位置R’が座標面Qの外周に厳密に位置するように座標面Qを移動させなくてもよい。つまり、位置R’は、移動後における座標面Qの外周の位置であってもよいし、外周から所定範囲内の位置であってもよい。
図21は、図20に示す移動前後の座標面Qの一例を、座標面Qに垂直な方向から見た図である。図21に示すように、本実施形態においては、ゲームシステム1は、矩形形状である座標面Qの所定の一辺から外へポインティング座標が外れた場合、当該一辺に垂直な方向へ座標面Qを移動する。このように、ポインティング座標の移動方向と座標面Qの移動方向とは、必ずしも完全に一致するわけではない。ここで、ポインティング座標と座標面Qとの位置関係は座標面Qの移動によって変化するが、上記によれば、ポインティング座標がはみ出した上記一辺に垂直な方向成分についてのみ位置関係が変化し、上記一辺に平行な方向成分については位置関係が変化しない。これによれば、上記一辺に平行な方向についてポインティング座標を移動するユーザの操作は、座標面Qが移動されても有効であるので、ユーザの操作をより正確に反映することができる。
なお、他の実施形態においては、ポインティング座標の移動方向と座標面Qの移動方向とが一致するように座標面Qが移動されてもよい。換言すれば、移動後における座標面Qと位置R’との位置関係は、移動前における座標面Qと位置Rとの関係と略同じになるように、座標面Qが移動されてもよい。つまり、指示方向が座標面Qから外れた場合、ゲームシステム1は、外れる直前における指示方向が指し示す位置またはその近傍の位置が、外れた後の指示方向によって指し示されるように、座標面Qを移動してもよい。
なお、指示方向が座標面Q内を指し示す場合には、座標面Qの移動処理は実行されない。これによれば、ユーザが意図しない場合に座標面Qが移動することによって、情報処理に用いられるポインティング座標の値が変化する結果、ユーザに違和感を与える可能性を低減することができる。
第2の実施形態において、座標面Qの移動は、上述の第1の実施形態と同様に行われる。すなわち、ゲームシステム1は、仮想空間におけるコントローラ5の位置(起点)から座標面Qの基準点(原点O)までの距離が一定となるように、座標面Qを移動(配置)する。これによれば、仮想空間におけるコントローラ5から座標面Qまでの距離は一定に維持される。そのため、コントローラ5の基準姿勢(指示方向が原点Oを向く姿勢)からの変化とポインティング座標との関係は、座標面Qの位置によらず一定となる。その結果、どの方向を基準としたときでも(座標面Qがどの位置に配置されたときでも)操作感覚が同じになるので、コントローラ5の操作性を向上することができる。
なお、第2の実施形態においても第1の実施形態と同様、ゲームシステム1は、座標面Qの基準点(原点O)における法線方向にコントローラ5の位置(起点)が位置するように、座標面Qを移動(配置)する。これによれば、コントローラ5を基準姿勢からどちらの方向へ回転させてもポインティング座標の変化の仕方は同じになるので、コントローラ5の操作性を向上することができる。
[2.ゲーム処理の具体例]
次に、第2の実施形態において実行されるゲーム処理(情報処理)の詳細を説明する。第2の実施形態においても第1の実施形態と同様、図11に示す各種のデータがゲーム処理において用いられる。また、第2の実施形態においては、処理用データ56には領域サイズデータが含まれる。領域サイズデータは、座標面Qの大きさを示し、例えば、a軸方向の長さMaと、b軸方向の長さMbとを示す。なお、座標面Qの大きさは、予め定められた値に設定されていてもよいし、ポインティング座標を用いて実行される情報処理の内容、および、ユーザによる指示、ゲーム状況等に応じて設定されてもよい。
第2の実施形態においては、図12に示す一連の処理が実行される際に、ステップS6の処理の次に座標面移動処理が実行される。座標面移動処理以外の処理については、図12に示す処理と同様であるので、詳細な説明を省略する。以下、座標面移動処理について説明する。
図22は、座標面移動処理の詳細な流れを示すフローチャートである。座標面移動処理においては、まずステップS21において、CPU10は、ポインティング座標が座標面Qからはみ出た距離(Ha,Hb)を算出する。変数Haは、座標面Qのa軸方向についてのはみ出た距離を示し、変数Hbは、座標面Qのb軸方向についてのはみ出た距離を示す。この距離(Ha,Hb)は、ステップS6で算出されるポインティング座標(Ra,Rb)と、座標面Qの大きさ(Ma,Mb)とに基づいて算出することができる。すなわち、CPU10は、ポインティング座標データ63と領域サイズデータとをメインメモリから読み出し、読み出したデータに基づいて上記距離を算出する。なお、ポインティング座標が座標面Q内の位置となる場合には、CPU10は、上記距離を0(Ha=Hb=0)とする。ステップS21の次にステップS22の処理が実行される。
ステップS22において、CPU10は、指示方向が座標面Q内の位置を指し示すように、はみ出し距離(Ha,Hb)に応じて座標面Qを移動する。図23は、座標面Qを移動する処理の一例を示す図である。なお、図23は、座標面Qのb軸方向から仮想空間を見た図であり、ポインティング座標がa軸(負)方向に関して座標面Qからはみ出したことに応じて、a軸(負)方向に座標面Qが移動される様子を示している。
上記ステップS22において、CPU10は、座標方向ベクトルの向きを変更することによって、座標面Qの移動後の位置および姿勢を算出する。ここで、座標方向ベクトルとは、仮想空間におけるコントローラ5の位置(起点S)から座標面Qへの方向を示す。具体的には、図23に示すように、座標方向ベクトルは、コントローラ5の位置(起点S)から座標面Qの基準点(原点O)へのベクトルである。
具体的には、CPU10は、まず、座標面Qが移動する前の座標方向ベクトルNに対して、はみ出し距離に応じた移動ベクトルH(=(Ha,Hb))を加算することによって、法線方向ベクトルの向きを変化させる。加算後のベクトルは、図23に示す起点Sから点Tへのベクトルとなる。次に、CPU10は、向きが変化した法線方向ベクトルを正規化することで、移動後の座標面Qに関する法線方向ベクトルN’を算出する(図23参照)。これによって、移動後の座標面Qの原点Oの位置と、法線方向ベクトルの方向を軸とした回転に関する姿勢成分以外の姿勢とが決定されたことになる。
なお、上述した座標面Qの奥行き方向ベクトルVの大きさを、起点Sから原点Oまでの距離と一致するように設定する場合には、奥行き方向ベクトルと座標方向ベクトルとは同じものになる。したがって、この場合、処理上は、奥行き方向ベクトルを座標方向ベクトルとして用いることができる。つまり、奥行き方向ベクトルを変更することによって、座標面Qの移動後の位置を算出することができる。したがって、ステップS22の具体的な処理としては、CPU10は、奥行き方向データ62をメインメモリから読み出し、奥行き方向データ62が示す奥行き方向ベクトルに対して上記の計算処理(移動ベクトルHの加算および正規化の処理)を実行する。そして、実行によって得られたベクトルを示すデータを新たな奥行き方向データ62としてメインメモリに記憶する。ステップS22の次にステップS23の処理が実行される。
ステップS23において、CPU10は座標系設定処理を実行する。この座標系設定処理は、上述のステップS13の処理が実行されない点以外は、第1の実施形態における座標系設定処理(S5)と同様の処理である。つまり、上記ステップS22において奥行き方向ベクトルが決定されているので、ステップS23においては、CPU10は、上述のステップS11,S12,S14,およびS15の処理を実行することによって、右方向ベクトルおよび上方向ベクトルを算出する。この処理によって、移動後の座標面Qについて、法線方向ベクトルの方向を軸とした回転に関する姿勢が決定されることになる。したがって、ステップS22およびS23によって、座標面Qの位置および姿勢が決定されることになる。ステップS23の後、CPU10は、座標面移動処理を終了する。
以上のように、本実施形態においては、CPU10は、起点Sから座標面Qの基準点Oまでのベクトル(座標方向ベクトルN)に対して、指示方向が座標面Q内の位置を指し示すように座標面Qを座標面Qの平面に沿って移動させるベクトル(移動ベクトルH)を加算する。そして、起点から加算後のベクトルの方向への位置に移動後の基準点O’が位置するように座標面Qを移動する(図23)。ここで、座標面Qを移動させるための具体的な処理方法は任意である。他の実施形態においては、例えば、ゲームシステム1は、指示方向が座標面Qを指し示さなくなる直前から直後までの間のコントローラ5の回転方向および回転角度を算出し、回転方向および回転角度に応じて座標面Qを移動させてもよい。なお、第2の実施形態における方法によれば、ベクトルの演算(加算および正規化)によって座標面Qを移動させることができるので、回転方向および回転角度を算出する方法に比べて、簡易な計算処理によって移動処理を実行することができ、処理を高速化することができる。
なお、第2の実施形態における方法では、移動後の座標面Qを用いた場合のポインティング座標は、厳密に座標面Qの端(外周)となるのではなく、外周よりもやや内側の位置を示す。ただし、ステップS2〜S6の処理がある程度短い時間間隔で繰り返し実行される場合には、ポインティング座標が座標面Qからはみ出す距離は微小であり、そのため、移動後の座標面Qを用いた場合のポインティング座標が示す位置も、外周から大きく離れることにはならない。したがって、第2の実施形態における方法によれば、ポインティング座標の精度を大きく悪化させることなく、処理を高速化することができる。
第2の実施形態においては、上記座標面移動処理の次に、上述したステップS7の処理が実行される。なお、ステップS7の時点でポインティング座標データとしてメインメモリに記憶されている値は、ステップS6で算出されたものである。そのため、上記座標面移動処理によって座標面Qが移動された(直後の)場合には、ポインティング座標は座標面Q内の位置を示さないものとなっている。したがって、上記の場合、CPU10は、移動後の座標面Qを用いてポインティング座標を再度算出し、算出されたポインティング座標を用いてステップS7における処理を実行してもよい。また、CPU10は、上記の場合、ポインティング座標を座標面Q内の位置に補正し、補正したポインティング座標を用いてステップS7における処理を実行してもよい。また、上記の場合にポインティング座標が座標面Q外の位置を示すのは一時的なものである(次のステップS2〜S8の処理ループでは、移動後の座標面Qを用いてポインティング座標が算出されるので、ポインティング座標は座標面Q内の位置を示すものになっている)。そのため、CPU10は、上記の場合であっても、座標面Q外の位置を示すポインティング座標をそのまま用いてステップS7における処理を実行してもよい。
以上のように、第2の実施形態においては、ゲームシステム1は、仮想空間において設定される所定領域(座標面Qの領域)のうちで、コントローラ5の姿勢に応じて決定される指示方向が指し示す位置(ポインティング座標)に応じた情報処理を実行する(ステップS7)。ここで、ゲームシステム1は、指示方向が所定領域外を指し示す場合、指示方向が領域内の位置を指し示すように仮想空間において所定領域を移動する(S21〜S23)。これによって、コントローラ5の操作性を向上することができる。
なお、第2の実施形態においても第1の実施形態と同様、コントローラ5の姿勢を算出する方法は任意である。例えば、第2の実施形態においては、ユーザがコントローラ5をテレビ2(マーカ6)の方へ向けて使用する態様だけでなく、コントローラ5を自由な方向に向けて使用する態様も想定される。コントローラ5を自由な方向に向けて使用する態様が想定される場合、コントローラ5がマーカ6を撮像できない(コントローラ5がマーカ6の方を向いていない)ことが考えられる。そのため、第2の実施形態において、ゲームシステム1は、マーカ座標を用いずにコントローラ5の姿勢を算出してもよい。
なお、第2の実施形態においては、第1の実施形態における座標系設定処理(ステップS5)は実行されてなくてもよい。第2の実施形態においては、座標面Qにおける座標軸の向きは任意の方法で設定されてもよい。また、上記ステップS23における座標系設定処理においても座標軸の向きは任意の方法で設定されてもよい。
また、第2の実施形態においても第1の実施形態と同様、仮想空間に設定される所定領域は、座標面の領域に限らず、どのようなものであってもよい。上記所定領域は、例えば、図18に示したような画像(画像を表すオブジェクト)の領域であってもよい。
また、第2の実施形態においては、上記所定領域として、平面であって矩形形状の領域を用いた。平面の領域を用いることによって、(例えばステップS6の方法で)ポインティング座標を容易に算出することができる。また、矩形形状の領域を用いることによって、ポインティング座標を、矩形の表示画面上の位置に容易に対応付けることができる。なお、他の実施形態においては、所定領域は平面の領域に限らず、曲面の領域であってもよい。さらに、所定領域の形状は、上記実施形態のような矩形形状に限らず、任意である。所定領域の形状は、ポインティング座標を用いた情報処理の内容に応じた形状に設定されてもよく、例えば円形や楕円形の形状であってもよい。
<変形例>
上記各実施形態においては、操作装置の姿勢に基づいて仮想空間において所定の設定対象を設定する情報処理システムをゲームシステムに適用した場合を例として説明したが、上記情報処理システムはゲーム用途以外にも適用することが可能である。すなわち、上記各実施形態は、操作装置による指示方向が指し示す位置に基づいて任意の情報処理を実行する情報処理プログラム、情報処理システム、情報処理装置、情報処理方法に適用することができる。
上記各実施形態においては、ゲーム装置3とコントローラ5とを含む情報処理システムを例として説明したが、情報処理システムは、互いに通信可能な複数の装置によって構成されるものに限らず、一体の(1つの)装置で実現されてもよい。また、他の実施形態では、互いに通信可能な複数の情報処理装置を有する情報処理システムにおいて、当該複数の情報処理装置が情報処理を分担して実行するようにしてもよい。
上記各実施形態においては、操作装置の一例としてコントローラ5を用いる場合を説明したが、操作装置は、ユーザが動かして操作することが可能な任意の装置でよい。例えば、他の実施形態においては、上述の端末装置70や携帯型のゲーム装置が操作装置として用いられてもよい。