(ゲームシステムの全体構成)
図1を参照して、本発明の一実施形態に係る情報処理装置の一例として、ゲーム装置を含むゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図1において、ゲームシステム1は、テレビジョン受像器(以下、単に「テレビ」と記載する)2、ゲーム装置3、光ディスク4、コントローラ5、およびマーカ部6を含む。本システムは、コントローラ5を用いたゲーム操作に基づいてゲーム装置3でゲーム処理を実行するものである。
本発明に係る情報処理装置の一例であるゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置3において実行されるためのゲームプログラムが記憶されている。ゲーム装置3の前面には光ディスク4の挿入口が設けられている。ゲーム装置3は、挿入口に挿入された光ディスク4に記憶されているゲームプログラムを読み出して実行することによってゲーム処理を実行する。
ゲーム装置3には、表示装置の一例であるテレビ2が接続コードを介して接続される。テレビ2は、ゲーム装置3において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ2の画面の周辺(図1では画面の上側)には、マーカ部6が設置される。マーカ部6は、その両端に2つのマーカ6Rおよび6Lを備えている。マーカ6R(マーカ6Lも同様)は、具体的には1以上の赤外LEDであり、テレビ2の前方に向かって赤外光を出力する。マーカ部6はゲーム装置3に接続されており、ゲーム装置3はマーカ部6が備える各赤外LEDの点灯を制御することが可能である。
コントローラ5は、自機に対して行われた操作の内容を示す操作データをゲーム装置3に与える入力装置である。コントローラ5とゲーム装置3とは無線通信によって接続される。本実施形態では、コントローラ5とゲーム装置3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ5とゲーム装置3とは有線で接続されてもよい。
(ゲーム装置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は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムLSIの内部構成について後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
また、システムLSI11には、入出力プロセッサ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から出力される。
入出力プロセッサ(I/Oプロセッサ)11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、およびメモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
入出力プロセッサ11aは、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置3と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
また、入出力プロセッサ11aは、コントローラ5から送信される操作データをアンテナ23および無線コントローラモジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
さらに、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
ゲーム装置3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置3の各構成要素に対して、図示しないACアダプタを経て電源が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
(コントローラ5の構成)
次に、図3〜図6を参照して、コントローラ5について説明する。図3および図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上面の後方には複数(図3では4つ)のLED34a〜34dが設けられる。ここで、コントローラ5には、他のメインコントローラと区別するためにコントローラ種別(番号)が付与される。各LED34a〜34dは、コントローラ5に現在設定されている上記コントローラ種別をプレイヤに通知したり、コントローラ5の電池残量をプレイヤに通知したりする等の目的で用いられる。具体的には、コントローラ5を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のLED34a〜34dのいずれか1つが点灯する。
また、コントローラ5は撮像情報演算部35(図5B)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。光入射面35aは、マーカ6Rおよび6Lからの赤外光を少なくとも透過する材質で構成される。
ハウジング31上面における1番ボタン32bとホームボタン32fとの間には、コントローラ5に内蔵されるスピーカ49(図5A)からの音を外部に放出するための音抜き孔31aが形成されている。
次に、図5Aおよび図5Bを参照して、コントローラ5の内部構造について説明する。図5Aおよび図5Bは、コントローラ5の内部構造を示す図である。なお、図5Aは、コントローラ5の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bは、コントローラ5の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bに示す斜視図は、図5Aに示す基板30を裏面から見た斜視図となっている。
図5Aにおいて、ハウジング31の内部には基板30が固設されており、当該基板30の上主面上に各操作ボタン32a〜32h、各LED34a〜34d、加速度センサ37、アンテナ45、およびスピーカ49等が設けられる。これらは、基板30等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図5B参照)に接続される。本実施形態では、加速度センサ37は、X軸方向に関してコントローラ5の中心からずれた位置に配置されている。これによって、コントローラ5をZ軸回りに回転させたときのコントローラ5の動きが算出しやすくなる。また、加速度センサ37は、長手方向(Z軸方向)に関してコントローラ5の中心よりも前方に配置されている。また、無線モジュール44(図6)およびアンテナ45によって、コントローラ5がワイヤレスコントローラとして機能する。
一方、図5Bにおいて、基板30の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ5の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を備えている。これらの部材38〜41はそれぞれ基板30の下主面に取り付けられる。
さらに、基板30の下主面上には、上記マイコン42およびバイブレータ48が設けられている。バイブレータ48は、例えば振動モータやソレノイドであり、基板30等に形成された配線によってマイコン42と接続される。マイコン42の指示によりバイブレータ48が作動することによってコントローラ5に振動が発生する。これによって、コントローラ5を把持しているプレイヤの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ48は、ハウジング31のやや前方寄りに配置される。つまり、バイブレータ48がコントローラ5の中心よりも端側に配置することによって、バイブレータ48の振動によりコントローラ5全体を大きく振動させることができる。また、コネクタ33は、基板30の下主面上の後端縁に取り付けられる。なお、図5Aおよび図5Bに示す他、コントローラ5は、マイコン42の基本クロックを生成する水晶振動子、スピーカ49に音声信号を出力するアンプ等を備えている。
なお、図3〜図5A、図5Bに示したコントローラ5の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができる。また、本実施形態では、撮像手段による撮像方向はZ軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ5における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。
図6は、コントローラ5の構成を示すブロック図である。コントローラ5は、操作部32(各操作ボタン32a〜32i)、コネクタ33、撮像情報演算部35、通信部36、および加速度センサ37を備えている。コントローラ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が集光した赤外線を受光して画像信号を出力する。ここで、テレビ2の表示画面近傍に配置されるマーカ部6のマーカ6Rおよび6Lは、テレビ2の前方に向かって赤外光を出力する赤外LEDで構成される。したがって、赤外線フィルタ38を設けることによって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを受光して画像データを生成するので、マーカ6Rおよび6Lの画像をより正確に撮像することができる。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象(マーカ6Rおよび6L)の位置を算出する。画像処理回路41は、算出された位置を示す座標を通信部36のマイコン42へ出力する。この座標のデータは、マイコン42によって操作データとしてゲーム装置3に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ5自体の向き(姿勢)や位置に対応して変化するので、ゲーム装置3はこのマーカ座標を用いてコントローラ5の向きや位置を算出することができる。
加速度センサ37は、コントローラ5の加速度(重力加速度を含む)を検出する、すなわち、コントローラ5に加わる力(重力を含む)を検出する。加速度センサ37は、当該加速度センサ37の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度(直線加速度)の値を検出する。例えば、2軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。例えば、3軸または2軸の加速度センサは、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能である種類のものでもよい。なお、加速度センサ37は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
本実施形態では、加速度センサ37は、コントローラ5を基準とした上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ5を基準に設定されるXYZ座標系における3次元のベクトル(AX,AY,AZ)として表される。以下では、加速度センサ37によって検出される3軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
加速度センサ37が検出した加速度を示すデータ(加速度データ)は、通信部36へ出力される。なお、加速度センサ37が検出した加速度は、コントローラ5自体の向き(姿勢)や動きに対応して変化するので、ゲーム装置3は加速度データを用いてコントローラ5の向きや動きを算出することができる。本実施形態では、ゲーム装置3は、加速度データに基づいてコントローラ5の姿勢を判断する。
加速度センサ37が検出した加速度(加速度ベクトル)を示すデータ(加速度データ)は、通信部36へ出力される。本実施形態において、加速度センサ37は、コントローラ5の姿勢を判断するためのデータを出力するセンサとして用いられる。
なお、加速度センサ37から出力される加速度の信号に基づいて、ゲーム装置3のプロセッサ(例えばCPU10)またはコントローラ5のプロセッサ(例えばマイコン42)等のコンピュータが処理を行うことによって、コントローラ5に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ37を搭載するコントローラ5が静止状態であることを前提としてコンピュータ側の処理が実行される場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理が実行される場合)、コントローラ5が現実に静止状態であれば、検出された加速度に基づいてコントローラ5の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ37の検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサ37の場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、プロセッサは、加速度センサ37からの出力に基づいてコントローラ5の傾き角度を算出してもよいし、当該傾き角度を算出せずに、コントローラ5の傾き方向を算出するようにしてもよい。このように、加速度センサ37をプロセッサと組み合わせて用いることによって、コントローラ5の傾きまたは姿勢を判定することができる。
一方、コントローラ5が動的な状態(コントローラ5が動かされている状態)であることを前提とする場合には、加速度センサ37は重力加速度に加えてコントローラ5の動きに応じた加速度を検出するので、検出された加速度から重力加速度の成分を所定の処理により除去することによってコントローラ5の動き方向を知ることができる。また、コントローラ5が動的な状態であることを前提とする場合であっても、検出された加速度から、加速度センサの動きに応じた加速度の成分を所定の処理により除去することによって、重力方向に対するコントローラ5の傾きを知ることが可能である。なお、他の実施例では、加速度センサ37は、内蔵の加速度検出手段で検出された加速度信号をマイコン42に出力する前に当該加速度信号に対して所定の処理を行うための、組込み式の処理装置または他の種類の専用の処理装置を備えていてもよい。組込み式または専用の処理装置は、例えば、加速度センサ37が静的な加速度(例えば、重力加速度)を検出するために用いられる場合、加速度信号を傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
なお、本実施形態では、コントローラの姿勢に応じて変化する値を出力するセンサとして、例えば静電容量式の加速度センサを用いることとしたが、他の方式の加速度センサやジャイロセンサを用いるようにしてもよい。ただし、加速度センサは各軸に沿った直線方向の加速度をそれぞれ検出するものであるのに対して、ジャイロセンサは回転に伴う角速度を検出するものである。つまり、加速度センサに代えてジャイロセンサを採用する場合には、検出される信号の性質が異なるため、両者を簡単に置き換えることはできない。そこで、加速度センサの代わりにジャイロセンサを用いて姿勢を算出する場合には、例えば次のような変更を行う。具体的には、ゲーム装置3は、検出開始の状態において姿勢の値を初期化する。そして、当該ジャイロセンサから出力される角速度のデータを積分する。さらに、積分結果を用いて、初期化された姿勢の値からの姿勢の変化量を算出する。この場合、算出される姿勢は、角度で表されることになる。
なお、既に説明したように、加速度センサによって姿勢を算出する場合には、加速度ベクトルを用いて姿勢を算出する。したがって、算出される姿勢はベクトルで表すことが可能であり、初期化を行わずとも絶対的な方向を算出することが可能である点で、加速度センサを用いる場合とジャイロセンサを用いる場合とで異なる。また、姿勢として算出される値の性質についても上記のように角度であるかベクトルであるかの違いがあるので、加速度センサからジャイロセンサへの置き換えを行う際には当該姿勢のデータに対しても所定の変換を行う必要がある。
通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理を行う際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータをゲーム装置3へ無線送信する無線モジュール44を制御する。
操作部32、撮像情報演算部35、および加速度センサ37からマイコン42へ出力されたデータは、一時的にメモリ43に格納される。これらのデータは、上記操作データとしてゲーム装置3へ送信される。すなわち、マイコン42は、ゲーム装置3無線コントローラモジュール19への送信タイミングが到来すると、メモリ43に格納されている操作データを無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変調されてコントローラ5から送信される。微弱電波信号はゲーム装置3側の無線コントローラモジュール19で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。なお、通信部36から無線コントローラモジュール19への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ5の通信部36は、例えば1/200秒に1回の割合で各操作データをゲーム装置3の無線コントローラモジュール19へ出力する。
上記コントローラ5を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ5によって画面上の任意の位置を指示する操作、および、コントローラ5自体を動かす操作を行うことができる。図7は、コントローラ5を用いてゲーム操作を行うときの様子を示す図解図である。本実施形態では、プレイヤは、図7に示すように、コントローラ5を動かす(具体的には、コントローラ5の姿勢を変化させる)ゲーム操作、および、コントローラ5によってテレビ2の画面上の位置Pを指し示すゲーム操作を行うことができる。
なお、図7に示す位置Pは、コントローラ5によって指し示される画面上の位置であり、理想的には、コントローラ5の前端部から上記長手方向に延ばした直線とテレビ2の画面とが交わる位置である。ゲーム装置3は、上述したマーカ座標に基づいて位置Pを算出する。ただし、ゲーム装置3によって算出される位置は厳密に当該位置である必要はなく、ゲーム装置3はその周辺の位置を算出することができればよい。以下では、コントローラ5によって指し示される画面上の位置を「ポインティング位置」と呼ぶ。
(ゲーム処理の概要)
次に、上記ゲームシステムにおいて実行されるゲーム処理の概要を説明する。図8は、上記ゲームシステムにおいて実行されるゲームによるゲーム画像の一例を示す図である。図8に示すように、テレビ2の画面には、仮想の3次元空間、プレイヤキャラクタ51、および、プレイヤキャラクタ51の影52、カーソル53等が表示される。本実施形態では、3次元空間に配置されるプレイヤキャラクタ51をコントローラ5を用いて操作するゲームを例として説明する。
本実施形態では、プレイヤは、プレイヤキャラクタ51の他に、3次元空間に配置される仮想カメラ、および、3次元空間に設定される光源を、コントローラ5を用いて操作することができる。仮想カメラは、3次元空間のゲーム画像を生成するために用いられ、具体的には、ゲーム装置3は、仮想カメラの位置から仮想カメラの向きに見たゲーム画像を生成してテレビ2に表示する。また、光源は、3次元空間に配置されるオブジェクトの影を生成するために設定される。
コントローラ5による操作対象(プレイヤキャラクタ51、仮想カメラ、または光源)は、コントローラ5の姿勢に応じて変更される。図9は、コントローラ5の姿勢に関する状態とその状態における操作対象との対応を示す図である。図9に示すように、コントローラ5のZ軸正方向(図3参照)が鉛直上方向を向く姿勢(この姿勢となる状態を「第1状態」と呼ぶ。)である場合、コントローラ5を用いて仮想カメラの操作が可能となる。つまり、コントローラ5が第1状態である場合、ゲーム装置3は、コントローラ5の十字ボタン32aに対して仮想カメラを制御する機能を割り当てる。ゲーム装置3は、コントローラ5の十字ボタン32aへの入力に従って仮想カメラの位置および向きを変更する処理を行ってゲーム画像を生成・表示する。図10は、図8に示す状態から仮想カメラの位置および向きを変更した場合におけるゲーム画像の一例を示す図である。プレイヤがコントローラ5の十字ボタン32aを用いて仮想カメラの位置および向きを変更することによって、図10に示すように、画面に表示される3次元空間を見る視点の位置および向きが変化する。なお、十字ボタン32aを用いた仮想カメラの位置および向きの制御方法については後述するが、当該制御方法はどのような方法であってもよい。
また、図9に示すように、コントローラ5のZ軸正方向(図3参照)が鉛直下方向を向く姿勢(この姿勢となる状態を「第2状態」と呼ぶ。)である場合、コントローラ5を用いて光源の操作が可能となる。つまり、コントローラ5が第2状態である場合、ゲーム装置3は、コントローラ5の十字ボタン32aに対して光源を制御する機能を割り当てる。ゲーム装置3は、コントローラ5の十字ボタン32aへの入力に従って光源の明るさを変更する処理を行ってゲーム画像を生成・表示する。図11は、図8に示す状態から光源の明るさを変更した場合におけるゲーム画像の一例を示す図である。プレイヤがコントローラ5の十字ボタン32aを用いることによって、図11に示すように光源の明るさが変化するので、プレイヤは光源を所望の明るさに設定することができる。なお、図11は、図8に示す状態から光源が暗くなるように変更された結果、影52が薄くなっている(図11では影52を斜線で示している)ゲーム画像を示している。なお、十字ボタン32aを用いた光源の操作は、光源の明るさを制御するものに限らず、光源の色や位置や照射方向等を制御するものであってもよい。
また、図9に示すように、コントローラ5のY軸正方向(図3参照)が鉛直下方向を向く姿勢(この姿勢となる状態を「第3状態」と呼ぶ。)である場合、コントローラ5を用いた操作は無効となる。つまり、本実施形態では、ゲーム装置3は、コントローラ5が第3状態である場合にはコントローラ5の各ボタン32a〜32hに機能を割り当てない。さらに、本実施形態では、ゲーム装置3は、コントローラ5が第3状態となった時点でゲームの進行を一時停止する。図12は、図8に示す状態からゲームの進行が一時停止された場合におけるゲーム画像の一例を示す図である。図12に示すように、本実施形態では、コントローラ5の姿勢が第3状態となると、ゲームの進行が一時停止され、ポーズ画像54が表示される。また、第3状態の間、コントローラ5への操作入力は無視される。
ゲーム装置3は、加速度センサ37によって検出される加速度ベクトルに基づいて、コントローラ5が上記第1〜第3状態のいずれの状態にあるかを所定時間(例えば1フレーム時間)間隔で判定する。ここで、コントローラ5の姿勢や動きの状態によっては、コントローラ5の姿勢状態が上記第1〜第3状態のいずれにも該当しない場合(この場合の状態を「不定状態」と呼ぶ。)がある。この場合、ゲーム装置3は、コントローラ5の十字ボタン32aへの入力に従ってプレイヤキャラクタ51の動作を制御する。つまり、コントローラ5が不定状態にある場合、ゲーム装置3は、コントローラ5の十字ボタン32aに対してプレイヤキャラクタ51を制御する機能を割り当てる。具体的には、ゲーム装置3は、コントローラ5の十字ボタン32aへの入力に従ってプレイヤキャラクタ51を動作させる。プレイヤキャラクタ51は、例えば、コントローラ5の十字ボタン32aの上下左右の入力に応じて3次元空間を前後左右に移動する。
ゲーム中において、プレイヤは、コントローラ5の姿勢を適宜変更することによって操作対象を変更しつつ、プレイヤキャラクタ51、仮想カメラおよび光源を操作する。また、プレイヤは、コントローラ5のY軸を鉛直下方向に向けることによってゲームを一時中断することができる。
さらに、本実施形態においては、図8に示すように、ゲーム画面にはカーソル53が表示される。カーソル53は、上述したポインティング位置に表示される。すなわち、ゲーム装置3は、コントローラ5の撮像素子40によって撮像された画像から算出されるマーカ座標に基づいてポインティング位置を算出し、カーソル53を表示する。カーソル53は、例えば、3次元空間における所望の位置やオブジェクトを指定する(例えば、攻撃対象となる敵キャラクタを指定する等)目的で用いられる。なお、本実施形態ではプレイヤの前方にあるテレビ2の周辺にマーカ部6が配置されるので、プレイヤは通常、コントローラ5の撮像方向がおおまかには前方を向く状態でコントローラ5を把持してゲーム操作を行う(図7参照)。
以上に説明したように、本実施形態によれば、コントローラ5の姿勢が上記第1〜第3状態のいずれであるかによって、十字ボタン32aに割り当てられる機能が変化される。これによって、1つの十字ボタン32aに対して多様な機能を割り当てることができるので、コントローラ5に設ける操作ボタンの数を増加させることなく、コントローラ5を用いて多様な操作を行うことが可能となる。また、本実施形態によれば、上記第1〜第3状態のいずれであるか判別がつかない不定状態においても、十字ボタン32aを用いて操作を行うことができる。つまり、不定状態についてもゲーム操作を可能とすることによって、不定状態のためにゲーム操作が行えなくなることを防止することができ、コントローラ5の操作性を向上することができる。
(ゲーム装置3における処理の詳細)
次に、ゲーム装置3において実行される処理の詳細について説明する。まず、ゲーム装置3における処理において用いられる主なデータについて図13を用いて説明する。図13は、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図13に示すように、ゲーム装置3の記憶装置には、ゲームプログラム60、操作データ62、およびゲーム処理用データ66が記憶される。なお、メインメモリには、図13に示すデータの他、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
ゲームプログラム60は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。ゲームプログラム60には、姿勢判別プログラム61等が含まれている。姿勢判別プログラム61は、加速度センサ37の出力値(加速度ベクトル)に基づいて、コントローラ5の姿勢に関する状態を判別する処理をCPU10に実行させるためのプログラムである。姿勢判別プログラム61は、コントローラ5の状態が上記第1状態となったと判別するための条件(第1条件)、コントローラ5の状態が上記第2状態となったと判別するための条件(第2条件)、および、コントローラ5の状態が上記第3状態となったと判別するための条件(第3条件)を含んでいる。詳細は後述するが、これら各条件は、加速度センサ37の出力値に関する条件である。なお、ゲームプログラム60には、上記姿勢判別プログラム61の他、コントローラ5の姿勢に関する状態に応じて操作対象を決定する(操作ボタンに割り当てる機能を決定する)プログラムや、コントローラ5への操作入力に従って各操作対象(キャラクタ、仮想カメラ、および光源)を制御するプログラム等が含まれている。
操作データ62は、コントローラ5からゲーム装置3へ送信されてくる操作データである。操作データ62には、加速度データ63、操作ボタンデータ64、およびマーカ座標データ65が含まれる。なお、上述したように、コントローラ5からゲーム装置3へ1/200秒に1回の割合で操作データが送信されるので、メインメモリに記憶される操作データはこの割合で更新される。また、メインメモリには、最新の(最後に取得された)操作データのみが記憶されればよい。
加速度データ63は、加速度センサ37によって検出された加速度(加速度ベクトル)を示すデータである。ここでは、加速度データ63は、図3に示すXYZの3軸の方向に関する加速度を各成分とする3次元の加速度ベクトルA=(AX,AY,AZ)を示すデータである。
操作ボタンデータ64は、操作部32の各ボタン32a〜32iに対して行われた操作内容(各ボタン32a〜32iが押下されたか否か)を示すデータである。
マーカ座標データ65は、撮像情報演算部35の画像処理回路41によって算出される座標、すなわち上記マーカ座標を示すデータである。マーカ座標は、撮像画像に対応する平面上の位置を表すための座標系で表現される。なお、撮像素子40によって2つのマーカ6Rおよび6Lが撮像される場合には、2つのマーカ座標((x1,y1)および(x2,y2)とする)が算出される。
ゲーム処理用データ66は、後述するゲーム処理(図15)において用いられるデータである。ゲーム処理用データ66は、姿勢データ67、ボタン機能割当データ68、キャラクタデータ69、カメラデータ70、および光源データ71等を含む。
姿勢データ67は、コントローラ5の現在の姿勢に関する状態を示す。すなわち、姿勢データ67は、上記第1〜第3状態および不定状態のいずれかを示す。本実施形態では、コントローラ5の姿勢を算出する処理、および、上記第1〜第3状態および不定状態のいずれに該当するかを判別する処理は1フレーム時間につき1回の割合で繰り返し実行される。
ボタン機能割当データ68は、コントローラ5の姿勢に関する状態と、当該状態にある場合に十字ボタン32aの各ボタンに割り当てられる機能との対応を示す。図14は、ボタン機能割当データ68の内容の一例を示す概念図である。図14に示す例においては、第1状態において、十字ボタン32aの各ボタン(上下左右ボタン)には仮想カメラを移動させる機能が割り当てられる。第2状態において、十字ボタン32aの上ボタンには、光源の明るさを増加させる機能が割り当てられ、下ボタンには光源の明るさを減少させる機能が割り当てられる。なお、第2状態において、十字ボタン32aの左ボタンおよび右ボタンには機能が割り当てられない。このように、コントローラ5の状態によっては、機能が割り当てられないボタンがあってもよい。また、第3状態において、十字ボタン32aの各ボタンには機能が割り当てられない。さらに、第3状態においては、十字ボタン32a以外の各ボタン32b〜32iについても機能が割り当てられない。また、不定状態において、十字ボタン32aの各ボタンにはプレイヤキャラクタを前後左右に移動させる機能が割り当てられる。
なお、本実施形態においては、コントローラ5の各状態(第1〜第3状態および不定状態)に応じて十字ボタン32aに割り当てられる機能のみが変更されるものとするが、他のボタン32b〜32iに割り当てられる機能がコントローラ5の状態に応じて変更されてもよい。また、ボタン機能割当データ68は、コントローラ5の状態と、各ボタン32a〜32iに割り当てられる機能との対応を示すデータであればどのような形式であってもよい。ボタン機能割当データ68は、例えば、当該対応を示すテーブルの形式で記憶されていてもよい。また、ボタン機能割当データ68は、当該対応を示すプログラムの形式で記憶されていてもよく、具体的には、コントローラ5の状態に応じて異なる処理を実行するプログラムであってもよい。
図13の説明に戻り、キャラクタデータ69は、プレイヤキャラクタに関する各種パラメータを示すデータである。当該パラメータには、プレイヤキャラクタの位置や向きを示すパラメータや、プレイヤキャラクタの体力および能力を示すパラメータが含まれる。カメラデータ70は、仮想カメラの位置および向きを示すデータである。光源データ71は、光源の明るさを示すデータである。
次に、ゲーム装置3において行われるゲーム処理の詳細を、図15〜図17を用いて説明する。図15は、ゲーム装置3において実行される処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入され、ゲームプログラムが記憶された光ディスク4がゲーム装置3に挿入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10(およびGPU11)によって当該ゲームプログラムの実行が開始される。図15に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
図15に示すステップS1において、まずCPU10は初期化処理を実行する。初期化処理においては、仮想の3次元ゲーム空間が構築され、プレイヤキャラクタや他のオブジェクトがゲーム空間の初期位置に配置される。また、仮想カメラの位置および向きが予め定められた初期状態に設定される。さらに、光源の明るさが予め定められた初期値に設定される。したがって、キャラクタデータ69として上記初期位置を示すデータがメインメモリに記憶され、カメラデータ70として上記初期状態を示すデータがメインメモリに記憶され、光源データ71として上記初期値を示すデータがメインメモリに記憶される。ステップS1の後、ステップS2〜S6の処理ループが、ゲームが実行される間繰り返し実行される。なお、1回の当該処理ループは、1フレーム時間(例えば1/60秒)に1回の割合で実行される。
ステップS2において、CPU10は操作データを取得する。すなわち、コントローラ5から送信されてくる操作データが無線コントローラモジュール19を介して受信され、加速度データ63、操作ボタンデータ64、およびマーカ座標データ65としてメインメモリに記憶されるので、CPU10はメインメモリから操作データを読み出す。
続くステップS3において、CPU10は、上記姿勢判別プログラム61を実行することによって姿勢判別処理を実行する。姿勢判別処理は、コントローラ5の姿勢を判別し、コントローラ5の状態が上記第1〜第3状態および不定状態のいずれに該当するかを判別するための処理である。
まず、姿勢判別処理の概要を説明する。姿勢判別処理において、CPU10は、コントローラ5の状態が上記第1〜第3状態および不定状態のいずれであるかを、上述した第1〜第3条件を用いて判別する。すなわち、加速度センサ37によって検出された加速度ベクトルの値が第1〜第3条件を満たすか否かを各条件について判定する。ここで、本実施形態では、上記第1〜第3条件として、加速度ベクトル(AX,AY,AZ)に関する以下の条件を用いる。
第1条件:AX2 +AY2 <C1…(1)、かつ、AZ<−C2…(2)
第2条件:AX2 +AY2 <C1…(1)、かつ、AZ>C2…(3)
第3条件:AX2 +AZ2 <C1…(4)、かつ、AY>C2…(5)
上記不等式(1)および(4)における定数C1は予め定められた値であり、例えばC1=0.36である。また、上記不等式(2)、(3)および(5)における定数C2(>0)は予め定められた値であり、例えばC2=0.80である。なお、本実施形態では、加速度センサ37は重力加速度の大きさを“1”として検出するものとする。このとき、定数C1およびC2は、それぞれ0以上1(=重力加速度の大きさ)以下の範囲で設定される。また、定数C1の値が“0”に近いほど、条件は厳しくなる。定数C2の値が“1”に近いほど、条件は厳しくなる。
上記不等式(1)は、加速度ベクトルのうちのX軸およびY軸に関する加速度値を各成分とする2次元ベクトルの大きさが所定値(C1の平方根)よりも小さいか否かを判定するための式である。ここで、(静止状態で)コントローラ5のZ軸が鉛直方向を向いている場合、すなわち、Z軸と鉛直方向とのなす角度が0°の場合には、上記2次元ベクトルの大きさは“0”になり、Z軸と鉛直方向とのなす角度が大きくなるにつれて上記2次元ベクトルの大きさが大きくなる。したがって、上記不等式(1)によって、コントローラ5のZ軸の向きが鉛直方向に近いか否か、すなわち、コントローラ5のZ軸の向きが鉛直方向を向いているか否かを判定することができる。また、不等式(1)と同様に、不等式(4)によって、コントローラ5のY軸の向きが鉛直方向に近いか否か、すなわち、コントローラ5のY軸の向きが鉛直方向を向いているか否かを判定することができる。
また、上記不等式(2)は、加速度ベクトルのうちのZ軸成分値が所定値(−C2)よりも小さいか否かを判定するための式である。(静止状態で)コントローラ5のZ軸が鉛直上方向を向いている場合には、Z軸負方向に重力加速度が加わるので、Z成分値AZは“−1”となる。そして、Z軸と鉛直上方向とのなす角度が大きくなるにつれてZ成分値は“−1”から大きくなる。したがって、上記不等式(2)によって、コントローラ5のZ軸の向きが鉛直上方向に近いか否か、すなわち、コントローラ5のZ軸の向きが鉛直上方向を向いているか否かを判定することができる。また、(静止状態で)コントローラ5のZ軸が鉛直下方向を向いている場合には、Z成分値AZは“1”となり、Z軸と鉛直下方向とのなす角度が大きくなるにつれてZ成分値は“1”から小さくなる。したがって、上記不等式(3)によって、コントローラ5のZ軸の向きが鉛直下方向に近いか否か、すなわち、コントローラ5のZ軸の向きが鉛直下方向を向いているか否かを判定することができる。不等式(2)および(3)と同様に、不等式(5)によって、コントローラ5のY軸の向きが鉛直下方向に近いか否か、すなわち、コントローラ5のY軸の向きが鉛直下方向を向いているか否かを判定することができる。
姿勢判別処理においては、CPU10は、上記第1条件が満たされた場合にはコントローラ5の状態は第1状態であると判断し、上記第2条件が満たされた場合にはコントローラ5の状態は第2状態であると判断し、上記第3条件が満たされた場合にはコントローラ5の状態は第3状態であると判断する。そして、各条件のいずれも満たされなかった場合にはコントローラ5の状態は不定状態であると判断する。以上のように、本実施形態では、第1〜第3の条件を用いてコントローラ5の姿勢に関する状態を判別する。以下、図16を参照して、姿勢判別処理の詳細を説明する。
図16は、図15に示す姿勢判別処理(ステップS3)の流れを示すフローチャートである。姿勢判別処理においては、まずステップS11において、CPU10は、コントローラ5のZ軸が鉛直方向を向いているか否かを判定する。ステップS11の判定は、メインメモリに記憶されている加速度データ63により示される加速度ベクトル(AX,AY,AZ)のうちのX成分およびY成分に基づいて行われる。具体的には、CPU10は、加速度ベクトルのX成分値AXおよびY成分値AYが上記不等式(1)を満たすか否かを判定する。ステップS11の判定結果が肯定である場合、ステップS12の処理が実行される。一方、ステップS11の判定結果が否定である場合、後述するステップS17の処理が実行される。
ステップS12において、CPU10は、コントローラ5のZ軸が鉛直上方向を向いているか否かを判定する。ステップS12の判定は、メインメモリに記憶されている加速度データ63により示される加速度ベクトル(AX,AY,AZ)のうちのZ成分に基づいて行われる。具体的には、CPU10は、加速度ベクトルのZ成分値AZが上記不等式(2)を満たすか否かを判定する。ステップS12の判定結果が肯定である場合、ステップS13の処理が実行される。一方、ステップS12の判定結果が否定である場合、後述するステップS14の処理が実行される。
ステップS13において、CPU10は、コントローラ5の姿勢に関する状態は、コントローラ5のZ軸が鉛直上方向を向いた状態(第1状態)であると判断する。具体的には、第1状態を示すデータを姿勢データ67としてメインメモリに記憶する。ステップS13の後、CPU10は姿勢判別処理を終了する。
ステップS14において、CPU10は、コントローラ5のZ軸が鉛直下方向を向いているか否かを判定する。ステップS14の判定は、メインメモリに記憶されている加速度データ63により示される加速度ベクトル(AX,AY,AZ)のうちのZ成分に基づいて行われる。具体的には、CPU10は、加速度ベクトルのZ成分値AZが上記不等式(3)を満たすか否かを判定する。ステップS14の判定結果が肯定である場合、ステップS15の処理が実行される。一方、ステップS14の判定結果が否定である場合、後述するステップS16の処理が実行される。
ステップS15において、CPU10は、コントローラ5の姿勢に関する状態は、コントローラ5のZ軸が鉛直下方向を向いた状態(第2状態)であると判断する。具体的には、第2状態を示すデータを姿勢データ67としてメインメモリに記憶する。ステップS15の後、CPU10は姿勢判別処理を終了する。
一方、ステップS16において、CPU10は、コントローラ5の姿勢に関する状態は不定状態であると判断する。具体的には、不定状態を示すデータを姿勢データ67としてメインメモリに記憶する。ステップS16の後、CPU10は姿勢判別処理を終了する。
一方、ステップS17において、CPU10は、コントローラ5のY軸が鉛直方向を向いているか否かを判定する。ステップS17の判定処理は、ステップS11の判定処理に準じて行うことができる。すなわち、ステップS17の判定は、メインメモリに記憶されている加速度データ63により示される加速度ベクトルのうちのX軸成分およびZ成分に基づいて行われる。具体的には、CPU10は、加速度ベクトルのX成分値AXおよびZ成分値AZが上記不等式(4)を満たすか否かを判定する。ステップS17の判定結果が肯定である場合、ステップS18の処理が実行される。一方、ステップS17の判定結果が否定である場合、上記ステップS16の処理が実行される。
ステップS18において、CPU10は、コントローラ5のY軸が鉛直下方向を向いているか否かを判定する。ステップS18の判定処理は、ステップS14の判定処理に準じて行うことができる。すなわち、ステップS18の判定は、メインメモリに記憶されている加速度データ63により示される加速度ベクトルのうちのY成分に基づいて行われる。具体的には、CPU10は、加速度ベクトルのY成分値AYが上記不等式(5)を満たすか否かを判定する。ステップS18の判定結果が肯定である場合、ステップS19の処理が実行される。一方、ステップS18の判定結果が否定である場合、上記ステップS16の処理が実行される。
ステップS19において、CPU10は、コントローラ5の姿勢に関する状態は、コントローラ5のY軸が鉛直下方向を向いた状態(第3状態)であると判断する。具体的には、第3状態を示すデータを姿勢データ67としてメインメモリに記憶する。ステップS19の後、CPU10は姿勢判別処理を終了する。
以上に説明したように、本実施形態における姿勢判別処理では、加速度ベクトルに基づいてコントローラ5の姿勢の状態が判別される。具体的には、加速度ベクトルが上記第1条件を満たす場合、ステップS11およびステップS12の判定結果が肯定となるので、コントローラ5の状態は第1状態であると判断される(ステップS13)。また、加速度ベクトルが上記第2条件を満たす場合、ステップS11の判定結果が肯定となり、ステップS12の判定結果が否定となり、ステップS13の判定結果が肯定となるので、コントローラ5の状態は第2状態であると判断される(ステップS15)。また、加速度ベクトルが上記第3条件を満たす場合、ステップS11の判定結果が否定となり、ステップS17およびステップS18の判定結果が肯定となるので、コントローラ5の状態は第3状態であると判断される(ステップS19)。また、加速度ベクトルが第1〜第3条件のいずれも満たさない場合、ステップS14、S17、またはS18のいずれかの判定結果が否定となるので、コントローラ5の状態は不定状態であると判断される(ステップS16)。
なお、本実施形態においては、コントローラ5の所定軸(Z軸またはY軸)正方向が鉛直上向き(または鉛直下向き)となる方向をコントローラ5が向くことを判別するための条件として、2種類の条件を用いた。すなわち、1つ目の条件は、所定軸が鉛直方向を向くことを判別するための条件(上記不等式(1)または(4))であり、2つ目の条件は、所定軸が鉛直上方向または鉛直下方向を向くことを判別するための条件(上記不等式(2),(3)または(5)であった。このように、2種類の条件を用いて、所定軸が鉛直方向を向くか否かを2回判定することによって、コントローラ5の状態を正確に判別することができる。なお、上記2つ目の条件のみを用いてコントローラ5の姿勢状態を判別することも可能である。したがって、他の実施形態においては、コントローラ5の状態が第1状態であるか否かを不等式(2)のみで判別してもよいし、コントローラ5の状態が第2状態であるか否かを不等式(3)のみで判別してもよいし、コントローラ5の状態が第3状態であるか否かを不等式(5)のみで判別してもよい。
また、他の実施形態においては、上記2つ目の条件として、所定軸が上方向または下方向を向くことを判別するための条件を用いてもよい。所定軸が鉛直方向を向くことについては1つ目の条件によって判別可能だからである。具体的には、上記不等式(2),(3)および(5)において、定数C2を“0”としてもよい。つまり、ステップS12では、加速度ベクトルのZ成分値AZが負であるか否かを判定し、ステップS14では、加速度ベクトルのZ成分値AZが正であるか否かを判定し、ステップS18では、加速度ベクトルのY成分値AYが正であるか否かを判定してもよい。
また、他の実施形態においては、コントローラ5の所定軸正方向が鉛直上向き(または鉛直下向き)となることを判別するための条件として、3次元の加速度ベクトル(AX,AY,AZ)と当該所定軸とのなす角度に関する条件を用いてもよい。具体的には、当該角度が予め定められた所定値以下となることを条件として用いてもよい。ただし、当該角度を用いる方法では、3次元空間における2直線のなす角度を算出しなければならず、また、加速度ベクトルの大きさを考慮しないので、本実施形態における2種類の条件を用いる方法の方が判別処理を正確かつ簡単な処理で行うことができる。
また、他の実施形態においては、上記第1〜第3条件に関して、その条件がすでに満たされている場合(すなわち、コントローラ5の状態が、その条件に対応する状態にすでにある場合)と、その条件が満たされていない場合(すなわち、コントローラ5の状態が、その条件に対応する状態ではない場合)とで、条件の厳しさを変更するようにしてもよい。例えば、上記第1条件に関して、コントローラ5の現在の状態が第1状態以外の状態である場合には、コントローラ5の現在の状態が第1状態である場合に比べて、変数C1を相対的に小さくするとともに、変数C2を相対的に大きくする。これによって、コントローラ5の現在の状態が第1状態以外の状態である場合の第1条件を、コントローラ5の現在の状態が第1状態である場合に比べて厳しくすることができる。以上のように、その条件がすでに満たされていない場合の条件を、その条件が満たされている場合に比べて厳しくしてもよい。ここで、例えば、プレイヤがコントローラ5を第1状態にしてカメラの操作を行っている場合を考える。この場合において、プレイヤが気付かずにコントローラ5の姿勢を次第に変化させてしまい、コントローラ5の状態が第1状態から他の状態へ移行してしまうことが考えられる。このとき、プレイヤの意図に反して操作対象が切り替わってしまうことになる。これに対して、その条件がすでに満たされていない場合と満たされている場合とで条件の厳しさを異ならせることによって、プレイヤの意図に反して操作対象が切り替わってしまうことを防止することができる。
図15の説明に戻り、ステップS3の次のステップS4において、CPU10は、コントローラ5の状態に応じた操作を行うための操作処理を実行する。図17は、図15に示す操作処理(ステップS4)の流れを示すフローチャートである。操作処理においては、まずステップS21において、CPU10は、コントローラ5の姿勢に関する状態が第1状態であるか否かを判定する。ステップS21の判定は、メインメモリに記憶されている姿勢データ67が第1状態を示しているか否かによって行われる。ステップS21の判定結果が肯定である場合、ステップS22の処理が実行される。一方、ステップS21の判定結果が否定である場合、後述するステップS23の処理が実行される。
ステップS22において、CPU10は、コントローラ5の十字ボタン32aへの操作入力に応じて仮想カメラを移動させる。すなわち、CPU10は、コントローラ5の状態が第1状態である場合、メインメモリに記憶されているカメラ制御プログラムを実行する。カメラ制御プログラムは、コントローラ5の十字ボタン32aへの操作入力に従って仮想カメラの移動を制御する処理をCPU10に実行させるためのプログラムである。具体的には、仮想カメラは、十字ボタン32aの上下左右のボタンが押下されたことに応じてゲーム空間内において移動させられる。さらに具体的には、仮想カメラは、十字ボタン32aの上ボタンが押下されたことに応じて注視点に近づく方向に移動し、下ボタンが押下されたことに応じて注視点から遠ざかる方向に移動し、左ボタンが押下されたことに応じて注視点を中心に左側へ回転移動し、右ボタンが押下されたことに応じて注視点を中心に右側へ回転移動する(図14参照)。なお、仮想カメラの移動の仕方はどのようなものであってもよく、例えば、注視点を中心に上下左右の方向に回転移動してもよいし、平行移動してもよい。また、他の実施形態では、仮想カメラの位置および向きとともに、または、位置および向きに代えて、仮想カメラの画角を操作入力に従って制御するようにしてもよい。上記ステップS22によって、十字ボタン32aに対して仮想カメラを操作する機能が割り当てられたこととなる。ステップS22において、CPU10は、操作入力による移動後の仮想カメラの位置および向きを示すデータをカメラデータ70としてメインメモリに記憶する。ステップS22の後、CPU10は操作処理を終了する。
一方、ステップS23において、CPU10は、コントローラ5の姿勢に関する状態が第2状態であるか否かを判定する。ステップS23の判定は、メインメモリに記憶されている姿勢データ67が第2状態を示しているか否かによって行われる。ステップS23の判定結果が肯定である場合、ステップS24の処理が実行される。一方、ステップS23の判定結果が否定である場合、後述するステップS25の処理が実行される。
ステップS24において、CPU10は、コントローラ5の十字ボタン32aへの操作入力に応じて光源の明るさを変更する。すなわち、CPU10は、コントローラ5の状態が第2状態である場合、メインメモリに記憶されている光源制御プログラムを実行する。光源制御プログラムは、コントローラ5の十字ボタン32aへの操作入力に従って光源の明るさを増減する処理をCPU10に実行させるためのプログラムである。具体的には、光源の明るさは、十字ボタン32aの上下のボタンが押下されたことに応じて増減させられる(図14参照)。なお、光源の制御はどのようなものであってもよく、操作入力に応じて例えば、光源の色を変更するようにしてもよいし、光源が点光源の場合には光源の位置や照射角を変更するようにしてもよいし、光源が平行光源の場合には照射方向を変更するようにしてもよい。上記ステップS24によって、十字ボタン32aに対して光源を操作する機能が割り当てられたこととなる。ステップS24において、CPU10は、操作入力による変更後の光源の明るさを示すデータを光源データ71としてメインメモリに記憶する。ステップS24の後、CPU10は操作処理を終了する。
一方、ステップS25において、CPU10は、コントローラ5の姿勢に関する状態が第3状態であるか否かを判定する。ステップS25の判定は、メインメモリに記憶されている姿勢データ67が第3状態を示しているか否かによって行われる。ステップS25の判定結果が肯定である場合、ステップS26の処理が実行される。一方、ステップS25の判定結果が否定である場合、後述するステップS27の処理が実行される。
ステップS26において、ゲーム進行が一時停止していることを表すポーズ画面をテレビ2に表示させる(図12)。つまり、ステップS26においては、仮にコントローラ5への操作入力が行われたとしても、コントローラ5への操作入力に応じたゲーム処理を実行しないので、コントローラ5への操作入力が無効とされることとなる。なお、ステップS26が実行された場合、CPU10はゲームの進行を停止する。すなわち、この後実行されるステップS6(後述)においてはゲームを進行するための処理を実行しない。ステップS26の後、CPU10は操作処理を終了する。
一方、ステップS27においては、CPU10は、コントローラ5の十字ボタン32aへの操作入力に応じてプレイヤキャラクタを移動させる。すなわち、CPU10は、コントローラ5の状態が不定状態である場合、メインメモリに記憶されているキャラクタ制御プログラムを実行する。キャラクタ制御プログラムは、コントローラ5の十字ボタン32aへの操作入力に従ってプレイヤキャラクタの動作(移動)を制御する処理をCPU10に実行させるためのプログラムである。具体的には、プレイヤキャラクタは、十字ボタン32aの上下左右のボタンが押下されたことに応じてゲーム空間内において前後左右に移動させられる(図14参照)。なお、プレイヤキャラクタの移動の仕方はどのようなものであってもよく、プレイヤキャラクタは、例えば、プレイヤキャラクタを基準として前後左右に移動してもよいし、画面の奥側を前方とし、手前側を後方として前後左右に移動してもよい。上記ステップS27によって、十字ボタン32aに対してプレイヤキャラクタを操作する機能が割り当てられたこととなる。ステップS27において、CPU10は、操作入力による移動後のプレイヤキャラクタの状態(位置および向き)を示すデータをキャラクタデータ69としてメインメモリに記憶する。ステップS27の後、CPU10は操作処理を終了する。
また、他の実施形態においては、操作処理において、ゲーム装置3は、コントローラ5の状態が所定期間継続してある状態となったことを条件として、ボタンに割り当てられる機能の変更を行うようにしてもよい。具体的には、ステップS21において、CPU10は、コントローラ5の状態が所定フレーム数の間連続して第1状態となったか否かを判定する。同様に、ステップS23において、CPU10は、コントローラ5の状態が所定フレーム数の間連続して第2状態となったか否かを判定し、ステップS25において、コントローラ5の状態が所定フレーム数の間連続して第3状態となったか否かを判定する。これによれば、コントローラ5が動かされた際に一時的に第1〜第3条件が満たされた結果、ボタンに割り当てられる機能がプレイヤの意図に反して変更されることを防止することができる。
図15の説明に戻り、ステップS4の次のステップS5において、CPU10は、マーカ座標に基づいてポインティング位置を算出する。すなわち、メインメモリに記憶されているマーカ座標データ65により示される座標に基づいて、画面上におけるポインティング位置を算出する。なお、ポインティング位置を算出するためのアルゴリズムは、撮像画像から画面上のポインティング位置を算出するものであればどのようなものであってもよい。以下、ポインティング位置の算出方法の一例を説明する。
まずCPU10は、メインメモリに記憶されているマーカ座標データ65により示される2つのマーカ座標の中点を算出する。この中点の位置は、撮像画像に対応する平面上の位置を表すためのxy座標系によって表現される。このxy座標系は、撮像画像の左上を原点とし、下向きをy軸正方向とし、右向きをx軸正方向とするものとする。次に、CPU10は、当該中点の位置を示す座標を、テレビ2の画面上の位置を表すための座標系(x’y’座標系)の座標に変換する。なお、x’y’座標系が、画面の左上を原点とし、下向きをy軸正方向とし、右向きをx軸正方向とするものとすれば、上記変換は次のように行うことができる。すなわち、中点座標のx成分の正負を反転させて所定の割合(例えば、撮像画像のx軸方向の長さを、テレビ2の画面のx’軸方向の長さに一致させる割合)でスケーリングすることによって、ポインティング位置のx’成分を得ることができる。また、中点座標のy成分を所定の割合(例えば、撮像画像のy軸方向の長さを、テレビ2の画面のy’軸方向の長さに一致させる割合)でスケーリングすることによって、指示位置のy’成分を得ることができる。以上のようにして算出されたx’y’座標値により示される位置がポインティング位置となる。また、より正確なポインティング位置の算出方法の例としては、上記2つのマーカ座標を結ぶベクトルがy軸に平行になるように撮像画像の中央を中心として2つのマーカ座標の中点を回転する処理を行い、回転後の当該中点に対して上記変換処理を行う。このような回転による補正処理を行うことによって、コントローラ5が傾いている場合等にも、ポインティング位置を正確に算出することができる。
ステップS5の次のステップS6において、CPU10は、その他のゲーム処理を実行する。ここで言うその他のゲーム処理は、上記操作対象を制御する処理以外のゲーム処理のことであり、具体的には、上記ポインティング位置にカーソルを表示する処理や、カーソル位置に基づく処理(例えば、所定のボタンが押下されたことに応じて、カーソルによって選択された敵キャラクタに対してプレイヤキャラクタに攻撃を行わせる処理)や、ゲーム画像を生成してテレビ2に表示させる処理等が含まれる。なお、上記ステップS4の操作処理においてステップS26が実行された場合には、ステップS6において、ゲームを進行させるためのゲーム処理は実行されない。
続くステップS7において、CPU10は、ゲームを終了するか否かを判定する。ステップS7の判定は、例えば、ゲームがクリアされたりゲームオーバーとなったか否かや、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS7の判定結果が否定である場合、ステップS2の処理が再度実行される。以降、ステップS7でゲームを終了すると判定されるまで、ステップS2〜S7の処理が繰り返し実行される。一方、ステップS7の判定結果が肯定である場合、CPU10は、図15に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
以上のように、本実施形態によれば、ゲーム装置のメインメモリには、コントローラ5の姿勢に関する方向が所定の方向となったか否かを判別するための条件(図13に示す第1〜第3条件)が記憶され、加速度センサからの出力値(加速度ベクトル)に基づいて当該条件を満たすか否かが各条件について判別される(ステップS3)。そして、各条件のうちいずれかが満たされた場合、コントローラ5への操作入力に対する機能の割り当てが、当該満たされた条件毎に異なるように変更される。また、各条件のいずれもが満たされない場合、いずれかの条件が満たされた場合に割り当てられる機能とは異なる機能(プレイヤキャラクタを操作する機能)がコントローラ5への操作入力に対して割り当てられる。したがって、各条件のいずれも満たされず、コントローラ5の姿勢の方向について判別がつかない不定状態においても、コントローラ5を用いたゲーム操作を可能とする。これによって、不定状態のためにゲーム操作が行えなくなることを防止することができ、コントローラ5の操作性を向上することができる。
さらに、本実施形態によれば、各操作ボタン32a〜32hが設けられたボタン面が鉛直下方向を向いた状態、すなわち、コントローラ5のY軸正方向が鉛直下方向に向いた第3状態となる場合には、コントローラ5への操作が無効とされる(ステップS26)。したがって、プレイヤは、例えば休憩する場合等、ゲームを一時中断したい場合にコントローラ5を第3状態とすることによって、中断中にコントローラ5に対して誤操作が行われることを防止することができる。例えば、プレイヤが休憩中にボタン面を下にしてテーブル等にコントローラ5を置いた場合でも、操作ボタンがテーブルに当たって押下されてしまう誤操作を防止することができる。さらに、第3状態は、各操作ボタン32a〜32hが設けられたボタン面が鉛直下方向を向いた状態であるので、このような状態でコントローラ5が使用されることは通常考えにくい。したがって、通常のゲーム操作中には起こり得ない第3状態を「ゲーム操作を行えない状態」として用いることによって、ゲーム操作中にプレイヤの意図に反してゲーム操作が無効となることを防止することができ、コントローラ5の操作性を向上することができる。
なお、本実施形態では、コントローラ5が上記第3状態となった場合、コントローラ5に設けられる全てのボタン32a〜32iへの操作を無効としたが、他の実施形態においては、必ずしも全てのボタンへの操作を無効としなくてもよい。例えば、ホームボタン32fおよび電源ボタン32hはその上面がハウジング31の上面に埋没しているために誤操作されるおそれが少ないので、これらホームボタン32fおよび電源ボタン32hについては、コントローラ5が第3状態となった場合でも操作を可能としてもよい。
なお、本実施形態では、コントローラ5が第3状態となった場合にゲームの進行を一時停止するようにし(ステップS26)、その後にコントローラ5が第3状態から他の状態になった場合にゲームの進行が再開されるものとした。ここで、他の実施形態においては、ゲームの進行は、コントローラ5の所定のボタンが押下されたことを条件として再開されるようにしてもよい。これによれば、コントローラ5が第3状態から他の状態へと移行した時に急にゲームが再開されることを防止することができる。
また、本実施形態では、コントローラ5による操作対象を切り替えるための第1および第2条件として、コントローラ5の撮像手段(撮像素子40)の撮像方向(Z軸正方向)が鉛直方向を向く状態を判別するための条件を設定した。つまり、本実施形態では、撮像方向が略前方(マーカ部6の方向)を向く場合、コントローラ5の状態は不定状態となり、撮像方向が鉛直方向を向く状態、すなわち、撮像手段によってマーカ部6を撮像できない状態を第1および第2状態としている。なお、仮に、撮像方向がマーカ部6の方向を向く状態を判別するための条件を第1および第2条件として設定すると、プレイヤがカーソル53を操作するために撮像方向をマーカ部6の方へ向けてコントローラ5を動かしている際に、コントローラ5の状態が上記条件を満たしたり満たさなくなったりする。その結果、カーソル53の操作中に操作対象が切り替わってしまうことになるので、カーソル53の操作が行いにくくなる。そこで、本実施形態では、撮像方向が略前方を向く場合にはコントローラ5の状態が不定状態となるように第1および第2条件を設定している。これにより、カーソル53の操作中にコントローラ5の状態が他の状態へ移行し、操作対象が切り替わってしまうことを防止するようにし、カーソル53の操作を行いやすくしている。
なお、本実施形態のように、コントローラ5が撮像手段を備え、コントローラ5の撮像方向が水平方向(マーカ部6の方向)を向く状態を不定状態と判別するようにする場合には、不定状態以外の他の特定の状態を判別するための条件(第1〜第3条件)を、不定状態と判別される場合の条件に比べて厳しく設定することが好ましい。不定状態以外の他の特定の状態を判別するための条件を相対的に緩くすれば、カーソル53を操作している際に不定状態以外の状態であると判別される可能性が高くなるからである。具体的には、ゲーム装置3は、第1〜第3条件のそれぞれを満たすコントローラ5の姿勢に関する各範囲が、不定状態と判別されるコントローラ5の姿勢に関する範囲よりも狭くなるように(例えば、上記実施形態では、定数C2=0.8としている)、第1〜第3条件を設定してもよい。
なお、上記実施形態では、コントローラ5に設けられたボタンに割り当てられる機能をコントローラ5の向く方向(コントローラ5の姿勢)に応じて変更するようにした。ここで、本発明は、操作手段に割り当てられる機能を変更すればよく、操作手段は、ボタンに限らず、任意の方向に傾倒することによって方向を入力するスティック等であってもよい。
また、上記実施形態では、コントローラ5のZ軸が鉛直上方向または鉛直下方向を向くときのコントローラの向き、および、コントローラ5のY軸が鉛直下方向を向くときのコントローラの向きを判別するものとしたが、判別すべき(コントローラの)向きは上記に限らず、どの方向でもよい。例えば、上記第1〜第3条件と同様の方法で、コントローラ5のX軸が鉛直上方向または鉛直下方向を向くときのコントローラの向きや、コントローラ5のY軸が鉛直上方向を向くときのコントローラの向きを判別することも可能である。また、判別する向きは、加速度センサの検出軸が鉛直方向を向くときのコントローラ5の向きに限らず、加速度センサの検出軸が鉛直方向に対して斜めを向くときのコントローラ5の向きを検出してもよい。