[1.ゲームシステムの全体構成]
以下、図面を参照して、本発明の一実施形態に係るゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。図1において、ゲームシステム1は、テレビジョン受像器等に代表される据置型のディスプレイ装置(以下、「テレビ」と記載する)2、据置型のゲーム装置3、光ディスク4、コントローラ5、マーカ装置6、および、端末装置7を含む。ゲームシステム1は、コントローラ5を用いたゲーム操作に基づいてゲーム装置3においてゲーム処理を実行し、ゲーム処理によって得られるゲーム画像をテレビ2および/または端末装置7に表示するものである。
ゲーム装置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に含まれるコントローラ5は1つとするが、ゲーム装置3は複数のコントローラと通信可能であり、所定台数のコントローラを同時に使用することによって複数人でゲームをプレイすることが可能である。コントローラ5の詳細な構成については後述する。
端末装置7は、ユーザが把持可能な程度の大きさであり、ユーザは端末装置7を手に持って動かしたり、あるいは、端末装置7を自由な位置に配置したりして使用することが可能である。詳細な構成は後述するが、端末装置7は、表示手段であるLCD(Liquid Crystal Display:液晶表示装置)51、および、入力手段(後述するタッチパネル52やジャイロセンサ64等)を備える。端末装置7とゲーム装置3とは無線(有線であってもよい)によって通信可能である。端末装置7は、ゲーム装置3で生成された画像(例えばゲーム画像)のデータをゲーム装置3から受信し、画像をLCD51に表示する。なお、本実施形態では表示装置としてLCDを用いているが、端末装置7は、例えばEL(Electro Luminescence:電界発光)を利用した表示装置等、他の任意の表示装置を有していてもよい。また、端末装置7は、自機に対して行われた操作の内容を表す操作データをゲーム装置3に送信する。
[2.ゲーム装置3の内部構成]
次に、図2を参照して、ゲーム装置3の内部構成について説明する。図2は、ゲーム装置3の内部構成を示すブロック図である。ゲーム装置3は、CPU(Central Processing Unit)10、システム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、VRAM(Video RAM)11d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。なお、本実施形態においては、ゲーム装置3は、テレビ2に表示するゲーム画像と、端末装置7に表示するゲーム画像との両方を生成する。以下では、テレビ2に表示されるゲーム画像を「テレビ用ゲーム画像」と呼び、端末装置7に表示されるゲーム画像を「端末用ゲーム画像」と呼ぶことがある。
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。なお、本実施形態においては、ゲーム音声についてもゲーム画像と同様、テレビ2のスピーカから出力するゲーム音声と、端末装置7のスピーカから出力するゲーム音声との両方が生成される。以下では、テレビ2から出力されるゲーム音声を「テレビ用ゲーム音声」と呼び、端末装置7から出力されるゲーム音声を「端末用ゲーム音声」と呼ぶことがある。
上記のようにゲーム装置3において生成される画像および音声のうちで、テレビ2において出力される画像および音声のデータは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、テレビ2に画像が表示されるとともにスピーカ2aから音が出力される。
また、ゲーム装置3において生成される画像および音声のうちで、端末装置7において出力される画像および音声のデータは、入出力プロセッサ11a等によって端末装置7へ送信される。入出力プロセッサ11a等による端末装置7へのデータの送信については後述する。
入出力プロセッサ11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、ネットワーク通信モジュール18、コントローラ通信モジュール19、拡張コネクタ20、メモリカード用コネクタ21、コーデックLSI27に接続される。また、ネットワーク通信モジュール18にはアンテナ22が接続される。コントローラ通信モジュール19にはアンテナ23が接続される。コーデックLSI27は端末通信モジュール28に接続され、端末通信モジュール28にはアンテナ29が接続される。
ゲーム装置3は、インターネット等のネットワークに接続して外部情報処理装置(例えば他のゲーム装置や、各種サーバ等)と通信を行うことが可能である。すなわち、入出力プロセッサ11aは、ネットワーク通信モジュール18およびアンテナ22を介してインターネット等のネットワークに接続し、ネットワークに接続される外部情報処理装置と通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、ネットワーク通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、外部情報処理装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22およびネットワーク通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置3と外部情報処理装置との間で送受信されるデータの他、ゲーム装置3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。また、フラッシュメモリ17にはゲームプログラムが記憶されてもよい。
また、ゲーム装置3は、コントローラ5からの操作データを受信することが可能である。すなわち、入出力プロセッサ11aは、コントローラ5から送信される操作データをアンテナ23およびコントローラ通信モジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
また、ゲーム装置3は、端末装置7との間で画像や音声等のデータを送受信することが可能である。入出力プロセッサ11aは、端末装置7へゲーム画像(端末用ゲーム画像)を送信する場合、GPU11bが生成したゲーム画像のデータをコーデックLSI27へ出力する。コーデックLSI27は、入出力プロセッサ11aからの画像データに対して所定の圧縮処理を行う。端末通信モジュール28は、端末装置7との間で無線通信を行う。したがって、コーデックLSI27によって圧縮された画像データは、端末通信モジュール28によってアンテナ29を介して端末装置7へ送信される。なお、本実施形態では、ゲーム装置3から端末装置7へ送信される画像データはゲームに用いるものであり、ゲームにおいては表示される画像に遅延が生じるとゲームの操作性に悪影響が出る。そのため、ゲーム装置3から端末装置7への画像データの送信に関しては、できるだけ遅延が生じないようにすることが好ましい。したがって、本実施形態では、コーデックLSI27は、例えばH.264規格といった高効率の圧縮技術を用いて画像データを圧縮する。なお、それ以外の圧縮技術を用いてもよいし、通信速度が十分である場合には無圧縮で画像データを送信する構成であってもよい。また、端末通信モジュール28は、例えばWi−Fiの認証を受けた通信モジュールであり、例えばIEEE802.11n規格で採用されるMIMO(Multiple Input Multiple Output)の技術を用いて端末装置7との間の無線通信を高速に行うようにしてもよいし、他の通信方式を用いてもよい。
また、ゲーム装置3は、画像データの他、音声データを端末装置7へ送信する。すなわち、入出力プロセッサ11aは、DSP11cが生成した音声データを、コーデックLSI27を介して端末通信モジュール28へ出力する。コーデックLSI27は、音声データに対しても画像データと同様に圧縮処理を行う。音声データに対する圧縮の方式は、どのような方式であってもよいが、圧縮率が高く、音声の劣化が少ない方式が好ましい。また、他の実施形態においては、音声データは圧縮されずに送信されてもよい。端末通信モジュール28は、圧縮された画像データおよび音声データを、アンテナ29を介して端末装置7へ送信する。
さらに、ゲーム装置3は、上記画像データおよび音声データの他に、必要に応じて各種の制御データを端末装置7へ送信する。制御データは、端末装置7が備える構成要素に対する制御指示を表すデータであり、例えばマーカ部(図10に示すマーカ部55)の点灯を制御する指示や、カメラ(図10に示すカメラ56)の撮像を制御する指示等を表す。入出力プロセッサ11aは、CPU10の指示に応じて制御データを端末装置7へ送信する。なお、この制御データに関して、本実施形態ではコーデックLSI27はデータの圧縮処理を行わないが、他の実施形態においては圧縮処理を行うようにしてもよい。なお、ゲーム装置3から端末装置7へ送信される上述のデータは、必要に応じて暗号化がされていてもよいし、されていなくともよい。
また、ゲーム装置3は、端末装置7から各種データを受信可能である。詳細は後述するが、本実施形態では、端末装置7は、操作データ、画像データ、および音声データを送信する。端末装置7から送信される各データはアンテナ29を介して端末通信モジュール28によって受信される。ここで、端末装置7からの画像データおよび音声データは、ゲーム装置3から端末装置7への画像データおよび音声データと同様の圧縮処理が施されている。したがって、これら画像データおよび音声データについては、端末通信モジュール28からコーデックLSI27に送られ、コーデックLSI27によって伸張処理が施されて入出力プロセッサ11aに出力される。一方、端末装置7からの操作データに関しては、画像や音声に比べてデータ量が少ないので、圧縮処理が施されていなくともよい。また、必要に応じて暗号化がされていてもよいし、されていなくともよい。したがって、操作データは、端末通信モジュール28で受信された後、コーデックLSI27を介して入出力プロセッサ11aに出力される。入出力プロセッサ11aは、端末装置7から受信したデータを、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
また、ゲーム装置3は、他の機器や外部記憶媒体に接続することが可能である。すなわち、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタである。拡張コネクタ20に対しては、外部記憶媒体のようなメディアを接続したり、他のコントローラ等の周辺機器を接続したり、有線の通信用コネクタを接続することによってネットワーク通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
ゲーム装置3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、図示しないACアダプタによって外部の電源からゲーム装置3の各構成要素に対して電力が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
なお、他の実施形態においては、ゲーム装置3が備える各構成要素のうちでいくつかの構成要素は、ゲーム装置3とは別体の拡張機器として構成されてもよい。このとき、拡張機器は、例えば上記拡張コネクタ20を介してゲーム装置3と接続されるようにしてもよい。具体的には、拡張機器は、例えば上記コーデックLSI27、端末通信モジュール28およびアンテナ29の各構成要素を備えており、拡張コネクタ20に対して着脱可能であってもよい。これによれば、上記各構成要素を備えていないゲーム装置に対して上記拡張機器を接続することによって、当該ゲーム装置を端末装置7と通信可能な構成とすることができる。
[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へ送信するものである。なお、以下では、コントローラ5が送信する操作データを「コントローラ操作データ」と呼び、端末装置7が送信する操作データを「端末操作データ」と呼ぶことがある。
操作部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が集光した赤外線を受光して画像信号を出力する。ここで、撮像対象となる端末装置7のマーカ部55およびマーカ装置6は、赤外光を出力するマーカで構成される。したがって、赤外線フィルタ38を設けることによって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを受光して画像データを生成するので、撮像対象(マーカ部55および/またはマーカ装置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(後述する加速度センサ63についても同様)から出力される加速度の信号に基づいて、ゲーム装置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は、ゲーム画像を表示する表示手段を有しないが、例えば電池残量を表す画像等を表示するための表示手段を有していてもよい。
[4.端末装置7の構成]
次に、図8〜図10を参照して、端末装置7の構成について説明する。図8は、端末装置7の外観構成を示す図である。図8における(a)図は端末装置7の正面図であり、(b)図は上面図であり、(c)図は右側面図であり、(d)図は下面図である。また、図9は、ユーザが端末装置7を把持した様子を示す図である。
図8に示されるように、端末装置7は、大略的には横長の長方形の板状形状であるハウジング50を備える。ハウジング50は、ユーザが把持することができる程度の大きさである。したがって、ユーザは、端末装置7を持って動かしたり、端末装置7の配置位置を変更したりすることができる。
端末装置7は、ハウジング50の表面にLCD51を有する。LCD51は、ハウジング50の表面の中央付近に設けられる。したがって、ユーザは、図9に示すようにLCD51の両側部分のハウジング50を持つことによって、LCD51の画面を見ながら端末装置を持って動かすことができる。なお、図9ではユーザがLCD51の左右両側の部分のハウジング50を持つことで端末装置7を横持ちで(横に長い向きにして)持つ例を示しているが、端末装置7を縦持ちで(縦に長い向きにして)持つことも可能である。
図8の(a)図に示すように、端末装置7は、操作手段として、LCD51の画面上にタッチパネル52を有する。本実施形態では、タッチパネル52は抵抗膜方式のタッチパネルである。ただし、タッチパネルは抵抗膜方式に限らず、例えば静電容量方式等、任意の方式のタッチパネルを用いることができる。また、タッチパネル52はシングルタッチ方式でもよいし、マルチタッチ方式であってもよい。本実施形態では、タッチパネル52として、LCD51の解像度と同解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル52の解像度とLCD51の解像度が一致している必要はない。タッチパネル52に対する入力は通常タッチペンを用いて行われるが、タッチペンに限らずユーザの指でタッチパネル52に対する入力をすることも可能である。なお、ハウジング50には、タッチパネル52に対する操作を行うために用いられるタッチペンを収納するための収納穴が設けられていてもよい。このように、端末装置7はタッチパネル52を備えるので、ユーザは、端末装置7を動かしながらタッチパネル52を操作することができる。つまりユーザは、LCD51の画面を動かしつつ、その画面に対して直接(タッチパネル52によって)入力を行うことができる。
図8に示すように、端末装置7は、操作手段として、2つのアナログスティック53Aおよび53Bと、複数のボタン54A〜54Lとを備えている。各アナログスティック53Aおよび53Bは、方向を指示するデバイスである。各アナログスティック53Aおよび53Bは、ユーザの指で操作されるスティック部がハウジング50の表面に対して任意の方向(上下左右および斜め方向の任意の角度)にスライドまたは傾倒することができるように構成されている。また、左アナログスティック53AはLCD51の画面の左側に、右アナログスティック53BはLCD51の画面の右側にそれぞれ設けられる。したがって、ユーザは、左右いずれの手でもアナログスティックを用いて方向を指示する入力を行うことができる。また、図9に示すように、各アナログスティック53Aおよび53Bは、ユーザが端末装置7の左右部分を把持した状態で操作可能な位置に設けられるので、ユーザは、端末装置7を持って動かす場合においても各アナログスティック53Aおよび53Bを容易に操作することができる。
各ボタン54A〜54Lは、所定の入力を行うための操作手段である。以下に示すように、各ボタン54A〜54Lは、ユーザが端末装置7の左右部分を把持した状態で操作可能な位置に設けられる(図9参照)。したがって、ユーザは、端末装置7を持って動かす場合においてもこれらの操作手段を容易に操作することができる。
図8の(a)図に示すように、ハウジング50の表面には、各操作ボタン54A〜54Lのうち、十字ボタン(方向入力ボタン)54Aと、ボタン54B〜54Hとが設けられる。つまり、これらのボタン54A〜54Gは、ユーザの親指で操作可能な位置に配置されている(図9参照)。
十字ボタン54Aは、LCD51の左側であって、左アナログスティック53Aの下側に設けられる。つまり、十字ボタン54Aはユーザの左手で操作可能な位置に配置されている。十字ボタン54Aは、十字の形状を有しており、上下左右の方向を指示することが可能なボタンである。また、ボタン54B〜54Dは、LCD51の下側に設けられる。これら3つのボタン54B〜54Dは、左右両方の手で操作可能な位置に配置されている。また、4つのボタン54E〜54Hは、LCD51の右側であって、右アナログスティック53Bの下側に設けられる。つまり、4つのボタン54E〜54Hはユーザの右手で操作可能な位置に配置されている。さらに、4つのボタン54E〜54Hは、(4つのボタン54E〜54Hの中心位置に対して)上下左右の位置関係となるように配置されている。したがって、端末装置7は、ユーザに上下左右の方向を指示させるためのボタンとして4つのボタン54E〜54Hを機能させることも可能である。
また、図8の(a)図、(b)図、および(c)図に示すように、第1Lボタン54Iおよび第1Rボタン54Jは、ハウジング50の斜め上部分(左上部分および右上部分)に設けられる。具体的には、第1Lボタン54Iは、板状のハウジング50における上側の側面の左端に設けられ、上側および左側の側面から露出している。また、第1Rボタン54Jは、ハウジング50における上側の側面の右端に設けられ、上側および右側の側面から露出している。このように、第1Lボタン54Iは、ユーザの左手人差し指で操作可能な位置に配置され、第1Rボタン54Jは、ユーザの右手人差し指で操作可能な位置に配置される(図9参照)。
また、図8の(b)図および(c)図に示すように、第2Lボタン54Kおよび第2Rボタン54Lは、板状のハウジング50の裏面(すなわちLCD51が設けられる表面の反対側の面)に突起して設けられる足部59Aおよび59Bに配置される。具体的には、第2Lボタン54Kは、ハウジング50の裏面の左側(表面側から見たときの左側)のやや上方に設けられ、第2Rボタン54Lは、ハウジング50の裏面の右側(表面側から見たときの右側)のやや上方に設けられる。換言すれば、第2Lボタン54Kは、表面に設けられる左アナログスティック53Aの概ね反対側の位置に設けられ、第2Rボタン54Lは、表面に設けられる右アナログスティック53Bの概ね反対側の位置に設けられる。このように、第2Lボタン54Kは、ユーザの左手中指で操作可能な位置に配置され、第2Rボタン54Lは、ユーザの右手中指で操作可能な位置に配置される(図9参照)。また、第2Lボタン54Kおよび第2Rボタン54Lは、図8の(c)図に示すように、上記足部59Aおよび59Bの斜め上方を向く面に設けられ、斜め上方を向くボタン面を有する。ユーザが端末装置7を把持した場合には中指は上下方向に動くと考えられるので、ボタン面を上方に向けることで、ユーザは第2Lボタン54Kおよび第2Rボタン54Lを押下しやすくなる。また、ハウジング50の裏面に足部が設けられることにより、ユーザはハウジング50を把持しやすくなり、かつ、足部にボタンが設けられることで、ハウジング50を把持したまま操作しやすくなる。
なお、図8に示す端末装置7に関しては、第2Lボタン54Kおよび第2Rボタン54Lが裏面に設けられるので、LCD51の画面(ハウジング50の表面)が上を向いた状態で端末装置7を載置させる場合、画面が完全に水平にはならない場合がある。そのため、他の実施形態においては、ハウジング50の裏面に3つ以上の足部が形成されてもよい。これによれば、LCD51の画面が上を向いた状態では足部が床面に接することで床面に載置できるので、画面が水平になるように端末装置7を載置することができる。また、着脱可能な足部を追加することで端末装置7を水平に載置するようにしてもよい。
各ボタン54A〜54Lには、ゲームプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン54Aおよびボタン54E〜54Hは方向指示操作や選択操作等に用いられてもよいし、各ボタン54B〜54Eは決定操作やキャンセル操作等に用いられてもよい。
なお、図示しないが、端末装置7は、端末装置7の電源をオン/オフするための電源ボタンを有している。また、端末装置7は、LCD51の画面表示をオン/オフするためのボタンや、ゲーム装置3との接続設定(ペアリング)を行うためのボタンや、スピーカ(図10に示すスピーカ67)の音量を調節するためのボタンを有していてもよい。
図8の(a)図に示すように、端末装置7は、マーカ55Aおよびマーカ55Bからなるマーカ部(図10に示すマーカ部55)をハウジング50の表面に備えている。マーカ部55は、LCD51の上側に設けられる。各マーカ55Aおよびマーカ55Bは、マーカ装置6の各マーカ6Rおよび6Lと同様、1以上の赤外LEDで構成される。マーカ部55は、上述のマーカ装置6と同様、コントローラ5の動き等をゲーム装置3が算出するために用いられる。また、ゲーム装置3はマーカ部55が備える各赤外LEDの点灯を制御することが可能である。
端末装置7は、撮像手段であるカメラ56を備えている。カメラ56は、所定の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。図8に示すように、本実施形態では、カメラ56はハウジング50の表面に設けられる。したがって、カメラ56は、端末装置7を持っているユーザの顔を撮像することができ、例えばLCD51を見ながらゲームを行っている時のユーザを撮像することができる。
なお、端末装置7は、音声入力手段であるマイク(図10に示すマイク69)を備えている。ハウジング50の表面には、マイクロフォン用孔60が設けられる。マイク69はこのマイクロフォン用孔60の奥のハウジング50内部に設けられる。マイクは、ユーザの音声等、端末装置7の周囲の音を検出する。
端末装置7は、音声出力手段であるスピーカ(図10に示すスピーカ67)を備えている。図8の(d)図に示すように、ハウジング50の下側側面にはスピーカ孔57が設けられる。スピーカ67の出力音はこのスピーカ孔57から出力される。本実施形態では、端末装置7は2つのスピーカを備えており、左スピーカおよび右スピーカのそれぞれの位置にスピーカ孔57が設けられる。
また、端末装置7は、他の装置を端末装置7に接続するための拡張コネクタ58を備えている。本実施形態においては、図8の(d)図に示すように、拡張コネクタ58は、ハウジング50の下側側面に設けられる。なお、拡張コネクタ58に接続される他の装置はどのようなものであってもよく、例えば、特定のゲームに用いるコントローラ(銃型のコントローラ等)やキーボード等の入力装置であってもよい。他の装置を接続する必要がなければ、拡張コネクタ58は設けられていなくともよい。
なお、図8に示した端末装置7に関して、各操作ボタンやハウジング50の形状や、各構成要素の数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であってもよい。
次に、図10を参照して、端末装置7の内部構成について説明する。図10は、端末装置7の内部構成を示すブロック図である。図10に示すように、端末装置7は、図8に示した構成の他、タッチパネルコントローラ61、磁気センサ62、加速度センサ63、ジャイロセンサ64、ユーザインタフェースコントローラ(UIコントローラ)65、コーデックLSI66、スピーカ67、サウンドIC68、マイク69、無線モジュール70、アンテナ71、赤外線通信モジュール72、フラッシュメモリ73、電源IC74、および電池75を備える。これらの電子部品は、電子回路基板上に実装されてハウジング50内に収納される。
UIコントローラ65は、各種の入出力部に対するデータの入出力を制御するための回路である。UIコントローラ65は、タッチパネルコントローラ61、アナログスティック53(アナログスティック53Aおよび53B)、操作ボタン54(各操作ボタン54A〜54L)、マーカ部55、磁気センサ62、加速度センサ63、およびジャイロセンサ64に接続される。また、UIコントローラ65は、コーデックLSI66と拡張コネクタ58に接続される。また、UIコントローラ65には電源IC74が接続され、UIコントローラ65を介して各部に電力が供給される。電源IC74には内蔵の電池75が接続され、電力が供給される。また、電源IC74には、コネクタ等を介して外部電源から電力を取得可能な充電器76またはケーブルを接続することが可能であり、端末装置7は、当該充電器76またはケーブルを用いて外部電源からの電力供給と充電を行うことができる。なお、端末装置7は、図示しない充電機能を有するクレイドルに端末装置7を装着することで充電を行うようにしてもよい。
タッチパネルコントローラ61は、タッチパネル52に接続され、タッチパネル52の制御を行う回路である。タッチパネルコントローラ61は、タッチパネル52からの信号に基づいて所定の形式のタッチ位置データを生成してUIコントローラ65へ出力する。タッチ位置データは、タッチパネル52の入力面において入力が行われた位置の座標を表す。なお、タッチパネルコントローラ61は、タッチパネル52からの信号の読み込み、および、タッチ位置データの生成を所定時間に1回の割合で行う。また、UIコントローラ65からタッチパネルコントローラ61へは、タッチパネル52に対する各種の制御指示が出力される。
アナログスティック53は、ユーザの指で操作されるスティック部がスライドした(または傾倒した)方向および量を表すスティックデータをUIコントローラ65へ出力する。また、操作ボタン54は、各操作ボタン54A〜54Lに対する入力状況(押下されたか否か)を表す操作ボタンデータをUIコントローラ65へ出力する。
磁気センサ62は、磁界の大きさおよび方向を検知することで方位を検出する。検出された方位を示す方位データは、UIコントローラ65へ出力される。また、UIコントローラ65から磁気センサ62へは、磁気センサ62に対する制御指示が出力される。磁気センサ62に関しては、MI(磁気インピーダンス)素子、フラックスゲートセンサ、ホール素子、GMR(巨大磁気抵抗)素子、TMR(トンネル磁気抵抗)素子、あるいはAMR(異方性磁気抵抗)素子等を用いたセンサがあるが、方位を検出することができればどのようなものが用いられてもよい。なお、厳密には、地磁気以外に磁界が発生している場所においては、得られた方位データは方位を示さないことになるが、そのような場合であっても、端末装置7が動いた場合には方位データが変化するため、端末装置7の姿勢の変化を算出することができる。
加速度センサ63は、ハウジング50の内部に設けられ、3軸(図8の(a)図に示すxyz軸)方向に沿った直線加速度の大きさを検出する。具体的には、加速度センサ63は、ハウジング50の長辺方向をx軸、ハウジング50の短辺方向をy軸、ハウジング50の表面に対して垂直な方向をz軸として、各軸の直線加速度の大きさを検出する。検出された加速度を表す加速度データはUIコントローラ65へ出力される。また、UIコントローラ65から加速度センサ63へは、加速度センサ63に対する制御指示が出力される。加速度センサ63は、本実施形態では例えば静電容量式のMEMS型加速度センサであるとするが、他の実施形態においては他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ63は1軸または2軸方向を検出する加速度センサであってもよい。
ジャイロセンサ64は、ハウジング50の内部に設けられ、上記x軸、y軸およびz軸の3軸周りの角速度を検出する。検出された角速度を表す角速度データは、UIコントローラ65へ出力される。また、UIコントローラ65からジャイロセンサ64へは、ジャイロセンサ64に対する制御指示が出力される。なお、3軸の角速度を検出するために用いられるジャイロセンサの数および組み合わせはどのようなものであってもよく、ジャイロセンサ64はジャイロセンサ48と同様、2軸ジャイロセンサと1軸ジャイロセンサとで構成されてもよい。また、ジャイロセンサ64は1軸または2軸方向を検出するジャイロセンサであってもよい。
UIコントローラ65は、上記の各構成要素から受け取ったタッチ位置データ、スティックデータ、操作ボタンデータ、方位データ、加速度データ、および角速度データを含む操作データをコーデックLSI66に出力する。なお、拡張コネクタ58を介して端末装置7に他の装置が接続される場合には、当該他の装置に対する操作を表すデータが上記操作データにさらに含まれていてもよい。
コーデックLSI66は、ゲーム装置3へ送信するデータに対する圧縮処理、および、ゲーム装置3から送信されたデータに対する伸張処理を行う回路である。コーデックLSI66には、LCD51、カメラ56、サウンドIC68、無線モジュール70、フラッシュメモリ73、および赤外線通信モジュール72が接続される。また、コーデックLSI66はCPU77と内部メモリ78を含む。端末装置7はゲーム処理自体を行なわない構成であるが、端末装置7の管理や通信のための最小限のプログラムを実行する必要がある。電源投入時にフラッシュメモリ73に格納されたプログラムを内部メモリ78に読み出してCPU77が実行することで、端末装置7が起動する。また、内部メモリ78の一部の領域はLCD51のためのVRAMとして使用される。
カメラ56は、ゲーム装置3からの指示に従って画像を撮像し、撮像した画像データをコーデックLSI66へ出力する。また、コーデックLSI66からカメラ56へは、画像の撮像指示等、カメラ56に対する制御指示が出力される。なお、カメラ56は動画の撮影も可能である。すなわち、カメラ56は、繰り返し撮像を行って画像データをコーデックLSI66へ繰り返し出力することも可能である。
サウンドIC68は、スピーカ67およびマイク69に接続され、スピーカ67およびマイク69への音声データの入出力を制御する回路である。すなわち、コーデックLSI66から音声データを受け取った場合、サウンドIC68は当該音声データに対してD/A変換を行って得られる音声信号をスピーカ67へ出力し、スピーカ67から音を出力させる。また、マイク69は、端末装置7に伝わる音(ユーザの音声等)を検知して、当該音を示す音声信号をサウンドIC68へ出力する。サウンドIC68は、マイク69からの音声信号に対してA/D変換を行い、所定の形式の音声データをコーデックLSI66へ出力する。
コーデックLSI66は、カメラ56からの画像データ、マイク69からの音声データ、および、UIコントローラ65からの操作データを、端末操作データとして無線モジュール70を介してゲーム装置3へ送信する。本実施形態では、コーデックLSI66は、画像データおよび音声データに対して、コーデックLSI27と同様の圧縮処理を行う。上記端末操作データ、ならびに、圧縮された画像データおよび音声データは、送信データとして無線モジュール70に出力される。無線モジュール70にはアンテナ71が接続されており、無線モジュール70はアンテナ71を介してゲーム装置3へ上記送信データを送信する。無線モジュール70は、ゲーム装置3の端末通信モジュール28と同様の機能を有している。すなわち、無線モジュール70は、例えばIEEE802.11nの規格に準拠した方式により、無線LANに接続する機能を有する。送信されるデータは必要に応じて暗号化されていてもよいし、されていなくともよい。
以上のように、端末装置7からゲーム装置3へ送信される送信データには、操作データ(端末操作データ)、画像データ、および音声データが含まれる。なお、拡張コネクタ58を介して端末装置7に他の装置が接続される場合には、当該他の装置から受け取ったデータが上記送信データにさらに含まれていてもよい。また、赤外線通信モジュール72は、他の装置との間で例えばIRDAの規格に従った赤外線通信を行う。コーデックLSI66は、赤外線通信によって受信したデータを、必要に応じて上記送信データに含めてゲーム装置3へ送信してもよい。
また、上述のように、ゲーム装置3から端末装置7へは、圧縮された画像データおよび音声データが送信される。これらのデータはアンテナ71および無線モジュール70を介してコーデックLSI66に受信される。コーデックLSI66は、受信した画像データおよび音声データを伸張する。伸張された画像データはLCD51へ出力され、画像がLCD51に表示される。また、伸張された音声データはサウンドIC68へ出力され、サウンドIC68はスピーカ67から音を出力させる。
また、ゲーム装置3から受信されるデータに制御データが含まれる場合、コーデックLSI66およびUIコントローラ65は、制御データに従った制御指示を各部に行う。上述のように、制御データは、端末装置7が備える各構成要素(本実施形態では、カメラ56、タッチパネルコントローラ61、マーカ部55、各センサ62〜64、および赤外線通信モジュール72)に対する制御指示を表すデータである。本実施形態では、制御データが表す制御指示としては、上記各構成要素を動作させたり、動作を休止(停止)させたりする指示が考えられる。すなわち、ゲームで使用しない構成要素については電力消費を抑えるために休止させてもよく、その場合、端末装置7からゲーム装置3へ送信される送信データには、休止した構成要素からのデータが含まれないようにする。なお、マーカ部55は赤外LEDであるので、制御は単に電力の供給のON/OFFでよい。
以上のように、端末装置7は、タッチパネル52、アナログスティック53、および操作ボタン54といった操作手段を備えるが、他の実施形態においては、これらの操作手段に代えて、または、これらの操作手段とともに、他の操作手段を備える構成であってもよい。
また、端末装置7は、端末装置7の動き(位置や姿勢、あるいは、位置や姿勢の変化を含む)を算出するためのセンサとして、磁気センサ62、加速度センサ63、およびジャイロセンサ64を備えるが、他の実施形態においては、これらのセンサのうち1つまたは2つのみを備える構成であってもよい。また、他の実施形態においては、これらのセンサに代えて、または、これらのセンサとともに、他のセンサを備える構成であってもよい。
また、端末装置7は、カメラ56およびマイク69を備える構成であるが、他の実施形態においては、カメラ56およびマイク69を備えていなくてもよく、また、いずれか一方のみを備えていてもよい。
また、端末装置7は、端末装置7とコントローラ5との位置関係(コントローラ5から見た端末装置7の位置および/または姿勢等)を算出するための構成としてマーカ部55を備える構成であるが、他の実施形態ではマーカ部55を備えていない構成としてもよい。また、他の実施形態では、端末装置7は、上記位置関係を算出するための構成として他の手段を備えていてもよい。例えば、他の実施形態においては、コントローラ5がマーカ部を備え、端末装置7が撮像素子を備える構成としてもよい。さらにこの場合、マーカ装置6は赤外LEDに代えて、撮像素子を備える構成としてもよい。
[5.ゲームシステム1における処理の概要]
次に、本実施形態のゲームシステム1において実行される処理の概要について説明する。ここで、ゲームシステム1は、コントローラ5を用いてテレビ2と端末装置7という2つの表示装置に対して画面上の位置を指定する操作(ポインティング操作)を行うことを可能とするものである。
図11は、本実施形態におけるポインティング操作を示す図である。図11においては、テレビ2および端末装置7は、プレイヤ(コントローラ5)から見て異なる方向に配置される。ここで、コントローラ5をテレビ2の方へ向けた場合、テレビ2の画面上において指示位置P1が算出され、プレイヤはテレビ2の画面上の位置を指定することができる。一方、コントローラ5を端末装置7の方へ向けた場合、端末装置7の画面上において指示位置P2が算出され、プレイヤは端末装置7の画面上の位置を指定することができる。なお、ここでは、「コントローラ5をテレビ2(端末装置7)の方へ向ける」とは、コントローラ5の前方向(Z軸正方向)をテレビ2(端末装置7)の方へ向けることを意味する。このように、ゲームシステム1では、プレイヤは、テレビ2および端末装置7という2つの表示装置に対してポインティング操作を行うことができる。本実施形態によれば、ポインティング操作を行うためのコントローラ5を(1つの表示装置に対してポインティング操作を行う場合に比べて)より広範囲の方向に向けて使用することができる。
上記のような、2つの表示装置に対するポインティング操作を可能とするべく、ゲームシステム1は、コントローラ5がいずれの表示装置の方を向いているかを判定し、さらに、コントローラ5が向いている表示装置の画面上において指示位置を算出する処理を行う。ここで、「指示位置」とは、表示装置(テレビ2または端末装置7)の画面上の位置であり、コントローラ5によって指し示される位置である。指示位置は、理想的には、コントローラ5の所定方向(ここでは、Z軸正方向)と画面との交点の位置である。ただし実際には、ゲーム装置3は上記交点の位置を厳密に算出する必要はなく、コントローラ5の姿勢(向き)の変化に応じて指示位置が変化すればよい。したがって、上記交点の位置付近の位置が指示位置として算出されてもよい。
以下、指示位置の算出方法の概要を説明する。本実施形態では、指示位置を算出するために基準姿勢が用いられる。そのため、ゲーム装置3は、まず基準姿勢を設定する処理を実行する。基準姿勢とは、コントローラ5が表示装置の方を向いている場合の姿勢であり、コントローラ5がテレビ2と端末装置7のいずれの方を向いているかを判断するために用いられる。本実施形態では、テレビ2に対応する基準姿勢、すなわち、コントローラ5がテレビ2の方を向いている場合の基準姿勢を、「第1基準姿勢」と呼び、端末装置7に対応する基準姿勢、すなわち、コントローラ5が端末装置7の方を向いている場合の基準姿勢を、「第2基準姿勢」と呼ぶ。
(基準姿勢設定処理)
ゲーム装置3は、まず第1基準姿勢を設定する。第1基準姿勢の設定は、プレイヤに実際にコントローラ5をテレビ2の方へ向けさせ、コントローラ5がテレビ2の方を向いた時のコントローラ5の姿勢を記憶することで行われる。図12は、第1基準姿勢の設定用の画像の一例を示す図である。図12に示すように、第1基準姿勢を設定する際、テレビ2には、第1基準姿勢の設定用の画像としてカーソル81、説明画像82、および案内画像83が表示される。
カーソル81は、コントローラ5による操作対象であり、指示位置に表示される。詳細は後述するが、基準姿勢を算出する際の指示位置は、上述のマーカ座標データから算出される。したがって、第1基準姿勢を設定する際にはマーカ装置6が点灯し、ゲーム装置3は、コントローラ5の撮像部(撮像素子40)によるマーカ装置6の撮像結果を用いて指示位置を算出する。これによって、コントローラ5のZ軸が指し示す位置が指示位置として算出される。
説明画像82は、コントローラ5をテレビ2の方へ向けるようにプレイヤに促すための画像であり、例えば「中央にカーソルを合わせてボタンを押してください」といったメッセージを表す。案内画像83は、プレイヤがカーソル81を移動すべき領域を表す画像であり、典型的には画面の中央を含む領域を表す。
第1基準姿勢を算出する際、上記説明画像82および案内画像83を見たプレイヤは、コントローラ5を案内画像83の方へ向けることによってカーソル81を案内画像83の位置に合わせ、所定のボタン(例えばAボタン32d)を押下する基準設定操作を行う。ここで、ゲーム装置3は、コントローラ5の姿勢を逐次算出しており、上記基準設定操作が行われた時点の姿勢を第1基準姿勢として記憶する。なお、詳細は後述するが、基準姿勢を設定する際におけるコントローラ5の姿勢の算出は、上述の角速度データおよび加速度データを用いて行われる。
ゲーム装置3は、第1基準姿勢を設定すると次に、第2基準姿勢を設定する。第2基準姿勢の設定方法も第1基準姿勢の設定方法と同様であり、プレイヤに実際にコントローラ5を端末装置7の方へ向けさせ、コントローラ5が端末装置7の方を向いた時のコントローラ5の姿勢を記憶することで行われる。すなわち、ゲーム装置3は、上記説明画像82および案内画像83を端末装置7のLCD51に表示させる。また、マーカ部55を点灯させ、コントローラ5の撮像部(撮像素子40)によるマーカ部55の撮像結果を用いて(LCD51の画面上における)指示位置を算出してカーソル81を指示位置に表示させる。さらに、コントローラ5の姿勢を逐次算出しておき、上記基準設定操作が行われた時点の姿勢を第2基準姿勢として記憶する。
本実施形態においては、上記の基準姿勢設定処理がゲームの開始前に(すなわち、指示位置をゲーム入力として用いるゲーム処理の実行前に)実行される。指示位置の算出処理、および、指示位置を用いたゲーム制御処理は、各基準姿勢(第1および第2基準姿勢)が設定された後で実行される。
(指示位置算出処理)
指示位置を算出する際、ゲーム装置3はまず、コントローラ5がテレビ2と端末装置7とのいずれの方を向いているかを判定する。この判定は、コントローラ5の現在の姿勢と、各基準姿勢とを比較することで行われる。具体的には、ゲーム装置3は、各基準姿勢のうちで、現在の姿勢に近い方の基準姿勢に対応する表示装置の方をコントローラ5が向いていると判定する。このように、ゲーム装置3は、コントローラ5の姿勢と各基準姿勢とに基づいて、コントローラ5が向いている表示装置を特定する。以下では、コントローラ5が向いている表示装置を「対象表示装置」と呼ぶ。なお、詳細は後述するが、指示位置を算出する際に算出されるコントローラ5の姿勢は、上述の角速度データおよび加速度データに基づいて算出される。そのため、コントローラ5がどのような状態であっても(マーカユニットを撮像できない状態であっても)姿勢を算出することが可能である。
対象表示装置が特定されると、ゲーム装置3は、対象表示装置に対応する基準姿勢と、現在の姿勢とに基づいて指示位置を算出する。詳細は後述するが、指示位置は、上記基準姿勢に対する現在の姿勢の変化量および変化方向に応じた位置となるように算出される。したがって、プレイヤは、コントローラ5の姿勢を変化させた方向に応じた方向へ、変化させた量に応じた量だけ指示位置を移動させることができる。
以上のように、本実施形態によれば、コントローラ5を向けた方の表示装置の画面上において指示位置が算出される。ここで、2つのマーカユニット(マーカ装置6およびマーカ部55)を区別して認識することができない場合、マーカ座標の情報からのみでは、コントローラ5がどちらの表示装置を向いているかを判定する(対象表示装置を特定する)ことができない。また、コントローラ5がマーカユニットを撮像していなければ、コントローラ5の姿勢を算出することもできない。これに対して、本実施形態では、マーカ座標以外の情報(角速度等の情報)を用いてコントローラ5の姿勢を算出し、当該姿勢から対象表示装置を特定する。これによれば、コントローラ5がどのような状態であっても姿勢を算出することができ、対象表示装置を特定することができる。したがって、本実施形態によれば、コントローラ5がどちらの表示装置を向いているかを適切に判断することができ、適切な表示装置の画面上で指示位置を算出することができる。
また、2つのマーカユニットを区別して認識することができる場合には、コントローラ5が撮像したマーカユニットがマーカ装置6およびマーカ部55のいずれであるかを識別することによって、対象表示装置を特定することができる。しかし、撮像されたマーカユニットの画像に対して認識・識別処理を精度良く行うことは一般的には難しい。これに対して、本実施形態によれば、上記のような認識・識別処理は不要であり、コントローラ5の姿勢に基づいて対象表示装置を高精度で特定することができる。
(指示位置を用いたゲーム処理)
次に、本実施形態におけるゲーム処理の概要を説明する。本実施形態では、上記指示位置を入力とするゲーム処理が実行される。ここで、本実施形態においては2つの表示装置の画面上の位置をコントローラ5を用いて指定することができるので、以下に示すような新規なゲーム操作も可能となる。
図13は、本実施形態におけるゲーム画像の一例を示す図である。図13に示すように、テレビ2には、プレイヤの操作対象となるプレイヤオブジェクト85と、UFOを模した敵オブジェクト86とが表示される。また、コントローラ5がテレビ2の方を向く場合には、図13に示す(A)および(B)のように、テレビ2の画面上の指示位置にカーソル81が表示される。また、端末装置7には、家のオブジェクト(家オブジェクト)87が表示される。プレイヤオブジェクト85は、適宜のタイミングでテレビ2の画面に出現する。なお、プレイヤは、コントローラ5による操作によってプレイヤオブジェクト85を移動することができる。一方、敵オブジェクト86は、ゲーム装置3によって動作が制御され、プレイヤオブジェクト85を連れ去る。本実施形態におけるゲームは、プレイヤオブジェクト85が敵オブジェクト86に連れ去られる前にプレイヤオブジェクト85を家オブジェクト87へ移動させて救出するゲームである。
本ゲームでは、プレイヤは、カーソル81によってプレイヤオブジェクト85を移動させることができる。具体的には、カーソル81がプレイヤオブジェクト85の位置にある状態でプレイヤが所定の選択操作を行うと、カーソル81でプレイヤオブジェクト85を掴むことができる。つまり、上記の状態で選択操作が行われると、プレイヤオブジェクト85が選択され、選択されたプレイヤオブジェクト(選択オブジェクトと呼ぶ)89はカーソル81と共に移動する(図13の(B)参照)。また、プレイヤは、所定の解除操作によって選択オブジェクト89を放すことができる。つまり、解除操作が行われると、プレイヤオブジェクト85はカーソル81と共に移動しなくなる。また、本ゲームでは、プレイヤは、指示位置を敵オブジェクト86に合わせて所定の射撃操作を行うことで、敵オブジェクト86を撃退(消滅)させることができる。
また、選択オブジェクト89を移動可能な状態(図13の(B))で、プレイヤがコントローラ5を端末装置7の方へ向けた場合、選択オブジェクト89は端末装置7の方に表示される(図13の(C)参照)。プレイヤがコントローラ5を端末装置7の方へ向けた場合、指示位置が端末装置7の画面上で算出される結果、カーソル81は端末装置7に表示され、カーソル81と共に移動する選択オブジェクト89も端末装置7の方に表示されるのである。さらに、カーソル81および選択オブジェクト89が端末装置7に表示されている状態で解除操作を行うと、選択オブジェクト89は家オブジェクト87の中に入り、選択オブジェクト89を救出することができる。以上のように、プレイヤは、テレビ2の画面上において敵オブジェクト86を撃退しつつ、プレイヤオブジェクト85を家オブジェクト87へ移動させることでゲームを行う。
以上のように、本実施形態においては、プレイヤは、テレビ2側に表示されるオブジェクトの方へコントローラ5を向けて選択し、その後コントローラ5の向きを端末装置7の方へ変化させることで、選択したオブジェクトを端末装置7側へ移動させることができる。つまり、本実施形態によれば、プレイヤは、表示装置に表示されるオブジェクトを他の表示装置へ移動させる操作を直感的な操作で容易に行うことができる。
また、本実施形態においては、カーソル81が表示されない表示装置には、コントローラ5が向いている方向を示すための方向画像88が表示される。すなわち、コントローラ5がテレビ2の方を向いている場合(図13の(A)および(B))には、端末装置7には、右方向を示す方向画像88が表示される。また、コントローラ5が端末装置7の方を向いている場合(図13の(C))には、テレビ2には、左方向を示す方向画像88が表示される。なお、図示しないが、カーソル81がテレビ2および端末装置7のいずれにも表示されない場合には、両方の画面に方向画像88が表示される。例えば、コントローラ5が上を向いている場合、テレビ2および端末装置7の画面には上方向を示す方向画像88が表示される。方向画像88が表示されることによって、プレイヤは、コントローラ5が現在指し示している位置(方向)を見失うことなくポインティング操作を行うことができる。
[6.ゲーム処理の詳細]
次に、本ゲームシステムにおいて実行されるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図14は、ゲーム処理において用いられる各種データを示す図である。図14においては、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す。図14に示すように、ゲーム装置3のメインメモリには、ゲームプログラム90、操作データ91、および処理用データ96が記憶される。なお、メインメモリには、図14に示すデータの他、ゲームに登場する各種オブジェクトの画像データやゲームに使用される音声データ等、ゲームに必要なデータが記憶される。
ゲームプログラム90は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。なお、ゲームプログラム90は、光ディスク4に代えて、フラッシュメモリ17やゲーム装置3の外部装置から(例えばインターネットを介して)取得されてもよい。また、ゲームプログラム90に含まれる一部(例えば、コントローラ5および/または端末装置7の姿勢を算出するためのプログラム)については、ゲーム装置3内に予め記憶されていてもよい。
操作データ91は、コントローラ5に対するユーザの操作を表すデータ(上述したコントローラ操作データ)である。操作データ91は、コントローラ5から送信されてゲーム装置3において取得される。操作データ91は、加速度データ92、角速度データ93、マーカ座標データ94、および操作ボタンデータ95を含む。なお、メインメモリには、最新の(最後に取得された)ものから順に所定個数の操作データが記憶されてもよい。
加速度データ92は、加速度センサ37によって検出された加速度(加速度ベクトル)を表すデータである。ここでは、加速度データ92は、図3に示すXYZの3軸の方向に関する加速度を各成分とする3次元の加速度を表すものであるが、他の実施形態においては、任意の1以上の方向に関する加速度を表すものであればよい。
角速度データ93は、ジャイロセンサ48によって検出された角速度を表すデータである。ここでは、角速度データ93は、図3に示すXYZの3軸回りのそれぞれの角速度を表すものであるが、他の実施形態においては、任意の1軸以上の軸回り角速度を表すものであればよい。
マーカ座標データ94は、撮像情報演算部35の画像処理回路41によって算出される座標、すなわち上記マーカ座標を表すデータである。マーカ座標は、撮像画像に対応する平面上の位置を表すための2次元座標系で表現され、マーカ座標データ94は、当該2次元座標系における座標値を表す。なお、撮像素子40によってマーカ部55の2つのマーカ55Aおよび55Bが撮像される場合には、2つのマーカ座標が算出され、マーカ座標データ94は2つのマーカ座標を表す。一方、撮像素子40の撮像可能な範囲内にマーカ55Aおよび55Bのいずれか一方が位置しない場合には、撮像素子40によって1つのマーカのみが撮像され、1つのマーカ座標のみが算出される。その結果、マーカ座標データ94は1つのマーカ座標を表す。また、撮像素子40の撮像可能な範囲内にマーカ55Aおよび55Bの両方が位置しない場合には、撮像素子40によってマーカが撮像されず、マーカ座標は算出されない。したがって、マーカ座標データ94は、2つのマーカ座標を表す場合もあるし、1つのマーカ座標を表す場合もあるし、マーカ座標がないことを表す場合もある。
なお、コントローラ5からゲーム装置3へは、上記マーカ座標データに代えて、撮像画像の画像データ自体が送信されてもよい。つまり、コントローラ5は、撮像装置(撮像素子40)による撮像画像に関する撮像データとして、マーカ座標データを送信してもよいし、画像データ自体を送信してもよい。撮像画像の画像データをコントローラ5から受信する場合、ゲーム装置3は、撮像画像の画像データから上記マーカ座標を算出し、マーカ座標データとしてメインメモリに記憶するようにしてもよい。
上記加速度データ92、角速度データ93、およびマーカ座標データ94は、コントローラ5の姿勢に応じたデータ(姿勢に応じて値が変化するデータ)である。詳細は後述するが、これらのデータ92〜94に基づいてコントローラ5の姿勢を算出することができる。なお、他の実施形態においては、コントローラ5の姿勢を算出するために、これらのデータ92〜94とともに(またはこれらのデータ92〜94に代えて)、例えば磁気センサが検出する方位を表す方位データ等、コントローラ5の姿勢に応じた他の種類のデータが用いられてもよい。
操作ボタンデータ95は、コントローラ5に設けられる各操作ボタン32a〜32iに対する入力状態を表すデータである。
なお、操作データ91は、コントローラ5を操作するプレイヤの操作を表すものであればよく、上記各データ92〜95の一部のみを含むものであってもよい。また、コントローラ5が他の入力手段(例えば、タッチパネルやアナログスティック等)を有する場合には、操作データ91は、当該他の入力手段に対する操作を表すデータを含んでいてもよい。
処理用データ96は、後述するゲーム処理(図15)において用いられるデータである。処理用データ96は、第1姿勢データ97、第2姿勢データ98、第3姿勢データ99、第1基準姿勢データ100、第2基準姿勢データ101、対象基準データ102、投影位置データ103、指示位置データ104、差分データ105、制御データ106、処理フラグデータ107、および選択オブジェクトデータ108を含む。なお、図14に示すデータの他、処理用データ96は、各種オブジェクトに設定される各種パラメータ(例えばプレイヤオブジェクトおよび敵オブジェクトに関するパラメータ等)を表すデータ等、ゲーム処理において用いられる各種データを含む。
第1姿勢データ97は、角速度データ93に基づいて算出されるコントローラ5の姿勢(以下、「第1姿勢」と呼ぶ。)を表すデータである。第2姿勢データ98は、加速度データ92に基づいて算出されるコントローラ5の姿勢(以下、「第2姿勢」と呼ぶ。)を表すデータである。第3姿勢データ99は、マーカ座標データ94に基づいて算出されるコントローラ5の姿勢(以下、「第3姿勢」と呼ぶ。)を表すデータである。詳細は後述するが、本実施形態では、算出方法が異なる上記3種類の姿勢に基づいて、最終的なコントローラ5の姿勢が算出される。最終的なコントローラ5の姿勢は、第1姿勢を第2姿勢および第3姿勢によって補正することによって得られる補正後の第1姿勢によって表される。
ここで、本実施形態では、コントローラ5の第1姿勢は、以下の式(1)に示す3×3の行列M1で表現される。
上記行列M1は、所定の姿勢から現在のコントローラ5の姿勢への回転を表す回転行列である。なお、行列M1により表される第1姿勢は、コントローラ5が存在する空間に設定される空間座標系で表され、当該空間における上記所定の姿勢を基準とした姿勢である。なお、本実施形態においては、計算を簡単にする目的で、後述する第1基準姿勢処理(ステップS12)において、空間座標系は第1基準姿勢が単位行列となるように設定される。つまり、上記所定の姿勢は第1基準姿勢である。なお、本実施形態では、行列を用いてコントローラ5の姿勢を表現することとしたが、他の実施形態においては、コントローラ5の姿勢は、3次のベクトルまたは3つの角度によって表現されてもよい。
第1基準姿勢データ100は、上述の第1基準姿勢を表すデータである。また、第2基準姿勢データ101は、上述の第2基準姿勢を表すデータである。このように、表示装置毎の基準姿勢がそれぞれメインメモリに記憶される。なお、本実施形態では、各基準姿勢も上記第1姿勢と同様、3×3の行列によって表される。また、上記のように、第1基準姿勢は単位行列となる。
対象基準データ102は、各基準姿勢のうち、上述の対象表示装置、すなわち、コントローラ5が向いている表示装置に対応する基準姿勢(対象基準姿勢)を表す。対象基準データ102は、コントローラ5がいずれの表示装置の方を向いているかを表すデータである。
投影位置データ103は、後述する投影位置を表すデータである。詳細は後述するが、投影位置は、コントローラ5の姿勢および基準姿勢に基づいて算出され、指示位置を算出するために用いられる。また、投影位置は、表示装置の画面に対応する平面上の位置であり、基準姿勢に対する現在の姿勢の変化量および変化方向を表す情報である。
指示位置データ104は、上述の指示位置を表すデータである。具体的には、指示位置データ104は、テレビ2または端末装置7の画面に対応する平面上の位置を示す2次元座標を表す。
差分データ105は、第1基準姿勢と第2基準姿勢との差を表すデータである。本実施形態では、差分データ105が表す差に応じて異なるゲーム処理が実行される。つまり、本実施形態では、第1基準姿勢と第2基準姿勢との差がゲーム内容(具体的にはゲームの難易度)に反映される。
制御データ106は、端末装置7が備える構成要素に対する制御指示を表すデータである。本実施形態では、制御データ106は、マーカ部55の点灯を制御する指示を含む。制御データ106は、適宜のタイミングでゲーム装置3から端末装置7へ送信される。
処理フラグデータ107は、ゲーム処理の進捗を判断するための処理フラグの値を表す。具体的には、各基準姿勢が設定されていない場合、処理フラグの値は“0”となり、第1基準姿勢が設定済みで、かつ、第2基準姿勢が設定されていない場合、処理フラグの値は“1”となり、各基準姿勢が設定済みである場合、処理フラグの値は“2”となる。
選択オブジェクトデータ108は、選択オブジェクトおよびその位置を表す。また、選択オブジェクトが存在しない場合、選択オブジェクトデータ108は、選択オブジェクトが存在しない旨を表す。
次に、ゲーム装置3において行われるゲーム処理の詳細を、図15〜図26を用いて説明する。図15は、ゲーム装置3において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。なお、ゲーム装置3においては、電源投入後にゲームプログラムがすぐに実行される構成であってもよいし、電源投入後にまず所定のメニュー画面を表示する内蔵プログラムが実行され、その後ユーザによってゲームの開始が指示されたことに応じてゲームプログラムが実行される構成であってもよい。図15に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
なお、図15〜図20,図24〜図26に示すフローチャートの各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判断ステップで利用される閾値も、単なる一例に過ぎず、必要に応じて他の値を採用してもよい。また、本実施形態では、上記フローチャートの各ステップの処理をCPU10が実行するものとして説明するが、上記フローチャートの一部のステップの処理を、CPU10以外のプロセッサや専用回路が実行するようにしてもよい。
まずステップS1において、CPU10は初期処理を実行する。初期処理は、仮想のゲーム空間を構築し、ゲーム空間に登場する各オブジェクトを初期位置に配置したり、ゲーム処理で用いる各種パラメータの初期値を設定したりする処理である。なお、本実施形態においては、初期処理において、各基準姿勢の所定の初期値(例えば単位行列)を表すデータが各基準姿勢データ100および101としてメインメモリに記憶される。また、“0”を表すデータが処理フラグデータ107としてメインメモリに記憶される。ステップS1の次にステップS2の処理が実行される。以降、ステップS2〜S8の一連の処理からなる処理ループが所定時間(1フレーム時間)に1回の割合で繰り返し実行される。
ステップS2において、CPU10は、コントローラ5から操作データを取得する。ここで、コントローラ5は、加速度センサ37、ジャイロセンサ48、撮像情報演算部35および操作部32から出力される各データを操作データとしてゲーム装置3へ繰り返し送信する。ゲーム装置3は、コントローラ5からのデータを逐次受信して操作データ91としてメインメモリに逐次記憶する。ステップS2において、CPU10は、最新の操作データ91をメインメモリから読み出す。ステップS2の次にステップS3の処理が実行される。
なお、本実施形態では端末装置7は操作装置としては用いられないので、CPU10は端末装置7から上述の端末操作データを取得しないものとして説明を行う。ただし、他の実施形態においては、上記ステップS2においてCPU10は端末操作データを取得してメインメモリに記憶し、端末操作データを後述するゲーム制御処理に用いてもよい。
ステップS3において、CPU10はゲーム制御処理を実行する。ゲーム制御処理は、プレイヤによるゲーム操作に従ってゲーム空間内のオブジェクトを動作させる処理等を実行し、ゲームを進行させる処理である。具体的には、本実施形態におけるゲーム制御処理においては、各基準姿勢を設定する処理、操作データ91に基づいて指示位置を算出する処理、および、指示位置に基づいてオブジェクトを動作させる処理等が実行される。以下、図16を参照して、ゲーム制御処理の詳細について説明する。
図16は、図15に示すゲーム制御処理(ステップS3)の詳細な流れを示すフローチャートである。ゲーム制御処理においてはまずステップS11において、CPU10は、第1基準姿勢を設定済みであるか否かを判定する。具体的には、処理フラグデータ107をメインメモリから読み出し、処理フラグの値が“0”以外(“1”または“2”)であるか否かを判定する。ステップS11の判定結果が肯定である場合、ステップS13の処理が実行される。一方、ステップS11の判定結果が否定である場合、ステップS12の処理が実行される。
ステップS12において、CPU10は、第1基準姿勢を設定するための第1基準設定処理を実行する。本実施形態においては、図15に示すゲーム処理が開始されるとまず第1基準設定処理が実行され、第1基準姿勢が設定される。以下、図17を参照して、第1基準設定処理の詳細について説明する。
図17は、図16に示す第1基準設定処理(ステップS12)の詳細な流れを示すフローチャートである。第1基準設定処理においてはまずステップS21において、CPU10は、テレビ2に対応するマーカユニットであるマーカ装置6を点灯させる。すなわち、CPU10は、マーカ装置6が備える各赤外LEDを点灯させる旨の制御信号をマーカ装置6へ送信する。この制御信号の送信は単に電力を供給するというだけのことであってもよい。これに応じてマーカ装置6の各赤外LEDが点灯される。なお、第1基準設定処理においては、端末装置7のマーカ部55は点灯されないことが好ましい。マーカ部55が点灯していると、マーカ部55をマーカ装置6と誤検出してしまうおそれがあるからである。ステップS21の次にステップS22の処理が実行される。
ステップS22において、CPU10は、コントローラ5の姿勢を算出するための姿勢算出処理を実行する。コントローラ5の姿勢は、操作データ91に基づいて算出されればどのような方法で算出されてもよいが、本実施形態においては、角速度に基づく第1姿勢に対して、加速度に基づく第2姿勢とマーカ座標に基づく第3姿勢とを用いて補正を行うことによってコントローラ5の姿勢を算出する。なお、姿勢算出処理を実行するためのプログラムは、ライブラリとしてゲームプログラム90とは別にゲーム装置3に予め記憶されていてもよい。以下、図18を参照して、姿勢算出処理の詳細について説明する。
図18は、図17に示す姿勢算出処理(ステップS22)の詳細な流れを示すフローチャートである。姿勢算出処理においてはまずステップS31において、CPU10は、コントローラ5の角速度に基づいてコントローラ5の第1姿勢を算出する。コントローラ5の第1姿勢を算出する方法はどのような方法であってもよいが、本実施形態においては、当該第1姿勢は、前回の第1姿勢(前回に算出された第1姿勢)と、今回の角速度(今回の処理ループにおけるステップS2で取得された角速度)とに基づいて算出される。具体的には、CPU10は、前回の第1姿勢を今回の角速度で単位時間分だけ回転させることによって新たな第1姿勢を算出する。なお、前回の第1姿勢は、メインメモリに記憶されている第1姿勢データ97により表され、今回の角速度は、メインメモリに記憶されている角速度データ93により表される。したがって、CPU10は、メインメモリから第1姿勢データ97および角速度データ93を読み出して、コントローラ5の第1姿勢を算出する。ステップS31で算出された第1姿勢を示すデータは、第1姿勢データ97としてメインメモリに新たに記憶される。以上のステップS31の次にステップS32の処理が実行される。
なお、角速度から姿勢を算出する場合、初期姿勢を定めておいてもよい。つまり、コントローラ5の姿勢を角速度から算出する場合には、CPU10は、最初にコントローラ5の初期姿勢を算出しておく。コントローラ5の初期姿勢は、加速度データに基づいて算出されてもよいし、コントローラ5を特定の姿勢にした状態でプレイヤに所定の操作を行わせることで、所定の操作が行われた時点における特定の姿勢を初期姿勢として用いるようにしてもよい。なお、空間における所定の姿勢を基準とした絶対的な姿勢としてコントローラ5の姿勢を算出する場合には上記初期姿勢を算出することが好ましい。ただし、例えばゲーム開始時点等、所定の時点におけるコントローラ5の姿勢を基準とした相対的な姿勢としてコントローラ5の姿勢を算出する場合には、上記初期姿勢は算出されなくてもよい。本実施形態においては、第1基準姿勢が設定されることによって初期姿勢が再設定されることになるので、第1基準姿勢が設定される前においては任意の姿勢を初期姿勢として設定しておいてもよい。
ステップS32において、CPU10は、コントローラ5の加速度に基づいてコントローラ5の第2姿勢を算出する。具体的には、CPU10は、メインメモリから加速度データ92を読み出して、加速度データ92に基づいてコントローラ5の姿勢を算出する。ここで、コントローラ5がほぼ静止している状態では、コントローラ5に対して加えられる加速度は重力加速度に相当する。したがって、この状態では、検出された重力加速度の方向(重力方向)に対するコントローラ5の向き(姿勢)を当該加速度データ92に基づいて算出することができる。このように、加速度センサ37が重力加速度を検出する状況では、重力方向を基準としたコントローラ5の姿勢を加速度データ92に基づいて算出することができる。以上のようにして算出された姿勢を表すデータは、第2姿勢データ98としてメインメモリに記憶される。ステップS32の次にステップS33の処理が実行される。
ステップS33において、CPU10は、加速度に基づく第2姿勢を用いて、角速度に基づく第1姿勢を補正する。具体的には、CPU10は、第1姿勢データ97および第2姿勢データ98をメインメモリから読み出し、第1姿勢を第2姿勢へ所定の割合で近づける補正を行う。この所定の割合は、予め定められた固定値であってもよいし、検出される加速度等に応じて設定されてもよい。なお、第2姿勢は、重力方向を基準として表される姿勢であるので、第1姿勢が他の方向を基準として表される姿勢である場合には、補正を行う前に一方の姿勢を他方の姿勢の基準として表される姿勢に変換する必要がある。ここでは、第1姿勢を基準として表される姿勢へと第2姿勢を変換するべく、第2姿勢を表すベクトルを、前回のフレーム処理(ステップS2〜S8の処理)において得られた第1姿勢を表す回転行列を用いて回転させる。また、第2姿勢に関しては、重力方向を軸とする回転方向については姿勢を算出することができないので、当該回転方向に関しては補正が行われなくてもよい。
なお、ステップS33における補正処理においては、加速度センサ37によって検出される加速度が重力方向を表すものとして信頼できる度合に応じて、補正の割合を変化させるようにしてもよい。ここで、検出される加速度が信頼できるか否か、すなわち、コントローラ5が静止しているか否かは、当該加速度の大きさが重力加速度の大きさに近いか否かによって推測することができる。したがって、例えば、CPU10は、検出される加速度の大きさが重力加速度の大きさに近い場合には、第1姿勢を第2姿勢へ近づける割合を大きくし、検出される加速度の大きさが重力加速度の大きさから離れている場合には、第1姿勢を第2姿勢へ近づける割合を小さくするようにしてもよい。以上のようにして得られた補正後の姿勢を表すデータが、新たな第1姿勢データ97としてメインメモリに記憶される。ステップS33の次にステップS34の処理が実行される。
ステップS34において、CPU10は、各基準姿勢が設定済みであるか否かを判定する。具体的には、CPU10は、処理フラグデータ107をメインメモリから読み出し、処理フラグの値が“2”であるか否かを判定する。ステップS34の判定結果が肯定である場合、ステップS35の処理が実行される。一方、ステップS34の判定結果が否定である場合、ステップS35〜S37の処理がスキップされて、CPU10は姿勢算出処理を終了する。
上記のように、本実施形態においては、基準設定処理(上記ステップS12または後述するステップS14)においてはマーカ座標に基づく第3姿勢を用いた補正処理(ステップS35〜S37)が実行されない。つまり、基準設定処理においては、角速度データ93および加速度データ92に基づいてコントローラ5の姿勢が算出される。なお、第1基準設定処理においては、第1基準姿勢を設定する際に姿勢の初期化処理(後述するステップS24)が行われ、初期化処理後においては第1基準姿勢を基準とした姿勢が算出される。そのため、第1基準姿勢とは異なる姿勢を基準として算出される第3姿勢を用いて補正を行う必要がないので、第1基準設定処理においてステップS35〜S37の処理を実行しない。なお、他の実施形態において、CPU10は、上記初期化処理を実行しない場合には、第3姿勢を用いた補正処理を第1基準設定処理においても実行するようにしてもよい。
ステップS35において、CPU10は、コントローラ5の撮像手段(撮像素子40)によってマーカユニットが撮像されているか否かを判定する。ステップS35の判定は、メインメモリに記憶されているマーカ座標データ94を参照することによって行うことができる。ここでは、マーカ座標データ94が2つのマーカ座標を表す場合、マーカユニットが撮像されていると判定し、マーカ座標データ94が1つのマーカ座標のみを表す場合、または、マーカ座標がないことを表す場合、マーカユニットが撮像されていないと判定する。ステップS35の判定結果が肯定である場合、以降のステップS36およびS37の処理が実行される。一方、ステップS35の判定結果が否定である場合、ステップS36およびS37の処理がスキップされ、CPU10は姿勢算出処理を終了する。このように、撮像素子40によってマーカユニットが撮像されていない場合には、撮像素子40から得られるデータを用いてコントローラ5の姿勢(第3姿勢)を算出することができないので、この場合には第3姿勢を用いた補正は行われない。
なお、他の実施形態において、プレイヤの下(床面)や上(天井)に配置されることがないと想定される場合には、上記ステップS35において、CPU10は、コントローラ5の先端方向(Z軸正方向)が鉛直方向を向いているか否かをさらに判定してもよい。そして、鉛直方向を向いていると判定される場合には、CPU10は、コントローラ5の撮像手段によってマーカユニットが撮像されていないと判断する。なお、コントローラ5の先端方向が鉛直方向を向いているか否かの判定は、ステップS31で算出された第1姿勢、ステップS32で算出された第2姿勢、または、ステップS33で補正された第1姿勢を用いて行われる。これによれば、撮像情報演算部35がマーカユニットでない物をマーカユニットであると誤認識してマーカ座標を算出した場合であっても、誤ったマーカ座標に基づいて第3姿勢が算出されることがないので、コントローラ5の姿勢をより精度良く算出することができる。
ステップS36において、CPU10は、マーカ座標に基づいてコントローラ5の第3姿勢を算出する。マーカ座標は、撮像画像内における2つのマーカ(マーカ6Lおよび6R、または、マーカ55Aおよび55B)の位置を示すので、これらの位置からコントローラ5の姿勢を算出することができる。以下、マーカ座標に基づくコントローラ5の姿勢の算出方法について説明する。なお、以下におけるロール方向、ヨー方向、およびピッチ方向とは、コントローラ5の撮像方向(Z軸正方向)がマーカユニットを指し示す状態(基準状態)にあるコントローラ5のZ軸回りの回転方向、Y軸回りの回転方向、およびX軸回りの回転方向を指す。
まず、ロール方向(Z軸回りの回転方向)に関する姿勢は、撮像画像内において2つのマーカ座標を結ぶ直線の傾きから算出することができる。すなわち、ロール方向に関する姿勢を算出する際、CPU10はまず、2つのマーカ座標を結ぶベクトルを算出する。このベクトルは、コントローラ5のロール方向の回転に応じて向きが変化するので、CPU10は、ロール方向に関する姿勢をこのベクトルに基づいて算出することができる。例えば、ロール方向に関する姿勢は、所定の姿勢の時のベクトルを現在のベクトルへと回転させる回転行列として算出されてもよいし、所定の姿勢の時のベクトルと現在のベクトルとのなす角度として計算されてもよい。
また、コントローラ5の位置が概ね一定であると想定できる場合には、撮像画像内におけるマーカ座標の位置から、ピッチ方向(X軸回りの回転方向)およびヨー方向(Y軸回りの回転方向)に関するコントローラ5の姿勢を算出することができる。具体的には、CPU10はまず、2つのマーカ座標の中点の位置を算出する。つまり、本実施形態では撮像画像内におけるマーカユニットの位置として当該中点の位置が用いられる。次に、CPU10は、撮像画像の中央の位置を中心として、コントローラ5のロール方向に関する回転角度だけ(コントローラ5の回転方向とは逆方向に)上記中点を回転させる補正を行う。換言すれば、中点は、撮像画像の中央の位置を中心として、上記ベクトルが水平方向を向くように回転される。
上記のようにして得られた補正後の中点位置から、コントローラ5のヨー方向およびピッチ方向に関する姿勢を算出することができる。すなわち、上記基準状態において、補正後の中点位置は撮像画像の中央の位置となる。また、補正後の中点位置は、基準状態からコントローラ5の姿勢が変化した方向とは逆方向に、変化した量に応じた量だけ、撮像画像の中央の位置から移動する。したがって、基準状態におけるコントローラ5の姿勢から当該姿勢が変化した方向および量(角度)は、撮像画像の中央の位置を基準とした補正後の中点位置の変化方向および変化量に基づいて算出される。また、コントローラ5のヨー方向は撮像画像の横方向に対応し、コントローラ5のピッチ方向は撮像画像の縦方向に対応するので、ヨー方向およびピッチ方向の姿勢を個別に算出することも可能である。
なお、ゲームシステム1においては、プレイヤがゲームを行う態勢(立っているか座っているか等)や、マーカユニットの位置(テレビ2の上に配置されるか下に配置されるか等)は様々であることから、鉛直方向に関しては、コントローラ5の位置が概ね一定であるとの上記想定が成り立たないおそれがある。つまり、本実施形態においては、ピッチ方向については第3姿勢を正確に算出することができないおそれがあるので、CPU10は、ピッチ方向については第3姿勢を算出しないものとする。
以上より、上記ステップS36においては、CPU10は、マーカ座標データ94をメインメモリから読み出し、ロール方向に関する姿勢とヨー方向に関する姿勢とを2つのマーカ座標に基づいて算出する。なお、各方向に関する姿勢を例えば回転行列として算出する場合、第3姿勢は、各方向に対応する回転行列を積算することで得ることができる。算出された第3姿勢を表すデータは、第3姿勢データ99としてメインメモリに記憶される。上記ステップS36の次にステップS37の処理が実行される。
なお、本実施形態においては、CPU10は、ロール方向およびヨー方向に関する姿勢をマーカ座標に基づいて算出し、ピッチ方向については第1姿勢と同じ姿勢を用いることとした。つまり、ピッチ方向についてはマーカ座標を用いた姿勢の補正処理を行わないこととした。ただし、他の実施形態においては、CPU10は、ピッチ方向についてもヨー方向と同様の方法でマーカ座標に基づいてピッチ方向に関する姿勢を算出するようにし、ピッチ方向についてもマーカ座標を用いた姿勢の補正処理を行うようにしてもよい。
ステップS37において、CPU10は、マーカ座標に基づく第3姿勢を用いて、角速度に基づく第1姿勢を補正する。具体的には、CPU10は、第1姿勢データ97および第3姿勢データ99をメインメモリから読み出し、第1姿勢を第3姿勢へ所定の割合で近づける補正を行う。この所定の割合は、例えば予め定められた固定値である。また、補正の対象となる第1姿勢は、上記ステップS33の処理によって第2姿勢を用いて補正が行われた後の第1姿勢である。以上のようにして得られた補正後の姿勢を表すデータが、新たな第1姿勢データ97としてメインメモリに記憶される。ステップS37の補正処理後における第1姿勢データ97が、最終的なコントローラ5の姿勢として後の処理に用いられる。上記ステップS37の終了後、CPU10は姿勢算出処理を終了する。
上記姿勢算出処理によれば、CPU10は、角速度データ93に基づいて算出されたコントローラ5の第1姿勢を、加速度データ92(およびマーカ座標データ94)を用いて補正した。ここで、コントローラ5の姿勢を算出する方法のうち、角速度を用いる方法では、コントローラ5がどのように動いているときであっても姿勢を算出することができる。一方、角速度を用いる方法では、逐次検出される角速度を累積加算していくことによって姿勢を算出するので、誤差が累積すること等によって精度が悪くなったり、いわゆる温度ドリフトの問題でジャイロセンサ48の精度が悪くなったりするおそれがある。また、加速度を用いる方法は、誤差が蓄積しない一方、コントローラ5が激しく動かされている状態では、(重力方向を正確に検出することができないので)姿勢を精度良く算出することができない。また、マーカ座標を用いる方法は、(特にロール方向に関して)姿勢を精度良く算出することができる一方、マーカユニットを撮像できない状態では姿勢を算出することができない。これに対して、本実施形態によれば、上記のように特長の異なる3種類の方法を用いるので、コントローラ5の姿勢をより正確に算出することができる。なお、他の実施形態においては、上記3つの方法のうちいずれか1つまたは2つを用いて姿勢を算出するようにしてもよい。
図17の説明に戻り、上記姿勢算出処理の後、ステップS23の処理が実行される。すなわち、ステップS23において、CPU10は、基準設定操作が行われたか否かを判定する。基準設定操作は、操作時点におけるコントローラ5の姿勢を基準姿勢として設定する指示を行うための操作であり、例えばAボタン32dを押下する操作である。具体的には、CPU10は、メインメモリから読み出した操作ボタンデータ95を参照することによって、上記所定のボタンが押下されたか否かを判定する。ステップS23の判定結果が肯定である場合、ステップS24の処理が実行される。一方、ステップS23の判定結果が否定である場合、ステップS24〜S26の処理がスキップされてステップS27の処理が実行される。
ステップS24において、CPU10は、コントローラ5の姿勢を初期化する。すなわち、コントローラ5の姿勢を表すための空間座標系が、現在のコントローラ5の姿勢が単位行列として表されるように変更される。具体的には、CPU10は、姿勢算出処理(ステップS22,S42,およびS52)を実行するプログラム(ライブラリ)の設定を上記のように変更する。したがって、第1基準姿勢が設定される以降においては、第1基準姿勢を基準として表される値で(第1基準姿勢が単位行列として表されるような座標系によって)コントローラ5の姿勢が算出される。ステップS24の次にステップS25の処理が実行される。
ステップS25において、CPU10は、コントローラ5の現在の姿勢を第1基準姿勢として設定する。すなわち、CPU10は、コントローラ5の現在の姿勢を表すデータを第1基準姿勢データ100としてメインメモリに記憶する。本実施形態においては、上記ステップS24の処理によってコントローラ5の姿勢が初期化されるので、第1基準姿勢データ100は単位行列を表すデータとなる。ステップS25の次にステップS26の処理が実行される。
上記ステップS24およびS25のように、本実施形態においては、コントローラ5の姿勢を表すための座標系を変更することで、第1基準姿勢が常に単位行列として表されるようにしている。ここで、他の実施形態においては、上記ステップS24の処理は実行されなくてもよい。すなわち、第1基準姿勢以外の姿勢が単位行列となるような座標系でコントローラ5の姿勢が算出されてもよい。このとき、上記ステップS25においては、上記ステップS22で算出された姿勢(第1姿勢データ97)が第1基準姿勢データ100としてメインメモリに記憶される。
ステップS26において、CPU10は、処理フラグの値を“1”に設定する。すなわち、“1”を表すように処理フラグデータ107を更新する。これによって、次に実行されるステップS2〜S8の処理ループでは、第2基準設定処理が実行されることになる。ステップS26の次にステップS27の処理が実行される。
ステップS27において、CPU10は、コントローラ5の撮像手段(撮像素子40)によってマーカ装置6が撮像されているか否かを判定する。ステップS27の処理は、上述のステップS35の処理と同じである。ステップS27の判定結果が肯定である場合、ステップS28の処理が実行される。一方、ステップS27の判定結果が否定である場合、ステップS28の処理がスキップされてCPU10は第1基準設定処理を終了する。
ステップS28において、CPU10は、テレビ2の画面上における指示位置をマーカ座標に基づいて算出する。ここで、コントローラ5から見たマーカ装置6(テレビ2)の方向をマーカ座標から知ることができるので、テレビ2の画面上においてコントローラ5が指し示す位置(指示位置)は、マーカ座標から算出することができる。マーカ座標に基づく指示位置の算出方法はどのような方法であってもよいが、例えば、上記ステップS37で用いた補正後の中点位置を用いて指示位置を算出することができる。具体的には、撮像画像における所定の位置からの上記中点位置の変化方向および変化量に基づいて、指示位置を算出することができる。より具体的には、指示位置は、撮像画像の中央にある点を、上記変化方向とは逆方向に、上記変化量に応じた移動量だけ移動させた位置として算出される。なお、上記所定の位置は、コントローラ5の撮像方向が画面中央を指し示す時の上記中点の位置とする。なお、マーカ座標から指示位置を算出する方法としては、上記の他、例えば特開2007−241734号公報に記載の算出方法が用いられてもよい。
ステップS28における具体的な処理としては、CPU10は、マーカ座標データ94をメインメモリから読み出し、マーカ座標に基づいて指示位置を算出する。そして、算出された指示位置を表すデータを指示位置データ104としてメインメモリに記憶する。
ステップS28の後、CPU10は第1基準設定処理を終了する。
以上の第1基準設定処理によれば、コントローラ5の操作部(ボタン)に対する所定の基準設定操作が行われた場合におけるコントローラ5の姿勢が基準姿勢として設定される。ここで、他の実施形態においては、上記ステップS23の判定結果が肯定であることに加えて(または代えて)、CPU10は、ステップS27の判定結果が肯定であることを条件に、第1基準姿勢を設定する処理(ステップS24〜S26)を実行するようにしてもよい。つまり、CPU10は、コントローラ5がマーカユニットを撮像している場合(あるいは、カーソルが画面に表示される場合)におけるコントローラ5の姿勢を、当該マーカユニットに対応する表示装置に対応する基準姿勢として設定するようにしてもよい。これによれば、プレイヤが誤って基準設定操作を行った場合等、コントローラ5がテレビ2の方向とは全く異なる方向を向いている場合に基準設定操作が行われた場合には、第1基準姿勢が設定されないので、第1基準姿勢をより正確に設定することができる。
なお、第1基準設定処理においては、CPU10は、カーソル81を表示するための指示位置をマーカ座標から算出しており、後述する位置算出処理(ステップS15)のように、加速度および角速度から算出されるコントローラ5の姿勢から指示位置を算出していない。これは、第1基準設定処理が実行される間は、加速度および角速度から算出される姿勢からでは指示位置を正確に算出することができない場合があることが理由である。すなわち、第1基準姿勢が設定される前においては、加速度および角速度から算出される姿勢は、テレビ2(マーカ装置6)を基準とした姿勢ではない場合がある。この場合、加速度および角速度から算出される姿勢からでは、マーカ装置6とコントローラ5との位置関係を知ることができず、指示位置を正確に算出することができないのである。また、第1基準設定処理では、テレビ2の方(さらに言えば、テレビ2の案内画像83の方)を向いた場合の姿勢を第1基準姿勢として設定することが目的であるので、コントローラ5がテレビ2の方を向く場合のみ指示位置を算出できればよい。そのため、コントローラ5がマーカ装置6を撮像できないような姿勢では指示位置を算出する必要がなく、加速度および角速度を用いて広い範囲でコントローラ5の姿勢を算出する必要性は小さい。以上を考慮して、本実施形態においては、第1基準設定処理においてはマーカ座標を用いて指示位置を算出している。なお、他の実施形態において、加速度および角速度から算出される姿勢が、テレビ2(マーカ装置6)を基準とした姿勢を知ることができる場合には、加速度および角速度を用いて指示位置を算出してもよい。
上記ステップS28の処理が実行される場合、後述するテレビ用ゲーム画像の生成処理(ステップS4)において指示位置にカーソル81が描画され、テレビ2にカーソル81が表示されることとなる。したがって、本実施形態においては、第1基準設定処理が実行される間、コントローラ5による指示位置がテレビ2に表示される(図12参照)。これによれば、プレイヤは、コントローラ5を案内画像83の方へ向ける操作を容易に行うことができので、ゲーム装置3は、コントローラ5がテレビ2の方を向く姿勢を第1基準姿勢として正確に設定することができる。以上に説明した第1基準設定処理が終了すると、CPU10はゲーム制御処理を終了する(図16参照)。
一方、図16に示すステップS13において、第2基準姿勢を設定済みであるか否かを判定する。具体的には、処理フラグデータ107をメインメモリから読み出し、処理フラグの値が“2”であるか否かを判定する。ステップS13の判定結果が肯定である場合、ステップS15の処理が実行される。一方、ステップS13の判定結果が否定である場合、ステップS14の処理が実行される。
ステップS14において、CPU10は、端末装置7に対応する第2基準姿勢を設定するための第2基準設定処理を実行する。本実施形態においては、図15に示すゲーム処理が開始されるとまず第1基準設定処理が実行され、第1基準姿勢が設定された後で、第2基準設定処理が実行される。以下、図19を参照して、第2基準設定処理の詳細について説明する。
図19は、図16に示す第2基準設定処理(ステップS14)の詳細な流れを示すフローチャートである。第2基準設定処理においてはまずステップS41において、CPU10は、端末装置7に対応するマーカユニットであるマーカ部55を点灯させる。すなわち、CPU10は、マーカ部55を点灯する指示を表す制御データを生成してメインメモリに記憶する。生成された制御データは、後述するステップS7において端末装置7へ送信される。端末装置7の無線モジュール70において受信された制御データは、コーデックLSI66を介してUIコントローラ65へ送られ、UIコントローラ65はマーカ部55に点灯する指示を行う。これによってマーカ部55の赤外LEDが点灯する。なお、第2基準設定処理においては、テレビ2に対応するマーカユニットであるマーカ装置6は点灯されないことが好ましい。マーカ装置6が点灯していると、マーカ装置6をマーカ部55と誤検出してしまうおそれがあるからである。なお、マーカ装置6およびマーカ部55の消灯は、点灯する場合と同様の処理によって行うことができる。ステップS41の次にステップS42の処理が実行される。
ステップS42において、CPU10は、コントローラ5の姿勢を算出するための姿勢算出処理を実行する。ステップS42における姿勢算出処理は、上記ステップS22における姿勢算出処理と同じである。なお、第2基準設定処理では、上記第1基準設定処理と同様、マーカ座標に基づく第3姿勢を用いた補正処理(図18に示すステップS35〜S37)は実行されない。ここで、第3姿勢はマーカ部55を基準とした姿勢である一方、第2基準設定処理において算出すべき姿勢は、第1基準姿勢を基準とした姿勢(第1基準姿勢から現在の姿勢がどれだけ回転しているか)である。また、第2基準設定処理が実行される時点では、テレビ2(マーカ装置6)と端末装置7(マーカ部55)との位置関係がわかっていないので、マーカ部55を基準とした姿勢である第3姿勢からは、第1基準姿勢を基準とした姿勢(第1基準姿勢から現在の姿勢がどれだけ回転しているか)を知ることができない。そのため、第2基準設定処理では、第3姿勢を用いた補正処理は実行されない。上記ステップS42の次にステップS43の処理が実行される。
ステップS43において、CPU10は、基準設定操作が行われたか否かを判定する。ステップS43の判定処理は、上述のステップS23の判定処理と同じである。ステップS43の判定結果が肯定である場合、ステップS44の処理が実行される。一方、ステップS43の判定結果が否定である場合、ステップS44〜S46の処理がスキップされてステップS47の処理が実行される。
ステップS44において、CPU10は、コントローラ5の現在の姿勢を第2基準姿勢として設定する。なお、上記現在の姿勢は、上記ステップS42で算出された姿勢であり、第1姿勢データ97が表す姿勢である。すなわち、CPU10は、メインメモリから読み出した第1姿勢データ97を第1基準姿勢データ100としてメインメモリに記憶する。ステップS44の次にステップS45の処理が実行される。
ステップS45において、CPU10は、第1基準姿勢と第2基準姿勢との差を算出する。本実施形態では、CPU10は、各基準姿勢の所定軸(例えばZ軸)を表すベクトル同士の内積を上記差として算出する。なお、CPU10は、上記差を表すものであればどのような情報を算出してもよく、例えば、第1基準姿勢から第2基準姿勢まで回転する場合の回転角度を上記差として算出してもよい。算出された差を表すデータは差分データ105としてメインメモリに記憶される。ステップS45の次にステップS46の処理が実行される。
ステップS46において、CPU10は、処理フラグの値を“2”に設定する。すなわち、“2”を表すように処理フラグデータ107を更新する。これによって、次に実行されるステップS2〜S8の処理ループでは、位置算出処理(ステップS15)およびオブジェクト制御処理(S16)が実行されることになる。ステップS46の次にステップS47の処理が実行される。
ステップS47において、CPU10は、コントローラ5の撮像手段(撮像素子40)によってマーカ部55が撮像されているか否かを判定する。ステップS47の処理は、上述のステップS35およびS27の処理と同じである。ステップS47の判定結果が肯定である場合、ステップS48の処理が実行される。一方、ステップS47の判定結果が否定である場合、ステップS48の処理がスキップされてCPU10は第2基準設定処理を終了する。
ステップS48において、CPU10は、マーカ部55の画面上における指示位置をマーカ座標に基づいて算出する。具体的には、CPU10は、マーカ座標データ94をメインメモリから読み出し、マーカ座標に基づいて指示位置を算出する。そして、算出された指示位置を表すデータを指示位置データ104としてメインメモリに記憶する。なお、マーカ座標に基づく指示位置の算出方法は、上述のステップS28と同様の方法であってもよい。ステップS48の後、CPU10は第2基準設定処理を終了する。
上記ステップS48のように、第2基準設定処理においても第1基準設定処理と同様の理由で、指示位置はマーカ座標に基づいて算出される。なお、他の実施形態においては、第1基準設定処理と同様、加速度および角速度を用いて指示位置を算出してもよい。
上記ステップS48の処理が実行される場合、後述する端末用ゲーム画像の生成処理(ステップS5)において指示位置にカーソル81が描画され、端末装置7にカーソル81が表示されることとなる。したがって、本実施形態においては、第2基準設定処理が実行される間、コントローラ5による指示位置が端末装置7に表示される。これによれば、プレイヤは、コントローラ5を案内画像83の方へ向ける操作を容易に行うことができので、ゲーム装置3は、コントローラ5が端末装置7の方を向く姿勢を第2基準姿勢として正確に設定することができる。以上に説明した第2基準設定処理が終了すると、CPU10はゲーム制御処理を終了する(図16参照)。
なお、上記第2基準設定処理においても第1基準設定処理と同様、CPU10は、上記ステップS43の判定結果が肯定であることに加えて(または代えて)、ステップS47の判定結果が肯定であることを条件に、第2基準姿勢を設定する処理(ステップS44〜S46の処理)を実行するようにしてもよい。
以上で説明した図16に示すステップS12およびS14の処理によって、各基準姿勢が設定される。これによって、テレビ2の方を向く時のコントローラ5の姿勢、および、端末装置7の方を向く時のコントローラ5の姿勢が設定されたので、コントローラ5がテレビ2と端末装置7とのいずれの方を向いているかを判定することができる。本実施形態においては、各基準姿勢が設定された後、以下に説明する位置算出処理およびオブジェクト制御処理が実行され、ゲームが開始される。
ステップS15において、CPU10は位置算出処理を実行する。位置算出処理は、コントローラ5がテレビ2と端末装置7とのいずれの方を向いているかを判定し、コントローラ5が向いている表示装置の画面上において指示位置を算出する処理である。以下、図20を参照して、位置算出処理の詳細について説明する。
図20は、図16に示す位置算出処理(ステップS15)の詳細な流れを示すフローチャートである。位置算出処理においてはまずステップS51において、CPU10は、テレビ2に対応するマーカユニットであるマーカ装置6を点灯させる。ステップS51の処理は、上述のステップS21の処理と同じである。なお、位置算出処理においても第1基準設定処理と同様、マーカユニットの誤検出を防止するためにマーカ部55は点灯されないことが好ましい。ステップS51の次にステップS52の処理が実行される。
ステップS52において、CPU10は、コントローラ5の姿勢を算出するための姿勢算出処理を実行する。ステップS52における姿勢算出処理は、上記ステップS22における姿勢算出処理と同じである。ただし、位置算出処理においては、処理フラグが“2”に設定されているので、姿勢算出処理においてマーカ座標に基づく第3姿勢を用いた補正処理(図18に示すステップS35〜S37)が実行される。したがって、位置算出処理においては、第3姿勢を用いた補正処理によって、コントローラ5の姿勢をより正確に算出することができる。ステップS52の次にステップS53の処理が実行される。
ステップS53において、CPU10は、コントローラ5の現在の姿勢と第1基準姿勢との差を算出する。上記差を表す情報としてはどのような情報が算出されてもよいが、本実施形態においては、現在の姿勢のZ軸ベクトルと、第1基準姿勢のZ軸ベクトルとの内積が上記差として算出される。ここで、姿勢のZ軸ベクトルとは、コントローラ5がその姿勢となった場合におけるZ軸の方向を示す単位ベクトルである。姿勢のZ軸ベクトルは、姿勢を表す回転行列(式(1)参照)における第3列の3つの値を成分とする3次元ベクトルである。
図21は、現在の姿勢および各基準姿勢のZ軸ベクトルを示す図である。図21においては、ベクトルVzは現在の姿勢のZ軸ベクトルであり、ベクトルV1zは第1基準姿勢のZ軸ベクトルであり、ベクトルV2zは第2基準姿勢のZ軸ベクトルである。上記ステップS53においては、CPU10は、第1姿勢データ97および第1基準姿勢データ100をメインメモリから読み出し、現在の姿勢のZ軸ベクトルVzと第1基準姿勢のZ軸ベクトルV1zとの内積(図21に示すd1の長さ)を算出する。算出された内積を表すデータはメインメモリに記憶される。以上のステップS53の次にステップS54の処理が実行される。
ステップS54において、CPU10は、コントローラ5の現在の姿勢と第2基準姿勢との差を算出する。この差は、上記ステップS53における差の算出方法と同様に算出される。すなわち、CPU10は、第1姿勢データ97および第2基準姿勢データ101をメインメモリから読み出し、現在の姿勢のZ軸ベクトルVzと第2基準姿勢のZ軸ベクトルV2zとの内積(図21に示すd2の長さ)を算出する。算出された内積を表すデータはメインメモリに記憶される。以上のステップS54の次にステップS55の処理が実行される。
ステップS55において、CPU10は、コントローラ5の現在の姿勢が第2基準姿勢よりも第1基準姿勢に近いか否かを判定する。ここで、上記ステップS53およびS54で算出された内積は、コントローラ5の現在の姿勢と各基準姿勢との近さを表す。つまり、現在の姿勢と基準姿勢とが近ければ、内積値は大きくなり、現在の姿勢と基準姿勢とが遠くなると内積値は小さくなる。したがって、上記内積を用いて、現在の姿勢が各基準姿勢のいずれに近いかを判定することができる。具体的には、CPU10は、メインメモリに記憶されている各内積値d1およびd2を表すデータを読み出し、上記内積値d1が上記内積値d2よりも大きいか否かを判定する。上記ステップS55の判定処理によって、コントローラ5がテレビ2の方を向いているか、それとも端末装置7の方を向いているかを判定することができる。ステップS55の判定結果が肯定である場合、ステップS56の処理が実行される。一方、ステップS55の判定結果が否定である場合、ステップS57の処理が実行される。
なお、上記ステップS53〜S55においては、現在の姿勢と基準姿勢との差として姿勢のZ軸ベクトルの内積を用いて、現在の姿勢が各基準姿勢のいずれに近いかの判定を行った。ここで、他の実施形態においては、上記判定はどのような方法で行われてもよく、例えば、現在の姿勢から各基準姿勢までの回転量を上記差として用いて上記判定が行われてもよい。すなわち、現在の姿勢は、回転量が小さい方の基準姿勢に近いと判定するようにしてもよい。
ステップS56において、CPU10は、上述の対象表示装置、すなわち、コントローラ5が向いている表示装置に対応する基準姿勢(上記対象基準姿勢)として、第1基準姿勢を選択する。具体的には、第1基準姿勢を表すデータを対象基準データ102としてメインメモリに記憶する。これによって、コントローラ5が向いている表示装置(対象表示装置)がテレビ2であると判断されたことになる。また、後述するステップS58およびS59においては、第1基準姿勢を用いて指示位置が算出される。ステップS56の次にステップS58の処理が実行される。
一方、ステップS57において、CPU10は、上記対象基準姿勢として第2基準姿勢を選択する。具体的には、第2基準姿勢を表すデータを対象基準データ102としてメインメモリに記憶する。これによって、対象表示装置が端末装置7であると判断されたことになる。また、後述するステップS58およびS59においては、第2基準姿勢を用いて指示位置が算出される。ステップS57の次にステップS58の処理が実行される。
上記ステップS55〜S57においては、CPU10は、コントローラ5の現在の姿勢が各基準姿勢のいずれに近いかを判定したので、各基準姿勢のいずれかが対象表示装置として必ず特定された。ここで、他の実施形態においては、CPU10は、コントローラ5の姿勢によっては表示装置を特定しないようにしてもよい。例えば、上記ステップS55〜S57において、CPU10は、基準姿勢と現在の姿勢との差が所定範囲内か否かを基準姿勢毎に判定し、所定範囲内と判定された基準姿勢を対象基準姿勢として選択するようにしてもよい。これによっても本実施形態と同様、コントローラ5がいずれの表示装置を向いているかを正確に判定することができる。
ステップS58において、CPU10は、現在の姿勢のZ軸ベクトルの投影位置を算出する。投影位置は、現在の姿勢および対象基準姿勢に基づいて算出され、対象基準姿勢に対する現在の姿勢の変化量および変化方向を表す情報である。以下、図22を参照して、投影位置の算出方法の詳細を説明する。
図22は、投影位置の算出方法を示す図である。図22において、ベクトルV0x,V0y,V0zはそれぞれ、対象基準姿勢のX軸ベクトル、Y軸ベクトル、Z軸ベクトルを表す。図20に示すように、投影位置P0は、対象基準姿勢のXY平面(X軸ベクトルとY軸ベクトルに平行な平面)上の位置であって、現在の姿勢のZ軸ベクトルVzの終点を当該XY平面上に投影した位置である。したがって、投影位置P0のX軸成分(対象基準姿勢のX軸方向の成分)は、現在の姿勢のZ軸ベクトルVzと対象基準姿勢のX軸ベクトルとの内積値として算出できる。また、投影位置P0のY軸成分(対象基準姿勢のY軸方向の成分)は、現在の姿勢のZ軸ベクトルVzと対象基準姿勢のY軸ベクトルとの内積値として算出できる。具体的には、CPU10は、以下の式(2)に従って投影位置P0を算出する。
P0=(Vz・V0x,Vz・V0y) …(2)
上記投影位置P0は、上記XY平面上の位置を表すための2次元座標系であって、対象基準姿勢のX軸ベクトルV0xと、Y軸ベクトルV0yとを2軸とし、X軸ベクトルV0xおよびY軸ベクトルV0yの始点を原点とする2次元座標系で表される。ここで、上記2次元座標系の原点から投影位置P0への方向は、対象基準姿勢から現在の姿勢への回転方向(変化方向)を表す。また、上記2次元座標系の原点から投影位置P0までの距離は、対象基準姿勢から現在の姿勢への回転量(変化量)を表す。したがって、投影位置P0は、対象基準姿勢に対する現在の姿勢の変化方向および変化量を表す情報であると言える。
なお、対象基準姿勢が第1基準姿勢である場合には、第1基準姿勢が単位行列であるので、対象基準姿勢のX軸ベクトルおよびY軸ベクトルは空間座標系のX’軸およびY’軸と一致する(ここでは、上記空間座標系をX’Y’Z’座標系と表す)。そのため、上式(2)の計算は、現在の姿勢のZ軸ベクトルVzのX’軸成分VzxとY’軸成分Vzyとを抽出することで行うことができるので、計算を簡単に行うことができる。
ステップS58の具体的な処理としては、CPU10は、まず、対象基準データ102をメインメモリから読み出して対象基準姿勢を特定し、次に、対象基準姿勢を表す基準姿勢データ100または101と第1姿勢データ97とをメインメモリから読み出す。さらに、CPU10は、現在の姿勢と対象基準姿勢とを用いて上式(2)の演算を行うことによって投影位置P0を算出する。算出された投影位置P0を表すデータは投影位置データ103としてメインメモリに記憶される。以上のステップS58の次にステップS59の処理が実行される。
ステップS59において、CPU10は、上記投影位置に基づいて指示位置を算出する。指示位置は、投影位置に対して所定のスケーリングを行うことで算出される。図23は、指示位置を算出する方法を示す図である。図23に示す平面は、表示装置の画面に対応する平面である。この平面は、ここでは右方向をx’軸正方向とし、上方向をy’軸正方向とするx’y’座標系で表されるものとする。図23に示すように、指示位置P=(Px,Py)は、次の式(3)に従って算出することができる。
Px=−a・P0x
Py=b・P0y …(3)
上式(3)において、変数P0xおよびP0yは、投影位置のX’軸成分およびY’軸成分を表す。定数aおよびbは、予め定められる値である。なお、上式(3)において、指示位置Pのx’軸成分Pxを算出する際に正負の符号を反転させているのは、上記X’軸とx’軸との向きが逆向きであるためである。
上記定数aは、画面の左右方向に関して、コントローラ5の姿勢の変化に対して指示位置が変化する度合を表す値である。すなわち、定数aが小さい場合、コントローラ5の姿勢を大きく変化させても指示位置はあまり変化せず、定数aが大きい場合、コントローラ5の姿勢を少しだけ変化させても指示位置は大きく変化する。また、上記定数bは、画面の上下方向に関して、コントローラ5の姿勢の変化に対して指示位置が変化する度合を表す値である。これらの定数aおよびbは、コントローラ5によるゲーム操作の内容や、プレイヤの指示に応じて適宜の値が適宜のタイミングで設定される。定数aと定数bは等しい値であってもよいし異なる値であってもよい。本実施形態においては、左右方向に関する定数aと上下方向に関する定数bとを別々に設定することができるので、コントローラ5の姿勢の変化に対して指示位置が変化する度合を画面の上下方向と左右方向とで、個別に調整することができる。
上記ステップS59の具体的な処理としては、CPU10は、まず、投影位置データ103をメインメモリから読み出し、投影位置P0を用いて上式(3)の演算を行うことによって指示位置Pを算出する。そして、算出された指示位置を表すデータを、指示位置データ104としてメインメモリに記憶する。ステップS59の後、CPU10は位置算出処理を終了する。
以上のステップS58およびS59の処理によれば、コントローラ5の現在の姿勢と対象基準姿勢とに基づいて投影位置が算出され(ステップS58)、投影位置に対してスケーリングを行うことによって指示位置が算出された(ステップS59)。ここで、指示位置は、現在の姿勢に応じて変化するように算出されればどのような方法で算出されてもよいが、本実施形態のように、対象基準姿勢に対する現在の姿勢の変化量および変化方向に応じた位置となるように算出されることが好ましい。これによれば、プレイヤはコントローラ5の姿勢を変化させる方向で指示位置の移動方向を調整することができ、コントローラ5の姿勢を変化させる量で指示位置の移動量を調整することができるので、指示位置を容易かつ直感的に操作することができる。
なお、テレビ2と端末装置7とで画面の大きさやアスペクト比が異なる等の理由から、テレビ2に対するポインティング操作と端末装置7に対するポインティング操作とでは、操作感(例えば、コントローラ5の姿勢の変化に対する指示位置の変化度合等)を異なるようにすることが好ましい場合がある。例えば、指示位置の上記変化度合が画面に対して大き過ぎると、細かい指示がしにくくなる場合がある。また、指示位置の変化度合が画面に対して小さ過ぎると、指示位置が一方の画面内から画面外へ出る前に他方の画面に移動してしまい、当該一方の画面の端部付近を指定することができない場合がある。これらの場合のように、画面の大きさやアスペクト比に合わせて指示位置の変化度合を調整した方がよい場合がある。そのため、上記ステップS59においては、対象基準姿勢が第1基準姿勢であるか第2基準姿勢であるかに応じて(つまり、対象表示装置に応じて)、算出される指示位置の座標値が異なるようにしてもよい。例えば、対象基準姿勢が第1基準姿勢である場合と第2基準姿勢である場合とで上記定数aおよびbの値を変えるようにしてもよい。また、テレビ2と端末装置7との基準姿勢の差が小さい場合にも、指示位置が画面内のまま他方の画面へ移動する場合が想定される。そのため、CPU10は、各表示装置の位置関係に応じて指示位置の座標値が異なるようにしてもよい。すなわち、上記ステップS59においては、基準姿勢の差に応じて定数aおよびbの値を調整してもよい。
以上の位置算出処理によれば、現在の姿勢と各基準姿勢とに基づいて、コントローラ5が向いている表示装置(対象表示装置)が特定される(ステップS55〜S57)。そして、対象表示装置に対応する基準姿勢に対する現在の姿勢の変化量および変化方向に応じて指示位置が算出される(ステップS58およびS59)。これによって、対象表示装置を正確に特定することができるとともに、操作性の良いポインティング操作を提供することができる。
図16の説明に戻り、位置算出処理(ステップS15)の次にステップS16の処理が実行される。すなわち、ステップS16において、CPU10はオブジェクト制御処理を実行する。オブジェクト制御処理は、上記指示位置等を入力として、ゲーム空間に登場するオブジェクト等の動作を制御する処理である。以下、図24を参照して、オブジェクト制御処理の詳細について説明する。
図24は、図16に示すオブジェクト制御処理(ステップS16)の詳細な流れを示すフローチャートである。オブジェクト制御処理においてはまずステップS61において、CPU10は、対象表示装置がテレビ2であるか否か、すなわち、コントローラ5がテレビ2の方を向いているか否かを判定する。具体的には、CPU10は、メインメモリから対象基準データ102を読み出し、対象基準データ102が第1基準姿勢を表すか否かを判定する。ステップS61の判定結果が肯定である場合、ステップS62〜S68の処理が実行される。ステップS62〜S68の処理は、コントローラ5がテレビ2の方を向く場合に実行される処理であり、テレビ2の画面に対するポインティング操作に応じたゲーム制御処理である。一方、ステップS61の判定結果が否定である場合、後述するステップS70〜S74の処理が実行される。ステップS70〜S74の処理は、コントローラ5が端末装置7の方を向く場合に実行される処理であり、端末装置7の画面に対するポインティング操作に応じたゲーム制御処理である。
ステップS62において、CPU10は、射撃操作が行われたか否かを判定する。射撃操作は、敵オブジェクト86に対して射撃を行うための操作であり、例えば所定のボタン(ここではBボタン32i)を押下する操作である。具体的には、CPU10は、メインメモリから読み出した操作ボタンデータ95を参照することによって、上記所定のボタンが押下されたか否かを判定する。ステップS62の判定結果が肯定である場合、ステップS63の処理が実行される。一方、ステップS62の判定結果が否定である場合、ステップS63の処理がスキップされてステップS64の処理が実行される。
ステップS63において、CPU10は、射撃操作に応じた射撃処理を実行する。具体的には、CPU10は、指示位置データ104をメインメモリから読み出し、テレビ2の画面上の指示位置に敵オブジェクト86が配置されているか否か(射撃が敵オブジェクト86に命中したか否か)を判定する。そして、指示位置に敵オブジェクト86が配置されている場合には、それに応じた動作(例えば、爆発して消滅する動作や、逃げていく動作等)を敵オブジェクト86に行わせる。ステップS63の次にステップS64の処理が実行される。
ステップS64において、CPU10は、選択操作が行われたか否かを判定する。選択操作は、プレイヤオブジェクト85の1つを選択するための操作である。本実施形態では、選択操作は、所定のボタン(ここではAボタン32d)の押下を開始する操作であり、後述する解除操作は、当該所定のボタンの押下を終了する操作であるとする。つまり、本実施形態においては、Aボタン32dが押下されている間だけプレイヤオブジェクト85が選択され、Aボタン32dの押下が終了すると、プレイヤオブジェクト85の選択は解除される。具体的には、CPU10は、メインメモリから読み出した操作ボタンデータ95を参照することによって、上記所定のボタンが押下し始められたか否かを判定する。ステップS64の判定結果が肯定である場合、ステップS65の処理が実行される。一方、ステップS64の判定結果が否定である場合、ステップS65の処理がスキップされてステップS66の処理が実行される。
ステップS65において、CPU10は選択オブジェクトを設定する。すなわち、CPU10は、指示位置データ104をメインメモリから読み出し、指示位置に表示されているプレイヤオブジェクト85を表すデータを選択オブジェクトデータ108として記憶する。なお、指示位置に表示されているプレイヤオブジェクト85が存在しない場合(つまり、指示位置がプレイヤオブジェクト85が存在しない位置にある状態で選択操作が行われた場合)、選択オブジェクトは設定されない。ステップS65の次にステップS66の処理が実行される。
ステップS66において、CPU10は選択オブジェクトを移動させる。具体的には、CPU10は、指示位置データ104をメインメモリから読み出し、テレビ2の画面上において選択オブジェクトを指示位置に配置する。これによって、プレイヤがテレビ2の画面上で指示位置を移動させると、指示位置と共に選択オブジェクトが移動することになる。なお、選択オブジェクトが存在しない場合には、ステップS66の処理はスキップされる。ステップS65の次にステップS67の処理が実行される。
ステップS67において、CPU10は、解除操作が行われたか否かを判定する。解除操作は、選択オブジェクトの選択を解除するための操作であり、本実施形態では、所定のボタン(Aボタン32d)の押下を終了する操作である。具体的には、CPU10は、メインメモリから読み出した操作ボタンデータ95を参照することによって、上記所定のボタンの押下が終了したか否かを判定する。ステップS67の判定結果が肯定である場合、ステップS68の処理が実行される。一方、ステップS67の判定結果が否定である場合、ステップS68の処理がスキップされてステップS69の処理が実行される。
ステップS68において、CPU10は、選択オブジェクトの設定を解除する。具体的には、CPU10は、メインメモリに記憶されている選択オブジェクトデータ108を消去する。これによって、選択オブジェクトの設定を解除されたプレイヤオブジェクト85は指示位置と共に移動しなくなる。ステップS68の次にステップS69の処理が実行される。
ステップS69において、CPU10は、その他のゲーム制御処理を行う。その他のゲーム処理とは、上記ステップS61〜S68、および、後述するステップS70〜S74の処理以外に実行される処理であり、例えば、敵オブジェクト86の動作を制御する処理や、プレイヤオブジェクト85を追加する処理等が含まれる。なお、敵オブジェクト86の動作を制御する処理は、ゲームプログラム90において定められた動作アルゴリズムに従って敵オブジェクト86を移動させたり、プレイヤオブジェクト85を連れ去る動作を行わせたりする処理である。また、プレイヤオブジェクト85を追加する処理は、テレビ2の画面上における適宜の位置にプレイヤオブジェクト85を新たに配置する処理である。上記の処理の他、ステップS69においてはゲームの進行に必要な処理が適宜実行される。上記ステップS69の後、CPU10はオブジェクト制御処理を終了する。
以上のように、コントローラ5がテレビ2の方を向いている場合には、ステップS62〜S69の処理が実行される。これによれば、プレイヤは、コントローラ5を用いたポインティング操作によって、敵オブジェクト86に対して射撃を行ったり(ステップS63)、プレイヤオブジェクト85を選択して移動させたり(ステップS65およびS66)、プレイヤオブジェクト85の選択を解除したり(ステップS68)することができる。
一方、ステップS70において、CPU10は選択オブジェクトが存在するか否かを判定する。具体的には、CPU10は、メインメモリに選択オブジェクトデータ108が記憶されているか否かを判定する。ステップS70の判定結果が肯定である場合、ステップS71の処理が実行される。一方、ステップS70の判定結果が否定である場合、ステップS71〜S74の処理がスキップされて上述のステップS69の処理が実行される。
ステップS71において、CPU10は、選択オブジェクトを移動させる。具体的には、CPU10は、指示位置データ104をメインメモリから読み出し、端末装置7の画面上において選択オブジェクトを指示位置に配置する。これによって、プレイヤが端末装置7の画面上で指示位置を移動させると、指示位置と共に選択オブジェクトが移動することになる。ステップS71の次にステップS72の処理が実行される。
ステップS72において、CPU10は、解除操作が行われたか否かを判定する。ステップS72の判定処理は上記ステップS67の判定処理と同じである。ステップS72の判定結果が肯定である場合、ステップS73の処理が実行される。一方、ステップS72の判定結果が否定である場合、ステップS73およびS74の処理がスキップされて上述のステップS69の処理が実行される。
ステップS73において、CPU10は、選択オブジェクトの設定を解除する。すなわち、CPU10は、上記ステップS68と同様、メインメモリに記憶されている選択オブジェクトデータ108を消去する。なお、ステップS73の処理が実行された場合、上記ステップS69において、選択が解除されたプレイヤオブジェクト85は家87に入るように動作が制御される。これによって、プレイヤオブジェクト85の救出が成功したこととなり、得点が加算される。ステップS73の次にステップS74の処理が実行される。
ステップS74において、CPU10は得点を加算する。ここで、本実施形態におけるゲームは、コントローラ5をテレビ2の方へ向けてプレイヤオブジェクト85を選択してから、コントローラ5を端末装置7の方へ向けて解除操作を行うまでの一連の操作によって得点が加算される。したがって、テレビ2の方を向く状態から端末装置7の方を向く状態へとコントローラ5を回転させる回転量が大きいほど、上記一連の操作に時間がかかるので、ゲームの難易度が高くなると言える。つまり、本ゲームにおいては、テレビ2と端末装置7との位置関係によってゲームの難易度が変化すると言える。そこで、本実施形態においては、加算される得点を、テレビ2と端末装置7との位置関係に応じて変化するようにする。
本実施形態においては、上記位置関係として各基準姿勢の差(差分データ105)が用いられる。すなわち、CPU10は、メインメモリから差分データ105を読み出し、差分データ105が表す内積値の大きさに応じて、得点の加算量を決定する。上記ステップS45で説明したように、この内積値は、各基準姿勢の所定軸(例えばZ軸)を表すベクトル同士の内積値である。したがって、内積値が小さいほど、2つの基準姿勢の差が大きく、ゲームの難易度が高くなると言えるので、CPU10は、内積値が小さいほど得点の加算量が大きくなるように加算量を決定する。そして、現在の得点に決定された加算量を加算した得点を表すデータを、得点を表す新たなデータとしてメインメモリに記憶する。以上のステップS74の次に上記ステップS69の処理が実行され、ステップS69の後、CPU10はオブジェクト制御処理を終了する。
以上のように、コントローラ5が端末装置7の方を向いている場合には、ステップS70〜S74,およびS69の処理が実行される。これによれば、プレイヤは、コントローラ5を用いたポインティング操作によって、選択オブジェクトを移動させたり(ステップS71)、選択オブジェクトの設定を解除することで得点を取得したり(ステップS73およびS74)することができる。
以上で説明したオブジェクト制御処理によれば、プレイヤは、テレビ2側に表示されるプレイヤオブジェクト85の方へコントローラ5を向けて選択操作を行うことでプレイヤオブジェクト85を選択することができる。そして、プレイヤオブジェクト85を選択した状態でコントローラ5の向きを端末装置7の方へ変化させた場合(ステップS70でYes)、プレイヤオブジェクト85を端末装置7に表示させることができる。このように、プレイヤは、テレビ2の方へコントローラ5を向けて選択操作を行った後、コントローラ5を端末装置7の方へ向けるだけで、プレイヤオブジェクト85をテレビ2から端末装置7へ移動させることができる。すなわち、本実施形態によれば、プレイヤは、テレビ2に表示されるオブジェクトを端末装置7へ移動させる操作を直感的な操作で容易に行うことができる。
また、上記オブジェクト制御処理によれば、テレビ2と端末装置7との位置関係に応じてゲーム内容(ゲームの難易度)が変化するので、プレイヤは、可搬型の表示装置である端末装置7を自由な位置に配置することでゲーム内容を変化させることができ、ゲームシステム1はより興趣性の高いゲームを提供することができる。
上記オブジェクト制御処理が終了すると、CPU10はゲーム制御処理を終了する(図16参照)。そして、ゲーム制御処理の次に、ステップS4の処理が実行される(図15参照)。ステップS4においては、CPU10およびGPU11bによってテレビ用ゲーム画像の生成処理が実行される。この生成処理は、テレビ2に表示するためのテレビ用ゲーム画像を生成する処理である。以下、図25を参照して、テレビ用ゲーム画像の生成処理の詳細について説明する。
図25は、図15に示すテレビ用ゲーム画像の生成処理(ステップS4)の詳細な流れを示すフローチャートである。テレビ用ゲーム画像の生成処理においてはまずステップS81において、CPU10は、第1基準姿勢を設定済みであるか否かを判定する。ステップS81の判定処理は上述のステップS11の判定処理と同じである。ステップS81の判定結果が肯定である場合、ステップS82およびS83の処理がスキップされて、ステップS84の処理が実行される。一方、ステップS81の判定結果が否定である場合、ステップS82の処理が実行される。
ステップS82においては、説明画像82および案内画像83がCPU10およびGPU11bによって生成される。すなわち、CPU10およびGPU11bは、説明画像82および案内画像83を生成するために必要なデータをVRAM11dから読み出し、説明画像82および案内画像83を生成する。生成されたテレビ用ゲーム画像はVRAM11dに記憶される。ステップS82の次にステップS83の処理が実行される。
ステップS83においては、ステップS82で生成された画像上の指示位置にカーソル81の画像が配置される。すなわち、CPU10およびGPU11bは、指示位置データ104をメインメモリから読み出すとともに、カーソル81の画像を生成するために必要なデータをVRAM11dから読み出し、説明画像82および案内画像83の上に重ねて、指示位置にカーソル81の画像を生成(描画)する。なお、上述のステップS28の処理が実行されず、指示位置が算出されていない場合には、ステップS83の処理はスキップされる。ステップS82およびS83によって生成されたテレビ用ゲーム画像はVRAM11dに記憶される。ステップS83の次にステップS84の処理が実行される。
ステップS84において、CPU10は、各基準姿勢が設定済みであるか否かを判定する。ステップS84の判定処理は上述のステップS34の判定処理と同じである。ステップS84の定結果が肯定である場合、ステップS85の処理が実行される。一方、ステップS84の判定結果が否定である場合、CPU10はテレビ用ゲーム画像の生成処理を終了する。
ステップS85において、CPU10およびGPU11bは、テレビ2に表示すべきゲーム空間の画像を生成する。すなわち、CPU10およびGPU11bは、ゲーム空間の画像を生成するために必要なデータをVRAM11dから読み出し、プレイヤオブジェクト85および敵オブジェクト86を含むゲーム空間の画像を生成する。なお、画像の生成方法は、どのような方法であってもよく、例えば、仮想のゲーム空間内に仮想カメラを配置して、仮想カメラから見たゲーム空間を計算することによって3次元のCG画像を生成する方法であってもよいし、(仮想カメラを用いずに)2次元の画像を生成する方法であってもよい。生成されたテレビ用ゲーム画像はVRAM11dに記憶される。ステップS85の次にステップS86の処理が実行される。
ステップS86において、CPU10は、コントローラ5がテレビ2の方を向いているか否かを判定する。ステップS86の判定処理はステップS61の判定処理と同じである。ステップS86の判定結果が肯定である場合、ステップS87の処理が実行される。一方、ステップS86の判定結果が否定である場合、ステップS89の処理が実行される。
ステップS87において、CPU10は、指示位置がテレビ2の画面に対応する範囲内にあるか否かを判定する。ここで、指示位置は、表示装置の画面に対応する平面上の位置として算出されるが、指示位置が当該平面上において画面に対応する範囲内に位置するとは限らない。なお、上記「画面に対応する範囲」とは、上記x’y’座標系(図23参照)における原点を中心とした所定の四角形の範囲であり、予め定められている。上記ステップ15で算出された指示位置が上記範囲の外になる場合とは、コントローラ5はテレビ2の画面外を指し示している場合である。つまり、ステップS87の判定処理は、コントローラ5がテレビ2の画面内を指し示しているか否かを判定するための処理である。
具体的には、CPU10は、指示位置データ104をメインメモリから読み出し、指示位置が上記範囲内に位置するか否かを判定する。ステップS87の定結果が肯定である場合、ステップS88の処理が実行される。一方、ステップS87の判定結果が否定である場合、ステップS89の処理が実行される。
ステップS88においては、ステップS85で生成されたゲーム空間の画像上の指示位置にカーソル81の画像が配置される。すなわち、CPU10およびGPU11bは、指示位置データ104をメインメモリから読み出すとともに、カーソル81の画像を生成するために必要なデータをVRAM11dから読み出し、上記ゲーム空間の画像の上に重ねて、指示位置にカーソル81の画像を生成(描画)する。ステップS85およびS88によって生成されたテレビ用ゲーム画像はVRAM11dに記憶される。ステップS88の後、CPU10はテレビ用ゲーム画像の生成処理を終了する。
一方、ステップS89においては、ステップS85で生成されたゲーム空間の画像上に重ねて上述の方向画像88が生成(描画)される。すなわち、方向画像88を生成するために必要なデータをVRAM11dから読み出し、上記ゲーム空間の画像の上に重ねて、所定の位置に方向画像88を生成(描画)する。ステップS85およびS89によって生成されたテレビ用ゲーム画像はVRAM11dに記憶される。ステップS89の後、CPU10はテレビ用ゲーム画像の生成処理を終了する。
なお、上記方向画像88は、画面に対して指示位置が外れた方向を示すものであればどのようなものであってもよい。本実施形態では、上記指示位置が外れた方向を表す三角形の画像を画面の端付近に表示するものとしたが(図13参照)、他の実施形態においては、例えば上記指示位置が外れた方向を表す矢印を画面中央に表示するようにしてもよい。また、方向画像88が表す方向(画面に対して指示位置が外れた方向)は、コントローラ5の現在の姿勢と基準姿勢とに基づいて算出され、具体的には、基準姿勢から現在の姿勢までの回転方向に基づいて算出される。また、方向画像88は、上記回転方向を必ずしも詳細に表す必要はなく、例えば上下左右の4方向によって上記回転方向を表してもよいし、上下左右と斜め方向との8方向によって上記回転方向を表してもよい。
以上のように、テレビ用ゲーム画像の生成処理においては、第1基準姿勢が設定される際(ステップS81でYesの場合)においては、説明画像82および案内画像83の上にカーソル81が配置された画像が生成される(ステップS82およびS83)。一方、ゲーム中(ステップS84でYesの場合)においては、ゲーム空間を表す画像が生成される(ステップS85)。さらに、ゲーム中においては、コントローラ5がテレビ2の画面内の位置を指し示している場合には、ゲーム空間を表す画像の上にカーソル81が配置される(ステップS88)。また、コントローラ5が端末装置7の方を向いている場合(ステップS86でNoの場合)、または、コントローラ5がテレビ2の画面外の位置を指し示している場合(ステップS87でNoの場合)には、ゲーム空間を表す画像の上に方向画像88が配置される(ステップS89)。
図15の説明に戻り、上記テレビ用ゲーム画像の生成処理(ステップS4)の次に、ステップS5の処理が実行される。ステップS5においては、CPU10およびGPU11bによって端末用ゲーム画像の生成処理が実行される。この生成処理は、端末装置7に表示するための端末用ゲーム画像を生成する処理である。以下、図26を参照して、端末用ゲーム画像の生成処理の詳細について説明する。
図26は、図15に示す端末用ゲーム画像の生成処理(ステップS5)の詳細な流れを示すフローチャートである。端末用ゲーム画像の生成処理においてはまずステップS91において、CPU10は、第2基準姿勢を設定済みであるか否かを判定する。ステップS91の判定の具体的な処理は上述のステップS34の判定処理と同じである。ステップS91の判定結果が肯定である場合、ステップS92およびS93の処理がスキップされて、ステップS94の処理が実行される。一方、ステップS91の判定結果が否定である場合、ステップS92の処理が実行される。
ステップS92においては、説明画像82および案内画像83がCPU10およびGPU11bによって生成される。ステップS92の処理は、画像を表示する対象が異なることに起因して、生成すべき画像のサイズが異なる他は、上記ステップS82の処理と同様である。ステップS92で生成された端末用ゲーム画像はVRAM11dに記憶される。ステップS92の次にステップS93の処理が実行される。
ステップS93においては、ステップS92で生成された画像上の指示位置にカーソル81の画像が配置される。ステップS93の処理は上記ステップS83の処理と同様である。すなわち、CPU10およびGPU11bは、説明画像82および案内画像83の上に重ねて、指示位置にカーソル81の画像を生成(描画)する。ステップS92およびS93によって生成された端末用ゲーム画像はVRAM11dに記憶される。なお、上述のステップS48の処理が実行されず、指示位置が算出されていない場合には、ステップS93の処理はスキップされる。ステップS93の次にステップS94の処理が実行される。
ステップS94において、CPU10は、各基準姿勢が設定済みであるか否かを判定する。ステップS94の判定処理は上述のステップS34およびS84の判定処理と同じである。ステップS94の定結果が肯定である場合、ステップS95の処理が実行される。一方、ステップS94の判定結果が否定である場合、CPU10は端末用画像の生成処理を終了する。
ステップS95において、CPU10およびGPU11bは、テレビ2に表示すべきゲーム空間の画像を生成する。すなわち、CPU10およびGPU11bは、ゲーム空間の画像を生成するために必要なデータをVRAM11dから読み出し、家オブジェクト87を含むゲーム空間の画像を生成する。なお、画像の生成方法は、ステップS85と同様、どのような方法であってもよい。また、ステップS85における画像の生成方法とステップS95における画像の生成方法は同じであってもよいし異なっていてもよい。ステップS95で生成された端末用ゲーム画像はVRAM11dに記憶される。ステップS95の次にステップS96の処理が実行される。
ステップS96において、CPU10は、コントローラ5が端末装置7の方を向いているか否かを判定する。具体的には、CPU10は、メインメモリから対象基準データ102を読み出し、対象基準データ102が第2基準姿勢を表すか否かを判定する。ステップS96の判定結果が肯定である場合、ステップS97の処理が実行される。一方、ステップS96の判定結果が否定である場合、ステップS99の処理が実行される。
ステップS97において、CPU10は、指示位置が端末装置7の画面に対応する範囲内にあるか否かを判定する。ステップS97の判定処理は、コントローラ5が端末装置7の画面内を指し示しているか否かを判定するための処理である。ステップS97の判定の具体的な処理は、上記ステップS87の判定処理と同様に行うことができる。すなわち、CPU10は、指示位置データ104をメインメモリから読み出し、指示位置が上記範囲内に位置するか否かを判定する。ステップS97の定結果が肯定である場合、ステップS98の処理が実行される。一方、ステップS97の判定結果が否定である場合、ステップS99の処理が実行される。
ステップS98においては、ステップS95で生成されたゲーム空間の画像上の指示位置にカーソル81の画像が配置される。ステップS98の処理は上記ステップS88の処理と同様である。すなわち、CPU10およびGPU11bは、上記ゲーム空間の画像の上に重ねて、指示位置にカーソル81の画像を生成(描画)する。ステップS95およびS98によって生成された端末用ゲーム画像はVRAM11dに記憶される。ステップS98の後、CPU10は端末用ゲーム画像の生成処理を終了する。
一方、ステップS99においては、ステップS95で生成されたゲーム空間の画像上に重ねて上述の方向画像88が生成(描画)される。ステップS99の処理は上記ステップS89の処理と同様である。すなわち、CPU10およびGPU11bは、上記ゲーム空間の画像の上に重ねて、所定の位置に方向画像88を生成(描画)する。なお、方向画像88が表す方向の算出方法、および、方向画像88を配置する位置は、上記ステップS89と同じでよい。ステップS95およびS99によって生成された端末用ゲーム画像はVRAM11dに記憶される。ステップS99の後、CPU10は端末用ゲーム画像の生成処理を終了する。
以上のように、端末用画像の生成処理においては、第2基準姿勢が設定される際(ステップS91でYesの場合)においては、説明画像82および案内画像83の上にカーソル81が配置された画像が生成される(ステップS92およびS93)。一方、ゲーム中(ステップS94でYesの場合)においては、ゲーム空間を表す画像が生成される(ステップS95)。さらに、ゲーム中においては、コントローラ5が端末装置7の画面内の位置を指し示している場合には、ゲーム空間を表す画像の上にカーソル81が配置される(ステップS98)。また、コントローラ5がテレビ2の方を向いている場合(ステップS96でNoの場合)、または、コントローラ5が端末装置7の画面外の位置を指し示している場合(ステップS97でNoの場合)には、ゲーム空間を表す画像の上に方向画像88が配置される(ステップS99)。
図15の説明に戻り、端末用ゲーム画像の生成処理(ステップS5)の次に、ステップS6の処理が実行される。すなわち、ステップS6において、CPU10は、テレビ2へゲーム画像を出力する。具体的には、CPU10は、VRAM11dに記憶されたテレビ用ゲーム画像のデータをAV−IC15へ送る。これに応じて、AV−IC15はテレビ用ゲーム画像のデータをAVコネクタ16を介してテレビ2へ出力する。これによって、テレビ用ゲーム画像がテレビ2に表示される。なお、第2基準姿勢を設定する際には、ステップS4においてテレビ用ゲーム画像が生成されないので、ステップS6においてはゲーム画像が出力されなくてもよい。また、ステップS6においては、ゲーム画像のデータと共にゲーム音声のデータがテレビ2へ出力され、テレビ2のスピーカ2aからゲーム音声が出力されてもよい。ステップS6の次にステップS7の処理が実行される。
ステップS7において、CPU10は、端末装置7へゲーム画像を送信する。具体的には、VRAM11dに記憶された端末用ゲーム画像の画像データは、CPU10によってコーデックLSI27に送られ、コーデックLSI27によって所定の圧縮処理が行われる。さらに、圧縮処理が施された画像のデータは、端末通信モジュール28によってアンテナ29を介して端末装置7へ送信される。端末装置7は、ゲーム装置3から送信されてくる画像のデータを無線モジュール70によって受信し、コーデックLSI66によって所定の伸張処理が行われる。伸張処理が行われた画像データはLCD51に出力される。これによって、端末用ゲーム画像がLCD51に表示される。なお、第1基準姿勢を設定する際には、ステップS5において端末用ゲーム画像が生成されないので、ステップS7においてはゲーム画像が出力されなくてもよい。また、ステップS7においては、ゲーム画像のデータと共にゲーム音声のデータが端末装置7へ送信され、端末装置7のスピーカ67からゲーム音声が出力されてもよい。また、ゲーム装置3において制御データ106が生成される場合(上記ステップS41)には、ステップS7においては、上記画像データに加えて当該制御データ106が端末装置7へ送信される。ステップS7の次にステップS8の処理が実行される。
ステップS8において、CPU10は、ゲームを終了するか否かを判定する。ステップS8の判定は、例えば、ゲームオーバーになったか否か、あるいは、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS8の判定結果が否定の場合、ステップS2の処理が再度実行される。一方、ステップS8の判定結果が肯定の場合、CPU10は図15に示すゲーム処理を終了する。以降、ステップS2〜S8の一連の処理は、ステップS8でゲームを終了すると判定されるまで繰り返し実行される。
以上のように、本実施形態によれば、ゲーム装置3は、コントローラ5の姿勢を算出し(ステップS52)、2つの表示装置のうちでコントローラ5が向いている表示装置をコントローラ5の姿勢に基づいて特定する(ステップS55〜S57)。そして、特定された表示装置の画面上の位置として、コントローラ5の姿勢に応じた指示位置を算出する(ステップS58,S59)。これによれば、コントローラ5がどちらの表示装置を向いているかを判断することができ、コントローラ5が向いている方の表示装置の画面上の位置として指示位置を算出することができる。したがって、本実施形態によれば、コントローラ5を用いて2つの表示装置に対してポインティング操作を行うことができ、より広範囲の方向に向けてコントローラ5を使用することができる。
[7.変形例]
上記実施形態は本発明を実施する一例であり、他の実施形態においては例えば以下に説明する構成で本発明を実施することも可能である。
(基準姿勢の設定に関する変形例)
上記実施形態においては、基準姿勢の設定は、プレイヤに実際にコントローラ5を表示装置の方へ向けさせ、コントローラ5が表示装置の方を向いた時のコントローラ5の姿勢を記憶することで行われた。ここで、他の実施形態においては、コントローラ5が表示装置の方を向く場合の姿勢を表すように設定されれば基準姿勢はどのような方法で設定されてもよい。例えば、他の実施形態において、各表示装置の配置がわかっている場合、あるいは、各表示装置を配置すべき位置が定められている場合には、各基準姿勢は予め設定されていてもよい。
また、他の実施形態においては、ゲーム装置3は、コントローラ5が指し示す位置(指示位置)が表示装置の画面の所定領域内となった場合におけるコントローラ5の姿勢を、その表示装置に対応する基準姿勢として設定してもよい。図27は、本実施形態の変形例における第1基準設定処理の詳細な流れを示すフローチャートである。なお、図27において、図17と同じ処理を実行するステップについては図17と同じステップ番号を付し、詳細な説明を省略する。
図27に示す変形例においても、上記実施形態と同様、第1基準設定処理が開始されるとまずステップS21およびS22の処理が実行される。本変形例においては、次にステップS27の処理が実行される。そして、ステップS27の判定結果が肯定である場合、ステップS28の処理が実行され、ステップS28の処理の次にステップS101の処理が実行される。一方、ステップS27の判定結果が否定である場合、ステップS28の処理がスキップされてステップS101の処理が実行される。
ステップS101において、CPU10は、ステップS28で算出された指示位置が、表示装置の画面の所定領域内に位置するか否かを判定する。この所定領域は、予め定められ、画面内の領域であればどのように設定されてもよい。なお、所定領域は、画面の中央位置を含むことが好ましく、さらに言えば、画面の中央位置を中心とした領域(例えば、案内画像83が表す円形領域)であることがより好ましい。具体的には、CPU10は、指示位置データ104をメインメモリから読み出し、指示位置が上記所定領域内に位置するか否かを判定する。
上記ステップS101の判定結果が肯定である場合、ステップS24〜S26の処理が実行される。これによって、コントローラ5の現在の姿勢が第1基準姿勢として設定される。一方、上記ステップS101の判定結果が否定である場合、または、ステップS26の終了後、CPU10は第1基準設定処理を終了する。
図27に示す変形例によれば、プレイヤが基準設定操作を行わなくとも、基準姿勢を設定すべき表示装置の方をコントローラ5が向くと自動的に基準姿勢が設定される。したがって、より簡易な操作で基準姿勢を設定することができる。なお、他の実施形態においては、第2基準設定処理においても図27に示す第1基準設定処理と同様、コントローラ5が指し示す位置が表示装置の画面の所定領域内となった場合におけるコントローラ5の姿勢を、その表示装置に対応する基準姿勢として設定してもよい。
また、他の実施形態においては、基準姿勢は、端末装置7からのデータに基づいて算出されてもよい。具体的には、まず、プレイヤに端末装置7をテレビ2とほぼ同じ位置(初期位置)に配置させ、その後、端末装置7を自由な位置に移動させる。このとき、ゲーム装置3は、上記初期位置を基準とした移動後の位置を、端末操作データおよび/またはカメラ56が撮像した画像データに基づいて算出する。すなわち、端末操作データに含まれる加速度データ、角速度データ、および方位データや、上記画像データによって、端末装置7の動きまたは姿勢を算出(推測)することができるので、これらのデータに基づいてゲーム装置3は上記移動後の位置および/または姿勢を算出することができる。さらに、ゲーム装置3は、初期位置と移動後の位置および/または姿勢とに基づいて、各基準姿勢を設定することができる。
また、上記実施形態においては、基準設定処理はゲームの開始前にのみ実行されたが、他の実施形態においては、基準設定処理は任意のタイミングで実行されてもよい。基準設定処理は、例えば、プレイヤの指示があったことに応じて実行されてもよいし、あるいは、ゲームにおける所定の条件を満たしたことに応じて実行されてもよい。また、ゲーム装置3は、上記端末操作データおよび/またはカメラ56が撮像した画像データに基づいて端末装置7が移動したか否かを判定し、端末装置7が移動したと判定される場合には、基準設定処理(少なくとも第2基準設定処理)を実行するようにしてもよい。
(コントローラ5の姿勢の算出方法に関する変形例)
上記実施形態においては、コントローラ5の姿勢は、コントローラ5が有する慣性センサ(加速度センサ63およびジャイロセンサ64)の検出結果を用いて算出された。ここで、他の実施形態においては、コントローラ5の姿勢の算出方法はどのような方法であってもよい。例えば、他の実施形態においては、コントローラ5が有する他のセンサ(例えば磁気センサ62)の検出結果を用いてコントローラ5の姿勢が算出されてもよい。また、例えば、ゲームシステム1がコントローラ5を撮像するカメラをコントローラ5とは別に備えている場合には、ゲーム装置3はカメラでコントローラ5を撮像した撮像結果を取得し、撮像結果を用いてコントローラ5の姿勢を算出するようにしてもよい。
(対象表示装置の判定に用いる姿勢に関する変形例)
上記実施形態においては、コントローラ5がいずれの表示装置の方を向いているかの判定処理においては、コントローラ5の姿勢および各基準姿勢として、3次元の空間における姿勢を用いた。ここで、他の実施形態においては、上記判定処理は、2次元平面における姿勢をコントローラ5の姿勢および各基準姿勢として用いて行われてもよい。これによれば、判定処理の簡易化・高速化を図ることができる。なお、上記判定処理において2次元平面における姿勢を用いる場合においても、CPU10は、指示位置を算出する処理(ステップS15の位置算出処理)においては3次元空間における姿勢を用いて指示位置を算出する。
また、2次元平面における姿勢を用いる場合には、当該平面と垂直な方向に関しては2つの基準姿勢の差を知ることができず、位置算出処理においても当該平面と垂直な方向に関しては2つの基準姿勢が同じ姿勢であるとして指示位置が算出される。そのため、上記平面と垂直な方向に関しては、実際にコントローラ5が指し示す位置と、位置算出処理で算出される指示位置との間にずれが生じるおそれがある。これに対して、上記実施形態のように3次元空間における姿勢を用いることによって、指示位置をより正確に算出することができ、ポインティング操作の操作性を向上することができる。
(マーカユニットに関する変形例)
上記実施形態においては、CPU10は、2つのマーカユニット(マーカ装置6およびマーカ部55)のうち点灯させるマーカユニットを適宜切り替えることによって、マーカユニットが誤検出されることを防止した。すなわち、CPU10は、第1基準姿勢を設定する場合、テレビ2に対応するマーカユニット(マーカ装置6)のみを点灯し、第2基準姿勢を設定する場合、端末装置7に対応するマーカユニット(マーカ部55のみを点灯した。ここで、他の実施形態においては、CPU10は、2つのマーカユニットを共に点灯させるようにしてもよい。例えば、2つの表示装置(マーカユニット)が離れた場所に配置される場合には、コントローラ5が誤ったマーカユニットを撮像したり、2つのマーカユニットを同時に撮像する可能性は低いと考えられるので、2つのマーカユニットを共に点灯させるようにしてもよい。
また、上記実施形態においては、位置算出処理(ステップS15)においてはマーカ装置6が点灯され、マーカ部55は点灯されなかった。ここで、他の実施形態においては、位置算出処理においてはマーカ部55のみが点灯してもよい。また、CPU10は、マーカ装置6とマーカ部55との点灯を状況に応じて切り替えるようにしてもよい。例えば、CPU10は、コントローラ5がテレビ2の方を向くと判定される場合(ステップS55でYesとなる場合)にはマーカ装置6を点灯させ、コントローラ5が端末装置7の方を向くと判定される場合(ステップS55でNoとなる場合)にはマーカ部55を点灯させるようにしてもよい。なお、上記実施形態において、位置算出処理においてマーカ部55を点灯させる場合には、マーカ座標に基づく姿勢算出処理(ステップS36)において、マーカ部55を基準としたコントローラ5の姿勢が算出される。そのため、マーカ座標に基づく補正処理(ステップS37)においては、CPU10は、マーカ部55を基準としたコントローラ5の姿勢を、マーカ装置6を基準とした姿勢へと変換し、変換後の姿勢を用いて補正を行う。これによれば、コントローラ5が向いている方の表示装置に対応するマーカユニットを点灯させることができるので、マーカに基づく補正処理を実行する機会を増やすことができ、コントローラ5の姿勢を正確に算出することができる。
ここで、ゲーム中においてコントローラ5がマーカユニットを撮像することができず、マーカ座標に基づく補正処理(ステップS37)が実行されない状態が一定以上続くと、ジャイロセンサによる誤差が蓄積してコントローラ5の姿勢が正確に算出されないおそれがある。そのため、マーカ座標に基づく補正処理は、一定期間内に一度は実行されることが好ましい。したがって、位置算出処理においていずれのマーカユニットを点灯させるか、あるいは、マーカユニットの点灯を切り替えるかは、ゲーム内容等を考慮して決定することが好ましい。例えば、上記実施形態においては、ゲーム中において、プレイヤは所定時間内にコントローラ5をテレビ2の方へ向けると考えられるので、マーカ装置6を点灯させておくことが好ましい。一方、プレイヤが長時間にわたってコントローラ5を端末装置7の方へ向けて操作することが想定される場合には、マーカ部55を点灯させることが好ましい。また、プレイヤがいずれの表示装置の方へも長時間にわたってコントローラ5を向けることが想定される場合には、コントローラ5が向いている方の表示装置に対応するマーカユニットを点灯させるように切り替えることが好ましい。
(入力システムを適用する他の例)
上記実施形態では、2つの表示装置に対してポインティング操作が可能な入力システムの一例としてゲームシステム1を例に説明を行った。ここで、他の実施形態においては、入力システムはゲーム用途に限らず、任意の画像を表示する表示装置に対してポインティング操作を行うための任意の情報処理システムに適用されてもよい。
また、ゲームシステム1において実行されるゲームは、ゲーム操作として2つの表示装置に対するポインティング操作を行うものであればどのようなものであってもよい。例えば、他の実施形態においては、車を運転しながら射撃操作を行うような運転ゲームをゲームシステム1によって実現することも可能である。具体的には、プレイヤの前方および側方に表示装置がそれぞれ配置され、ゲーム装置3は、車から前方を見たゲーム空間の画像をプレイヤの前方の表示装置に表示し、車から側方を見たゲーム装置の画像をプレイヤの側方の表示装置に表示する。これによれば、プレイヤは、前方の表示装置に対するポインティング操作によって車を運転しつつ、側方の表示装置に対するポインティング操作によって射撃操作を行うといった、今までにないゲーム操作を行うことができる。
また、ゲームシステム1において、例えばプレイヤの手元に配置される端末装置7にアイテムを表示させるようにしてもよい。これによれば、上記実施形態におけるオブジェクトの移動操作と同様の操作によって端末装置7からテレビ2へアイテムを移動させることで、プレイヤは、テレビ2に表示されるゲーム空間において、端末装置7に表示されるアイテムを使用するゲーム操作を行うことも可能である。
(表示装置の配置に関する変形例)
上記実施形態におけるゲームシステム1においては、端末装置7は可搬型であるので、プレイヤは端末装置7を自由な位置に配置することができる。例えば、上記運転ゲームのようにプレイヤの側方に端末装置7を配置することも可能であるし、端末装置7をプレイヤの後方に配置したり、端末装置7をプレイヤの下方(床面)や上方(天井)に配置したりすることも可能である。したがって、上記ゲームシステム1においては端末装置7の配置を種々変更することによって種々のゲームを行うことができる。
(各基準姿勢の差をゲーム処理に反映する変形例)
上記実施形態では、各基準姿勢の差に応じて異なるゲーム処理を実行する一例として、加算される得点を当該差に応じて変化させる例について説明した。ここで、各基準姿勢の差に応じて異なる処理が実行されるゲーム処理は、どのようなものであってもよい。例えば、上記実施形態においては、ゲーム装置3は、各基準姿勢の差に応じて難易度(具体的には、プレイヤオブジェクト85や敵オブジェクト86の数や速さ等)を変更するようにしてもよい。また、他の実施形態においては、例えば仮想カメラの位置関係を当該差に応じて変更することが考えられる。すなわち、ゲーム装置3は、テレビ用ゲーム画像を生成するための第1仮想カメラを、コントローラ5からテレビ2への方向(第1基準姿勢)に対応する向きに設定し、端末用ゲーム画像を生成するための第2仮想カメラを、コントローラ5から端末装置7への方向(第2基準姿勢)に対応する向きに設定する。例えば、テレビ2がプレイヤ(コントローラ5)の正面に配置され、端末装置7がプレイヤの後ろに配置される場合、仮想のゲーム空間においては、プレイヤキャラクタの正面方向の向きに第1仮想カメラが設定され、プレイヤキャラクタの後ろの向きに第2仮想カメラが設定される。このように、各基準姿勢に応じた向きに仮想カメラを設定し、表示装置に表示されるゲーム空間を基準姿勢に応じて変化させることによって、ゲームをより現実感のあるものとすることができる。
(入力システムの構成に関する変形例)
上記実施形態においては、2つの表示装置と、1つのゲーム装置3と、1つのコントローラ5とを含むゲームシステム1を例として説明した。ここで、ゲームシステムに含まれる表示装置は3つ以上であってもよい。このとき、基準姿勢は表示装置毎に設定される。なお、表示装置が3つ以上である場合、1つ目の表示装置に対応する基準姿勢を設定するためには、CPU10は、上記実施形態における第1基準設定処理(ステップS12)を実行すればよい。そして、2つ目以降の表示装置に対応する基準姿勢を設定するために、CPU10は、上記実施形態における第2基準設定処理(ステップS14)を表示装置毎に実行すればよい。また、複数の表示装置のうちで予め配置位置が定められている表示装置については、基準姿勢が予め定められていてもよい。このとき、それ以外の表示装置については第2基準設定処理によって基準姿勢を設定してもよい。
また、上記実施形態においては、ゲームシステム1は、可搬型の表示装置である端末装置7と据置型の表示装置であるテレビ2とを含む構成としたが、入力システムに含まれる複数の表示装置は、それぞれ可搬型であっても据置型であってもよい。例えば、入力システムは2つのテレビあるいは2つの端末装置を表示装置として用いる構成であってもよい。
また、他の実施形態においては、コントローラは複数であってもよい。このとき、各表示装置に対応する各基準姿勢は、コントローラ毎に設定されてもよい。すなわち、コントローラ5が複数である場合、CPU10は、コントローラ毎に基準設定処理(ステップS12およびS14)を実行し、複数の基準姿勢の組をコントローラ毎に設定する。なお、例えば複数のコントローラの位置がほぼ同じであると想定できる場合には、各コントローラについて同じ基準姿勢が設定されてもよい。
また、他の実施形態においては、ゲーム装置は複数であってもよい。このとき、ゲームシステム1において実行される一連のゲーム処理は、特定の1つのゲーム装置によって実行されてもよいし、各ゲーム装置によってゲーム処理が分担されて実行されてもよい。また、複数の表示装置および複数のコントローラは、特定の1つのゲーム装置と通信を行うようにしてもよいし、それぞれ別個のゲーム装置と通信を行うようにしてもよい。
(ゲーム処理を実行する情報処理装置に関する変形例)
上記実施形態においては、ゲームシステム1において実行される一連のゲーム処理をゲーム装置3が実行したが、ゲーム処理の一部は他の装置によって実行されてもよい。例えば、他の実施形態においては、ゲーム処理の一部(例えば、端末用ゲーム画像の生成処理)を端末装置7が実行するようにしてもよい。また、他の実施形態では、互いに通信可能な複数の情報処理装置を有するゲームシステムにおいて、当該複数の情報処理装置がゲーム処理を分担して実行するようにしてもよい。