仮想位置決定プログラム
【課題】 コントローラの位置を用いて仮想空間における仮想物体の位置を算出する仮想位置決定プログラムを提供する。
【解決手段】 ゲームコントローラは撮像部を備え、撮像画像自体または撮像画像に所定の演算を行った結果を操作情報として出力する。ゲームコントローラから得られた操作情報を用いて、ゲームコントローラと撮像対象との距離に関するデータが算出される。算出した距離に関するデータに応じて、仮想ゲーム世界に対する所定のゲーム処理が行われる。そして、ゲーム処理を行った後の仮想ゲーム世界を画像として表示装置に表示させる。
【解決手段】 ゲームコントローラは撮像部を備え、撮像画像自体または撮像画像に所定の演算を行った結果を操作情報として出力する。ゲームコントローラから得られた操作情報を用いて、ゲームコントローラと撮像対象との距離に関するデータが算出される。算出した距離に関するデータに応じて、仮想ゲーム世界に対する所定のゲーム処理が行われる。そして、ゲーム処理を行った後の仮想ゲーム世界を画像として表示装置に表示させる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想位置決定プログラムに関し、より特定的には、実空間における対象物の位置に基づいて仮想空間における仮想物体の位置を算出する仮想位置決定プログラムに関する。
【背景技術】
【0002】
従来、赤外線光源を標識として撮像し、その撮像結果を解析して照準位置を求める位置検出システムが開示されている(例えば、特許文献1参照)。
【0003】
特許文献1では、位置検出システムの実施例として撮像装置が取り付けられた銃をゲームコントローラとして狙い撃ちするゲームを開示している。撮像装置は、ブラウン管の4隅に配設された赤外線光源を撮像対象として、当該撮像対象が撮像された撮像画像上の位置に応じて銃がブラウン管に対して指し示している位置を検出する。そして、銃が指し示している位置を照準位置として仮想的な射撃ゲームが実行される。なお、特許文献1の第21段落に記載されているように、撮像装置と標的(標識)との距離を自由に変える場合、撮像装置に制御可能なズーム機能が備えられ、常に標識が最適な大きさで撮像されるようにズーム機能が制御されることによって、正確な照準位置が検出される。
【特許文献1】特開平11−305935号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、従来、入力装置の一例のゲームコントローラの実空間内での位置を操作入力に用いるという発想はなかった。特許文献1で開示された位置検出システムにおいては、銃がブラウン管に対して指し示している位置を入力として用いているが、そのような指示位置は、あくまで画面内の位置を指示するものであって、コントローラの実空間における位置を表すものではない。また、実空間内における撮像装置と標識との距離を得ることはできるが、当該距離は補正のために用いられるものに過ぎない。つまり、当該距離はコントローラの実空間での位置を表す値の一種であるが、当該距離は操作入力には用いられていない。
【0005】
ゲームコントローラと撮像対象との距離を操作入力に用いると、プレイヤが当該距離方向へゲームコントローラを動かすことのできる範囲は非常に大きくなる。したがって、入力の幅や変動が大きくなり、そのように大きく変動する値を仮想空間内での操作対象の位置に対応付けることは困難であった。また、プレイヤがどの位置で操作を行うかは状況によって異なり、距離の値にばらつきが出るため、適切な仮想位置を対応させることが困難であった。距離という1次元的な値に限らず、実空間での3次元的な位置を検出する場合にも、同様の問題が発生することは明らかである。以上のような問題点が存在することから、コントローラの実空間における位置自体を操作入力に用いるという発想は従来の操作入力には存在しなかった。
【0006】
それ故に、本発明の目的は、対象物の実空間における位置を用いて自由度の高い新規な操作を実現する仮想位置決定プログラムを提供することである。
【課題を解決するための手段】
【0007】
上記の目的を達成するために、本発明は以下の構成を採用した。
【0008】
第1の発明は、入力装置(7)から取得した入力情報(Da)に基づいて仮想空間に対する処理をコンピュータ(30)に実行させるプログラムであって、前記入力情報には所定の対象物の実空間内における位置の変化に応じて変化する対象データ(Da1、Da2)が含まれ、前記対象データを用いて、前記対象物の実空間内における位置を表す実位置データ(Db3)を算出する実位置データ算出ステップ(S52)と、第1の位置データを第1の境界、第2の位置データを第2の境界としてそれぞれ設定し、前記第1の境界から前記第2の境界の範囲として定義される有効範囲を設定する有効範囲設定ステップ(S63、S66)と、前記有効範囲における前記実位置データの値の位置を表す有効範囲位置データを算出する有効範囲位置データ算出ステップ(S95、S105、S130)と、前記有効範囲位置データの値に応じた演算によって前記仮想空間内の操作対象の位置を決定する位置決定ステップ(S67、S54)と、前記仮想空間を表示装置(2)に表示させる表示処理ステップ(S56)とを、前記コンピュータに実行させる、仮想位置決定プログラムである。
【0009】
第2の発明は、前記第1の発明において、前記実位置データの値が前記有効範囲外のとき、前記実位置データの値が有効範囲内に含まれるように、前記第1の境界および第2の境界を移動させ、更新する有効範囲更新ステップ(S91〜S94、S101〜S104、S121〜S129)をさらに前記コンピュータに実行させる。
【0010】
第3の発明は、前記第1の発明において、前記実位置データの値が前記有効範囲外のとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値になるように、前記第1の境界および前記第2の境界を移動させ、更新する有効範囲更新ステップ(S91〜S94)をさらに前記コンピュータに実行させる。
【0011】
第4の発明は、前記第1の発明において、前記実位置データの値が前記有効範囲外のとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値に所定の割合で近づくように、当該第1の境界および第2の境界を移動し、更新する第2有効範囲更新ステップ(S121〜S129)をさらに前記コンピュータに実行させる。
【0012】
第5の発明は、前記第1の発明において、前記有効範囲位置データ算出ステップは、前記実位置データの値が前記第1の境界に一致するとき前記有効範囲位置データが最大値となり、前記実位置データの値が前記第2の境界に一致するとき前記有効範囲位置データが最小値となるように前記有効範囲位置データを算出する。
【0013】
第6の発明は、前記第1の発明において、前記有効範囲設定ステップは、前記有効範囲の前後にそれぞれ所定長さで定義される遊び範囲をさらに設定するステップを含み、前記実位置データが前記有効範囲と前記遊び範囲とを合わせた範囲から逸脱する値をとるとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値に一致するように、当該第1の境界及び当該第2の境界の値を移動し、更新する有効範囲更新ステップ(S101〜S104)をさらに前記コンピュータに実行させる。
【0014】
第7の発明は、前記第1の発明において、第1の位置データと、前記第1の位置データから一方側に設定される第2の位置データと、前記第1の位置データから前記一方側の他方側に設定される前記第3の位置データと、前記第2の位置データから前記一方側に設定される第4の位置データとが設定され、第1の位置データから第3の位置データまで変動可能な位置データとして定義される上限境界と、第2の位置データから第4の位置データまで変動可能な位置データとして定義される下限境界とを設定し、変動可能な当該上限境界と下限境界との間の範囲として定義される有効範囲を設定する有効範囲設定ステップと、前記実位置データの値が前記上限境界/下限境界の変動可能な範囲内のとき、前記上限境界/下限境界を当該実位置データの値に所定の割合で近づくように更新し、前記下限境界/上限境界を前記第2の位置データ/第1の位置データに所定の割合で近づくように更新するステップと、前記実位置データの値が前記第1の位置データと第2の位置データとの間の範囲内のとき、前記上限境界/下限境界を前記第1の位置データ/第2の位置データに所定の割合で近づくように更新するステップと、前記実位置データの値が前記第3の位置データよりさらに前記他方側あるとき、前記第3の位置データの値が当該実位置データの値に所定の割合で近づくように前記第1の位置データ、第2の位置データ、第3の位置データ、第4の位置データ、および下限境界を移動させ、前記上限境界を移動後の第2の位置データに更新するステップと、前記実位置データの値が前記第4の位置データよりさらに前記一方側にあるとき、前記第4の位置データの値が前記実位置データの値に所定の割合で近づくように前記第1の位置データ、第2の位置データ、第3の位置データ、第4の位置データ、および上限境界を移動させ、前記下限境界を移動後の第4の位置データに更新するステップと(S121〜S129)を、さらに前記コンピュータに実行させる。
【0015】
第8の発明は、前記第7の発明または前記第7の発明のいずれかにおいて、前記有効範囲位置データ算出ステップは、前記実位置データの値が前記第1の位置データに一致するときまたは前記有効範囲を前記第1の位置データ側に逸脱するとき、前記有効範囲位置データが最大値となり、前記実位置データの値が前記第2の位置データに一致するときまたは前記有効範囲を前記第2の位置データ側に逸脱するとき、前記有効範囲位置データが最小値となるように前記有効範囲位置データを算出するステップ(S106)を含む。
【0016】
第9の発明は、入力装置(7)から入力される実空間における対象物の位置情報を含むデータ(Da)に基づいて、当該実空間を所定の座標系で表したときの当該対象物体の位置座標を算出し、当該位置座標に応じて仮想空間における仮想物体の仮想位置座標を算出するプログラムであって、前記実空間の所定の座標系における少なくとも第1座標及び第2座標によって定義される有効範囲を設定する有効範囲設定手段(S63、S66)、前記対象物の位置座標が前記有効範囲に含まれるとき、当該有効範囲を正規化し、当該正規化を行った場合の前記対象物の位置座標に対応する値を算出する正規化手段(S95、S105、S130)、および前記正規化手段によって算出された値に応じて、前記仮想位置座標を算出する算出手段(S67、S54)として、コンピュータ(30)を動作させる仮想位置決定プログラムである。
【0017】
第10の発明は、前記第9の発明において、前記対象物の位置座標が前記有効範囲に含まれないとき、前記第1座標及び前記第2座標を更新して、当該対象物の位置座標を含む位置座標にまで当該有効範囲を移動させる有効範囲移動手段(S91〜S94、S101〜S104、S121〜S129)としてさらに前記コンピュータを動作させる。
【発明の効果】
【0018】
上記第1の発明によれば、位置データの有効範囲を設定し、当該有効範囲における実位置データの値の位置を表す有効範囲位置データを算出し、当該有効範囲位置データの値に応じた演算によって仮想空間内の操作対象の位置を決定するため、対象物の実空間内における位置に応じた新規な感覚の仮想位置決定を行うことが可能となる。
【0019】
上記第2の発明によれば、実位置データの値が有効範囲外のとき、境界を移動させるため、対象物の可動位置を自由に設定でき、自由度が向上する。
【0020】
上記第3の発明によれば、実位置データの値が有効範囲外のとき、境界を移動させるため、対象物の可動位置を自由に設定でき、自由度が向上する。
【0021】
上記第4の発明によれば、実位置データの値が有効範囲外のとき、境界を移動させるため、対象物の可動位置を自由に設定でき、自由度が向上する。
【0022】
上記第5の発明によれば、実位置データの値が第1の境界に一致するとき有効範囲位置データが最大値となり、実位置データの値が第2の境界に一致するとき有効範囲位置データが最小値となるため、対象物の位置に応じた仮想空間内の操作対象の位置を直感的に制御することが可能となる。
【0023】
上記第6の発明によれば、有効範囲の前後に遊び範囲を設けるため、誤操作などによる突発的な有効範囲からの逸脱の影響を軽減することができる。
【0024】
上記第7の発明によれば、境界を移動させるため、対象物の可動位置を自由に設定でき、さらに、有効範囲の移動が徐々に行われるようになるため、誤操作などによる突発的な有効範囲からの逸脱の影響を軽減することができる。
【0025】
上記第8の発明によれば、実位置データの値が第1の位置データに一致するときまたは有効範囲を第1の位置データ側に逸脱するとき、有効範囲位置データが最大値となり、実位置データの値が第2の位置データに一致するときまたは有効範囲を第2の位置データ側に逸脱するとき、有効範囲位置データが最小値となるため、誤操作などによる突発的な有効範囲からの逸脱の影響を軽減させつつ、対象物の位置に応じた仮想空間内の操作対象の位置を直感的に制御することが可能となる。
【0026】
上記第9の発明によれば、位置座標の有効範囲を設定し、当該有効範囲を正規化した場合の対象物の位置座標に対応する値に応じた演算によって仮想位置座標を決定するため、対象物の実空間内における位置に応じた新規な感覚の仮想位置決定を行うことが可能となり、対象物の位置に応じた仮想空間内の操作対象の位置を直感的に制御することが可能となる。
【0027】
上記第10の発明によれば、位置座標が有効範囲外のとき、有効範囲を移動させるため、対象物の可動位置を自由に設定でき、自由度が向上する。
【発明を実施するための最良の形態】
【0028】
(第1の実施形態)
図1を参照して、本発明の第1の実施形態に係る仮想位置決定プログラムを実行するゲームシステム1について説明する。なお、図1は、当該ゲームシステム1を説明するための外観図である。以下、据置型ゲーム装置を一例にして、本発明のゲームシステム1について説明する。
【0029】
図1において、当該ゲームシステム1は、家庭用テレビジョン受像機等のスピーカ2aを備えたディスプレイ(以下、モニタと記載する)2に、接続コードを介して接続される据置型ゲーム装置(以下、単にゲーム装置と記載する)3および当該ゲーム装置3に操作情報を与えるコントローラ7によって構成される。ゲーム装置3は、接続端子を介して受信ユニット6が接続される。受信ユニット6は、コントローラ7から無線送信される送信データを受信し、コントローラ7とゲーム装置3とは無線通信によって接続される。また、ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。ゲーム装置3の上部主面には、当該ゲーム装置3の電源ON/OFFスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置3上部の蓋を開くOPENスイッチが設けられている。ここで、プレイヤがOPENスイッチを押下することによって上記蓋が開き、光ディスク4の脱着が可能となる。
【0030】
また、ゲーム装置3には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード5が必要に応じて着脱自在に装着される。ゲーム装置3は、光ディスク4に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ2に表示する。さらに、ゲーム装置3は、外部メモリカード5に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置3のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
【0031】
コントローラ7は、その内部に備える通信部75(後述)から受信ユニット6が接続されたゲーム装置3へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて送信データを無線送信する。コントローラ7は、主にモニタ2に表示されるゲーム空間に登場するプレイヤオブジェクトを操作するための操作手段である。コントローラ7は、複数の操作ボタン、キー、およびスティック等の操作部が設けられている。また、後述により明らかとなるが、コントローラ7は、当該コントローラ7から見た画像を撮像する撮像情報演算部74を備えている。また、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって赤外光を出力する。
【0032】
次に、図2を参照して、ゲーム装置3の構成について説明する。なお、図2は、ゲーム装置3の機能ブロック図である。
【0033】
図2において、ゲーム装置3は、各種プログラムを実行する例えばリスク(RISC)CPU(セントラルプロセッシングユニット)30を備える。CPU30は、図示しないブートROMに記憶された起動プログラムを実行し、メインメモリ33等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムの実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。CPU30には、メモリコントローラ31を介して、GPU(Graphics Processing Unit)32、メインメモリ33、DSP(Digital Signal Processor)34、およびARAM(Audio RAM)35が接続される。また、メモリコントローラ31には、所定のバスを介して、コントローラI/F(インターフェース)36、ビデオI/F37、外部メモリI/F38、オーディオI/F39、およびディスクI/F41が接続され、それぞれ受信ユニット6、モニタ2、外部メモリカード5、スピーカ2a、およびディスクドライブ40が接続されている。
【0034】
GPU32は、CPU30の命令に基づいて画像処理を行うものあり、例えば、3Dグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。GPU32は、図示しない画像処理専用のメモリやメインメモリ33の一部の記憶領域を用いて画像処理を行う。GPU32は、これらを用いてモニタ2に表示すべきゲーム画像データやムービ映像を生成し、適宜メモリコントローラ31およびビデオI/F37を介してモニタ2に出力する。
【0035】
メインメモリ33は、CPU30で使用される記憶領域であって、CPU30の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ33は、CPU30によって光ディスク4から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ33に記憶されたゲームプログラムや各種データ等がCPU30によって実行される。
【0036】
DSP34は、ゲームプログラム実行時にCPU30において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのARAM35が接続される。ARAM35は、DSP34が所定の処理(例えば、先読みしておいたゲームプログラムやサウンドデータの記憶)を行う際に用いられる。DSP34は、ARAM35に記憶されたサウンドデータを読み出し、メモリコントローラ31およびオーディオI/F39を介してモニタ2に備えるスピーカ2aに出力させる。
【0037】
メモリコントローラ31は、データ転送を統括的に制御するものであり、上述した各種I/Fが接続される。コントローラI/F36は、例えば4つのコントローラI/F36a〜36dで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置3とを通信可能に接続する。例えば、受信ユニット6は、上記コネクタと嵌合し、コントローラI/F36を介してゲーム装置3と接続される。上述したように受信ユニット6は、コントローラ7からの送信データを受信し、コントローラI/F36を介して当該送信データをCPU30へ出力する。ビデオI/F37には、モニタ2が接続される。外部メモリI/F38には、外部メモリカード5が接続され、その外部メモリカード5に設けられたバックアップメモリ等とアクセス可能となる。オーディオI/F39にはモニタ2に内蔵されるスピーカ2aが接続され、DSP34がARAM35から読み出したサウンドデータやディスクドライブ40から直接出力されるサウンドデータをスピーカ2aから出力可能に接続される。ディスクI/F41には、ディスクドライブ40が接続される。ディスクドライブ40は、所定の読み出し位置に配置された光ディスク4に記憶されたデータを読み出し、ゲーム装置3のバスやオーディオI/F39に出力する。
【0038】
図3および図4を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の上面後方から見た斜視図である。図4は、コントローラ7を下面後方から見た斜視図である。
【0039】
図3および図4において、コントローラ7は、例えばプラスチック成型によって形成されたハウジング71を有しており、当該ハウジング71に複数の操作部72が設けられている。ハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【0040】
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、矢印で示す4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
【0041】
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、リング状に4方向の操作部分を備えたプッシュスイッチとその中央に設けられたセンタスイッチとを複合した複合スイッチを上記十字キー72aの代わりに設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー72aの代わりに設けてもかまわない。また、少なくとも4つの方向(前後左右)をそれぞれ示すスイッチに対して、プレイヤによって押下されたスイッチに応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。
【0042】
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、Xボタン、Yボタン、およびBボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、セレクトスイッチ、メニュースイッチ、およびスタートスイッチ等としての機能が割り当てられる。これら操作ボタン72b〜72gは、ゲーム装置3が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。なお、図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0043】
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置3本体の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0044】
また、ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ7から受信ユニット6へ送信データを送信する際、上記コントローラ種別に応じて複数のLED702のうち、種別に対応するLEDが点灯する。
【0045】
一方、ハウジング71下面には、凹部が形成されている。後述で明らかとなるが、ハウジング71下面の凹部は、プレイヤがコントローラ7を把持したときに当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の後面側傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばAボタンとして機能する操作部であり、シューティングゲームにおけるトリガスイッチや、プレイヤオブジェクトを所定オブジェクトに対して注目させる操作等に用いられる。
【0046】
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング70の後面には、コネクタ73が設けられている。コネクタ73は、例えば32ピンのエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【0047】
次に、図5を参照して、コントローラ7の内部構造について説明する。なお、図5(a)は、コントローラ7の上筐体(ハウジング71の一部)を外した状態を示す斜視図である。図5(b)は、コントローラ7の下筐体(ハウジング71の一部)を外した状態を示す斜視図である。ここで、図5(b)に示す基板700は、図5(a)に示す基板700の裏面から見た斜視図となっている。
【0048】
図5(a)において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、水晶振動子703、無線モジュール753、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイコン751(図6参照)に接続される。また、無線モジュール753およびアンテナ754によって、コントローラ7がワイヤレスコントローラとして機能する。なお、水晶振動子703は、後述するマイコン751の基本クロックを生成する。
【0049】
一方、図5(b)において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。そして、操作ボタン72iが撮像情報演算部74の後方の基板700の下主面上に取り付けられていて、それよりさらに後方に、電池705が収容される。電池705とコネクタ73との間の基板700の下主面上には、バイブレータ704が取り付けられる。このバイブレータ704は、例えば振動モータやソレノイドであってよい。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。
【0050】
次に、図6を参照して、コントローラ7の内部構成について説明する。なお、図6は、コントローラ7の構成を示すブロック図である。
【0051】
図6において、コントローラ7は、上述した操作部72および撮像情報演算部74の他に、その内部に通信部75および加速度センサ701を備えている。
【0052】
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コントローラ7の前方から入射する光から赤外線のみを通過させる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ出射する。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。撮像素子743で生成された画像データは、画像処理回路744で処理される。具体的には、画像処理回路744は、撮像素子743から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部75へ出力する。なお、これらの撮像情報演算部74は、コントローラ7のハウジング71に固設されており、ハウジング71自体の方向を変えることによってその撮像方向を変更することができる。後述により明らかとなるが、この撮像情報演算部74から出力される処理結果データに基づいて、コントローラ7の位置や動きに応じた信号を得ることができる。
【0053】
加速度センサ701は、コントローラ7の上下方向、左右方向、および前後方向の3軸でそれぞれ加速度を検知する加速度センサである。なお、加速度センサ701は、必要な操作信号の種類によっては、上下方向および左右方向の2軸でそれぞれ加速度を検出する加速度センサが用いられてもかまわない。加速度センサ701が検知した加速度を示すデータは、通信部75へ出力される。なお、加速度センサ701は、典型的には静電容量式の加速度センサが用いられるが、他の方式の加速度センサやジャイロセンサを用いてもかまわない。この加速度センサ701から出力される加速度データに基づいて、コントローラ7の動きを検出することができる。
【0054】
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。
【0055】
コントローラ7に設けられた操作部72からの操作信号(キーデータ)、加速度センサ701からの加速度信号(加速度データ)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、加速度データ、処理結果データ)を受信ユニット6へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から受信ユニット6への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、受信ユニット6への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて、所定周波数の搬送波を用いて操作情報をその電波信号としてアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からの加速度データ、および撮像情報演算部74からの処理結果データがコントローラ7から送信される。そして、ゲーム装置3の受信ユニット6でその電波信号を受信し、ゲーム装置3で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、加速度データ、および処理結果データ)を取得する。そして、ゲーム装置3のCPU30は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Bluetooth(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【0056】
図7に示すように、ゲームシステム1でコントローラ7を用いてゲームをプレイするためには、プレイヤは、一方の手(例えば右手)でコントローラ7を把持する(図8および図9参照)。そして、プレイヤは、コントローラ7の前面(撮像情報演算部74が撮像する光の入射口側)がモニタ2に向くようにコントローラ7を把持する。一方、モニタ2の表示画面近傍には、2つのマーカ8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって赤外光を出力し、撮像情報演算部74の撮像対象となる。
【0057】
プレイヤがその前面がモニタ2に向くようにコントローラ7を把持することによって、撮像情報演算部74には2つのマーカ8Lおよび8Rが出力した赤外光が入射する。そして、赤外線フィルタ741およびレンズ742を介して、入射した赤外光を撮像素子743が撮像し、当該撮像画像を画像処理回路744が処理する。ここで、撮像情報演算部74では、マーカ8Lおよび8Rから出力される赤外線成分を検出することで、上記撮像画像における当該マーカ8Lおよび8Rの位置(対象画像の位置)や面積情報を取得する。具体的には、画像処理回路744は、撮像素子743が撮像した画像データを解析して、まず面積情報からマーカ8Lおよび8Rからの赤外光ではあり得ない画像を除外し、さらに輝度が高い点をマーカ8Lおよび8Rそれぞれの位置として判別する。そして、撮像情報演算部74は、判別されたそれらの輝点の重心位置等の位置情報を取得し、上記処理結果データとして出力する。ここで、上記処理結果データである位置情報は、撮像画像における所定の基準点(例えば、撮像画像の中央や左上隅)を原点とした座標値として出力するものでもよく、所定のタイミングにおける輝点位置を基準点として、当該基準位置からの現在の輝点位置の差をベクトルとして出力するものでもよい。つまり、上記対象画像の位置情報は、撮像素子743が撮像した撮像画像に対して所定の基準点を設定した場合に、当該基準点に対する差として用いられるパラメータである。このような処理結果データをゲーム装置3へ送信することによって、ゲーム装置3では、基準からの上記位置情報の差に基づいて、マーカ8Lおよび8Rに対する撮像情報演算部74、すなわちコントローラ7の動き、姿勢、位置等に応じた信号の変化量を得ることができる。具体的には、コントローラ7が動かされることによって、通信部75から送信される画像内の高輝度点の位置が変化するため、高輝度点の位置の変化に対応させた方向入力や座標入力を行うことで、3次元空間に対してコントローラ7の移動方向に沿った方向入力や座標入力を行うことができる。なお、後述するゲーム処理動作例では、撮像情報演算部74が撮像画像におけるマーカ8Lおよび8Rの対象画像それぞれの重心位置の座標を取得し、上記処理結果データとして出力する例を用いる。
【0058】
このように、コントローラ7の撮像情報演算部74によって、固定的に設置されたマーカ(実施例では、2つのマーカ8Lおよび8Rからの赤外光)を撮像することによって、ゲーム装置3におけるゲーム処理において、コントローラ7から出力されるデータを処理してコントローラ7の動き、姿勢、位置等に対応した操作が可能となり、ボタンを押下するような操作ボタンや操作キーとは異なった直感的な操作入力となる。また、上述したように上記マーカは、モニタ2の表示画面近傍に設置されているため、マーカに対する位置をモニタ2の表示画面に対するコントローラ7の動き、姿勢、位置等に換算することも容易に行うことができる。つまり、コントローラ7の動き、姿勢、位置等による処理結果データは、モニタ2の表示画面に直接作用する操作入力として用いることができる。なお、ゲームシステム1では、マーカ8Lおよび8Rを撮像した撮像画像を用いて、マーカ8Lおよび8Rからコントローラ7までの距離もモニタ2の表示画面に直接作用する操作入力として用いることができるが、詳細な動作については後述する。
【0059】
図8および図9を参照して、プレイヤがコントローラ7を一方の手で把持した状態について説明する。なお、図8は、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の前面側から見た一例である。図9は、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の左側面側から見た一例である。
【0060】
図8および図9に示すように、コントローラ7は、全体として大人や子供の片手で把持可能な大きさである。そして、プレイヤの親指をコントローラ7の上面(例えば、十字キー72a付近)に添え、プレイヤの人差し指をコントローラ7下面の凹部(例えば、操作ボタン72i付近)に添えたとき、コントローラ7の前面に設けられている撮像情報演算部74の光入射口がプレイヤの前方方向に露出する。なお、このようなコントローラ7に対する把持状態は、プレイヤの左手であっても同様に行えることは言うまでもない。
【0061】
このように、コントローラ7は、プレイヤが片手で把持した状態で十字キー72aや操作ボタン72i等の操作部72を容易に操作することができる。さらに、プレイヤがコントローラ7を片手で把持したとき、当該コントローラ7の前面に設けられている撮像情報演算部74の光入射口が露出するため、上述した2つのマーカ8Lおよび8Rからの赤外光を容易に当該光入射口から取り入れることができる。つまり、プレイヤは、コントローラ7が有する撮像情報演算部74の機能を阻害することなくコントローラ7を片手で把持することができる。したがって、プレイヤがコントローラ7を把持した手を表示画面に対して動かすことによって、コントローラ7は、プレイヤの手の運動が表示画面に直接作用する操作入力機能をさらに備えることができる。
【0062】
ここで、図10に示すように、マーカ8Lおよび8Rは、それぞれ視野角θ1を有している。また、撮像素子743は、視野角θ2を有している。例えば、マーカ8Lおよび8Rの視野角θ1は共に34°(半値角)であり、撮像素子743の視野角θ2は41°である。そして、撮像素子743の視野角θ2の中にマーカ8Lおよび8Rが共に存在し、マーカ8Lの視野角θ1の中でかつマーカ8Rの視野角θ1の中に撮像素子743が存在するとき、ゲーム装置3は、2つのマーカ8Lおよび8Rによる高輝度点に関する位置データを用いてコントローラ7の位置(マーカ8Lおよび8Rからの距離を含む)を検出する。
【0063】
次に、ゲームシステム1において行われるゲーム処理の詳細を説明する。まず、図11を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図11は、ゲーム装置3のメインメモリ33に記憶される主なデータを示す図である。
【0064】
図11に示すように、メインメモリ33には、操作情報Da、操作状態情報Db、および操作対象情報Dc等が記憶される。なお、メインメモリ33には、図11に示す情報に含まれるデータの他、ゲームに登場するプレイヤキャラクタに関するデータ(プレイヤキャラクタの画像データや位置データ等)やゲーム空間に関するデータ(地形データ等)等、ゲーム処理に必要なデータが記憶される。
【0065】
操作情報Daは、コントローラ7から送信データとして送信されてくる一連の操作情報であり、最新の操作情報に更新される。操作情報Daには、上述の処理結果データに相当する第1座標データDa1および第2座標データDa2が含まれる。第1座標データDa1は、撮像素子743が撮像した撮像画像に対して、2つのマーカ8Lおよび8Rのうちの一方の画像の位置(撮像画像内における位置)を表す座標のデータである。第2座標データDa2は、他方のマーカの画像の位置(撮像画像内における位置)を表す座標のデータである。例えば、マーカの画像の位置は、撮像画像におけるXY座標系によって表される。
【0066】
また、操作情報Daには、撮像画像から得られる処理結果データの一例の座標データ(第1座標データDa1および第2座標データDa2)の他、操作部72から得られるキーデータDa3および加速度センサ701から得られる加速度データDa4等が含まれる。なお、ゲーム装置3に備える受信ユニット6は、コントローラ7から所定間隔例えば5msごとに送信される操作情報Daを受信し、受信ユニット6に備える図示しないバッファに蓄えられる。その後、ゲーム処理間隔である例えば1フレーム毎(1/60秒)に読み出され、その最新の情報がメインメモリ33に記憶される。
【0067】
操作状態情報Dbは、コントローラ7の操作状態を撮像画像に基づいて判断した情報である。操作状態情報Dbは、撮像画像に含まれる対象画像(マーカ)の位置や向きから得られるデータであり、具体的には、方向データDb1、中点データDb2、距離データDb3、有効範囲データDb4、および前後位置パラメータDb5等を含む。方向データDb1は、第1座標データDa1から第2座標データDa2への方向を示すデータである。ここでは、方向データDb1は、第1座標データDa1の位置を始点とし第2座標データDa2の位置を終点とするベクトルのデータとする。中点データDb2は、第1座標データDa1と第2座標データDa2との中点の座標を示す。ここで、2つのマーカ(マーカ8Lおよび8R)の画像を1つの対象画像としてみた場合、中点データDb2は、対象画像の位置を示すことになる。距離データDb3は、第1座標データDa1および第2座標データDa2に基づいて算出された、マーカ8Lおよび8Rからコントローラ7までの距離dを示すデータである。有効範囲データDb4は、ゲーム処理に用いるパラメータを得るために距離dに応じて設定される後述の有効範囲を示すデータであり、有効範囲の長さ(range)や有効範囲の両端(min、max)や伸長長さ(a1、a2)を示すデータで構成される。前後位置パラメータDb5は、上記有効範囲に対するコントローラ7の位置(すなわち、距離d)に応じて算出されるパラメータrであり、例えば3次元仮想ゲーム空間の奥行を示すパラメータ等としてゲーム処理に用いられる。
【0068】
操作対象情報Dcは、画面上またはゲーム空間内における操作対象の姿勢および位置や指示位置を示す情報である。ここで、操作対象とは、画面に表示されているオブジェクトや、仮想ゲーム空間に登場するオブジェクトの他、3次元の仮想ゲーム空間が構築される場合には、当該仮想ゲーム空間を画面に表示するための仮想カメラであってもよい。また、操作対象情報Dcには、姿勢データDc1、対象位置データDc2、指示位置データDc3、および奥行位置データDc4が含まれる。姿勢データDc1は、操作対象の姿勢を示すデータである。対象位置データDc2は、操作対象のゲーム空間における位置、または、画面上における位置を示すデータである。指示位置データDc3は、第1座標データDa1および第2座標データDa2から得られるコントローラ7によって指し示されるモニタ2の画面上の位置や3次元仮想ゲーム空間の縦横位置を示すデータである。奥行位置データDc4は、前後位置パラメータDb5から得られる3次元仮想ゲーム空間の奥行位置を示すデータである。
【0069】
次に、図12〜図19を参照して、ゲーム装置3において行われるゲーム処理の詳細を説明する。なお、図12は、ゲーム装置3において実行されるゲーム処理の流れを示すフローチャートである。図13は、図12におけるステップ52の操作状態情報、指示位置データ、および奥行位置データ算出処理の詳細な動作を示すサブルーチンである。図14は、図13におけるステップ62およびステップ65の距離d算出処理の詳細な動作を示すサブルーチンである。図15は、図13におけるステップ66の前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチンである。図16は、距離dを算出する動作を説明するための図である。図17は、図13に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図である。図18および図19は、前後位置パラメータrと3次元ゲーム空間に設定される奥行位置データzとの関係を示す図である。なお、図12〜図15に示すフローチャートにおいては、ゲーム処理のうち、コントローラ7に関するゲーム操作に基づいて行われるゲーム処理について説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図12〜図15では、CPU30が実行する各ステップを「S」と略称する。
【0070】
ゲーム装置3の電源が投入されると、ゲーム装置3のCPU30は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ33等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリ33に読み込まれ、CPU30によって当該ゲームプログラムの実行が開始される。図12〜図15に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【0071】
図12において、CPU30は、コントローラ7から受信した操作情報を取得し(ステップ51)、処理を次のステップに進める。そして、CPU30は、操作情報を操作情報Daとしてメインメモリ33に記憶する。ここで、ステップ51で取得される操作情報には、マーカ8Lおよび8Rの撮像画像内における位置を示す座標データ(第1座標データDa1および第2座標データDa2)の他、コントローラ7の操作部72がどのように操作されたか示すデータ(キーデータDa3)、および加速度センサ701が検出した加速度を示すデータ(加速度データDa4)が含まれている。ここでは、通信部75は、所定の時間間隔(例えば5ms間隔)で操作情報をゲーム装置3へ送信する。そして、CPU30は、1フレーム毎に操作情報を利用するものとする。したがって、図12に示すステップ51〜ステップ57の処理ループは、1フレーム毎に繰り返し実行される。
【0072】
次に、CPU30は、操作状態情報、指示位置データ、および奥行位置データを算出し(ステップ52)、処理を次のステップに進める。操作状態情報、指示位置データ、および奥行位置データの算出処理においては、コントローラ7から送信され記憶された第1座標データDa1および第2座標データDa2に基づいて、コントローラ7の操作状態(コントローラ7の動き、位置、姿勢等)が算出される。以下、図13を参照して、ステップ52における詳細な動作について説明する。
【0073】
図13において、CPU30は、初期設定を行うか否かを判断する(ステップ61)。例えば、CPU30は、既に有効範囲が設定されている場合に初期設定済と判断して(ステップ61でNo)、処理を次のステップ64に進める。一方、CPU30は、有効範囲が未設定の場合や第1座標データDa1および第2座標データDa2が一度途切れて再設定された(つまり、撮像素子743の撮像範囲にマーカ8Lおよび8Rが含まれる状態から一度マーカ8Lおよび8Rが撮像範囲から外れて、再度撮像範囲にマーカ8Lおよび8Rが含まれる状態となった)場合に初期設定要と判断して(ステップ61でYes)、処理を次のステップ62に進める。
【0074】
ステップ62において、CPU30は、第1座標データDa1および第2座標データDa2を用いて距離dを算出して距離データDb3としてメインメモリ33に格納する。以下、図14および図16を参照して、距離dの算出処理の詳細な動作について説明する。
【0075】
図14および図16において、CPU30は、撮像画像内での2点間の距離mi(図16参照)を算出する(ステップ81)。ここで、上記2点は、マーカ8Lおよび8Rを撮像した画像に相当し、それぞれの座標を第1座標データDa1および第2座標データDa2として得ている。したがって、CPU30は、第1座標データDa1および第2座標データDa2を用いれば、距離miを算出することができる。
【0076】
次に、CPU30は、マーカ8Lおよび8Rの設置位置に対する撮像素子743の撮像可能範囲の幅w(図16参照)を算出する(ステップ82)。ここで、幅wは、
w=wi×m/mi
で算出される。ここで、mは、マーカ8Lおよび8Rの設置間隔(例えば、30cm)であり、固定値である。また、wiは、幅wに対応する撮像素子743の撮像画像の幅wiであり、固定値である。これら設置間隔mおよび幅wiは、いずれも固定値であるため、予めゲーム装置3内の記憶手段(図示せず)に格納される。なお、設置間隔mについては、プレイヤの設置環境に応じて任意の間隔でマーカ8Lおよび8Rを設置してもかまわない。この場合、マーカ8Lおよび8Rを設置した間隔を設置間隔mとしてプレイヤが入力するようにすれば、上記数式を同様に扱うことができる。
【0077】
次に、CPU30は、幅wおよび撮像素子743の視野角θを用いて、マーカ8Lおよび8Rと撮像素子743(コントローラ7)との距離dを算出し(ステップ83;図16参照)、当該サブルーチンによる処理を終了する。ここで、距離dは、
tan(θ/2)=(w/2)/d=w/2d
の関係式から算出することができる。ここで、視野角θは固定値であるため、予めゲーム装置3内の記憶手段(図示せず)に格納される。
【0078】
図13に戻り、ステップ62における距離dの算出処理の後、CPU30は、距離dに応じた有効範囲を設定し(ステップ63)、処理を次のステップ64に進める。後述により明らかとなるが、有効範囲は、その長さrange、前端位置min、および後端位置maxによって設定される範囲である。例えば、CPU30は、ステップ62で得られた距離dが有効範囲の中央位置、前端位置min、または後端位置maxとなるように有効範囲を設定する。
【0079】
ステップ64において、CPU30は、第1座標データDa1から第2座標データDa2への方向データDb1を算出する。具体的には、CPU30は、第1座標データDa1および第2座標データDa2を参照して、第1座標データDa1の位置を始点とし第2座標データDa2の位置を終点とするベクトルを算出する。そして、CPU30は、算出されたベクトルのデータを、方向データDb1としてメインメモリ33に記憶する。方向データDb1と所定の基準方向との差によって、コントローラ7の撮像面に垂直な方向を軸とする回転を算出することができる。
【0080】
また、CPU30は、第1座標データDa1と第2座標データDa2との中点を示す中点データDb2を算出する。具体的には、CPU30は、第1座標データDa1および第2座標データDa2を参照して、当該中点の座標を算出する。そして、CPU30は、算出された中点の座標のデータを、中点データDb2としてメインメモリ33に記憶する。ここで、中点データDb2は、撮像画像内における対象画像(マーカ8Lおよび8R)の位置を示している。中点データDb2と所定の基準位置との差によって、コントローラ7の位置の変化による画像位置の変化を算出することができる。
【0081】
次に、CPU30は、第1座標データDa1および第2座標データDa2を用いて距離dを算出して距離データDb3としてメインメモリ33に格納し(ステップ65)、処理を次のステップに進める。この距離dの算出処理は、図14および図16を参照して説明した距離dの算出処理の詳細な動作と同様であるため、ここでは詳細な説明を省略する。
【0082】
次に、CPU30は、前後位置パラメータrの算出および有効範囲を再設定する処理を行い(ステップ66)、処理を次のステップに進める。以下、図15および図17を参照して、前後位置パラメータ算出および有効範囲再設定処理の詳細な動作について説明する。
【0083】
まず、有効範囲について説明する。ここで、有効範囲とは、ある基準に対するコントローラ7の位置として決定される範囲である。そして、この有効範囲を基準としたコントローラの7位置に応じた値がゲームプログラムに与えられ、ゲーム処理に利用される。本実施例では、コントローラ7の位置を表す値として、マーカ8Lおよび8Rからコントローラ7の先端までの距離dを用いる。したがって、距離dに対して有効範囲が設定され、その有効範囲の下限を0、上限を1とし、当該コントローラ7の位置に応じた値として、この有効範囲におけるコントローラ7の位置に応じた0から+1の間の値が選ばれる。例えば、有効範囲の幅として、プレイヤが把持したコントローラ7をその場で無理なく振れる幅、例えば10cm〜40cm程度が予め決められている。例えば、有効範囲の幅が30cmであり、マーカ8Lおよび8Rからコントローラ7の初期位置までの距離が1m15cmであるときには、有効範囲は例えばマーカ8Lおよび8Rからの距離で1m〜1m30cmの範囲に設定される。そして、距離1m15cmの位置に応じた値である0.5という値がゲーム処理に利用される。なお、この説明では、コントローラ7の位置を中心に有効範囲を設定するが、これに限られずコントローラ7の初期位置を含むように有効範囲を設定すればよい。
【0084】
以下、図17を参照して説明する。まず、図17(a)は、プレイヤUがマーカ8Lおよび8Rに対して前後にコントローラ7を動かした場合を示す図である、図17(a)における符号dは、マーカ8Lおよび8Rからコントローラ7を向いた方向の距離を示し、符号d1、d2、d3、d4、およびd5は、マーカ8Lおよび8Rからコントローラ7の先端までの距離を示す。また、図17(b)は、有効範囲とコントローラ7との位置関係およびそのときゲーム処理に利用される値(前後位置パラメータ)rの出し方を示す図である。有効範囲の幅(長さ)をrange、前端位置(マーカ8Lおよび8Rから最も近い有効範囲の端までの距離)をmin、後端位置(マーカ8Lおよび8Rから最も遠い有効範囲の端までの距離)をmaxとして示しており、range=max−minとなる。本実施形態では、上述した有効範囲を基準として、コントローラ7(厳密には、撮像素子743)が当該有効範囲の前端位置minに配置されたとき、前後位置パラメータr=0が算出されるように設定される。また、コントローラ7が有効範囲の後端位置maxに配置されたとき、前後位置パラメータr=1が算出されるように設定される。そして、コントローラ7が有効範囲の前端位置minと後端位置maxとの間に配置されたとき、その配置位置に応じて前後位置パラメータrが0〜1の間で算出されるように設定される。また、コントローラ7を把持したプレイヤが当該コントローラ7を有効範囲の前後に逸脱する位置まで動かしたとき、そのコントローラ7の移動位置が前端位置minまたは後端位置maxとなるように即時に有効範囲が移動する。
【0085】
具体的には、図17(a)の状態Aに示すように、コントローラ7が距離d3にあり、その有効範囲が距離d2から距離d4に設定されている場合に、距離d2を0で距離d4を1とした有効範囲における距離d3の位置に応じた値rとして例えば1/3(0.33)が求められ、その値rがゲーム処理に利用される。また、状態Bに示すように、コントローラ7を距離d3の位置から距離d2の位置にまで移動させると、その移動に伴って0.33〜0までの値rが求められる。そして、状態Cに示すように、さらにコントローラ7が移動され距離d1の位置にまで移動させる際には、そのコントローラ7の移動とともに有効範囲が移動し、このときの値rは0のままである。その後、状態Dに示すように、コントローラ7の位置が距離d1から距離d2にまで移動されると、有効範囲はそのままでその有効範囲におけるコントローラ7の位置に応じた値rとして例えば1/3(0.33)が求められる。
【0086】
以下、図15を参照して、このような前後位置パラメータrの算出および有効範囲の再設定を可能する動作を説明する。図15において、CPU30は、上記ステップ65で算出した距離dが前端位置minより短いか否か(ステップ91)、および距離dが後端位置maxより長いか否か(ステップ92)を判断する。そして、CPU30は、距離dが前端位置minより短い場合(図17(a)の状態B→状態Cへの変化)、処理を次のステップ93に進める。また、CPU30は、距離dが後端位置maxより長い場合、処理を次のステップ94に進める。一方、CPU30は、距離dが有効範囲内(つまり、距離dが前端位置min以上で後端位置max以下)の場合(図17(a)の状態Aや状態D)、有効範囲をそのままにして処理を次のステップ95に進める。
【0087】
ステップ93において、CPU30は、有効範囲の前方に逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ95に進める。具体的には、CPU30は、有効範囲の前端位置minを現在の距離dに変更し、後端位置maxを現在の距離d+長さrangeに変更して、それぞれメインメモリ33に格納する。また、ステップ94において、CPU30は、有効範囲の後方に逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ95に進める。具体的には、CPU30は、有効範囲の後端位置maxを現在の距離dに変更し、前端位置minを現在の距離d−長さrangeに変更して、それぞれメインメモリ33に格納する。これらステップ93およびステップ94の処理によって、プレイヤがコントローラ7を有効範囲の前後に逸脱する位置まで動かしたとき、そのコントローラ7の移動位置が即時に前端位置minまたは後端位置maxとなるように有効範囲が移動する。
【0088】
ステップ95において、CPU30は、距離dおよび有効範囲に応じて前後位置パラメータrを算出する処理を行い、当該サブルーチンによる処理を終了する。具体的には、CPU30は、前後位置パラメータrを
r=(d−min)/range
で算出(正規化)する。このステップ95の処理によって、有効範囲およびコントローラ7の配置位置に応じて、前後位置パラメータrが0〜1の間で算出される。
【0089】
図13に戻り、ステップ66における前後位置パラメータ算出および有効範囲再設定処理の後、CPU30は、前後位置パラメータrに応じて奥行位置データzを設定し(ステップ67)、処理を次のステップに進める。奥行位置データzは、ゲーム空間内の奥行方向の座標を算出するための値であり、奥行位置データDc4としてメインメモリ33に格納される。
【0090】
奥行位置データzは、例えば図18および図19に示すように、3次元仮想空間を用いるゲームにおける仮想カメラのカメラ座標系におけるz座標の値を増減させて、プレイヤキャラクタPを移動させる場合には、カメラ座標系におけるz座標の値を奥行位置データzとする。当該z座標には所定の範囲が設定され、当該範囲を基準として、前後位置パラメータrの値に対応して、z座標の値が設定される。カメラ座標系のz座標の他に、x座標およびy座標が設定されれば、所定の変換関数によって、プレイヤキャラクタPのワールド座標系における座標が決定され、後述の処理によって対象位置データDc2としてメインメモリ33に格納される。x座標およびy座標は、予め設定された固定値であってもよいし、後述の処理によって操作入力から算出されるものであってもよい。図18に示す例は、x座標およびy座標の値が奥行方向の移動とは独立の値をとるものであって、x座標およびy座標の値を変化させずに奥行位置データzに応じてプレイヤキャラクタPをゲーム空間内で移動させた場合、プレイヤキャラクタPは、仮想カメラCの視線方向に対して平行に移動することになる。図19に示す例は、奥行方向の移動を行った場合にも画面上の同じ位置にプレイヤキャラクタPを表示させるように、z座標の値に応じてx座標およびy座標の値を変化させるものである。
【0091】
また、例えばカメラ座標系とワールド座標系との軸方向が同一方向に設定されている場合には、当該ワールド座標系におけるz座標の値を奥行位置データzとして全体の処理を行ってもよい。当該z座標には所定の範囲が設定され、当該範囲を基準として、前後位置パラメータrの値に対応して、z座標の値が設定される。この場合当該奥行位置データzをそのまま対象位置データDc2のz成分とすればよく、座標変換の処理コストが必要ない。このように、移動方向に沿った軸が存在していれば、ワールド座標系やカメラ座標系における何れかの座標成分を奥行位置データzとして設定する処理を行えばよい。
【0092】
移動方向に沿った軸が設定されていない場合には、奥行位置データzを奥行方向に対応した所定のパラメータとして全体の処理を行ってもよい。ワールド座標系内に奥行方向の成分を含む移動方向に沿って所定の範囲が設定され、当該範囲内での位置を表すパラメータとして奥行位置データzが設定され、所定の関数によって対象位置データDc2が算出される。したがって、この場合には奥行位置データzは前後位置パラメータr自体であってもよい。
【0093】
次に、CPU30は、指示位置データを算出し(ステップ68)、当該サブルーチンによる処理を終了する。CPU30は、上記ステップ64で算出した方向データDb1および中点データDb2を用いて、指示位置データDc3を算出し、メインメモリ33に格納する。
【0094】
例えば、モニタ2の上面に2つのマーカ8Lおよび8Rを設置し(図7参照)、上面が上方向を向いたコントローラ7を用いてプレイヤがモニタ2の画面の中央を指し示した場合(撮像情報演算部74の撮像画像の中央に画面中央が撮像されている状態)を考える。このとき、撮像情報演算部74の撮像画像において、対象画像の中点(マーカ8Lおよび8Rの中点)位置と指示位置(画面中央)とが一致しない。具体的には、上記撮像画像における対象画像の位置は撮像画像の中心から上方の位置となる。このような位置に対象画像が位置する場合に、画面中央を指示するという基準位置の設定がなされていれば、コントローラ7の移動に対応して、撮像画像中の対象画像の位置も移動する(移動方向は逆方向となる)ので、撮像画像中の対象画像の位置の移動に対応させて画面内の指示位置を移動させる処理を行い、コントローラ7の移動方向に対応した画面内の位置を指示することができる。ここで、基準位置の設定は、予めプレイヤが画面の所定位置を支持し、そのときの対象画像の位置を基準となる指示位置と対応させて記憶しておくようにしてもよいし、対象画像と画面との位置関係が固定的であれば、予め設定されていても良い。このような指示位置は、中点データDb2からモニタ2の画面上の座標(指示位置データDc3)を算出する関数を用いて算出される。この関数は、ある撮像画像から算出される中点座標の値を、当該撮像画像が撮像される時のコントローラ7によって指し示される画面上の位置(指示位置)を表す座標に変換するものである。この関数によって、中点座標から画面上の指示位置を算出することができる。なお、中点座標をゲーム空間内における位置を表す座標に変換する場合には、上記関数によって算出される画面上の位置を、当該画面上における位置に対応するゲーム空間内における位置にさらに変換すればよい。なお、画面上における位置に対応するゲーム空間内における位置とは、画面上における位置に表示されるゲーム空間内における位置や指示位置データDc3および奥行位置データDc4によって指定されるゲーム空間の3次元座標値等である。
【0095】
しかしながら、上面が上方向以外(例えば、右方向)を向いたコントローラ7を用いてプレイヤがモニタ2の画面の中央を指し示した場合、上記撮像画像における対象画像の位置は撮像画像の中心から上方以外(例えば、左方)の方向にずれた位置となる。つまり、コントローラ7の傾きによって、コントローラ7の移動方向と、画面内での指示位置の移動方向が一致しないことになる。そこで、方向データDb1に基づいて、中点データDb2を補正する。具体的には、ステップ64で算出された中点データDb2を、コントローラ7の上面が上方向を向いた状態であるとした場合における中点座標に補正する。より具体的には、上記基準位置の設定の際には方向データの基準も設定され、ステップ64で算出された中点データDb2を、方向データDb1と当該基準方向との角度差に応じた量だけ、撮像画像の中心を軸として中点データDb2が示す座標を回転移動させて補正する。そして、補正された中点データDb2を用いて上述したように指示位置データDc3を算出する。
【0096】
上記の指示位置データDc3の算出処理の本質的な原理は、コントローラ7の移動による対象画像の位置の変化によって、指示すべき2次元座標の所定の基準位置からの変位を算出し、座標を設定するというものである。したがって、上記の指示位置データDc3の算出処理(ステップ66)は、画面内の位置に対応した座標系に限らず、2次元座標の入力として幅広く用いることができる。例えば、図18および図19を用いて述べたように、奥行位置データDc4をワールド座標系におけるz座標の値とする場合には、指示位置データDc3を当該ワールド座標系におけるx座標およびy座標の値として用い、3次元座標を設定することもできる。その場合の指示位置データ算出処理は、画面とは無関係に、対象画像の移動を当該ワールド座標系におけるx座標およびy座標の基準位置からの移動に対応付ける算出処理を行えばよい。また、x座標およびy座標の値が予め設定された固定値である場合のように、奥行以外の入力を必要としない場合には、上記指示位置データの設定は行われなくてもよい。
【0097】
図12に戻り、ステップ52の操作状態情報、指示位置データ、および奥行位置データの算出処理の後、CPU30は、コントローラ7によって操作される操作対象を設定し(ステップ53)、処理を次のステップに進める。CPU30は、コントローラ7に設けられた操作部72、撮像情報演算部74、加速度センサ701等に対して、それぞれの操作対象を設定する。
【0098】
一例として、操作対象は、ゲーム進行やプレイヤの操作に応じて適宜変更される。例えば、コントローラ7に設けられた撮像情報演算部74からの信号による操作対象、つまり、上述の指示位置データDc3および奥行位置データDc4等の値に基づく操作を行う対象を、上記指示位置や奥行位置を変換した仮想ゲーム世界内における位置に存在するオブジェクトとする。また、撮像情報演算部74からの信号以外の操作手段を用いてさらに別の対象を同時に操作する場合も想定される。例えばコントローラ7に設けられた十字キー72aの操作対象を、仮想ゲーム世界に登場するオブジェクトのうち、現在モニタ2に表示されている何れかのオブジェクトとする。
【0099】
他の例として、操作対象を動的に変更する必要が無い場合には、操作対象は固定的に設定される。例えば、コントローラ7に設けられた撮像情報演算部74からの信号による操作対象を、仮想ゲーム空間に登場するプレイヤキャラクタや仮想ゲーム空間を画面に表示するための仮想カメラ等に固定的に設定する。なお、操作対象が固定的に設定される場合、処理ループ毎に繰り返し設定することが不要であるため、ステップ53は、ゲーム処理の初期設定においてのみ実行してもかまわない。
【0100】
次に、CPU30は、操作対象に対する処理を行う(ステップ54)。ステップ54において、CPU30は、ステップ53で設定した操作対象に対して、姿勢データDc1や対象位置データDc2の更新を行う。例えば、指示位置データDc3と、奥行位置データDc4とから算出される3次元座標を算出し、対象位置データDc2として更新を行う。また、当該3次元座標は、奥行以外の位置が固定的に設定されている場合には、当該設定された値と奥行位置データDc4とから算出されるようにしてもよい。そして、コントローラ7に設けられた撮像情報演算部74の操作対象がプレイヤキャラクタ、ゲーム空間内のオブジェクト、または仮想カメラ等である場合、対象位置データDc2で示される位置に当該プレイヤキャラクタ、オブジェクト、または仮想カメラの位置を移動させる。当該移動に応じて姿勢データDc1は適宜算出され、更新される。また、操作対象が仮想カメラの場合には、対象位置データDc2で示される位置を注視点とするように、仮想カメラの姿勢データDc1を更新するという処理を行うこともできる。また、撮像情報演算部74の操作対象以外の操作手段に対する操作対象についても、操作に基づいた処理が行われる。
【0101】
次に、CPU30は、表示処理を行い(ステップ56)、処理を次のステップに進める。CPU30は、メインメモリ33に記憶されている操作対象情報Dcやゲーム画像の生成に必要なデータ(プレイヤキャラクタの画像および位置データや地形データ等)を参照し、ゲーム画像を生成する。具体的には、上記ステップ54において位置や姿勢が更新されたオブジェクトの画像であったり、位置や姿勢が更新された仮想カメラから見た仮想空間の画像であったりする。そして、CPU30は、生成した画像をモニタ2の画面に表示させる。
【0102】
次に、CPU30は、ゲームを終了するか否かを判断する(ステップ57)。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件(例えば、プレイヤキャラクタの体力を示すパラメータが0になったこと等)が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。CPU30は、ゲームを終了しない場合に上記ステップ51に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【0103】
このように、コントローラ7の撮像情報演算部74によって固定的に設置されたマーカ(実施例では、2つのマーカ8Lおよび8Rからの赤外光)を撮像することによって、当該マーカに対するコントローラ7の上下左右方向の位置のみでなく、マーカおよびコントローラ7間の距離にも対応した新規な3次元入力可能な操作装置としての機能を実現することができる。また、マーカおよびコントローラ7間の距離に対応する入力は、非常に遠距離まで入力可能な範囲が存在するが、当該操作ポジションに応じて適切な入力が可能となる有効範囲が設定されるために、距離の増減に対応しながらゲーム処理に適した適切な入力が可能となる。さらに、プレイヤの操作ポジションに応じて有効範囲が移動するため、プレイヤがどのようなポジションでコントローラ7を操作しても同様の操作感覚が得られるため、操作を行う位置の自由度が向上する。また、本実施形態では、有効範囲の前後にコントローラ7の位置が逸脱した場合、即時にコントローラ7の位置に応じて当該有効範囲が移動するため、コントローラ7とマーカとの距離を敏感に反応させるゲーム処理に好適である。
【0104】
(第2の実施形態)
次に、本発明の第2の実施形態に係るゲームシステムについて説明する。なお、第2の実施形態に係るゲームシステムは、第1の実施形態で説明したゲームシステム1に対して、前後位置パラメータrの算出および有効範囲を再設定する処理の動作(図13のステップ66参照)のみが異なり、他のシステム構成や他の動作は第1の実施形態と同様である。したがって、第2の実施形態の説明において、第1の実施形態と同一の要素には同一の参照符号を付し、第1の実施形態と同一のステップには同一のステップ番号を付して、詳細な説明を省略する。
【0105】
図20〜図22を参照して、第2の実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作について説明する。なお、図20は、当該実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチンである。図21は、図20におけるステップ106の後述する丸め処理の詳細な動作を示すサブルーチンである。図22は、図20に示したサブルーチンに応じて、前後位置パラメータrを算出し、有効範囲を設定する動作を説明するための図である。
【0106】
まず、図22を参照して、第2の実施形態で用いられる有効範囲について説明する。当該実施形態における有効範囲も、コントローラ7を把持したプレイヤが当該コントローラ7をマーカ8Lおよび8Rに近づけるまたは遠ざけるように動かす、すなわち距離dが変化するような操作に応じてゲーム処理に用いられる前後位置パラメータrを得るために設定される範囲である。したがって、本実施形態の処理において、コントローラ7の位置として扱われる値は、具体的にはその時点における距離dの値である。有効範囲は、距離dに対する範囲であって、その範囲の長さがrange、前端位置(マーカ8Lおよび8Rから最も近い有効範囲の端までの距離)がmin、および後端位置(マーカ8Lおよび8Rから最も遠い有効範囲の端までの距離)がmaxとして設定される。したがって、長さrange=max−minとなる。
【0107】
上述した有効範囲を基準として、コントローラ7(厳密には、撮像素子743)が当該有効範囲の前端位置minに配置されたとき、前後位置パラメータr=0が算出されるように設定される(例えば、図22(a)の状態B)。また、コントローラ7が有効範囲の後端位置maxに配置されたとき、前後位置パラメータr=1が算出されるように設定される。そして、コントローラ7が有効範囲の前端位置minと後端位置maxとの間に配置されたとき、その配置位置に応じて前後位置パラメータrが0〜1の間で算出されるように設定される(例えば、図22(a)の状態A)。
【0108】
本実施形態では、有効範囲の前後にそれぞれ範囲長さpの遊び範囲がさらに設けられる。遊び範囲は、コントローラ7の位置が有効範囲から逸脱する場合であっても有効範囲の移動を行わない領域であって、有効範囲の前後にそれぞれ有効範囲と連続して形成される。そして、コントローラ7が有効範囲の前端側に形成された遊び範囲内に配置されたとき、前後位置パラメータr=0が算出されるように設定される(例えば、図22(a)の状態C)。また、コントローラ7が有効範囲の後端側に形成された遊び範囲内に配置されたとき、前後位置パラメータr=1が算出されるように設定される。つまり、コントローラ7を把持したプレイヤが当該コントローラ7を有効範囲の前後に形成された遊び範囲内に逸脱したとき、当該遊び範囲と有効範囲との境界となる前端位置minまたは後端位置maxと同じ前後位置パラメータrが算出される。
【0109】
ここで、コントローラ7が遊び範囲内に配置されているときは、有効範囲の前後に逸脱する位置まで動かされていることになるが、コントローラ7が有効範囲または遊び範囲内に配置されている限り、有効範囲が移動することはない(例えば、図22(a)の状態C→状態Dへの変化)。一方、コントローラ7を把持したプレイヤが当該コントローラ7を遊び範囲からも逸脱する位置まで動かしたとき、そのコントローラ7の移動位置が前端位置minまたは後端位置maxとなるように即時に有効範囲が移動する(例えば、図22(a)の状態C→状態Eへの変化)。
【0110】
以下、図20を参照して、このような前後位置パラメータrの算出および有効範囲の再設定を可能する動作を説明する。図20において、CPU30は、上記ステップ65(図13参照)で算出した距離dが前端位置min−pより短いか否か(ステップ101;つまり、前方の遊び範囲の端より逸脱しているかどうか)、および距離dが後端位置max+pより長いか否か(ステップ102;つまり、後方の遊び範囲の端より逸脱しているかどうか)を判断する。そして、CPU30は、距離dが前端位置min−pより短い場合(図22(a)の状態C→状態Eへの変化)、処理を次のステップ103に進める。また、CPU30は、距離dが後端位置max+pより長い場合、処理を次のステップ104に進める。一方、CPU30は、距離dが有効範囲または遊び範囲内(つまり、距離dが前端位置min−p以上で後端位置max+p以下)の場合(図22(a)の状態A〜状態D)、有効範囲をそのままにして処理を次のステップ105に進める。
【0111】
ステップ103において、CPU30は、前方の遊び範囲から逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ105に進める。具体的には、CPU30は、有効範囲の前端位置minを現在の距離dに変更し、後端位置maxを現在の距離d+長さrangeに変更して、それぞれメインメモリ33に格納する。また、ステップ104において、CPU30は、後方の遊び範囲から逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ105に進める。具体的には、CPU30は、有効範囲の後端位置maxを現在の距離dに変更し、前端位置minを現在の距離d−長さrangeに変更して、それぞれメインメモリ33に格納する。これらステップ103およびステップ104の処理によって、プレイヤがコントローラ7を遊び範囲からも前後に逸脱する位置まで動かしたとき、そのコントローラ7の移動位置が即時に前端位置minまたは後端位置maxとなるように有効範囲が移動する。
【0112】
ステップ105において、CPU30は、距離dおよび有効範囲に応じて前後位置パラメータrを算出する処理を行う。そして、CPU30は、算出された前後位置パラメータrの値を丸める処理を行い(ステップ106)、当該サブルーチンによる処理を終了する。具体的には、ステップ105において、CPU30は前後位置パラメータrを
r=(d−min)/range
で算出する。そして、ステップ106の処理によって、有効範囲および遊び範囲に対するコントローラ7の配置位置に応じて、前後位置パラメータrが0〜1の間に丸められて算出される。
【0113】
図21を用いて、丸め処理について説明する。CPU30は、算出した前後位置パラメータrが0より小さいか(ステップ111)、および算出した前後位置パラメータrが1より大きいか(ステップ112)を判断する。そして、CPU30は、前後位置パラメータrが0より小さい場合、前後位置パラメータr=0にして(ステップ113)、当該サブルーチンによる処理を終了する。一方、CPU30は、前後位置パラメータrが1より大きい場合、前後位置パラメータr=1にして(ステップ114)、当該サブルーチンによる処理を終了する。なお、CPU30は、前後位置パラメータrが0以上1以下である場合、rに変更を加えず、そのまま当該サブルーチンによる処理を終了する。
【0114】
このように、第2の実施形態においても、非常に遠距離まで入力可能な範囲が存在するマーカおよびコントローラ7間の距離に対応する入力に対して、当該操作ポジションに応じて適切な入力を可能とする有効範囲が設定されるために、距離の増減に対応しながらゲーム処理に適した適切な入力が可能となる。また、プレイヤの操作ポジションに応じて有効範囲が移動するため、プレイヤがどのようなポジションでコントローラ7を操作しても同様の操作感覚が得られ、さらに有効範囲の前後に遊び範囲が設けられているために、第1の実施形態とは違った操作感覚を設定できる。例えば、第1の実施形態では、有効範囲の前後にコントローラ7の位置が逸脱した場合、即時にコントローラ7の位置に応じて当該有効範囲が移動するため、コントローラ7とマーカとの距離に対して有効範囲の位置が敏感に反応する。一方、第2の実施形態では、有効範囲の前後に遊び範囲が設けられているために有効範囲の移動に余裕が生まれる。具体的には、プレイヤがコントローラ7を操作する際に、無意識のうちにコントローラ7を大きく動かしてしまうような場合などがあり、プレイヤが操作位置の変更を意図しなくてもコントローラの位置が有効範囲の前後に逸脱してしまうことがある。このような操作が行われても、第2の実施形態では遊び範囲内にコントローラ7が配置されている限り有効範囲は移動しないため、ある程度固定された有効範囲を用いて余裕をもって距離に応じた入力を行うことができる。
【0115】
(第3の実施形態)
次に、本発明の第3の実施形態に係るゲームシステムについて説明する。なお、第3の実施形態に係るゲームシステムは、第1の実施形態で説明したゲームシステム1に対して、前後位置パラメータrの算出および有効範囲を再設定する処理の動作(図13のステップ66参照)のみが異なり、他のシステム構成や他の動作は第1の実施形態と同様である。したがって、第3の実施形態の説明において、第1の実施形態と同一の要素には同一の参照符号を付し、第1の実施形態と同一のステップには同一のステップ番号を付して、詳細な説明を省略する。
【0116】
図23および図24を参照して、第3の実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作について説明する。なお、図23は、当該実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチンである。図24は、図23に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図である。
【0117】
まず、図24を参照して、第3の実施形態で用いられる有効範囲について説明する。当該実施形態における有効範囲も、コントローラ7を把持したプレイヤが当該コントローラ7をマーカ8Lおよび8Rに近づけるまたは遠ざけるように動かす、すなわち距離dが変化するような操作に応じてゲーム処理に用いられる前後位置パラメータrを得るために設定される範囲である。したがって、本実施形態の処理において、コントローラ7の位置として扱われる値は、具体的にはその時点における距離dの値であって、有効範囲は、距離dに対する範囲である。本実施形態においては、有効範囲の長さが前端方向にa1、後端方向にa2だけ伸長可能である。伸長長さa1およびa2は可変であり、有効範囲が伸縮する。a1=0、a2=0の場合には有効範囲は伸長されず、伸長されない場合の前端位置(マーカ8Lおよび8Rから最も近い有効範囲の端までの距離)がmin、後端位置(マーカ8Lおよび8Rから最も遠い有効範囲の端までの距離)がmaxである。つまり、前端位置がmin−a1、後端位置がmax+a2として設定され、有効範囲の長さrange=max−min+a1+a2となる。
【0118】
上述した有効範囲を基準として、当該有効範囲が伸長していない状態でコントローラ7(厳密には、撮像素子743)が当該有効範囲の前端位置min−a1に配置されたとき、前後位置パラメータr=0が算出されるように設定される(例えば、図24(a)の状態B)。また、有効範囲が伸長していない状態でコントローラ7が有効範囲の後端位置max+a2に配置されたとき、前後位置パラメータr=1が算出されるように設定される。そして、有効範囲が伸長していない状態でコントローラ7が有効範囲の前端位置min−a1と後端位置max+a2との間に配置されたとき、その配置位置に応じて前後位置パラメータrが0〜1の間で算出されるように設定される(例えば、図24(a)の状態A)。
【0119】
本実施形態では、図24(b)に示すように、それぞれ範囲長さpの遊び範囲がさらに設けられる。遊び範囲は、コントローラ7の位置がminとmaxとの間の領域から逸脱する場合であっても有効範囲の移動を行わない範囲であって(後述により明らかとなるが、有効範囲の伸縮は行われる)、minとmaxとの前後にそれぞれ連続して設定される。
【0120】
コントローラ7が遊び範囲内に位置するとき、有効範囲の境界がコントローラ2の位置に所定の割合で近づくように、伸長長さa1またはa2が増減し、有効範囲が伸縮する。コントローラ7の位置が遊び範囲内でかつ有効範囲から逸脱する場合には伸長長さa1またはa2が増加し、有効範囲が伸長する(例えば、図24(a)の状態Cに示す矢印)。一方、コントローラ7の位置が遊び範囲内でかつ有効範囲内である場合には、伸長長さa1またはa2が減少し、有効範囲が収縮する(例えば、図24(a)の状態Dに示す矢印)。また、コントローラ7がminとmaxとの間に位置するとき、有効範囲の境界がminとmaxとに所定の割合で近づくように、伸長長さa1またはa2が減少し、有効範囲が収縮する。さらに、コントローラ7を把持したプレイヤが当該コントローラ7を遊び範囲からも逸脱する位置まで動かしたとき、伸長長さa1またはa2の長さは遊び範囲の長さと同一になり、さらに有効範囲の境界が所定割合でコントローラ7の位置に近づくように有効範囲全体が移動する(例えば、図24(a)の状態E)。このとき、コントローラ7の位置は、有効範囲および遊び範囲何れからも逸脱した状態となるが、前端側に逸脱したときに前後位置パラメータr=0、後端側に逸脱したときに前後位置パラメータr=1となるように前記丸め処理と同様の処理によって値が更新される。なお、伸縮している有効範囲の一方端に対して、他方端は、有効範囲自体が移動しない限り一方端の伸縮動作に影響されずに独立して伸縮動作する(図24(a)の状態A〜状態D)。
【0121】
以下、図23を参照して、このような前後位置パラメータrの算出および有効範囲の再設定を可能にする処理を説明する。図23において、CPU30は、上記ステップ65(図13参照)で算出した距離dがmin以上max以下か否か(ステップ121)、距離dがmin−p以下か否か(ステップ122;つまり、前方の遊び範囲の端より逸脱しているかどうか)、距離dがmin−pより長くminより短いか否か(ステップ123)、および距離dがmax+p以上か否か(ステップ124;つまり、後方の遊び範囲の端より逸脱しているかどうか)を判断する。そして、CPU30は、距離dがmin以上max以下の場合(図24(a)の状態A)、処理を次のステップ125に進める。CPU30は、距離dがmin−p以下の場合(図24(a)の状態E)、処理を次のステップ126に進める。CPU30は、距離dがmin−pより長くminより短い場合(図24(a)の状態Cおよび状態D)、処理を次のステップ127に進める。CPU30は、距離dがmax+p以上の場合、処理を次のステップ128に進める。CPU30は、距離dがmax+pより長くmaxより短い場合、処理を次のステップ129に進める。
【0122】
ステップ125において、CPU30は、minとmaxとの間にコントローラ7が配置されていることに応じて、当該有効範囲を元の範囲長さに戻るように短縮させて再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1をa1×s(sは、0<s<=1の定数、s=1の場合には即時に戻る)に更新し、伸長長さa2をa2×sに更新して、それぞれメインメモリ33に格納する。また、ステップ126において、CPU30は、前方の遊び範囲から逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1を遊び範囲の長さpに更新し、伸長長さa2をa2×sに更新し、minの値をmin−(min−d−a1)×sに更新し、maxの値をmax−(min−d−a1)*sに更新して、それぞれメインメモリ33に格納する。また、ステップ127において、CPU30は、前方の遊び範囲の位置にコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1をa1+(min−d−a1)×sに更新し、伸長長さa2をa2×sに更新して、それぞれメインメモリ33に格納する。また、ステップ128において、CPU30は、後方の遊び範囲から逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1をa1×sに更新し、伸長長さa2を遊び範囲の長さpに変更し、maxをmax+(d−max−a2)×sに更新し、minをmin+(d−max−a2)*sに更新して、それぞれメインメモリ33に格納する。さらに、ステップ129において、CPU30は、後方の遊び範囲の位置にコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1をa1×sに変更し、伸長長さa2をa2+(d−max−a2)×sに変更して、それぞれメインメモリ33に格納する。これらステップ125〜ステップ129の処理によって、コントローラ7の移動位置に応じて有効範囲が所定速度で伸縮および移動する。
【0123】
ステップ130において、CPU30は、距離dおよび有効範囲に応じて前後位置パラメータrを算出する処理を行う。そして、CPU30は、算出された前後位置パラメータrの値を丸める処理を行い(ステップ131)、当該サブルーチンによる処理を終了する。具体的には、ステップ130において、CPU30は、長さrangeを
range=max−min+a1+a2
で算出し、前後位置パラメータrを
r=(d−min−a1)/range
で算出する。そして、ステップ131の処理によって、有効範囲および遊び範囲に対するコントローラ7の配置位置に応じて、前後位置パラメータrが0〜1の間に丸められて算出される。なお、ステップ131の丸め処理については、図21を用いて説明した第2の実施形態の丸め処理と同様であるため、詳細な説明を省略する。
【0124】
このように、第3の実施形態においても、非常に遠距離まで入力可能な範囲が存在するマーカおよびコントローラ7間の距離に対応する入力に対して、当該操作ポジションに応じて適切な入力を可能とする有効範囲が設定されるために、距離の増減に対応しながらゲーム処理に適した適切な入力が可能となる。また、プレイヤの操作ポジションに応じて有効範囲が移動するため、プレイヤがどのようなポジションでコントローラ7を操作しても同様の操作感覚が得られるが、有効範囲に遊び範囲が設けられ、さらに有効範囲が所定速度で伸縮し、所定速度で有効範囲が移動するために、第1の実施形態や第2の実施形態とは違った操作感覚を設定できる。例えば、第1および第2の実施形態では、有効範囲の前後または遊び範囲からコントローラ7の位置が逸脱した場合、即時にコントローラ7の位置に応じて当該有効範囲が移動するため、コントローラ7とマーカとの距離が比較的敏感に反応する。一方、第3の実施形態では、有効範囲の前後に遊び範囲が設けながら、有効範囲の伸縮や移動が徐々に行われるため、プレイヤの入力に対してさらに緩やかな有効範囲の反応となる。つまり、プレイヤが意図しない突発的な誤操作などによってコントローラ7を有効範囲の前後に逸脱してしまったとしても、その操作位置に有効範囲が徐々に順応するような処理となるため、当該誤操作の影響をある程度吸収することができる。しかもプレイヤが意識的に有効範囲を移動させるためにコントローラ7の位置を変更した場合には、適切に有効範囲の移動が行える。したがって、より安定した入力操作が可能となる。
なお、コントローラ7の撮像情報演算部74によって固定的に設置されたマーカを撮像することによって、マーカおよびコントローラ7間の距離に対応した入力に作用するように上記有効範囲を設定したが、他の方向に対応した入力に作用するように設定してもかまわない。例えば、マーカに対するコントローラ7の左右方向または上下方向の位置(例えば、指示位置データDc3)に対応してそれぞれの方向に沿った有効範囲を設定する。そして、コントローラ7の左右方向または上下方向の位置と有効範囲との位置関係に応じて、左右または上下位置パラメータを算出する。そして、上述した距離方向と同様にコントローラ7の左右方向の位置あるいは上下方向の位置に応じて有効範囲が移動あるいは伸縮するようにすれば、他の方向に対応した入力に作用する有効範囲を設定することができる。
【0125】
この変形例をゲームプログラムで実現する場合の構成要素について説明する。撮像対象(8)を撮像するための撮像部(74)を備えるゲームコントローラ(7)から、その撮像部が撮像した撮像画像自体または撮像画像に所定の演算を行った結果(Da1、Da2)を操作情報(Da)として取得してゲーム処理を行うゲーム装置(3)のコンピュータ(30)で実行されるゲームプログラムである。ゲームプログラムは、位置検出ステップ、有効範囲設定ステップ、位置データ算出ステップ、ゲーム処理ステップ、および表示処理ステップをコンピュータに実行させる。位置検出ステップは、ゲームコントローラから得られた操作情報を用いて、撮像対象の撮像画像内における位置に応じて、ゲームコントローラと撮像対象との上下方向および左右方向の少なくとも一方の位置を検出する。有効範囲設定ステップは、ゲームコントローラに対する上下方向および左右方向の少なくとも一方に沿って、所定長さの有効範囲を設定する。位置データ算出ステップは、有効範囲に対するゲームコントローラの位置に応じて、上下方向および左右方向の少なくとも一方の位置に関するデータを算出する。ゲーム処理ステップは、位置データ算出ステップが算出した位置に関するデータに応じて仮想ゲーム世界に対する所定のゲーム処理を行う。表示処理ステップは、ゲーム処理を行った後の仮想ゲーム世界を画像として表示装置に表示させる。また、上記ゲームプログラムは、有効範囲再設定ステップを、さらにコンピュータに実行させてもかまわない。有効範囲再設定ステップは、ゲームコントローラの位置が有効範囲から逸脱したとき、そのゲームコントローラの位置に応じてその有効範囲を移動させて再設定する。
【0126】
また、上述した説明では、前後位置パラメータrを奥行位置データzに変換してゲーム処理を行ったが、前後位置パラメータrは、様々なゲーム処理に用いることができる。例えば、前後位置パラメータrを仮想ゲーム世界に登場する車両等のオブジェクトの速度に換算してゲーム処理を行ってもかまわない。また、前後位置パラメータrを仮想ゲーム世界に登場するプレイヤキャラクタのアクション(例えば、パンチを繰り出すアクション)の動作パラメータとして用いてゲーム処理を行ってもかまわない。また、前後位置パラメータrを仮想カメラのズーム倍率に換算してゲーム処理を行ってもかまわない。また、前後位置パラメータrに少なくとも1つの閾値を設定して、当該閾値に対する大小でオン/オフするスイッチ(例えば、プレイヤキャラクタにおける所定のアクションが閾値を基準に開始される)に用いてゲーム処理を行ってもかまわない。
【0127】
また、上述した説明では、撮像素子743で撮像した画像データを解析することによって距離dを算出したが、それ以外の手段によっても、実空間内に配置された所定の測定対象との距離dを測ることができれば、当該距離dに対して有効範囲を設定することにより、上記の発明を実施することが可能である。したがって、距離dを算出するための手段として、例えば、超音波センサによるものや、磁気センサを用いたものなどを用いてもよい。また、撮像素子743と、撮像対象との距離に関連した値を得ることができれば、実際の距離dを算出しなくとも操作入力は可能であるので、距離dを算出せずに、撮像画像内のマーカ8Lと8Rとの間の長さに対応させたデータを予め用意し、当該対応データを用いて処理を行うようにしてもよい。
【0128】
また、上述した説明では、コントローラ7とゲーム装置3とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置3とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7に接続されたケーブルをゲーム装置3の接続端子に接続する。
【0129】
また、コントローラ7から無線送信される送信データを受信する受信手段として、ゲーム装置3の接続端子に接続された受信ユニット6を用いて説明したが、ゲーム装置3の本体内部に設けられた受信モジュールによって当該受信手段を構成してもかまわない。この場合、受信モジュールが受信した送信データは、所定のバスを介してCPU30に出力される。
【0130】
また、撮像素子743で撮像した画像データを解析してマーカ8Lおよび8Rからの赤外光の位置座標やそれらの重心座標等を取得し、それらを処理結果データとしてコントローラ7内で生成してゲーム装置3へ送信する態様を説明したが、他の処理段階のデータをコントローラ7からゲーム装置3へ送信してもかまわない。例えば、撮像素子743が撮像した画像データをコントローラ7からゲーム装置3へ送信し、CPU30において上記解析処理を行って処理結果データを取得してもかまわない。この場合、コントローラ7に設けられた画像処理回路744が不要となる。また、上記画像データの解析途中のデータをコントローラ7からゲーム装置3へ送信してもかまわない。例えば、画像データから得られる輝度、位置、および面積等を示すデータをコントローラ7からゲーム装置3へ送信し、CPU30において残りの解析処理を行って処理結果データを取得してもかまわない。
【0131】
また、上述した説明では、2つのマーカ8Lおよび8Rからの赤外光を、コントローラ7の撮像情報演算部74の撮像対象としたが、他のものを撮像対象にしてもかまわない。例えば、1つまたは3つ以上のマーカをモニタ2の近傍に設置し、それらのマーカからの赤外光を撮像情報演算部74の撮像対象としてもかまわない。例えば、所定の長さを有する1つのマーカをモニタ2の近傍に設置し、当該長さの両端を設置間隔m(図16参照)とすれば、本発明を同様に実現することができる。また、モニタ2の表示画面自体や他の発光体(室内灯等)を撮像情報演算部74の撮像対象としてもかまわない。撮像対象とモニタ2の表示画面との配置関係に基づいて、当該表示画面に対するコントローラ7の位置を演算すれば、様々な発光体を撮像情報演算部74の撮像対象として用いることができる。
【0132】
また、上述したコントローラ7の形状や、それらに設けられている操作部72の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、コントローラ7における撮像情報演算部74の位置(撮像情報演算部74の光入射口)は、ハウジング71の前面でなくてもよく、ハウジング71の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【0133】
また、上記第1から第3の実施形態においては、コントローラ7の実空間内での位置を表す値として距離dを用いた処理について述べたが、距離dのみでなく、コントローラ7の存在する実空間内での3次元位置を検出し、当該3次元位置を操作対象の位置決定に用いるようにしてもよい。
【0134】
その場合、前記有効範囲は、例えば3次元座標系のそれぞれの成分に対して設定され、上記第1から第3の実施形態と同様の処理をそれぞれの成分に対して行うことによって、仮想空間内の3次元座標を決定するようにしてもよい。
【0135】
それ以外にも、前記有効範囲は、例えば3次元座標系における所定の3次元位置を2箇所境界として設定し、当該境界と境界の間の領域として設定され、当該3次元領域におけるコントローラ7の位置によって処理を行うようにしてもよい。例えば、第1点と第2点点とを対角頂点とする直方体を定義することにより有効範囲を設定する。この場合、座標系の各軸方向に直方体の各辺が並行になるようにしてもよい。なお、予め直方体モデルを用意しておき、当該直方体モデルの面に第1点と第2点が含まれるようにその大きさを調整することで、有効範囲を設定することもできる。
【0136】
コントローラ7の実空間内での位置の算出方法として、例えば、加速度データDa4によってコントローラ7の姿勢がわかれば、第1座標データDa1と、第2座標データDa2とから、マーカ8Rおよび8Lの位置を基準とした3次元位置を算出することができる。
【0137】
また、コントローラ7の実空間内での位置の算出方法として、例えば、超音波センサや磁気センサ等によって、位置を測定するようにしてもよい。
【0138】
また、操作入力のために実空間内で移動させる対象物は、撮像情報演算部74を備えたコントローラ7でなくともよい。例えば、撮像装置を備えたデータ入力装置を所定の位置に固定的に設置して、データの出力を行わない対象物、例えばプレイヤ自身の手等の位置を当該撮像装置によって検出し、当該データ入力装置から位置データを出力するようなものであってもよい。
【産業上の利用可能性】
【0139】
本発明に係るゲームシステムおよびゲームプログラムは、自由度の高い操作を実現することができ、1人のプレイヤが物理的に分離したユニットを把持して操作するゲームシステムおよびゲームプログラム等として有用である。
【図面の簡単な説明】
【0140】
【図1】本発明の一実施形態に係るゲームシステム1を説明するための外観図
【図2】図1のゲーム装置3の機能ブロック図
【図3】図3のコントローラ7の上面後方から見た斜視図
【図4】図3のコントローラ7を下面後方から見た斜視図
【図5】図3のコントローラ7の上筐体を外した状態を示す斜視図
【図6】図3のコントローラ7の構成を示すブロック図
【図7】図3のコントローラ7を用いてゲーム操作するときの状態を概説する図解図
【図8】プレイヤがコントローラ7を右手で把持した状態をコントローラ7の前面側から見た一例
【図9】プレイヤがコントローラ7を右手で把持した状態をコントローラ7の左側面側から見た一例
【図10】マーカ8Lおよび8Rと撮像情報演算部74との視野角を説明するための図
【図11】ゲーム装置3のメインメモリ33に記憶される主なデータを示す図
【図12】ゲーム装置3において実行されるゲーム処理の流れを示すフローチャート
【図13】図12におけるステップ52の操作状態情報、指示位置データ、および奥行位置データ算出処理の詳細な動作を示すサブルーチン
【図14】図13におけるステップ62およびステップ65の距離d算出処理の詳細な動作を示すサブルーチン
【図15】図13におけるステップ66の前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチン
【図16】距離dを算出する動作を説明するための図
【図17】図13に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図
【図18】前後位置パラメータrと3次元ゲーム空間に設定される奥行位置データzとの関係の一例を示す図
【図19】前後位置パラメータrと3次元ゲーム空間に設定される奥行位置データzとの関係の他の例を示す図
【図20】第2の実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチン
【図21】図20におけるステップ106の丸め処理の詳細な動作を示すサブルーチン
【図22】図20に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図
【図23】第3の実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチン
【図24】図23に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図
【符号の説明】
【0141】
1…ゲームシステム
2…モニタ
2b…スピーカ
3…ゲーム装置
30…CPU
31…メモリコントローラ
32…GPU
33…メインメモリ
34…DSP
35…ARAM
36…コントローラI/F
37…ビデオI/F
38…外部メモリI/F
39…オーディオI/F
40…ディスクドライブ
41…ディスクI/F
4…光ディスク
5…外部メモリカード
6…受信ユニット
7…コントローラ
71…ハウジング
72…操作部
73…コネクタ
74…撮像情報演算部
741…赤外線フィルタ
742…レンズ
743…撮像素子
744…画像処理回路
75…通信部
751…マイコン
752…メモリ
753…無線モジュール
754…アンテナ
700…基板
701…加速度センサ
702…LED
703…水晶振動子
704…バイブレータ
705…電池
8…マーカ
【技術分野】
【0001】
本発明は、仮想位置決定プログラムに関し、より特定的には、実空間における対象物の位置に基づいて仮想空間における仮想物体の位置を算出する仮想位置決定プログラムに関する。
【背景技術】
【0002】
従来、赤外線光源を標識として撮像し、その撮像結果を解析して照準位置を求める位置検出システムが開示されている(例えば、特許文献1参照)。
【0003】
特許文献1では、位置検出システムの実施例として撮像装置が取り付けられた銃をゲームコントローラとして狙い撃ちするゲームを開示している。撮像装置は、ブラウン管の4隅に配設された赤外線光源を撮像対象として、当該撮像対象が撮像された撮像画像上の位置に応じて銃がブラウン管に対して指し示している位置を検出する。そして、銃が指し示している位置を照準位置として仮想的な射撃ゲームが実行される。なお、特許文献1の第21段落に記載されているように、撮像装置と標的(標識)との距離を自由に変える場合、撮像装置に制御可能なズーム機能が備えられ、常に標識が最適な大きさで撮像されるようにズーム機能が制御されることによって、正確な照準位置が検出される。
【特許文献1】特開平11−305935号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、従来、入力装置の一例のゲームコントローラの実空間内での位置を操作入力に用いるという発想はなかった。特許文献1で開示された位置検出システムにおいては、銃がブラウン管に対して指し示している位置を入力として用いているが、そのような指示位置は、あくまで画面内の位置を指示するものであって、コントローラの実空間における位置を表すものではない。また、実空間内における撮像装置と標識との距離を得ることはできるが、当該距離は補正のために用いられるものに過ぎない。つまり、当該距離はコントローラの実空間での位置を表す値の一種であるが、当該距離は操作入力には用いられていない。
【0005】
ゲームコントローラと撮像対象との距離を操作入力に用いると、プレイヤが当該距離方向へゲームコントローラを動かすことのできる範囲は非常に大きくなる。したがって、入力の幅や変動が大きくなり、そのように大きく変動する値を仮想空間内での操作対象の位置に対応付けることは困難であった。また、プレイヤがどの位置で操作を行うかは状況によって異なり、距離の値にばらつきが出るため、適切な仮想位置を対応させることが困難であった。距離という1次元的な値に限らず、実空間での3次元的な位置を検出する場合にも、同様の問題が発生することは明らかである。以上のような問題点が存在することから、コントローラの実空間における位置自体を操作入力に用いるという発想は従来の操作入力には存在しなかった。
【0006】
それ故に、本発明の目的は、対象物の実空間における位置を用いて自由度の高い新規な操作を実現する仮想位置決定プログラムを提供することである。
【課題を解決するための手段】
【0007】
上記の目的を達成するために、本発明は以下の構成を採用した。
【0008】
第1の発明は、入力装置(7)から取得した入力情報(Da)に基づいて仮想空間に対する処理をコンピュータ(30)に実行させるプログラムであって、前記入力情報には所定の対象物の実空間内における位置の変化に応じて変化する対象データ(Da1、Da2)が含まれ、前記対象データを用いて、前記対象物の実空間内における位置を表す実位置データ(Db3)を算出する実位置データ算出ステップ(S52)と、第1の位置データを第1の境界、第2の位置データを第2の境界としてそれぞれ設定し、前記第1の境界から前記第2の境界の範囲として定義される有効範囲を設定する有効範囲設定ステップ(S63、S66)と、前記有効範囲における前記実位置データの値の位置を表す有効範囲位置データを算出する有効範囲位置データ算出ステップ(S95、S105、S130)と、前記有効範囲位置データの値に応じた演算によって前記仮想空間内の操作対象の位置を決定する位置決定ステップ(S67、S54)と、前記仮想空間を表示装置(2)に表示させる表示処理ステップ(S56)とを、前記コンピュータに実行させる、仮想位置決定プログラムである。
【0009】
第2の発明は、前記第1の発明において、前記実位置データの値が前記有効範囲外のとき、前記実位置データの値が有効範囲内に含まれるように、前記第1の境界および第2の境界を移動させ、更新する有効範囲更新ステップ(S91〜S94、S101〜S104、S121〜S129)をさらに前記コンピュータに実行させる。
【0010】
第3の発明は、前記第1の発明において、前記実位置データの値が前記有効範囲外のとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値になるように、前記第1の境界および前記第2の境界を移動させ、更新する有効範囲更新ステップ(S91〜S94)をさらに前記コンピュータに実行させる。
【0011】
第4の発明は、前記第1の発明において、前記実位置データの値が前記有効範囲外のとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値に所定の割合で近づくように、当該第1の境界および第2の境界を移動し、更新する第2有効範囲更新ステップ(S121〜S129)をさらに前記コンピュータに実行させる。
【0012】
第5の発明は、前記第1の発明において、前記有効範囲位置データ算出ステップは、前記実位置データの値が前記第1の境界に一致するとき前記有効範囲位置データが最大値となり、前記実位置データの値が前記第2の境界に一致するとき前記有効範囲位置データが最小値となるように前記有効範囲位置データを算出する。
【0013】
第6の発明は、前記第1の発明において、前記有効範囲設定ステップは、前記有効範囲の前後にそれぞれ所定長さで定義される遊び範囲をさらに設定するステップを含み、前記実位置データが前記有効範囲と前記遊び範囲とを合わせた範囲から逸脱する値をとるとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値に一致するように、当該第1の境界及び当該第2の境界の値を移動し、更新する有効範囲更新ステップ(S101〜S104)をさらに前記コンピュータに実行させる。
【0014】
第7の発明は、前記第1の発明において、第1の位置データと、前記第1の位置データから一方側に設定される第2の位置データと、前記第1の位置データから前記一方側の他方側に設定される前記第3の位置データと、前記第2の位置データから前記一方側に設定される第4の位置データとが設定され、第1の位置データから第3の位置データまで変動可能な位置データとして定義される上限境界と、第2の位置データから第4の位置データまで変動可能な位置データとして定義される下限境界とを設定し、変動可能な当該上限境界と下限境界との間の範囲として定義される有効範囲を設定する有効範囲設定ステップと、前記実位置データの値が前記上限境界/下限境界の変動可能な範囲内のとき、前記上限境界/下限境界を当該実位置データの値に所定の割合で近づくように更新し、前記下限境界/上限境界を前記第2の位置データ/第1の位置データに所定の割合で近づくように更新するステップと、前記実位置データの値が前記第1の位置データと第2の位置データとの間の範囲内のとき、前記上限境界/下限境界を前記第1の位置データ/第2の位置データに所定の割合で近づくように更新するステップと、前記実位置データの値が前記第3の位置データよりさらに前記他方側あるとき、前記第3の位置データの値が当該実位置データの値に所定の割合で近づくように前記第1の位置データ、第2の位置データ、第3の位置データ、第4の位置データ、および下限境界を移動させ、前記上限境界を移動後の第2の位置データに更新するステップと、前記実位置データの値が前記第4の位置データよりさらに前記一方側にあるとき、前記第4の位置データの値が前記実位置データの値に所定の割合で近づくように前記第1の位置データ、第2の位置データ、第3の位置データ、第4の位置データ、および上限境界を移動させ、前記下限境界を移動後の第4の位置データに更新するステップと(S121〜S129)を、さらに前記コンピュータに実行させる。
【0015】
第8の発明は、前記第7の発明または前記第7の発明のいずれかにおいて、前記有効範囲位置データ算出ステップは、前記実位置データの値が前記第1の位置データに一致するときまたは前記有効範囲を前記第1の位置データ側に逸脱するとき、前記有効範囲位置データが最大値となり、前記実位置データの値が前記第2の位置データに一致するときまたは前記有効範囲を前記第2の位置データ側に逸脱するとき、前記有効範囲位置データが最小値となるように前記有効範囲位置データを算出するステップ(S106)を含む。
【0016】
第9の発明は、入力装置(7)から入力される実空間における対象物の位置情報を含むデータ(Da)に基づいて、当該実空間を所定の座標系で表したときの当該対象物体の位置座標を算出し、当該位置座標に応じて仮想空間における仮想物体の仮想位置座標を算出するプログラムであって、前記実空間の所定の座標系における少なくとも第1座標及び第2座標によって定義される有効範囲を設定する有効範囲設定手段(S63、S66)、前記対象物の位置座標が前記有効範囲に含まれるとき、当該有効範囲を正規化し、当該正規化を行った場合の前記対象物の位置座標に対応する値を算出する正規化手段(S95、S105、S130)、および前記正規化手段によって算出された値に応じて、前記仮想位置座標を算出する算出手段(S67、S54)として、コンピュータ(30)を動作させる仮想位置決定プログラムである。
【0017】
第10の発明は、前記第9の発明において、前記対象物の位置座標が前記有効範囲に含まれないとき、前記第1座標及び前記第2座標を更新して、当該対象物の位置座標を含む位置座標にまで当該有効範囲を移動させる有効範囲移動手段(S91〜S94、S101〜S104、S121〜S129)としてさらに前記コンピュータを動作させる。
【発明の効果】
【0018】
上記第1の発明によれば、位置データの有効範囲を設定し、当該有効範囲における実位置データの値の位置を表す有効範囲位置データを算出し、当該有効範囲位置データの値に応じた演算によって仮想空間内の操作対象の位置を決定するため、対象物の実空間内における位置に応じた新規な感覚の仮想位置決定を行うことが可能となる。
【0019】
上記第2の発明によれば、実位置データの値が有効範囲外のとき、境界を移動させるため、対象物の可動位置を自由に設定でき、自由度が向上する。
【0020】
上記第3の発明によれば、実位置データの値が有効範囲外のとき、境界を移動させるため、対象物の可動位置を自由に設定でき、自由度が向上する。
【0021】
上記第4の発明によれば、実位置データの値が有効範囲外のとき、境界を移動させるため、対象物の可動位置を自由に設定でき、自由度が向上する。
【0022】
上記第5の発明によれば、実位置データの値が第1の境界に一致するとき有効範囲位置データが最大値となり、実位置データの値が第2の境界に一致するとき有効範囲位置データが最小値となるため、対象物の位置に応じた仮想空間内の操作対象の位置を直感的に制御することが可能となる。
【0023】
上記第6の発明によれば、有効範囲の前後に遊び範囲を設けるため、誤操作などによる突発的な有効範囲からの逸脱の影響を軽減することができる。
【0024】
上記第7の発明によれば、境界を移動させるため、対象物の可動位置を自由に設定でき、さらに、有効範囲の移動が徐々に行われるようになるため、誤操作などによる突発的な有効範囲からの逸脱の影響を軽減することができる。
【0025】
上記第8の発明によれば、実位置データの値が第1の位置データに一致するときまたは有効範囲を第1の位置データ側に逸脱するとき、有効範囲位置データが最大値となり、実位置データの値が第2の位置データに一致するときまたは有効範囲を第2の位置データ側に逸脱するとき、有効範囲位置データが最小値となるため、誤操作などによる突発的な有効範囲からの逸脱の影響を軽減させつつ、対象物の位置に応じた仮想空間内の操作対象の位置を直感的に制御することが可能となる。
【0026】
上記第9の発明によれば、位置座標の有効範囲を設定し、当該有効範囲を正規化した場合の対象物の位置座標に対応する値に応じた演算によって仮想位置座標を決定するため、対象物の実空間内における位置に応じた新規な感覚の仮想位置決定を行うことが可能となり、対象物の位置に応じた仮想空間内の操作対象の位置を直感的に制御することが可能となる。
【0027】
上記第10の発明によれば、位置座標が有効範囲外のとき、有効範囲を移動させるため、対象物の可動位置を自由に設定でき、自由度が向上する。
【発明を実施するための最良の形態】
【0028】
(第1の実施形態)
図1を参照して、本発明の第1の実施形態に係る仮想位置決定プログラムを実行するゲームシステム1について説明する。なお、図1は、当該ゲームシステム1を説明するための外観図である。以下、据置型ゲーム装置を一例にして、本発明のゲームシステム1について説明する。
【0029】
図1において、当該ゲームシステム1は、家庭用テレビジョン受像機等のスピーカ2aを備えたディスプレイ(以下、モニタと記載する)2に、接続コードを介して接続される据置型ゲーム装置(以下、単にゲーム装置と記載する)3および当該ゲーム装置3に操作情報を与えるコントローラ7によって構成される。ゲーム装置3は、接続端子を介して受信ユニット6が接続される。受信ユニット6は、コントローラ7から無線送信される送信データを受信し、コントローラ7とゲーム装置3とは無線通信によって接続される。また、ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。ゲーム装置3の上部主面には、当該ゲーム装置3の電源ON/OFFスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置3上部の蓋を開くOPENスイッチが設けられている。ここで、プレイヤがOPENスイッチを押下することによって上記蓋が開き、光ディスク4の脱着が可能となる。
【0030】
また、ゲーム装置3には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード5が必要に応じて着脱自在に装着される。ゲーム装置3は、光ディスク4に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ2に表示する。さらに、ゲーム装置3は、外部メモリカード5に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置3のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
【0031】
コントローラ7は、その内部に備える通信部75(後述)から受信ユニット6が接続されたゲーム装置3へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて送信データを無線送信する。コントローラ7は、主にモニタ2に表示されるゲーム空間に登場するプレイヤオブジェクトを操作するための操作手段である。コントローラ7は、複数の操作ボタン、キー、およびスティック等の操作部が設けられている。また、後述により明らかとなるが、コントローラ7は、当該コントローラ7から見た画像を撮像する撮像情報演算部74を備えている。また、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって赤外光を出力する。
【0032】
次に、図2を参照して、ゲーム装置3の構成について説明する。なお、図2は、ゲーム装置3の機能ブロック図である。
【0033】
図2において、ゲーム装置3は、各種プログラムを実行する例えばリスク(RISC)CPU(セントラルプロセッシングユニット)30を備える。CPU30は、図示しないブートROMに記憶された起動プログラムを実行し、メインメモリ33等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムの実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。CPU30には、メモリコントローラ31を介して、GPU(Graphics Processing Unit)32、メインメモリ33、DSP(Digital Signal Processor)34、およびARAM(Audio RAM)35が接続される。また、メモリコントローラ31には、所定のバスを介して、コントローラI/F(インターフェース)36、ビデオI/F37、外部メモリI/F38、オーディオI/F39、およびディスクI/F41が接続され、それぞれ受信ユニット6、モニタ2、外部メモリカード5、スピーカ2a、およびディスクドライブ40が接続されている。
【0034】
GPU32は、CPU30の命令に基づいて画像処理を行うものあり、例えば、3Dグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。GPU32は、図示しない画像処理専用のメモリやメインメモリ33の一部の記憶領域を用いて画像処理を行う。GPU32は、これらを用いてモニタ2に表示すべきゲーム画像データやムービ映像を生成し、適宜メモリコントローラ31およびビデオI/F37を介してモニタ2に出力する。
【0035】
メインメモリ33は、CPU30で使用される記憶領域であって、CPU30の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ33は、CPU30によって光ディスク4から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ33に記憶されたゲームプログラムや各種データ等がCPU30によって実行される。
【0036】
DSP34は、ゲームプログラム実行時にCPU30において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのARAM35が接続される。ARAM35は、DSP34が所定の処理(例えば、先読みしておいたゲームプログラムやサウンドデータの記憶)を行う際に用いられる。DSP34は、ARAM35に記憶されたサウンドデータを読み出し、メモリコントローラ31およびオーディオI/F39を介してモニタ2に備えるスピーカ2aに出力させる。
【0037】
メモリコントローラ31は、データ転送を統括的に制御するものであり、上述した各種I/Fが接続される。コントローラI/F36は、例えば4つのコントローラI/F36a〜36dで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置3とを通信可能に接続する。例えば、受信ユニット6は、上記コネクタと嵌合し、コントローラI/F36を介してゲーム装置3と接続される。上述したように受信ユニット6は、コントローラ7からの送信データを受信し、コントローラI/F36を介して当該送信データをCPU30へ出力する。ビデオI/F37には、モニタ2が接続される。外部メモリI/F38には、外部メモリカード5が接続され、その外部メモリカード5に設けられたバックアップメモリ等とアクセス可能となる。オーディオI/F39にはモニタ2に内蔵されるスピーカ2aが接続され、DSP34がARAM35から読み出したサウンドデータやディスクドライブ40から直接出力されるサウンドデータをスピーカ2aから出力可能に接続される。ディスクI/F41には、ディスクドライブ40が接続される。ディスクドライブ40は、所定の読み出し位置に配置された光ディスク4に記憶されたデータを読み出し、ゲーム装置3のバスやオーディオI/F39に出力する。
【0038】
図3および図4を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の上面後方から見た斜視図である。図4は、コントローラ7を下面後方から見た斜視図である。
【0039】
図3および図4において、コントローラ7は、例えばプラスチック成型によって形成されたハウジング71を有しており、当該ハウジング71に複数の操作部72が設けられている。ハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【0040】
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、矢印で示す4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
【0041】
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、リング状に4方向の操作部分を備えたプッシュスイッチとその中央に設けられたセンタスイッチとを複合した複合スイッチを上記十字キー72aの代わりに設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー72aの代わりに設けてもかまわない。また、少なくとも4つの方向(前後左右)をそれぞれ示すスイッチに対して、プレイヤによって押下されたスイッチに応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。
【0042】
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、Xボタン、Yボタン、およびBボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、セレクトスイッチ、メニュースイッチ、およびスタートスイッチ等としての機能が割り当てられる。これら操作ボタン72b〜72gは、ゲーム装置3が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。なお、図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0043】
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置3本体の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0044】
また、ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ7から受信ユニット6へ送信データを送信する際、上記コントローラ種別に応じて複数のLED702のうち、種別に対応するLEDが点灯する。
【0045】
一方、ハウジング71下面には、凹部が形成されている。後述で明らかとなるが、ハウジング71下面の凹部は、プレイヤがコントローラ7を把持したときに当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の後面側傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばAボタンとして機能する操作部であり、シューティングゲームにおけるトリガスイッチや、プレイヤオブジェクトを所定オブジェクトに対して注目させる操作等に用いられる。
【0046】
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング70の後面には、コネクタ73が設けられている。コネクタ73は、例えば32ピンのエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【0047】
次に、図5を参照して、コントローラ7の内部構造について説明する。なお、図5(a)は、コントローラ7の上筐体(ハウジング71の一部)を外した状態を示す斜視図である。図5(b)は、コントローラ7の下筐体(ハウジング71の一部)を外した状態を示す斜視図である。ここで、図5(b)に示す基板700は、図5(a)に示す基板700の裏面から見た斜視図となっている。
【0048】
図5(a)において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、水晶振動子703、無線モジュール753、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイコン751(図6参照)に接続される。また、無線モジュール753およびアンテナ754によって、コントローラ7がワイヤレスコントローラとして機能する。なお、水晶振動子703は、後述するマイコン751の基本クロックを生成する。
【0049】
一方、図5(b)において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。そして、操作ボタン72iが撮像情報演算部74の後方の基板700の下主面上に取り付けられていて、それよりさらに後方に、電池705が収容される。電池705とコネクタ73との間の基板700の下主面上には、バイブレータ704が取り付けられる。このバイブレータ704は、例えば振動モータやソレノイドであってよい。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。
【0050】
次に、図6を参照して、コントローラ7の内部構成について説明する。なお、図6は、コントローラ7の構成を示すブロック図である。
【0051】
図6において、コントローラ7は、上述した操作部72および撮像情報演算部74の他に、その内部に通信部75および加速度センサ701を備えている。
【0052】
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コントローラ7の前方から入射する光から赤外線のみを通過させる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ出射する。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。撮像素子743で生成された画像データは、画像処理回路744で処理される。具体的には、画像処理回路744は、撮像素子743から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部75へ出力する。なお、これらの撮像情報演算部74は、コントローラ7のハウジング71に固設されており、ハウジング71自体の方向を変えることによってその撮像方向を変更することができる。後述により明らかとなるが、この撮像情報演算部74から出力される処理結果データに基づいて、コントローラ7の位置や動きに応じた信号を得ることができる。
【0053】
加速度センサ701は、コントローラ7の上下方向、左右方向、および前後方向の3軸でそれぞれ加速度を検知する加速度センサである。なお、加速度センサ701は、必要な操作信号の種類によっては、上下方向および左右方向の2軸でそれぞれ加速度を検出する加速度センサが用いられてもかまわない。加速度センサ701が検知した加速度を示すデータは、通信部75へ出力される。なお、加速度センサ701は、典型的には静電容量式の加速度センサが用いられるが、他の方式の加速度センサやジャイロセンサを用いてもかまわない。この加速度センサ701から出力される加速度データに基づいて、コントローラ7の動きを検出することができる。
【0054】
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。
【0055】
コントローラ7に設けられた操作部72からの操作信号(キーデータ)、加速度センサ701からの加速度信号(加速度データ)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、加速度データ、処理結果データ)を受信ユニット6へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から受信ユニット6への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、受信ユニット6への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて、所定周波数の搬送波を用いて操作情報をその電波信号としてアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からの加速度データ、および撮像情報演算部74からの処理結果データがコントローラ7から送信される。そして、ゲーム装置3の受信ユニット6でその電波信号を受信し、ゲーム装置3で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、加速度データ、および処理結果データ)を取得する。そして、ゲーム装置3のCPU30は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Bluetooth(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【0056】
図7に示すように、ゲームシステム1でコントローラ7を用いてゲームをプレイするためには、プレイヤは、一方の手(例えば右手)でコントローラ7を把持する(図8および図9参照)。そして、プレイヤは、コントローラ7の前面(撮像情報演算部74が撮像する光の入射口側)がモニタ2に向くようにコントローラ7を把持する。一方、モニタ2の表示画面近傍には、2つのマーカ8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって赤外光を出力し、撮像情報演算部74の撮像対象となる。
【0057】
プレイヤがその前面がモニタ2に向くようにコントローラ7を把持することによって、撮像情報演算部74には2つのマーカ8Lおよび8Rが出力した赤外光が入射する。そして、赤外線フィルタ741およびレンズ742を介して、入射した赤外光を撮像素子743が撮像し、当該撮像画像を画像処理回路744が処理する。ここで、撮像情報演算部74では、マーカ8Lおよび8Rから出力される赤外線成分を検出することで、上記撮像画像における当該マーカ8Lおよび8Rの位置(対象画像の位置)や面積情報を取得する。具体的には、画像処理回路744は、撮像素子743が撮像した画像データを解析して、まず面積情報からマーカ8Lおよび8Rからの赤外光ではあり得ない画像を除外し、さらに輝度が高い点をマーカ8Lおよび8Rそれぞれの位置として判別する。そして、撮像情報演算部74は、判別されたそれらの輝点の重心位置等の位置情報を取得し、上記処理結果データとして出力する。ここで、上記処理結果データである位置情報は、撮像画像における所定の基準点(例えば、撮像画像の中央や左上隅)を原点とした座標値として出力するものでもよく、所定のタイミングにおける輝点位置を基準点として、当該基準位置からの現在の輝点位置の差をベクトルとして出力するものでもよい。つまり、上記対象画像の位置情報は、撮像素子743が撮像した撮像画像に対して所定の基準点を設定した場合に、当該基準点に対する差として用いられるパラメータである。このような処理結果データをゲーム装置3へ送信することによって、ゲーム装置3では、基準からの上記位置情報の差に基づいて、マーカ8Lおよび8Rに対する撮像情報演算部74、すなわちコントローラ7の動き、姿勢、位置等に応じた信号の変化量を得ることができる。具体的には、コントローラ7が動かされることによって、通信部75から送信される画像内の高輝度点の位置が変化するため、高輝度点の位置の変化に対応させた方向入力や座標入力を行うことで、3次元空間に対してコントローラ7の移動方向に沿った方向入力や座標入力を行うことができる。なお、後述するゲーム処理動作例では、撮像情報演算部74が撮像画像におけるマーカ8Lおよび8Rの対象画像それぞれの重心位置の座標を取得し、上記処理結果データとして出力する例を用いる。
【0058】
このように、コントローラ7の撮像情報演算部74によって、固定的に設置されたマーカ(実施例では、2つのマーカ8Lおよび8Rからの赤外光)を撮像することによって、ゲーム装置3におけるゲーム処理において、コントローラ7から出力されるデータを処理してコントローラ7の動き、姿勢、位置等に対応した操作が可能となり、ボタンを押下するような操作ボタンや操作キーとは異なった直感的な操作入力となる。また、上述したように上記マーカは、モニタ2の表示画面近傍に設置されているため、マーカに対する位置をモニタ2の表示画面に対するコントローラ7の動き、姿勢、位置等に換算することも容易に行うことができる。つまり、コントローラ7の動き、姿勢、位置等による処理結果データは、モニタ2の表示画面に直接作用する操作入力として用いることができる。なお、ゲームシステム1では、マーカ8Lおよび8Rを撮像した撮像画像を用いて、マーカ8Lおよび8Rからコントローラ7までの距離もモニタ2の表示画面に直接作用する操作入力として用いることができるが、詳細な動作については後述する。
【0059】
図8および図9を参照して、プレイヤがコントローラ7を一方の手で把持した状態について説明する。なお、図8は、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の前面側から見た一例である。図9は、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の左側面側から見た一例である。
【0060】
図8および図9に示すように、コントローラ7は、全体として大人や子供の片手で把持可能な大きさである。そして、プレイヤの親指をコントローラ7の上面(例えば、十字キー72a付近)に添え、プレイヤの人差し指をコントローラ7下面の凹部(例えば、操作ボタン72i付近)に添えたとき、コントローラ7の前面に設けられている撮像情報演算部74の光入射口がプレイヤの前方方向に露出する。なお、このようなコントローラ7に対する把持状態は、プレイヤの左手であっても同様に行えることは言うまでもない。
【0061】
このように、コントローラ7は、プレイヤが片手で把持した状態で十字キー72aや操作ボタン72i等の操作部72を容易に操作することができる。さらに、プレイヤがコントローラ7を片手で把持したとき、当該コントローラ7の前面に設けられている撮像情報演算部74の光入射口が露出するため、上述した2つのマーカ8Lおよび8Rからの赤外光を容易に当該光入射口から取り入れることができる。つまり、プレイヤは、コントローラ7が有する撮像情報演算部74の機能を阻害することなくコントローラ7を片手で把持することができる。したがって、プレイヤがコントローラ7を把持した手を表示画面に対して動かすことによって、コントローラ7は、プレイヤの手の運動が表示画面に直接作用する操作入力機能をさらに備えることができる。
【0062】
ここで、図10に示すように、マーカ8Lおよび8Rは、それぞれ視野角θ1を有している。また、撮像素子743は、視野角θ2を有している。例えば、マーカ8Lおよび8Rの視野角θ1は共に34°(半値角)であり、撮像素子743の視野角θ2は41°である。そして、撮像素子743の視野角θ2の中にマーカ8Lおよび8Rが共に存在し、マーカ8Lの視野角θ1の中でかつマーカ8Rの視野角θ1の中に撮像素子743が存在するとき、ゲーム装置3は、2つのマーカ8Lおよび8Rによる高輝度点に関する位置データを用いてコントローラ7の位置(マーカ8Lおよび8Rからの距離を含む)を検出する。
【0063】
次に、ゲームシステム1において行われるゲーム処理の詳細を説明する。まず、図11を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図11は、ゲーム装置3のメインメモリ33に記憶される主なデータを示す図である。
【0064】
図11に示すように、メインメモリ33には、操作情報Da、操作状態情報Db、および操作対象情報Dc等が記憶される。なお、メインメモリ33には、図11に示す情報に含まれるデータの他、ゲームに登場するプレイヤキャラクタに関するデータ(プレイヤキャラクタの画像データや位置データ等)やゲーム空間に関するデータ(地形データ等)等、ゲーム処理に必要なデータが記憶される。
【0065】
操作情報Daは、コントローラ7から送信データとして送信されてくる一連の操作情報であり、最新の操作情報に更新される。操作情報Daには、上述の処理結果データに相当する第1座標データDa1および第2座標データDa2が含まれる。第1座標データDa1は、撮像素子743が撮像した撮像画像に対して、2つのマーカ8Lおよび8Rのうちの一方の画像の位置(撮像画像内における位置)を表す座標のデータである。第2座標データDa2は、他方のマーカの画像の位置(撮像画像内における位置)を表す座標のデータである。例えば、マーカの画像の位置は、撮像画像におけるXY座標系によって表される。
【0066】
また、操作情報Daには、撮像画像から得られる処理結果データの一例の座標データ(第1座標データDa1および第2座標データDa2)の他、操作部72から得られるキーデータDa3および加速度センサ701から得られる加速度データDa4等が含まれる。なお、ゲーム装置3に備える受信ユニット6は、コントローラ7から所定間隔例えば5msごとに送信される操作情報Daを受信し、受信ユニット6に備える図示しないバッファに蓄えられる。その後、ゲーム処理間隔である例えば1フレーム毎(1/60秒)に読み出され、その最新の情報がメインメモリ33に記憶される。
【0067】
操作状態情報Dbは、コントローラ7の操作状態を撮像画像に基づいて判断した情報である。操作状態情報Dbは、撮像画像に含まれる対象画像(マーカ)の位置や向きから得られるデータであり、具体的には、方向データDb1、中点データDb2、距離データDb3、有効範囲データDb4、および前後位置パラメータDb5等を含む。方向データDb1は、第1座標データDa1から第2座標データDa2への方向を示すデータである。ここでは、方向データDb1は、第1座標データDa1の位置を始点とし第2座標データDa2の位置を終点とするベクトルのデータとする。中点データDb2は、第1座標データDa1と第2座標データDa2との中点の座標を示す。ここで、2つのマーカ(マーカ8Lおよび8R)の画像を1つの対象画像としてみた場合、中点データDb2は、対象画像の位置を示すことになる。距離データDb3は、第1座標データDa1および第2座標データDa2に基づいて算出された、マーカ8Lおよび8Rからコントローラ7までの距離dを示すデータである。有効範囲データDb4は、ゲーム処理に用いるパラメータを得るために距離dに応じて設定される後述の有効範囲を示すデータであり、有効範囲の長さ(range)や有効範囲の両端(min、max)や伸長長さ(a1、a2)を示すデータで構成される。前後位置パラメータDb5は、上記有効範囲に対するコントローラ7の位置(すなわち、距離d)に応じて算出されるパラメータrであり、例えば3次元仮想ゲーム空間の奥行を示すパラメータ等としてゲーム処理に用いられる。
【0068】
操作対象情報Dcは、画面上またはゲーム空間内における操作対象の姿勢および位置や指示位置を示す情報である。ここで、操作対象とは、画面に表示されているオブジェクトや、仮想ゲーム空間に登場するオブジェクトの他、3次元の仮想ゲーム空間が構築される場合には、当該仮想ゲーム空間を画面に表示するための仮想カメラであってもよい。また、操作対象情報Dcには、姿勢データDc1、対象位置データDc2、指示位置データDc3、および奥行位置データDc4が含まれる。姿勢データDc1は、操作対象の姿勢を示すデータである。対象位置データDc2は、操作対象のゲーム空間における位置、または、画面上における位置を示すデータである。指示位置データDc3は、第1座標データDa1および第2座標データDa2から得られるコントローラ7によって指し示されるモニタ2の画面上の位置や3次元仮想ゲーム空間の縦横位置を示すデータである。奥行位置データDc4は、前後位置パラメータDb5から得られる3次元仮想ゲーム空間の奥行位置を示すデータである。
【0069】
次に、図12〜図19を参照して、ゲーム装置3において行われるゲーム処理の詳細を説明する。なお、図12は、ゲーム装置3において実行されるゲーム処理の流れを示すフローチャートである。図13は、図12におけるステップ52の操作状態情報、指示位置データ、および奥行位置データ算出処理の詳細な動作を示すサブルーチンである。図14は、図13におけるステップ62およびステップ65の距離d算出処理の詳細な動作を示すサブルーチンである。図15は、図13におけるステップ66の前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチンである。図16は、距離dを算出する動作を説明するための図である。図17は、図13に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図である。図18および図19は、前後位置パラメータrと3次元ゲーム空間に設定される奥行位置データzとの関係を示す図である。なお、図12〜図15に示すフローチャートにおいては、ゲーム処理のうち、コントローラ7に関するゲーム操作に基づいて行われるゲーム処理について説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図12〜図15では、CPU30が実行する各ステップを「S」と略称する。
【0070】
ゲーム装置3の電源が投入されると、ゲーム装置3のCPU30は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ33等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリ33に読み込まれ、CPU30によって当該ゲームプログラムの実行が開始される。図12〜図15に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【0071】
図12において、CPU30は、コントローラ7から受信した操作情報を取得し(ステップ51)、処理を次のステップに進める。そして、CPU30は、操作情報を操作情報Daとしてメインメモリ33に記憶する。ここで、ステップ51で取得される操作情報には、マーカ8Lおよび8Rの撮像画像内における位置を示す座標データ(第1座標データDa1および第2座標データDa2)の他、コントローラ7の操作部72がどのように操作されたか示すデータ(キーデータDa3)、および加速度センサ701が検出した加速度を示すデータ(加速度データDa4)が含まれている。ここでは、通信部75は、所定の時間間隔(例えば5ms間隔)で操作情報をゲーム装置3へ送信する。そして、CPU30は、1フレーム毎に操作情報を利用するものとする。したがって、図12に示すステップ51〜ステップ57の処理ループは、1フレーム毎に繰り返し実行される。
【0072】
次に、CPU30は、操作状態情報、指示位置データ、および奥行位置データを算出し(ステップ52)、処理を次のステップに進める。操作状態情報、指示位置データ、および奥行位置データの算出処理においては、コントローラ7から送信され記憶された第1座標データDa1および第2座標データDa2に基づいて、コントローラ7の操作状態(コントローラ7の動き、位置、姿勢等)が算出される。以下、図13を参照して、ステップ52における詳細な動作について説明する。
【0073】
図13において、CPU30は、初期設定を行うか否かを判断する(ステップ61)。例えば、CPU30は、既に有効範囲が設定されている場合に初期設定済と判断して(ステップ61でNo)、処理を次のステップ64に進める。一方、CPU30は、有効範囲が未設定の場合や第1座標データDa1および第2座標データDa2が一度途切れて再設定された(つまり、撮像素子743の撮像範囲にマーカ8Lおよび8Rが含まれる状態から一度マーカ8Lおよび8Rが撮像範囲から外れて、再度撮像範囲にマーカ8Lおよび8Rが含まれる状態となった)場合に初期設定要と判断して(ステップ61でYes)、処理を次のステップ62に進める。
【0074】
ステップ62において、CPU30は、第1座標データDa1および第2座標データDa2を用いて距離dを算出して距離データDb3としてメインメモリ33に格納する。以下、図14および図16を参照して、距離dの算出処理の詳細な動作について説明する。
【0075】
図14および図16において、CPU30は、撮像画像内での2点間の距離mi(図16参照)を算出する(ステップ81)。ここで、上記2点は、マーカ8Lおよび8Rを撮像した画像に相当し、それぞれの座標を第1座標データDa1および第2座標データDa2として得ている。したがって、CPU30は、第1座標データDa1および第2座標データDa2を用いれば、距離miを算出することができる。
【0076】
次に、CPU30は、マーカ8Lおよび8Rの設置位置に対する撮像素子743の撮像可能範囲の幅w(図16参照)を算出する(ステップ82)。ここで、幅wは、
w=wi×m/mi
で算出される。ここで、mは、マーカ8Lおよび8Rの設置間隔(例えば、30cm)であり、固定値である。また、wiは、幅wに対応する撮像素子743の撮像画像の幅wiであり、固定値である。これら設置間隔mおよび幅wiは、いずれも固定値であるため、予めゲーム装置3内の記憶手段(図示せず)に格納される。なお、設置間隔mについては、プレイヤの設置環境に応じて任意の間隔でマーカ8Lおよび8Rを設置してもかまわない。この場合、マーカ8Lおよび8Rを設置した間隔を設置間隔mとしてプレイヤが入力するようにすれば、上記数式を同様に扱うことができる。
【0077】
次に、CPU30は、幅wおよび撮像素子743の視野角θを用いて、マーカ8Lおよび8Rと撮像素子743(コントローラ7)との距離dを算出し(ステップ83;図16参照)、当該サブルーチンによる処理を終了する。ここで、距離dは、
tan(θ/2)=(w/2)/d=w/2d
の関係式から算出することができる。ここで、視野角θは固定値であるため、予めゲーム装置3内の記憶手段(図示せず)に格納される。
【0078】
図13に戻り、ステップ62における距離dの算出処理の後、CPU30は、距離dに応じた有効範囲を設定し(ステップ63)、処理を次のステップ64に進める。後述により明らかとなるが、有効範囲は、その長さrange、前端位置min、および後端位置maxによって設定される範囲である。例えば、CPU30は、ステップ62で得られた距離dが有効範囲の中央位置、前端位置min、または後端位置maxとなるように有効範囲を設定する。
【0079】
ステップ64において、CPU30は、第1座標データDa1から第2座標データDa2への方向データDb1を算出する。具体的には、CPU30は、第1座標データDa1および第2座標データDa2を参照して、第1座標データDa1の位置を始点とし第2座標データDa2の位置を終点とするベクトルを算出する。そして、CPU30は、算出されたベクトルのデータを、方向データDb1としてメインメモリ33に記憶する。方向データDb1と所定の基準方向との差によって、コントローラ7の撮像面に垂直な方向を軸とする回転を算出することができる。
【0080】
また、CPU30は、第1座標データDa1と第2座標データDa2との中点を示す中点データDb2を算出する。具体的には、CPU30は、第1座標データDa1および第2座標データDa2を参照して、当該中点の座標を算出する。そして、CPU30は、算出された中点の座標のデータを、中点データDb2としてメインメモリ33に記憶する。ここで、中点データDb2は、撮像画像内における対象画像(マーカ8Lおよび8R)の位置を示している。中点データDb2と所定の基準位置との差によって、コントローラ7の位置の変化による画像位置の変化を算出することができる。
【0081】
次に、CPU30は、第1座標データDa1および第2座標データDa2を用いて距離dを算出して距離データDb3としてメインメモリ33に格納し(ステップ65)、処理を次のステップに進める。この距離dの算出処理は、図14および図16を参照して説明した距離dの算出処理の詳細な動作と同様であるため、ここでは詳細な説明を省略する。
【0082】
次に、CPU30は、前後位置パラメータrの算出および有効範囲を再設定する処理を行い(ステップ66)、処理を次のステップに進める。以下、図15および図17を参照して、前後位置パラメータ算出および有効範囲再設定処理の詳細な動作について説明する。
【0083】
まず、有効範囲について説明する。ここで、有効範囲とは、ある基準に対するコントローラ7の位置として決定される範囲である。そして、この有効範囲を基準としたコントローラの7位置に応じた値がゲームプログラムに与えられ、ゲーム処理に利用される。本実施例では、コントローラ7の位置を表す値として、マーカ8Lおよび8Rからコントローラ7の先端までの距離dを用いる。したがって、距離dに対して有効範囲が設定され、その有効範囲の下限を0、上限を1とし、当該コントローラ7の位置に応じた値として、この有効範囲におけるコントローラ7の位置に応じた0から+1の間の値が選ばれる。例えば、有効範囲の幅として、プレイヤが把持したコントローラ7をその場で無理なく振れる幅、例えば10cm〜40cm程度が予め決められている。例えば、有効範囲の幅が30cmであり、マーカ8Lおよび8Rからコントローラ7の初期位置までの距離が1m15cmであるときには、有効範囲は例えばマーカ8Lおよび8Rからの距離で1m〜1m30cmの範囲に設定される。そして、距離1m15cmの位置に応じた値である0.5という値がゲーム処理に利用される。なお、この説明では、コントローラ7の位置を中心に有効範囲を設定するが、これに限られずコントローラ7の初期位置を含むように有効範囲を設定すればよい。
【0084】
以下、図17を参照して説明する。まず、図17(a)は、プレイヤUがマーカ8Lおよび8Rに対して前後にコントローラ7を動かした場合を示す図である、図17(a)における符号dは、マーカ8Lおよび8Rからコントローラ7を向いた方向の距離を示し、符号d1、d2、d3、d4、およびd5は、マーカ8Lおよび8Rからコントローラ7の先端までの距離を示す。また、図17(b)は、有効範囲とコントローラ7との位置関係およびそのときゲーム処理に利用される値(前後位置パラメータ)rの出し方を示す図である。有効範囲の幅(長さ)をrange、前端位置(マーカ8Lおよび8Rから最も近い有効範囲の端までの距離)をmin、後端位置(マーカ8Lおよび8Rから最も遠い有効範囲の端までの距離)をmaxとして示しており、range=max−minとなる。本実施形態では、上述した有効範囲を基準として、コントローラ7(厳密には、撮像素子743)が当該有効範囲の前端位置minに配置されたとき、前後位置パラメータr=0が算出されるように設定される。また、コントローラ7が有効範囲の後端位置maxに配置されたとき、前後位置パラメータr=1が算出されるように設定される。そして、コントローラ7が有効範囲の前端位置minと後端位置maxとの間に配置されたとき、その配置位置に応じて前後位置パラメータrが0〜1の間で算出されるように設定される。また、コントローラ7を把持したプレイヤが当該コントローラ7を有効範囲の前後に逸脱する位置まで動かしたとき、そのコントローラ7の移動位置が前端位置minまたは後端位置maxとなるように即時に有効範囲が移動する。
【0085】
具体的には、図17(a)の状態Aに示すように、コントローラ7が距離d3にあり、その有効範囲が距離d2から距離d4に設定されている場合に、距離d2を0で距離d4を1とした有効範囲における距離d3の位置に応じた値rとして例えば1/3(0.33)が求められ、その値rがゲーム処理に利用される。また、状態Bに示すように、コントローラ7を距離d3の位置から距離d2の位置にまで移動させると、その移動に伴って0.33〜0までの値rが求められる。そして、状態Cに示すように、さらにコントローラ7が移動され距離d1の位置にまで移動させる際には、そのコントローラ7の移動とともに有効範囲が移動し、このときの値rは0のままである。その後、状態Dに示すように、コントローラ7の位置が距離d1から距離d2にまで移動されると、有効範囲はそのままでその有効範囲におけるコントローラ7の位置に応じた値rとして例えば1/3(0.33)が求められる。
【0086】
以下、図15を参照して、このような前後位置パラメータrの算出および有効範囲の再設定を可能する動作を説明する。図15において、CPU30は、上記ステップ65で算出した距離dが前端位置minより短いか否か(ステップ91)、および距離dが後端位置maxより長いか否か(ステップ92)を判断する。そして、CPU30は、距離dが前端位置minより短い場合(図17(a)の状態B→状態Cへの変化)、処理を次のステップ93に進める。また、CPU30は、距離dが後端位置maxより長い場合、処理を次のステップ94に進める。一方、CPU30は、距離dが有効範囲内(つまり、距離dが前端位置min以上で後端位置max以下)の場合(図17(a)の状態Aや状態D)、有効範囲をそのままにして処理を次のステップ95に進める。
【0087】
ステップ93において、CPU30は、有効範囲の前方に逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ95に進める。具体的には、CPU30は、有効範囲の前端位置minを現在の距離dに変更し、後端位置maxを現在の距離d+長さrangeに変更して、それぞれメインメモリ33に格納する。また、ステップ94において、CPU30は、有効範囲の後方に逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ95に進める。具体的には、CPU30は、有効範囲の後端位置maxを現在の距離dに変更し、前端位置minを現在の距離d−長さrangeに変更して、それぞれメインメモリ33に格納する。これらステップ93およびステップ94の処理によって、プレイヤがコントローラ7を有効範囲の前後に逸脱する位置まで動かしたとき、そのコントローラ7の移動位置が即時に前端位置minまたは後端位置maxとなるように有効範囲が移動する。
【0088】
ステップ95において、CPU30は、距離dおよび有効範囲に応じて前後位置パラメータrを算出する処理を行い、当該サブルーチンによる処理を終了する。具体的には、CPU30は、前後位置パラメータrを
r=(d−min)/range
で算出(正規化)する。このステップ95の処理によって、有効範囲およびコントローラ7の配置位置に応じて、前後位置パラメータrが0〜1の間で算出される。
【0089】
図13に戻り、ステップ66における前後位置パラメータ算出および有効範囲再設定処理の後、CPU30は、前後位置パラメータrに応じて奥行位置データzを設定し(ステップ67)、処理を次のステップに進める。奥行位置データzは、ゲーム空間内の奥行方向の座標を算出するための値であり、奥行位置データDc4としてメインメモリ33に格納される。
【0090】
奥行位置データzは、例えば図18および図19に示すように、3次元仮想空間を用いるゲームにおける仮想カメラのカメラ座標系におけるz座標の値を増減させて、プレイヤキャラクタPを移動させる場合には、カメラ座標系におけるz座標の値を奥行位置データzとする。当該z座標には所定の範囲が設定され、当該範囲を基準として、前後位置パラメータrの値に対応して、z座標の値が設定される。カメラ座標系のz座標の他に、x座標およびy座標が設定されれば、所定の変換関数によって、プレイヤキャラクタPのワールド座標系における座標が決定され、後述の処理によって対象位置データDc2としてメインメモリ33に格納される。x座標およびy座標は、予め設定された固定値であってもよいし、後述の処理によって操作入力から算出されるものであってもよい。図18に示す例は、x座標およびy座標の値が奥行方向の移動とは独立の値をとるものであって、x座標およびy座標の値を変化させずに奥行位置データzに応じてプレイヤキャラクタPをゲーム空間内で移動させた場合、プレイヤキャラクタPは、仮想カメラCの視線方向に対して平行に移動することになる。図19に示す例は、奥行方向の移動を行った場合にも画面上の同じ位置にプレイヤキャラクタPを表示させるように、z座標の値に応じてx座標およびy座標の値を変化させるものである。
【0091】
また、例えばカメラ座標系とワールド座標系との軸方向が同一方向に設定されている場合には、当該ワールド座標系におけるz座標の値を奥行位置データzとして全体の処理を行ってもよい。当該z座標には所定の範囲が設定され、当該範囲を基準として、前後位置パラメータrの値に対応して、z座標の値が設定される。この場合当該奥行位置データzをそのまま対象位置データDc2のz成分とすればよく、座標変換の処理コストが必要ない。このように、移動方向に沿った軸が存在していれば、ワールド座標系やカメラ座標系における何れかの座標成分を奥行位置データzとして設定する処理を行えばよい。
【0092】
移動方向に沿った軸が設定されていない場合には、奥行位置データzを奥行方向に対応した所定のパラメータとして全体の処理を行ってもよい。ワールド座標系内に奥行方向の成分を含む移動方向に沿って所定の範囲が設定され、当該範囲内での位置を表すパラメータとして奥行位置データzが設定され、所定の関数によって対象位置データDc2が算出される。したがって、この場合には奥行位置データzは前後位置パラメータr自体であってもよい。
【0093】
次に、CPU30は、指示位置データを算出し(ステップ68)、当該サブルーチンによる処理を終了する。CPU30は、上記ステップ64で算出した方向データDb1および中点データDb2を用いて、指示位置データDc3を算出し、メインメモリ33に格納する。
【0094】
例えば、モニタ2の上面に2つのマーカ8Lおよび8Rを設置し(図7参照)、上面が上方向を向いたコントローラ7を用いてプレイヤがモニタ2の画面の中央を指し示した場合(撮像情報演算部74の撮像画像の中央に画面中央が撮像されている状態)を考える。このとき、撮像情報演算部74の撮像画像において、対象画像の中点(マーカ8Lおよび8Rの中点)位置と指示位置(画面中央)とが一致しない。具体的には、上記撮像画像における対象画像の位置は撮像画像の中心から上方の位置となる。このような位置に対象画像が位置する場合に、画面中央を指示するという基準位置の設定がなされていれば、コントローラ7の移動に対応して、撮像画像中の対象画像の位置も移動する(移動方向は逆方向となる)ので、撮像画像中の対象画像の位置の移動に対応させて画面内の指示位置を移動させる処理を行い、コントローラ7の移動方向に対応した画面内の位置を指示することができる。ここで、基準位置の設定は、予めプレイヤが画面の所定位置を支持し、そのときの対象画像の位置を基準となる指示位置と対応させて記憶しておくようにしてもよいし、対象画像と画面との位置関係が固定的であれば、予め設定されていても良い。このような指示位置は、中点データDb2からモニタ2の画面上の座標(指示位置データDc3)を算出する関数を用いて算出される。この関数は、ある撮像画像から算出される中点座標の値を、当該撮像画像が撮像される時のコントローラ7によって指し示される画面上の位置(指示位置)を表す座標に変換するものである。この関数によって、中点座標から画面上の指示位置を算出することができる。なお、中点座標をゲーム空間内における位置を表す座標に変換する場合には、上記関数によって算出される画面上の位置を、当該画面上における位置に対応するゲーム空間内における位置にさらに変換すればよい。なお、画面上における位置に対応するゲーム空間内における位置とは、画面上における位置に表示されるゲーム空間内における位置や指示位置データDc3および奥行位置データDc4によって指定されるゲーム空間の3次元座標値等である。
【0095】
しかしながら、上面が上方向以外(例えば、右方向)を向いたコントローラ7を用いてプレイヤがモニタ2の画面の中央を指し示した場合、上記撮像画像における対象画像の位置は撮像画像の中心から上方以外(例えば、左方)の方向にずれた位置となる。つまり、コントローラ7の傾きによって、コントローラ7の移動方向と、画面内での指示位置の移動方向が一致しないことになる。そこで、方向データDb1に基づいて、中点データDb2を補正する。具体的には、ステップ64で算出された中点データDb2を、コントローラ7の上面が上方向を向いた状態であるとした場合における中点座標に補正する。より具体的には、上記基準位置の設定の際には方向データの基準も設定され、ステップ64で算出された中点データDb2を、方向データDb1と当該基準方向との角度差に応じた量だけ、撮像画像の中心を軸として中点データDb2が示す座標を回転移動させて補正する。そして、補正された中点データDb2を用いて上述したように指示位置データDc3を算出する。
【0096】
上記の指示位置データDc3の算出処理の本質的な原理は、コントローラ7の移動による対象画像の位置の変化によって、指示すべき2次元座標の所定の基準位置からの変位を算出し、座標を設定するというものである。したがって、上記の指示位置データDc3の算出処理(ステップ66)は、画面内の位置に対応した座標系に限らず、2次元座標の入力として幅広く用いることができる。例えば、図18および図19を用いて述べたように、奥行位置データDc4をワールド座標系におけるz座標の値とする場合には、指示位置データDc3を当該ワールド座標系におけるx座標およびy座標の値として用い、3次元座標を設定することもできる。その場合の指示位置データ算出処理は、画面とは無関係に、対象画像の移動を当該ワールド座標系におけるx座標およびy座標の基準位置からの移動に対応付ける算出処理を行えばよい。また、x座標およびy座標の値が予め設定された固定値である場合のように、奥行以外の入力を必要としない場合には、上記指示位置データの設定は行われなくてもよい。
【0097】
図12に戻り、ステップ52の操作状態情報、指示位置データ、および奥行位置データの算出処理の後、CPU30は、コントローラ7によって操作される操作対象を設定し(ステップ53)、処理を次のステップに進める。CPU30は、コントローラ7に設けられた操作部72、撮像情報演算部74、加速度センサ701等に対して、それぞれの操作対象を設定する。
【0098】
一例として、操作対象は、ゲーム進行やプレイヤの操作に応じて適宜変更される。例えば、コントローラ7に設けられた撮像情報演算部74からの信号による操作対象、つまり、上述の指示位置データDc3および奥行位置データDc4等の値に基づく操作を行う対象を、上記指示位置や奥行位置を変換した仮想ゲーム世界内における位置に存在するオブジェクトとする。また、撮像情報演算部74からの信号以外の操作手段を用いてさらに別の対象を同時に操作する場合も想定される。例えばコントローラ7に設けられた十字キー72aの操作対象を、仮想ゲーム世界に登場するオブジェクトのうち、現在モニタ2に表示されている何れかのオブジェクトとする。
【0099】
他の例として、操作対象を動的に変更する必要が無い場合には、操作対象は固定的に設定される。例えば、コントローラ7に設けられた撮像情報演算部74からの信号による操作対象を、仮想ゲーム空間に登場するプレイヤキャラクタや仮想ゲーム空間を画面に表示するための仮想カメラ等に固定的に設定する。なお、操作対象が固定的に設定される場合、処理ループ毎に繰り返し設定することが不要であるため、ステップ53は、ゲーム処理の初期設定においてのみ実行してもかまわない。
【0100】
次に、CPU30は、操作対象に対する処理を行う(ステップ54)。ステップ54において、CPU30は、ステップ53で設定した操作対象に対して、姿勢データDc1や対象位置データDc2の更新を行う。例えば、指示位置データDc3と、奥行位置データDc4とから算出される3次元座標を算出し、対象位置データDc2として更新を行う。また、当該3次元座標は、奥行以外の位置が固定的に設定されている場合には、当該設定された値と奥行位置データDc4とから算出されるようにしてもよい。そして、コントローラ7に設けられた撮像情報演算部74の操作対象がプレイヤキャラクタ、ゲーム空間内のオブジェクト、または仮想カメラ等である場合、対象位置データDc2で示される位置に当該プレイヤキャラクタ、オブジェクト、または仮想カメラの位置を移動させる。当該移動に応じて姿勢データDc1は適宜算出され、更新される。また、操作対象が仮想カメラの場合には、対象位置データDc2で示される位置を注視点とするように、仮想カメラの姿勢データDc1を更新するという処理を行うこともできる。また、撮像情報演算部74の操作対象以外の操作手段に対する操作対象についても、操作に基づいた処理が行われる。
【0101】
次に、CPU30は、表示処理を行い(ステップ56)、処理を次のステップに進める。CPU30は、メインメモリ33に記憶されている操作対象情報Dcやゲーム画像の生成に必要なデータ(プレイヤキャラクタの画像および位置データや地形データ等)を参照し、ゲーム画像を生成する。具体的には、上記ステップ54において位置や姿勢が更新されたオブジェクトの画像であったり、位置や姿勢が更新された仮想カメラから見た仮想空間の画像であったりする。そして、CPU30は、生成した画像をモニタ2の画面に表示させる。
【0102】
次に、CPU30は、ゲームを終了するか否かを判断する(ステップ57)。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件(例えば、プレイヤキャラクタの体力を示すパラメータが0になったこと等)が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。CPU30は、ゲームを終了しない場合に上記ステップ51に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【0103】
このように、コントローラ7の撮像情報演算部74によって固定的に設置されたマーカ(実施例では、2つのマーカ8Lおよび8Rからの赤外光)を撮像することによって、当該マーカに対するコントローラ7の上下左右方向の位置のみでなく、マーカおよびコントローラ7間の距離にも対応した新規な3次元入力可能な操作装置としての機能を実現することができる。また、マーカおよびコントローラ7間の距離に対応する入力は、非常に遠距離まで入力可能な範囲が存在するが、当該操作ポジションに応じて適切な入力が可能となる有効範囲が設定されるために、距離の増減に対応しながらゲーム処理に適した適切な入力が可能となる。さらに、プレイヤの操作ポジションに応じて有効範囲が移動するため、プレイヤがどのようなポジションでコントローラ7を操作しても同様の操作感覚が得られるため、操作を行う位置の自由度が向上する。また、本実施形態では、有効範囲の前後にコントローラ7の位置が逸脱した場合、即時にコントローラ7の位置に応じて当該有効範囲が移動するため、コントローラ7とマーカとの距離を敏感に反応させるゲーム処理に好適である。
【0104】
(第2の実施形態)
次に、本発明の第2の実施形態に係るゲームシステムについて説明する。なお、第2の実施形態に係るゲームシステムは、第1の実施形態で説明したゲームシステム1に対して、前後位置パラメータrの算出および有効範囲を再設定する処理の動作(図13のステップ66参照)のみが異なり、他のシステム構成や他の動作は第1の実施形態と同様である。したがって、第2の実施形態の説明において、第1の実施形態と同一の要素には同一の参照符号を付し、第1の実施形態と同一のステップには同一のステップ番号を付して、詳細な説明を省略する。
【0105】
図20〜図22を参照して、第2の実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作について説明する。なお、図20は、当該実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチンである。図21は、図20におけるステップ106の後述する丸め処理の詳細な動作を示すサブルーチンである。図22は、図20に示したサブルーチンに応じて、前後位置パラメータrを算出し、有効範囲を設定する動作を説明するための図である。
【0106】
まず、図22を参照して、第2の実施形態で用いられる有効範囲について説明する。当該実施形態における有効範囲も、コントローラ7を把持したプレイヤが当該コントローラ7をマーカ8Lおよび8Rに近づけるまたは遠ざけるように動かす、すなわち距離dが変化するような操作に応じてゲーム処理に用いられる前後位置パラメータrを得るために設定される範囲である。したがって、本実施形態の処理において、コントローラ7の位置として扱われる値は、具体的にはその時点における距離dの値である。有効範囲は、距離dに対する範囲であって、その範囲の長さがrange、前端位置(マーカ8Lおよび8Rから最も近い有効範囲の端までの距離)がmin、および後端位置(マーカ8Lおよび8Rから最も遠い有効範囲の端までの距離)がmaxとして設定される。したがって、長さrange=max−minとなる。
【0107】
上述した有効範囲を基準として、コントローラ7(厳密には、撮像素子743)が当該有効範囲の前端位置minに配置されたとき、前後位置パラメータr=0が算出されるように設定される(例えば、図22(a)の状態B)。また、コントローラ7が有効範囲の後端位置maxに配置されたとき、前後位置パラメータr=1が算出されるように設定される。そして、コントローラ7が有効範囲の前端位置minと後端位置maxとの間に配置されたとき、その配置位置に応じて前後位置パラメータrが0〜1の間で算出されるように設定される(例えば、図22(a)の状態A)。
【0108】
本実施形態では、有効範囲の前後にそれぞれ範囲長さpの遊び範囲がさらに設けられる。遊び範囲は、コントローラ7の位置が有効範囲から逸脱する場合であっても有効範囲の移動を行わない領域であって、有効範囲の前後にそれぞれ有効範囲と連続して形成される。そして、コントローラ7が有効範囲の前端側に形成された遊び範囲内に配置されたとき、前後位置パラメータr=0が算出されるように設定される(例えば、図22(a)の状態C)。また、コントローラ7が有効範囲の後端側に形成された遊び範囲内に配置されたとき、前後位置パラメータr=1が算出されるように設定される。つまり、コントローラ7を把持したプレイヤが当該コントローラ7を有効範囲の前後に形成された遊び範囲内に逸脱したとき、当該遊び範囲と有効範囲との境界となる前端位置minまたは後端位置maxと同じ前後位置パラメータrが算出される。
【0109】
ここで、コントローラ7が遊び範囲内に配置されているときは、有効範囲の前後に逸脱する位置まで動かされていることになるが、コントローラ7が有効範囲または遊び範囲内に配置されている限り、有効範囲が移動することはない(例えば、図22(a)の状態C→状態Dへの変化)。一方、コントローラ7を把持したプレイヤが当該コントローラ7を遊び範囲からも逸脱する位置まで動かしたとき、そのコントローラ7の移動位置が前端位置minまたは後端位置maxとなるように即時に有効範囲が移動する(例えば、図22(a)の状態C→状態Eへの変化)。
【0110】
以下、図20を参照して、このような前後位置パラメータrの算出および有効範囲の再設定を可能する動作を説明する。図20において、CPU30は、上記ステップ65(図13参照)で算出した距離dが前端位置min−pより短いか否か(ステップ101;つまり、前方の遊び範囲の端より逸脱しているかどうか)、および距離dが後端位置max+pより長いか否か(ステップ102;つまり、後方の遊び範囲の端より逸脱しているかどうか)を判断する。そして、CPU30は、距離dが前端位置min−pより短い場合(図22(a)の状態C→状態Eへの変化)、処理を次のステップ103に進める。また、CPU30は、距離dが後端位置max+pより長い場合、処理を次のステップ104に進める。一方、CPU30は、距離dが有効範囲または遊び範囲内(つまり、距離dが前端位置min−p以上で後端位置max+p以下)の場合(図22(a)の状態A〜状態D)、有効範囲をそのままにして処理を次のステップ105に進める。
【0111】
ステップ103において、CPU30は、前方の遊び範囲から逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ105に進める。具体的には、CPU30は、有効範囲の前端位置minを現在の距離dに変更し、後端位置maxを現在の距離d+長さrangeに変更して、それぞれメインメモリ33に格納する。また、ステップ104において、CPU30は、後方の遊び範囲から逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ105に進める。具体的には、CPU30は、有効範囲の後端位置maxを現在の距離dに変更し、前端位置minを現在の距離d−長さrangeに変更して、それぞれメインメモリ33に格納する。これらステップ103およびステップ104の処理によって、プレイヤがコントローラ7を遊び範囲からも前後に逸脱する位置まで動かしたとき、そのコントローラ7の移動位置が即時に前端位置minまたは後端位置maxとなるように有効範囲が移動する。
【0112】
ステップ105において、CPU30は、距離dおよび有効範囲に応じて前後位置パラメータrを算出する処理を行う。そして、CPU30は、算出された前後位置パラメータrの値を丸める処理を行い(ステップ106)、当該サブルーチンによる処理を終了する。具体的には、ステップ105において、CPU30は前後位置パラメータrを
r=(d−min)/range
で算出する。そして、ステップ106の処理によって、有効範囲および遊び範囲に対するコントローラ7の配置位置に応じて、前後位置パラメータrが0〜1の間に丸められて算出される。
【0113】
図21を用いて、丸め処理について説明する。CPU30は、算出した前後位置パラメータrが0より小さいか(ステップ111)、および算出した前後位置パラメータrが1より大きいか(ステップ112)を判断する。そして、CPU30は、前後位置パラメータrが0より小さい場合、前後位置パラメータr=0にして(ステップ113)、当該サブルーチンによる処理を終了する。一方、CPU30は、前後位置パラメータrが1より大きい場合、前後位置パラメータr=1にして(ステップ114)、当該サブルーチンによる処理を終了する。なお、CPU30は、前後位置パラメータrが0以上1以下である場合、rに変更を加えず、そのまま当該サブルーチンによる処理を終了する。
【0114】
このように、第2の実施形態においても、非常に遠距離まで入力可能な範囲が存在するマーカおよびコントローラ7間の距離に対応する入力に対して、当該操作ポジションに応じて適切な入力を可能とする有効範囲が設定されるために、距離の増減に対応しながらゲーム処理に適した適切な入力が可能となる。また、プレイヤの操作ポジションに応じて有効範囲が移動するため、プレイヤがどのようなポジションでコントローラ7を操作しても同様の操作感覚が得られ、さらに有効範囲の前後に遊び範囲が設けられているために、第1の実施形態とは違った操作感覚を設定できる。例えば、第1の実施形態では、有効範囲の前後にコントローラ7の位置が逸脱した場合、即時にコントローラ7の位置に応じて当該有効範囲が移動するため、コントローラ7とマーカとの距離に対して有効範囲の位置が敏感に反応する。一方、第2の実施形態では、有効範囲の前後に遊び範囲が設けられているために有効範囲の移動に余裕が生まれる。具体的には、プレイヤがコントローラ7を操作する際に、無意識のうちにコントローラ7を大きく動かしてしまうような場合などがあり、プレイヤが操作位置の変更を意図しなくてもコントローラの位置が有効範囲の前後に逸脱してしまうことがある。このような操作が行われても、第2の実施形態では遊び範囲内にコントローラ7が配置されている限り有効範囲は移動しないため、ある程度固定された有効範囲を用いて余裕をもって距離に応じた入力を行うことができる。
【0115】
(第3の実施形態)
次に、本発明の第3の実施形態に係るゲームシステムについて説明する。なお、第3の実施形態に係るゲームシステムは、第1の実施形態で説明したゲームシステム1に対して、前後位置パラメータrの算出および有効範囲を再設定する処理の動作(図13のステップ66参照)のみが異なり、他のシステム構成や他の動作は第1の実施形態と同様である。したがって、第3の実施形態の説明において、第1の実施形態と同一の要素には同一の参照符号を付し、第1の実施形態と同一のステップには同一のステップ番号を付して、詳細な説明を省略する。
【0116】
図23および図24を参照して、第3の実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作について説明する。なお、図23は、当該実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチンである。図24は、図23に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図である。
【0117】
まず、図24を参照して、第3の実施形態で用いられる有効範囲について説明する。当該実施形態における有効範囲も、コントローラ7を把持したプレイヤが当該コントローラ7をマーカ8Lおよび8Rに近づけるまたは遠ざけるように動かす、すなわち距離dが変化するような操作に応じてゲーム処理に用いられる前後位置パラメータrを得るために設定される範囲である。したがって、本実施形態の処理において、コントローラ7の位置として扱われる値は、具体的にはその時点における距離dの値であって、有効範囲は、距離dに対する範囲である。本実施形態においては、有効範囲の長さが前端方向にa1、後端方向にa2だけ伸長可能である。伸長長さa1およびa2は可変であり、有効範囲が伸縮する。a1=0、a2=0の場合には有効範囲は伸長されず、伸長されない場合の前端位置(マーカ8Lおよび8Rから最も近い有効範囲の端までの距離)がmin、後端位置(マーカ8Lおよび8Rから最も遠い有効範囲の端までの距離)がmaxである。つまり、前端位置がmin−a1、後端位置がmax+a2として設定され、有効範囲の長さrange=max−min+a1+a2となる。
【0118】
上述した有効範囲を基準として、当該有効範囲が伸長していない状態でコントローラ7(厳密には、撮像素子743)が当該有効範囲の前端位置min−a1に配置されたとき、前後位置パラメータr=0が算出されるように設定される(例えば、図24(a)の状態B)。また、有効範囲が伸長していない状態でコントローラ7が有効範囲の後端位置max+a2に配置されたとき、前後位置パラメータr=1が算出されるように設定される。そして、有効範囲が伸長していない状態でコントローラ7が有効範囲の前端位置min−a1と後端位置max+a2との間に配置されたとき、その配置位置に応じて前後位置パラメータrが0〜1の間で算出されるように設定される(例えば、図24(a)の状態A)。
【0119】
本実施形態では、図24(b)に示すように、それぞれ範囲長さpの遊び範囲がさらに設けられる。遊び範囲は、コントローラ7の位置がminとmaxとの間の領域から逸脱する場合であっても有効範囲の移動を行わない範囲であって(後述により明らかとなるが、有効範囲の伸縮は行われる)、minとmaxとの前後にそれぞれ連続して設定される。
【0120】
コントローラ7が遊び範囲内に位置するとき、有効範囲の境界がコントローラ2の位置に所定の割合で近づくように、伸長長さa1またはa2が増減し、有効範囲が伸縮する。コントローラ7の位置が遊び範囲内でかつ有効範囲から逸脱する場合には伸長長さa1またはa2が増加し、有効範囲が伸長する(例えば、図24(a)の状態Cに示す矢印)。一方、コントローラ7の位置が遊び範囲内でかつ有効範囲内である場合には、伸長長さa1またはa2が減少し、有効範囲が収縮する(例えば、図24(a)の状態Dに示す矢印)。また、コントローラ7がminとmaxとの間に位置するとき、有効範囲の境界がminとmaxとに所定の割合で近づくように、伸長長さa1またはa2が減少し、有効範囲が収縮する。さらに、コントローラ7を把持したプレイヤが当該コントローラ7を遊び範囲からも逸脱する位置まで動かしたとき、伸長長さa1またはa2の長さは遊び範囲の長さと同一になり、さらに有効範囲の境界が所定割合でコントローラ7の位置に近づくように有効範囲全体が移動する(例えば、図24(a)の状態E)。このとき、コントローラ7の位置は、有効範囲および遊び範囲何れからも逸脱した状態となるが、前端側に逸脱したときに前後位置パラメータr=0、後端側に逸脱したときに前後位置パラメータr=1となるように前記丸め処理と同様の処理によって値が更新される。なお、伸縮している有効範囲の一方端に対して、他方端は、有効範囲自体が移動しない限り一方端の伸縮動作に影響されずに独立して伸縮動作する(図24(a)の状態A〜状態D)。
【0121】
以下、図23を参照して、このような前後位置パラメータrの算出および有効範囲の再設定を可能にする処理を説明する。図23において、CPU30は、上記ステップ65(図13参照)で算出した距離dがmin以上max以下か否か(ステップ121)、距離dがmin−p以下か否か(ステップ122;つまり、前方の遊び範囲の端より逸脱しているかどうか)、距離dがmin−pより長くminより短いか否か(ステップ123)、および距離dがmax+p以上か否か(ステップ124;つまり、後方の遊び範囲の端より逸脱しているかどうか)を判断する。そして、CPU30は、距離dがmin以上max以下の場合(図24(a)の状態A)、処理を次のステップ125に進める。CPU30は、距離dがmin−p以下の場合(図24(a)の状態E)、処理を次のステップ126に進める。CPU30は、距離dがmin−pより長くminより短い場合(図24(a)の状態Cおよび状態D)、処理を次のステップ127に進める。CPU30は、距離dがmax+p以上の場合、処理を次のステップ128に進める。CPU30は、距離dがmax+pより長くmaxより短い場合、処理を次のステップ129に進める。
【0122】
ステップ125において、CPU30は、minとmaxとの間にコントローラ7が配置されていることに応じて、当該有効範囲を元の範囲長さに戻るように短縮させて再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1をa1×s(sは、0<s<=1の定数、s=1の場合には即時に戻る)に更新し、伸長長さa2をa2×sに更新して、それぞれメインメモリ33に格納する。また、ステップ126において、CPU30は、前方の遊び範囲から逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1を遊び範囲の長さpに更新し、伸長長さa2をa2×sに更新し、minの値をmin−(min−d−a1)×sに更新し、maxの値をmax−(min−d−a1)*sに更新して、それぞれメインメモリ33に格納する。また、ステップ127において、CPU30は、前方の遊び範囲の位置にコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1をa1+(min−d−a1)×sに更新し、伸長長さa2をa2×sに更新して、それぞれメインメモリ33に格納する。また、ステップ128において、CPU30は、後方の遊び範囲から逸脱する位置までコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1をa1×sに更新し、伸長長さa2を遊び範囲の長さpに変更し、maxをmax+(d−max−a2)×sに更新し、minをmin+(d−max−a2)*sに更新して、それぞれメインメモリ33に格納する。さらに、ステップ129において、CPU30は、後方の遊び範囲の位置にコントローラ7が移動したことに応じて、当該有効範囲を再設定する処理を行い、処理を次のステップ130に進める。具体的には、CPU30は、伸長長さa1をa1×sに変更し、伸長長さa2をa2+(d−max−a2)×sに変更して、それぞれメインメモリ33に格納する。これらステップ125〜ステップ129の処理によって、コントローラ7の移動位置に応じて有効範囲が所定速度で伸縮および移動する。
【0123】
ステップ130において、CPU30は、距離dおよび有効範囲に応じて前後位置パラメータrを算出する処理を行う。そして、CPU30は、算出された前後位置パラメータrの値を丸める処理を行い(ステップ131)、当該サブルーチンによる処理を終了する。具体的には、ステップ130において、CPU30は、長さrangeを
range=max−min+a1+a2
で算出し、前後位置パラメータrを
r=(d−min−a1)/range
で算出する。そして、ステップ131の処理によって、有効範囲および遊び範囲に対するコントローラ7の配置位置に応じて、前後位置パラメータrが0〜1の間に丸められて算出される。なお、ステップ131の丸め処理については、図21を用いて説明した第2の実施形態の丸め処理と同様であるため、詳細な説明を省略する。
【0124】
このように、第3の実施形態においても、非常に遠距離まで入力可能な範囲が存在するマーカおよびコントローラ7間の距離に対応する入力に対して、当該操作ポジションに応じて適切な入力を可能とする有効範囲が設定されるために、距離の増減に対応しながらゲーム処理に適した適切な入力が可能となる。また、プレイヤの操作ポジションに応じて有効範囲が移動するため、プレイヤがどのようなポジションでコントローラ7を操作しても同様の操作感覚が得られるが、有効範囲に遊び範囲が設けられ、さらに有効範囲が所定速度で伸縮し、所定速度で有効範囲が移動するために、第1の実施形態や第2の実施形態とは違った操作感覚を設定できる。例えば、第1および第2の実施形態では、有効範囲の前後または遊び範囲からコントローラ7の位置が逸脱した場合、即時にコントローラ7の位置に応じて当該有効範囲が移動するため、コントローラ7とマーカとの距離が比較的敏感に反応する。一方、第3の実施形態では、有効範囲の前後に遊び範囲が設けながら、有効範囲の伸縮や移動が徐々に行われるため、プレイヤの入力に対してさらに緩やかな有効範囲の反応となる。つまり、プレイヤが意図しない突発的な誤操作などによってコントローラ7を有効範囲の前後に逸脱してしまったとしても、その操作位置に有効範囲が徐々に順応するような処理となるため、当該誤操作の影響をある程度吸収することができる。しかもプレイヤが意識的に有効範囲を移動させるためにコントローラ7の位置を変更した場合には、適切に有効範囲の移動が行える。したがって、より安定した入力操作が可能となる。
なお、コントローラ7の撮像情報演算部74によって固定的に設置されたマーカを撮像することによって、マーカおよびコントローラ7間の距離に対応した入力に作用するように上記有効範囲を設定したが、他の方向に対応した入力に作用するように設定してもかまわない。例えば、マーカに対するコントローラ7の左右方向または上下方向の位置(例えば、指示位置データDc3)に対応してそれぞれの方向に沿った有効範囲を設定する。そして、コントローラ7の左右方向または上下方向の位置と有効範囲との位置関係に応じて、左右または上下位置パラメータを算出する。そして、上述した距離方向と同様にコントローラ7の左右方向の位置あるいは上下方向の位置に応じて有効範囲が移動あるいは伸縮するようにすれば、他の方向に対応した入力に作用する有効範囲を設定することができる。
【0125】
この変形例をゲームプログラムで実現する場合の構成要素について説明する。撮像対象(8)を撮像するための撮像部(74)を備えるゲームコントローラ(7)から、その撮像部が撮像した撮像画像自体または撮像画像に所定の演算を行った結果(Da1、Da2)を操作情報(Da)として取得してゲーム処理を行うゲーム装置(3)のコンピュータ(30)で実行されるゲームプログラムである。ゲームプログラムは、位置検出ステップ、有効範囲設定ステップ、位置データ算出ステップ、ゲーム処理ステップ、および表示処理ステップをコンピュータに実行させる。位置検出ステップは、ゲームコントローラから得られた操作情報を用いて、撮像対象の撮像画像内における位置に応じて、ゲームコントローラと撮像対象との上下方向および左右方向の少なくとも一方の位置を検出する。有効範囲設定ステップは、ゲームコントローラに対する上下方向および左右方向の少なくとも一方に沿って、所定長さの有効範囲を設定する。位置データ算出ステップは、有効範囲に対するゲームコントローラの位置に応じて、上下方向および左右方向の少なくとも一方の位置に関するデータを算出する。ゲーム処理ステップは、位置データ算出ステップが算出した位置に関するデータに応じて仮想ゲーム世界に対する所定のゲーム処理を行う。表示処理ステップは、ゲーム処理を行った後の仮想ゲーム世界を画像として表示装置に表示させる。また、上記ゲームプログラムは、有効範囲再設定ステップを、さらにコンピュータに実行させてもかまわない。有効範囲再設定ステップは、ゲームコントローラの位置が有効範囲から逸脱したとき、そのゲームコントローラの位置に応じてその有効範囲を移動させて再設定する。
【0126】
また、上述した説明では、前後位置パラメータrを奥行位置データzに変換してゲーム処理を行ったが、前後位置パラメータrは、様々なゲーム処理に用いることができる。例えば、前後位置パラメータrを仮想ゲーム世界に登場する車両等のオブジェクトの速度に換算してゲーム処理を行ってもかまわない。また、前後位置パラメータrを仮想ゲーム世界に登場するプレイヤキャラクタのアクション(例えば、パンチを繰り出すアクション)の動作パラメータとして用いてゲーム処理を行ってもかまわない。また、前後位置パラメータrを仮想カメラのズーム倍率に換算してゲーム処理を行ってもかまわない。また、前後位置パラメータrに少なくとも1つの閾値を設定して、当該閾値に対する大小でオン/オフするスイッチ(例えば、プレイヤキャラクタにおける所定のアクションが閾値を基準に開始される)に用いてゲーム処理を行ってもかまわない。
【0127】
また、上述した説明では、撮像素子743で撮像した画像データを解析することによって距離dを算出したが、それ以外の手段によっても、実空間内に配置された所定の測定対象との距離dを測ることができれば、当該距離dに対して有効範囲を設定することにより、上記の発明を実施することが可能である。したがって、距離dを算出するための手段として、例えば、超音波センサによるものや、磁気センサを用いたものなどを用いてもよい。また、撮像素子743と、撮像対象との距離に関連した値を得ることができれば、実際の距離dを算出しなくとも操作入力は可能であるので、距離dを算出せずに、撮像画像内のマーカ8Lと8Rとの間の長さに対応させたデータを予め用意し、当該対応データを用いて処理を行うようにしてもよい。
【0128】
また、上述した説明では、コントローラ7とゲーム装置3とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置3とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7に接続されたケーブルをゲーム装置3の接続端子に接続する。
【0129】
また、コントローラ7から無線送信される送信データを受信する受信手段として、ゲーム装置3の接続端子に接続された受信ユニット6を用いて説明したが、ゲーム装置3の本体内部に設けられた受信モジュールによって当該受信手段を構成してもかまわない。この場合、受信モジュールが受信した送信データは、所定のバスを介してCPU30に出力される。
【0130】
また、撮像素子743で撮像した画像データを解析してマーカ8Lおよび8Rからの赤外光の位置座標やそれらの重心座標等を取得し、それらを処理結果データとしてコントローラ7内で生成してゲーム装置3へ送信する態様を説明したが、他の処理段階のデータをコントローラ7からゲーム装置3へ送信してもかまわない。例えば、撮像素子743が撮像した画像データをコントローラ7からゲーム装置3へ送信し、CPU30において上記解析処理を行って処理結果データを取得してもかまわない。この場合、コントローラ7に設けられた画像処理回路744が不要となる。また、上記画像データの解析途中のデータをコントローラ7からゲーム装置3へ送信してもかまわない。例えば、画像データから得られる輝度、位置、および面積等を示すデータをコントローラ7からゲーム装置3へ送信し、CPU30において残りの解析処理を行って処理結果データを取得してもかまわない。
【0131】
また、上述した説明では、2つのマーカ8Lおよび8Rからの赤外光を、コントローラ7の撮像情報演算部74の撮像対象としたが、他のものを撮像対象にしてもかまわない。例えば、1つまたは3つ以上のマーカをモニタ2の近傍に設置し、それらのマーカからの赤外光を撮像情報演算部74の撮像対象としてもかまわない。例えば、所定の長さを有する1つのマーカをモニタ2の近傍に設置し、当該長さの両端を設置間隔m(図16参照)とすれば、本発明を同様に実現することができる。また、モニタ2の表示画面自体や他の発光体(室内灯等)を撮像情報演算部74の撮像対象としてもかまわない。撮像対象とモニタ2の表示画面との配置関係に基づいて、当該表示画面に対するコントローラ7の位置を演算すれば、様々な発光体を撮像情報演算部74の撮像対象として用いることができる。
【0132】
また、上述したコントローラ7の形状や、それらに設けられている操作部72の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、コントローラ7における撮像情報演算部74の位置(撮像情報演算部74の光入射口)は、ハウジング71の前面でなくてもよく、ハウジング71の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【0133】
また、上記第1から第3の実施形態においては、コントローラ7の実空間内での位置を表す値として距離dを用いた処理について述べたが、距離dのみでなく、コントローラ7の存在する実空間内での3次元位置を検出し、当該3次元位置を操作対象の位置決定に用いるようにしてもよい。
【0134】
その場合、前記有効範囲は、例えば3次元座標系のそれぞれの成分に対して設定され、上記第1から第3の実施形態と同様の処理をそれぞれの成分に対して行うことによって、仮想空間内の3次元座標を決定するようにしてもよい。
【0135】
それ以外にも、前記有効範囲は、例えば3次元座標系における所定の3次元位置を2箇所境界として設定し、当該境界と境界の間の領域として設定され、当該3次元領域におけるコントローラ7の位置によって処理を行うようにしてもよい。例えば、第1点と第2点点とを対角頂点とする直方体を定義することにより有効範囲を設定する。この場合、座標系の各軸方向に直方体の各辺が並行になるようにしてもよい。なお、予め直方体モデルを用意しておき、当該直方体モデルの面に第1点と第2点が含まれるようにその大きさを調整することで、有効範囲を設定することもできる。
【0136】
コントローラ7の実空間内での位置の算出方法として、例えば、加速度データDa4によってコントローラ7の姿勢がわかれば、第1座標データDa1と、第2座標データDa2とから、マーカ8Rおよび8Lの位置を基準とした3次元位置を算出することができる。
【0137】
また、コントローラ7の実空間内での位置の算出方法として、例えば、超音波センサや磁気センサ等によって、位置を測定するようにしてもよい。
【0138】
また、操作入力のために実空間内で移動させる対象物は、撮像情報演算部74を備えたコントローラ7でなくともよい。例えば、撮像装置を備えたデータ入力装置を所定の位置に固定的に設置して、データの出力を行わない対象物、例えばプレイヤ自身の手等の位置を当該撮像装置によって検出し、当該データ入力装置から位置データを出力するようなものであってもよい。
【産業上の利用可能性】
【0139】
本発明に係るゲームシステムおよびゲームプログラムは、自由度の高い操作を実現することができ、1人のプレイヤが物理的に分離したユニットを把持して操作するゲームシステムおよびゲームプログラム等として有用である。
【図面の簡単な説明】
【0140】
【図1】本発明の一実施形態に係るゲームシステム1を説明するための外観図
【図2】図1のゲーム装置3の機能ブロック図
【図3】図3のコントローラ7の上面後方から見た斜視図
【図4】図3のコントローラ7を下面後方から見た斜視図
【図5】図3のコントローラ7の上筐体を外した状態を示す斜視図
【図6】図3のコントローラ7の構成を示すブロック図
【図7】図3のコントローラ7を用いてゲーム操作するときの状態を概説する図解図
【図8】プレイヤがコントローラ7を右手で把持した状態をコントローラ7の前面側から見た一例
【図9】プレイヤがコントローラ7を右手で把持した状態をコントローラ7の左側面側から見た一例
【図10】マーカ8Lおよび8Rと撮像情報演算部74との視野角を説明するための図
【図11】ゲーム装置3のメインメモリ33に記憶される主なデータを示す図
【図12】ゲーム装置3において実行されるゲーム処理の流れを示すフローチャート
【図13】図12におけるステップ52の操作状態情報、指示位置データ、および奥行位置データ算出処理の詳細な動作を示すサブルーチン
【図14】図13におけるステップ62およびステップ65の距離d算出処理の詳細な動作を示すサブルーチン
【図15】図13におけるステップ66の前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチン
【図16】距離dを算出する動作を説明するための図
【図17】図13に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図
【図18】前後位置パラメータrと3次元ゲーム空間に設定される奥行位置データzとの関係の一例を示す図
【図19】前後位置パラメータrと3次元ゲーム空間に設定される奥行位置データzとの関係の他の例を示す図
【図20】第2の実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチン
【図21】図20におけるステップ106の丸め処理の詳細な動作を示すサブルーチン
【図22】図20に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図
【図23】第3の実施形態における前後位置パラメータ算出および有効範囲再設定処理の詳細な動作を示すサブルーチン
【図24】図23に示したサブルーチンに応じて、前後位置パラメータrを算出および有効範囲を設定する動作を説明するための図
【符号の説明】
【0141】
1…ゲームシステム
2…モニタ
2b…スピーカ
3…ゲーム装置
30…CPU
31…メモリコントローラ
32…GPU
33…メインメモリ
34…DSP
35…ARAM
36…コントローラI/F
37…ビデオI/F
38…外部メモリI/F
39…オーディオI/F
40…ディスクドライブ
41…ディスクI/F
4…光ディスク
5…外部メモリカード
6…受信ユニット
7…コントローラ
71…ハウジング
72…操作部
73…コネクタ
74…撮像情報演算部
741…赤外線フィルタ
742…レンズ
743…撮像素子
744…画像処理回路
75…通信部
751…マイコン
752…メモリ
753…無線モジュール
754…アンテナ
700…基板
701…加速度センサ
702…LED
703…水晶振動子
704…バイブレータ
705…電池
8…マーカ
【特許請求の範囲】
【請求項1】
入力装置から取得した入力情報に基づいて仮想空間に対する処理をコンピュータに実行させるプログラムであって、
前記入力情報には所定の対象物の実空間内における位置の変化に応じて変化する対象データが含まれ、
前記対象データを用いて、前記対象物の実空間内における位置を表す実位置データを算出する実位置データ算出ステップと、
第1の位置データを第1の境界、第2の位置データを第2の境界としてそれぞれ設定し、前記第1の境界から前記第2の境界の範囲として定義される有効範囲を設定する有効範囲設定ステップと、
前記有効範囲における前記実位置データの値の位置を表す有効範囲位置データを算出する有効範囲位置データ算出ステップと、
前記有効範囲位置データの値に応じた演算によって前記仮想空間内の操作対象の位置を決定する位置決定ステップと、
前記仮想空間を表示装置に表示させる表示処理ステップとを、前記コンピュータに実行させる、仮想位置決定プログラム。
【請求項2】
前記実位置データの値が前記有効範囲外のとき、前記実位置データの値が有効範囲内に含まれるように、前記第1の境界および第2の境界を移動させ、更新する有効範囲更新ステップをさらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項3】
前記実位置データの値が前記有効範囲外のとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値になるように、前記第1の境界および前記第2の境界を移動させ、更新する有効範囲更新ステップをさらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項4】
前記実位置データの値が前記有効範囲外のとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値に所定の割合で近づくように、当該第1の境界および第2の境界を移動し、更新する第2有効範囲更新ステップをさらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項5】
前記有効範囲位置データ算出ステップは、前記実位置データの値が前記第1の境界に一致するとき前記有効範囲位置データが最大値となり、前記実位置データの値が前記第2の境界に一致するとき前記有効範囲位置データが最小値となるように前記有効範囲位置データを算出する、請求項1に記載の仮想位置決定プログラム。
【請求項6】
前記有効範囲設定ステップは、前記有効範囲の前後にそれぞれ所定長さで定義される遊び範囲をさらに設定するステップを含み、
前記実位置データが前記有効範囲と前記遊び範囲とを合わせた範囲から逸脱する値をとるとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値に一致するように、当該第1の境界及び当該第2の境界の値を移動し、更新する有効範囲更新ステップをさらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項7】
第1の位置データと、前記第1の位置データから一方側に設定される第2の位置データと、前記第1の位置データから前記一方側の他方側に設定される前記第3の位置データと、前記第2の位置データから前記一方側に設定される第4の位置データとが設定され、
第1の位置データから第3の位置データまで変動可能な位置データとして定義される上限境界と、第2の位置データから第4の位置データまで変動可能な位置データとして定義される下限境界とを設定し、変動可能な当該上限境界と下限境界との間の範囲として定義される有効範囲を設定する有効範囲設定ステップと、
前記実位置データの値が前記上限境界/下限境界の変動可能な範囲内のとき、前記上限境界/下限境界を当該実位置データの値に所定の割合で近づくように更新し、前記下限境界/上限境界を前記第2の位置データ/第1の位置データに所定の割合で近づくように更新するステップと、
前記実位置データの値が前記第1の位置データと第2の位置データとの間の範囲内のとき、前記上限境界/下限境界を前記第1の位置データ/第2の位置データに所定の割合で近づくように更新するステップと、
前記実位置データの値が前記第3の位置データよりさらに前記他方側あるとき、前記第3の位置データの値が当該実位置データの値に所定の割合で近づくように前記第1の位置データ、第2の位置データ、第3の位置データ、第4の位置データ、および下限境界を移動させ、前記上限境界を移動後の第2の位置データに更新するステップと、
前記実位置データの値が前記第4の位置データよりさらに前記一方側にあるとき、前記第4の位置データの値が前記実位置データの値に所定の割合で近づくように前記第1の位置データ、第2の位置データ、第3の位置データ、第4の位置データ、および上限境界を移動させ、前記下限境界を移動後の第4の位置データに更新するステップとを、
さらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項8】
前記有効範囲位置データ算出ステップは、前記実位置データの値が前記第1の位置データに一致するときまたは前記有効範囲を前記第1の位置データ側に逸脱するとき、前記有効範囲位置データが最大値となり、
前記実位置データの値が前記第2の位置データに一致するときまたは前記有効範囲を前記第2の位置データ側に逸脱するとき、前記有効範囲位置データが最小値となるように前記有効範囲位置データを算出するステップを含む、請求項6または請求項7のいずれかに記載の仮想位置決定プログラム。
【請求項9】
入力装置から入力される実空間における対象物の位置情報を含むデータに基づいて、当該実空間を所定の座標系で表したときの当該対象物体の位置座標を算出し、当該位置座標に応じて仮想空間における仮想物体の仮想位置座標を算出するプログラムであって、
前記実空間の所定の座標系における少なくとも第1座標及び第2座標によって定義される有効範囲を設定する有効範囲設定手段、
前記対象物の位置座標が前記有効範囲に含まれるとき、当該有効範囲を正規化し、当該正規化を行った場合の前記対象物の位置座標に対応する値を算出する正規化手段、および
前記正規化手段によって算出された値に応じて、前記仮想位置座標を算出する算出手段として、コンピュータを動作させる仮想位置決定プログラム。
【請求項10】
前記対象物の位置座標が前記有効範囲に含まれないとき、前記第1座標及び前記第2座標を更新して、当該対象物の位置座標を含む位置座標にまで当該有効範囲を移動させる有効範囲移動手段としてさらに前記コンピュータを動作させる請求項9に記載の仮想位置決定プログラム。
【請求項1】
入力装置から取得した入力情報に基づいて仮想空間に対する処理をコンピュータに実行させるプログラムであって、
前記入力情報には所定の対象物の実空間内における位置の変化に応じて変化する対象データが含まれ、
前記対象データを用いて、前記対象物の実空間内における位置を表す実位置データを算出する実位置データ算出ステップと、
第1の位置データを第1の境界、第2の位置データを第2の境界としてそれぞれ設定し、前記第1の境界から前記第2の境界の範囲として定義される有効範囲を設定する有効範囲設定ステップと、
前記有効範囲における前記実位置データの値の位置を表す有効範囲位置データを算出する有効範囲位置データ算出ステップと、
前記有効範囲位置データの値に応じた演算によって前記仮想空間内の操作対象の位置を決定する位置決定ステップと、
前記仮想空間を表示装置に表示させる表示処理ステップとを、前記コンピュータに実行させる、仮想位置決定プログラム。
【請求項2】
前記実位置データの値が前記有効範囲外のとき、前記実位置データの値が有効範囲内に含まれるように、前記第1の境界および第2の境界を移動させ、更新する有効範囲更新ステップをさらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項3】
前記実位置データの値が前記有効範囲外のとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値になるように、前記第1の境界および前記第2の境界を移動させ、更新する有効範囲更新ステップをさらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項4】
前記実位置データの値が前記有効範囲外のとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値に所定の割合で近づくように、当該第1の境界および第2の境界を移動し、更新する第2有効範囲更新ステップをさらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項5】
前記有効範囲位置データ算出ステップは、前記実位置データの値が前記第1の境界に一致するとき前記有効範囲位置データが最大値となり、前記実位置データの値が前記第2の境界に一致するとき前記有効範囲位置データが最小値となるように前記有効範囲位置データを算出する、請求項1に記載の仮想位置決定プログラム。
【請求項6】
前記有効範囲設定ステップは、前記有効範囲の前後にそれぞれ所定長さで定義される遊び範囲をさらに設定するステップを含み、
前記実位置データが前記有効範囲と前記遊び範囲とを合わせた範囲から逸脱する値をとるとき、前記第1の境界および前記第2の境界のうち、当該実位置データの値に近い方の境界が当該実位置データの値に一致するように、当該第1の境界及び当該第2の境界の値を移動し、更新する有効範囲更新ステップをさらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項7】
第1の位置データと、前記第1の位置データから一方側に設定される第2の位置データと、前記第1の位置データから前記一方側の他方側に設定される前記第3の位置データと、前記第2の位置データから前記一方側に設定される第4の位置データとが設定され、
第1の位置データから第3の位置データまで変動可能な位置データとして定義される上限境界と、第2の位置データから第4の位置データまで変動可能な位置データとして定義される下限境界とを設定し、変動可能な当該上限境界と下限境界との間の範囲として定義される有効範囲を設定する有効範囲設定ステップと、
前記実位置データの値が前記上限境界/下限境界の変動可能な範囲内のとき、前記上限境界/下限境界を当該実位置データの値に所定の割合で近づくように更新し、前記下限境界/上限境界を前記第2の位置データ/第1の位置データに所定の割合で近づくように更新するステップと、
前記実位置データの値が前記第1の位置データと第2の位置データとの間の範囲内のとき、前記上限境界/下限境界を前記第1の位置データ/第2の位置データに所定の割合で近づくように更新するステップと、
前記実位置データの値が前記第3の位置データよりさらに前記他方側あるとき、前記第3の位置データの値が当該実位置データの値に所定の割合で近づくように前記第1の位置データ、第2の位置データ、第3の位置データ、第4の位置データ、および下限境界を移動させ、前記上限境界を移動後の第2の位置データに更新するステップと、
前記実位置データの値が前記第4の位置データよりさらに前記一方側にあるとき、前記第4の位置データの値が前記実位置データの値に所定の割合で近づくように前記第1の位置データ、第2の位置データ、第3の位置データ、第4の位置データ、および上限境界を移動させ、前記下限境界を移動後の第4の位置データに更新するステップとを、
さらに前記コンピュータに実行させる、請求項1に記載の仮想位置決定プログラム。
【請求項8】
前記有効範囲位置データ算出ステップは、前記実位置データの値が前記第1の位置データに一致するときまたは前記有効範囲を前記第1の位置データ側に逸脱するとき、前記有効範囲位置データが最大値となり、
前記実位置データの値が前記第2の位置データに一致するときまたは前記有効範囲を前記第2の位置データ側に逸脱するとき、前記有効範囲位置データが最小値となるように前記有効範囲位置データを算出するステップを含む、請求項6または請求項7のいずれかに記載の仮想位置決定プログラム。
【請求項9】
入力装置から入力される実空間における対象物の位置情報を含むデータに基づいて、当該実空間を所定の座標系で表したときの当該対象物体の位置座標を算出し、当該位置座標に応じて仮想空間における仮想物体の仮想位置座標を算出するプログラムであって、
前記実空間の所定の座標系における少なくとも第1座標及び第2座標によって定義される有効範囲を設定する有効範囲設定手段、
前記対象物の位置座標が前記有効範囲に含まれるとき、当該有効範囲を正規化し、当該正規化を行った場合の前記対象物の位置座標に対応する値を算出する正規化手段、および
前記正規化手段によって算出された値に応じて、前記仮想位置座標を算出する算出手段として、コンピュータを動作させる仮想位置決定プログラム。
【請求項10】
前記対象物の位置座標が前記有効範囲に含まれないとき、前記第1座標及び前記第2座標を更新して、当該対象物の位置座標を含む位置座標にまで当該有効範囲を移動させる有効範囲移動手段としてさらに前記コンピュータを動作させる請求項9に記載の仮想位置決定プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【公開番号】特開2007−80002(P2007−80002A)
【公開日】平成19年3月29日(2007.3.29)
【国際特許分類】
【出願番号】特願2005−267717(P2005−267717)
【出願日】平成17年9月14日(2005.9.14)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
【公開日】平成19年3月29日(2007.3.29)
【国際特許分類】
【出願日】平成17年9月14日(2005.9.14)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
[ Back to top ]