図2を参照して、この発明の一実施例であるゴルフゲームシステム10は、ゲーム機12およびゴルフクラブ型入力装置14を含み、このゴルフクラブ型入力装置14はゲームプレイヤによって、ゲーム機12上で振られる。なお、ゲーム機12は、たとえばACアダプタ(図示せず)または電池のような直流電源によって駆動される。ゲーム機12は、さらに、AVケーブル16を通して、テレビジョンモニタ(図示せず)のAV端子(図示せず)に接続される。
ゲーム機12は、また、ハウジング18を含み、このハウジング18上に電源スイッチ20が設けられるとともに、方向ボタン22ならびに決定キー24およびキャンセルキー26が設けられる。方向ボタン22は、4方向(上下左右)の個別のボタンを有し、たとえばテレビジョンモニタの表示画面上においてメニューやゲームモード選択のためにカーソルを移動させたりするために用いられる。
決定キー24はゲーム機12への入力を決定するために用いられる。また、キャンセルキー26は、ゲーム機12への入力をキャンセルするために用いられる。
ゲーム機12のハウジング16の内部には、図3に詳細に示す撮像ユニット28が収納される。この撮像ユニット28は、たとえばプラスチック成型によって形成されるユニットベース30を含み、このユニットベース30内には支持筒32が取り付けられる。支持筒32の上面には内面が逆円錐形状であるラッパ状の開口34が形成され、その開口34の下方の筒状部内部には、いずれもがたとえば透明プラスチックの成型によって形成された凹レンズ36および凸レンズ38を含む光学系が設けられ、凸レンズ38の下方において、撮像素子としてのイメージセンサ40が固着される。したがって、イメージセンサ40は、開口34からレンズ36および38を通して入射する光に応じた映像を撮影することができる。
イメージセンサ40は、低解像度のCMOSイメージセンサ(たとえば32×32画素:グレースケール)である。ただし、このイメージセンサ40は、画素数のもっと多いものでもよいし、CCD等の他の素子からなるものであってよい。
また、ユニットベース30には、光出射方向がいずれも上方向とされた複数(この実施例では4つ)の赤外発光ダイオード42が取り付けられる。この赤外発光ダイオード42によって、撮像ユニット28の上方の図3に示す線44aおよび44bで決まる範囲に赤外光が照射される。また、ユニットベース30の上方には、赤外フィルタ(赤外線のみを透過するフィルタ)が上記開口34を覆うように、取り付けられる。そして、赤外発光ダイオード42は後述のように、点灯/消灯が連続的に繰り返されるので、赤外ストロボスコープとして機能する。ただし、「ストロボスコープ」とは、運動体を間欠的に照らす装置の総称である。
したがって、上記イメージセンサ40は、線44aおよび44bで示す撮影範囲内で移動する物体、この実施例ではゴルフクラブ型入力装置14に設けられた反射体50(図4参照)を撮影することになる。
ゴルフクラブ型入力装置14は、全体がたとえばプラスチック成型によって形成され、図4に示すように、クラブシャフト46とそれの先端に取り付けられたクラブヘッド48とを含み、クラブヘッド48の底面に、たとえば再帰反射シートからなる、円形の反射体50が設けられる。したがって、図2に示すように、ゲームプレイヤがこの入力装置14のクラブシャフト46を持って、普通のゴルフをするときと同じように、ゲーム機12の上方で振れば、ヘッド48の底面の反射体50によって反射された光がイメージセンサ40によって撮影される。このとき、赤外発光ダイオード42は上述のように間欠的に赤外光を照射するため、結果的に、図3に示すように、反射体50が間欠的に撮影される。この実施例のゴルフゲームシステム10では、後述のように、このような反射体のストロボ映像を処理することによって、ゲーム機12の入力となる速度などを計算する。
図5を参照して、クラブ型入力装置14は、上述のように、赤外発光ダイオード42の発光に照射され、その赤外光を反射体50で反射する。この反射体50からの反射光がイメージセンサ40によって撮影され、したがって、イメージセンサ40からは反射体50の映像信号が出力される。イメージセンサ40からのこのアナログ映像信号はゲームプロセサ52に内蔵されたA/Dコンバータ(図示せず)によってディジタルデータに変換される。
なお、ゲームプロセサ52は、上述のストロボ撮影のために、赤外発光ダイオード42を間欠的に点滅する。
このようなゲームプロセサ52としては、任意の種類のプロセサを利用できるが、この実施例では、本件出願人が開発しかつ既に特許出願している高速プロセサを用いる。この高速プロセサは、たとえば特開平10−307790号公報[G06F13/36,15/78]およびこれに対応するアメリカ特許第6,070,205号に詳細に開示されている。
ゲームプロセサ52は、図示しないが、演算プロセサ,グラフィックプロセサ,サウンドプロセサおよびDMAプロセサ等の各種プロセサを含むとともに、アナログ信号を取り込むときに用いられる上述のA/Dコンバータやキー操作信号や赤外線信号のような入力信号を受けかつ出力信号を外部機器に与える入出力制御回路を含む。したがって、操作キー22−26からの入力信号がこの入出力制御回路を経て、演算プロセサに与えられる。演算プロセサは、その入力信号に応じて必要な演算を実行し、その結果をグラフィックプロセサ等に与える。したがって、グラフィックプロセサやサウンドプロセサはその演算結果に応じた画像処理や音声処理を実行する。
プロセサ52には、図示しないが内部メモリが設けられ、この内部メモリは、ROMまたはRAM(SRAMおよび/またはDRAM)を含む。RAMは一時メモリ,ワーキングメモリあるいはカウンタまたはレジスタ領域(テンポラリデータ領域)およびフラグ領域として利用される。なお、プロセサ52にはROM54が外部バスを通して接続される。このROM54に後に説明するようなゲームプログラムが予め設定される。
プロセサ52は、イメージセンサ40からA/Dコンバータを介して入力されるディジタル映像信号を処理してゴルフクラブ型入力装置14の動きを検出するとともに、操作キー22−26からの入力信号に従って演算、グラフィック処理、サウンド処理等を実行し、ビデオ信号およびオーディオ信号を出力する。ビデオ信号はゲーム画面を表示するための画像信号であり、オーディオ信号はゲーム音楽や効果音の信号であり、したがって、テレビジョンモニタ(図示せず)の画面上にゲーム画面表示され、必要なサウンド(効果音、ゲーム音楽)がそれのスピーカから出力される。
ここで、図6−図8を参照して、CMOSイメージセンサ40からゲームプロセサ52へピクセルデータを取り込むための構成を詳細に説明する。図6に示すように、実施例のCMOSイメージセンサ40は、ピクセル信号(画素信号)をアナログ信号として出力するタイプのものであるため、このピクセル信号はゲームプロセサ52のアナログ入力ポートに入力される。アナログ入力ポートは、このゲームプロセサ52内においてA/Dコンバータ(図示せず)に接続され、したがって、ゲームプロセサ52は、A/Dコンバータからディジタルデータに変換されたピクセル信号(ピクセルデータ)をその内部に取得する。
上述のアナログピクセル信号の中点は、CMOSイメージセンサ40の基準電圧端子Vrefに与えられる基準電圧によって決定される。そのため、この実施例では、イメージセンサ40に関連してたとえば抵抗分圧回路からなる基準電圧発生回路56が設けられ、この回路56から基準電圧端子Vrefに常に一定の大きさの基準電圧が与えられる。
CMOSイメージセンサ40を制御するための各ディジタル信号は、ゲームプロセサ52のI/Oポートに与えられ、またはそこから出力される。このI/Oポートは各々入力/出力の制御が可能なディジタルポートであり、このゲームプロセサ52内で入出力制御回路(図示せず)に接続されている。
詳しくいうと、ゲームプロセサ52の出力ポートからはイメージセンサ40をリセットするためのリセット信号が出力され、イメージセンサ40に与えられる。また、イメージセンサ40からは、ピクセルデータストローブ信号およびフレームステータスフラグ信号が出力され、それらの信号がゲームプロセサ52の入力ポートに与えられる。ピクセルデータストローブ信号は上述の各ピクセル信号を読み込むための図7(b)に示すようなストローブ信号である。フレームステータスフラグ信号はイメージセンサ40の状態を示すフラグ信号で、図7(a)に示すように、このイメージセンサの露光期間を規定する。つまり、フレームステータスフラグ信号の図7(a)に示すローレベルが露光期間を示し、図7(a)に示すハイレベルが非露光期間を示す。
また、ゲームプロセサ52は、CMOSイメージセンサ40内の制御レジスタ(図示せず)に設定するコマンド(またはコマンド+データ)をレジスタデータとしてI/Oポートから出力するとともに、たとえばハイレベルおよびローレベルを繰り返すレジスタ設定クロックを出力し、それらをイメージセンサ40に与える。
なお、この実施例では、赤外発光ダイオード42として、図6に示すように互いに並列接続された4つの赤外発光ダイオード42a,42b,42cおよび42dを用いる。この4つの赤外発光ダイオード42a−42dは、上で説明したように、対象物(ゴルフクラブ型入力装置14)を照らすように、イメージセンサ40の視点方向と同一方向に赤外光を照射するようにかつイメージセンサ40を囲むように配置される。ただし、これら個別の赤外発光ダイオード42a−42dは、特に区別する必要がある場合を除いて、単に赤外発光ダイオード42と呼ばれる。この赤外発光ダイオード42はLED駆動回路58によって、点灯されまたは消灯(非点灯)される。LED駆動回路58は、イメージセンサ40から上述のフレームステータスフラグ信号を受け、このフラグ信号は、抵抗62およびコンデンサ64からなる微分回路60を通してPNPトランジスタ68のベースに与えられる。このPNPトランジスタ68にはさらにプルアップ抵抗66が接続されていて、このPNPトランジスタ68のベースは、通常は、ハイレベルにプルアップされている。そして、フレームステータス信号がローレベルになると、そのローレベルが微分回路60を経てベースに入力されるため、PNPトランジスタ68は、フラグ信号がローレベル期間にのみオンする。
PNPトランジスタ68のエミッタは抵抗70および72を介して接地される。そして、エミッタ抵抗70および72の接続点がNPNトランジスタ74のベースに接続される。このNPNトランジスタ74のコレクタが各赤外発光ダイオード42a−42dのアノードに共通に接続される。NPNトランジスタ74のエミッタが別のNPNトランジスタ76のベースに直接接続される。NPNトランジスタ74のコレクタが各赤外発光ダイオード42a−42dのカソードに共通接続され、エミッタが接地される。
このLED駆動回路58では、ゲームプロセサ52のI/Oポートから出力されるLEDコントロール信号(第2信号に相当する)がアクティブ(ハイレベル)でありかつイメージセンサ40からのフレームステータスフラグ信号がローレベルである期間にのみ赤外発光ダイオード42が点灯される。図7(a)に示すようにフレームステータスフラグ信号がローレベルになると、そのローレベル期間中(実際には微分回路60の時定数での遅れがあるが)、PNPトランジスタ68がオンする。したがって、図7(d)に示すLEDコントロール信号がゲームプロセサ52からハイレベルで出力されると、NPNトランジスタ74のベースがローレベルとなり、このトランジスタ68がオフとなる。トランジスタ68がオフするとトランジスタ74はオンとなる。したがって、電源(図6では小さい白丸で示す)から各赤外発光ダイオード42a−42dおよびトランジスタ76を経て電流が流れ、応じて図7(e)に示すように各赤外発光ダイオード42a−42dが点灯される。
実施例のLED駆動回路58では、このように、図7(d)のLEDコントロール信号がアクティブでありかつ図7(a)のフレームステータスフラグ信号がローレベルである期間にのみ赤外発光ダイオード42が点灯されるので、イメージセンサ40の露光期間(図7(f)参照)にのみ赤外発光ダイオード42が点灯されることになる。したがって、この実施例によれば、無駄な電力消費を抑制することができる。さらに、フレームステータスフラグ信号はコンデンサ64によってカップリングされているので、万一イメージセンサ40の暴走等によりそのフラグ信号がローレベルのまま停止した場合でも、一定時間後にはトランジスタ68は必ずオフされ、赤外発光ダイオード42も一定時間後には必ずオフされる。
このように、この実施例では、フレームステータス信号の持続期間を変更することによって、イメージセンサ40の露光時間を任意にかつ自在に設定または変更することができる。
さらに、フレームステータス信号およびLEDコントロール信号の持続時間や周期を変更することによって、赤外発光ダイオード42すなわちストロボスコープの発光期間、非発光期間、発光/非発光周期などを任意にかつ自在に変更または設定できる。
先に説明したように、赤外発光ダイオード42からの赤外光によってゴルフクラブ型入力装置14の反射体50が照射されると、反射体50からの反射光によってイメージセンサ40が露光される。応じて、イメージセンサ40から上述のピクセル信号が出力される。詳しく説明すると、CMOSイメージセンサ40は、上述の図7(a)のフレームステータスフラグ信号がハイレベルの期間(赤外発光ダイオード42の非点灯期間)に図7(b)に示すピクセルデータストローブに同期して、図7(c)に示すようにアナログのピクセル信号を出力する。ゲームプロセサ52では、そのフレームステータスフラグ信号とピクセルデータストローブとを監視しながら、A/Dコンバータを通じて、ディジタルのピクセルデータを取得する。
ただし、ピクセルデータ(ピクセル信号)は実施例では、図8(c)に示すように、第0行,第1行,…第31行と行順次に出力される。ただし、後に説明するように、各行の先頭の1ピクセルはダミーデータとなる。
ここで、図9および図10を参照して、図2実施例のゴルフゲームシステム10の概略動作を説明する。図2に示す電源スイッチ20をオンしてゲームスタートとなるが、図5に示すゲームプロセサ52は、まず、ステップS1で初期化処理を実行する。具体的には、システムおよび各変数を初期化する。
ステップS1での初期化処理は、イメージセンサ40内の制御レジスタへのデータ設定処理を含み、具体的には、図11−図13に示すフロー図に従って、かつ図14に示すタイミングで実行される。
図11の最初のステップS11では、ゲームプロセサ52は、設定データとして、コマンド“CONF”を設定する。ただし、このコマンド“CONF”は、イメージセンサ40に、ゲームプロセサ52からコマンドを送信する設定モードに入ることを知らせるためのコマンドである。そして、次のステップS13で、図12に詳細に示すコマンド送信処理を実行する。
コマンド送信処理の最初のステップS31では、プロセサ52は、設定データ(ステップS13の場合はコマンド“CONF”)をレジスタデータ(I/Oポート)に設定し、次のステップS33でレジスタ設定クロック(I/Oポート)をローレベルに設定する。その後、ステップS35で規定時間待機した後、ステップS37で、レジスタ設定クロックをハイレベルに設定する。そして、さらにステップS39での規定時間の待機の後、ステップS41でレジスタ設定クロックを再びローレベルに設定する。このようにして、図14に示すように、規定時間の待機を行いながら、レジスタ設定クロックをローレベル,ハイレベルそしてローレベルとすることによって、コマンド(コマンドまたはコマンド+データ)の送信処理が行われる。
ステップS15(図11)では、ピクセルモードを設定するとともに、露光時間の設定を行う。この実施例の場合、イメージセンサ40は先に述べたようにたとえば32×32のCMOSセンサであるため、設定アドレス“0”のピクセルモードレジスタに32×32画素であることを示す“0h”を設定する。次のステップS17において、ゲームプロセサ52は、図13に詳細に示すレジスタ設定処理を実行する。
レジスタ設定処理の最初のステップS43では、プロセサ52は、設定データとして、コマンド“MOV”+アドレスを設定し、次のステップS45で、図12で先に説明したコマンド送信処理を実行して、それを送信する。次にステップS47において、プロセサ52は、設定データとして、コマンド“LD”+データを設定し、次のステップS49でコマンド送信処理を実行して、それを送信する。そして、ステップS51で、プロセサ52は、設定データとして、コマンド“SET”を設定し、次のステップS53でそれを送信する。なお、コマンド“MOV”は制御レジスタのアドレスを送信することを示すコマンドで、コマンド“LD”はデータを送信することを示すコマンドで、コマンド“SET”はデータをそのアドレスに実際に設定させるためのコマンドである。なお、この処理は、設定する制御レジスタが複数ある場合には、繰り返し実行される。
図11に戻って、次のステップS19では、設定アドレスを“1”(露光時間設定レジスタのローニブルのアドレスを示す)とし、最大露光時間を示す“FFh”のローニブルデータ“Fh”を設定すべきデータとして設定する。そして、ステップS21で図13のレジスタ設定処理を実行する。同様にして、ステップS23において、設定アドレスを“2”(露光時間設定レジスタのハイニブルのアドレスを示す)とし、最大露光時間を示す“FFh”のハイニブルデータ“Fh”を設定すべきデータとして設定し、ステップS25でレジスタ設定処理を実行する。
その後、ステップS27で設定終了を示しかつイメージセンサ40にデータの出力を開始させるためのコマンド“RUN”を設定し、ステップS29で送信する。このようにして、図10に示すステップS1での初期設定動作が実行される。ただし、図11−図14に示す具体例は、使用されるイメージセンサの仕様に応じて、適宜変更され得るものである。
図10のステップS1の後、ゲームプロセサ52は、ステップS2で画像信号を更新してモニタ(図示せず)に表示される画像を更新する。ただし、この表示画像更新は、1フレーム(テレビジョンフレームまたはビデオフレーム)毎に実行される。
そして、ゲームプロセサ52は、ステート(状態)に応じた処理を実行する。ただし、最初に処理するのは、ゲームモードの選択である。このゲームモード選択では、ユーザないしゲームプレイヤは、図10のステップS3で、図1に示す選択キー22を操作して、1人プレイモードまたは2人プレイモードなどのゲームモードを選択するとともに、ゲームの難易度等を設定する。
実際のゴルフゲームではゴルフクラブを振ってゲーム画面内でゴルフボールを転動させる必要があるが、実施例のゴルフゲームシステム10では、先に述べたように、ゴルフクラブ型入力装置14を用いて実空間中でゴルフクラブスイング動作を行う。そこで、ゲームプロセサ52は、ステップS4でスイング動作の判定処理を実行し、スイング動作が行われたかどうか判定する。そして、スイング動作が行われたのであれば、ついでステップS5で、ゲーム画面内でボールが飛翔しまたは転動しているとき、ボールの軌道を計算するとともに、ボールが停止したときに、ステップS6において、ステップS5での軌道計算処理の結果として、スコア計算および結果判定処理を実行する。
その後、ビデオ同期信号による割り込みがあれば、ステップS2(図10)の画像更新を実行する。また、ステップS7の音声処理は、音声割り込みが発生したとき実行され、それによってゲーム音楽やゴルフクラブがボールを叩いた音のような効果音を出力する。
図15−図22を参照して、このようなゴルフゲームシステム10の具体的な全体動作を説明する。図15の最初のステップS55では、ゲームプロセサ52は、ゴルフクラブ型入力装置14の移動位置を検出するためのストロボスコープ撮影を実行する。
このストロボスコープ撮影処理の詳細が図16に示される。図16の最初のス67では、ゲームプロセサ52は、内部メモリ(図示せず)の適宜の領域の回数レジスタ(図示せず)の回数Nに「1」を代入する。続くステップS69において、ゲームプロセサ52は、ストロボスコープ撮影のために赤外発光ダイオード42を点灯する。具体的には、図7に示すLEDコントロール信号をハイレベルとする。その後、ステップS71で、画素データ配列の取得処理を実行する。
図36の最初のステップS301で、ゲームプロセサ52は画素データ配列の要素番号としてXに「−1」、Yに「0」を設定する。本実施例における画素データ配列は、X=0〜31、Y=0〜31の2次元配列であるが、前述のように各行の先頭ピクセルのデータとしてダミーデータが出力されるので、Xの初期値として「−1」が設定される。続くステップS303では、図17に示す要素[Y][X]の画素データの取得処理を実行する。
図17の最初のステップS83で、ゲームプロセサ52は、イメージセンサ40からのフレームステータスフラグ信号をチェックし、ステップS85でその立ち上がりエッジ(ローレベルからハイレベルへの)が発生したかどうか判断する。そして、ステップS85でフラグ信号の立ち上がりエッジを検出すると、次のステップS87において、ゲームプロセサ52は、それの内部のA/Dコンバータに入力されてきたアナログのピクセル信号のディジタルデータへの変換の開始を指示する。その後、ステップS89でイメージセンサ40からのピクセルストローブをチェックし、ステップS91でそのストローブ信号のローレベルからハイレベルへの立ち上がりエッジが発生したかどうか判断する。
ステップS91で“YES”が判断されると、ゲームプロセサ52は続いて、ステップS93において、X=−1かどうか、すなわち先頭ピクセルかどうか判断する。先に述べたように、各行の先頭ピクセルはダミーピクセルとして設定されているので、このステップS93で“YES”が判断されると、次のステップS95でそのときのピクセルデータを取得しないで、ステップS97で要素番号Xをインクリメントする。
ステップS93で“NO”が判断されると、行の第2番目以降のピクセルデータであるので、ステップS99およびS101において、そのときのピクセルデータを取得し、テンポラリレジスタ(図示せず)にそのピクセルデータを格納する。その後、図36のステップS305にリターンする。
ステップS305では、テンポラリレジスタに格納されたピクセルデータを画素データ配列の要素[Y][X]として格納する。
続くステップS309でXをインクリメントする。Xが32に満たない場合、前述のS303からS307の処理を繰り返し実行する。Xが32の場合、すなわち画素データの取得が行の終端に到達した場合には、続くステップS311Xに「−1」を設定し、ステップS313でYをインクリメントし、次の行の先頭から画素データの取得処理を繰り返す。
ステップS315でYが32の場合、すなわち画素データの取得が画素データ配列の終端に到達した場合、図16のステップS73にリターンする。
ステップS73では、上記画素データ配列をN回目点灯時取得データとして、たとえば内部RAMのワーキング領域に格納する。
続くステップS75で、ゲームプロセサ52は、LEDコントロール信号をローレベルにするなどして、赤外発光ダイオード42を消灯する。その後、ステップS76で、ステップS71と同様にして、図17および図35のサブルーチンに従って、赤外発光ダイオード42が消灯されているときの画素データ配列を取得し、ステップS77においてステップS73と同様にして、内部RAMのワーキング領域に格納する。
そして、ステップS79で回数レジスタNをインクリメントし、ステップS81で回数Nが規定値に達したかどうか判断する。このステップS81で“YES”が判断されると、そのまま、図15のステップS57(注目点抽出処理)にリターンする。ただし“NO”のときには、先のステップS69に戻る。
注目点抽出処理の詳細が図18に示される。図18の最初のステップS103では、ゲームプロセサ52は、内部メモリ(図示せず)内の回数レジスタ(図示せず)の回数Nに「1」を代入する。そして、次のステップS105で、図16のステップS73およびS77で得た、点灯時取得データおよび消灯時取得データとの差分から、差分データ配列を算出する。
つまり、この実施例では、前述のように、ゴルフクラブ型入力装置14の反射体50に赤外光を照射し、赤外フィルタを介してイメージセンサ40に入射した反射赤外光による映像を撮影している。一般的な室内環境で一般的な光源を用いてゴルフクラブ型入力装置14をストロボスコープ撮影をした場合には、イメージセンサ(実施例のイメージセンサ40に相当する)には、図19(A)に示すように、反射体による映像以外に、蛍光灯光源、白熱灯光源、太陽光(窓)のような光源だけでなく、室内のすべてのものの画像がすべて写り込む。したがって、この図19(A)の映像を処理して反射体の映像のみを抽出するのは、かなり高速のコンピュータまたはプロセサが必要である。しかしながら、安価が条件のゲーム装置ではそのような高性能コンピュータを使えない。そこで種々の処理を行って負担を軽減することが考えられる。
図19(B)は、図19(A)の映像信号を或る閾値でレベル弁別したときの映像信号である。このようなレベル弁別処理は専用のハードウェア回路でも、ソフトウェア的にでも、実行することができるが、いずれの方法によっても、一定以下の光量の画素データをカットするレベル弁別を実行すると、反射体や光源以外の低輝度画像を除去することができる。この図19(B)の映像では反射体および室内の光源以外の画像の処理を省略でき、したがって、コンピュータの負担を軽減できるが、それでも、光源画像を含む高輝度画像が依然として写り込んでいるので、反射体と他の光源を分別することは難しい。
そこで、実施例では、図3に示したように赤外フィルタ44を利用して、イメージセンサ40に赤外光による画像以外の画像が写らないようにした。それによって、図19(C)に示すように、赤外光を殆ど含まない蛍光灯光源の画像は除去できる。しかしながら、それでもなお太陽光や白熱灯が映像信号中に含まれてしまう。したがって、更なる負担軽減のために、赤外ストロボスコープの点灯時の画素データと消灯時の画素データとの差分を計算することとした。
そのため、図19(C)の点灯時の映像信号の画素データと、図19(D)の消灯時の映像信号の画素データとの差分を計算した。すると、図19(E)に示すように、その差分だけの映像が取得できる。この差分データによる映像は、図19(A)と対比すれば明らかなように、ゴルフクラブ型入力装置14の反射体によって得られる画像のみを含むことになる。したがって、ゲームプロセサ52の性能があまり高くなくても、ゴルフクラブ型入力装置14のスイングによる、反射体50すなわちクラブヘッド48(図4)の移動軌跡を取得することができる。
このような理由で、この実施例では、図18のステップS105において、たとえば図19(E)に示す差分データ配列を算出する。ステップS105で差分データ配列を求めた後、ステップS107で値の最も大きい画素(最大輝度の画素)の座標を取得し、ステップS109で、その座標の画素の輝度が規定値を超えているかどうか判断する。
このステップS109で“YES”が判断されると、続くステップS111で、ステップS107で取得した座標の画素に接する画素、さらにはそれに接する画素が上記規定値を超えているかどうかを順次判定し、注目部(実施例でいえば反射体の画像)の直径Φ[N]を計算する。この注目部の直径(または大きさ)を計算するのは、ステップS113で反射体50の高さ(Z座標)を取得するためと、ステップS115でその反射体の中心座標を特定する必要があるからである。
図3に示すように、この実施例の撮像ユニット28には単焦点の光学系が用いられている。したがって、反射体50と撮像素子、すなわちイメージセンサ40との間の距離が上記光学系の焦点と合致するとき画像の「ぼけ」が最も少なく、直径が最も大きい。これに対して、その合焦距離と反射体−イメージセンサ間距離との乖離が大きいほど、画像そのものが小さくなる。図19(E)および後述の図21の例では、その反射体−イメージセンサ間距離に応じて画像の大きさ(直径)が変化することを示している。このようにして、反射体画像の直径(大きさ)に基づいて、反射体−イメージセンサ間距離すなわち反射体50の高さ(Z座標)を求めることができる。この実施例のゴルフゲームシステムではこのZ座標は使用していないが、必要に応じてこのZ座標を利用することによって、さらに異なるゲーム入力を与えることができる。
このようにして、ステップS113でZ座標を求め、ステップS115で反射体50の中心座標(X,YまたはX,Y,Z)を保存する。
その後ステップS117で回数レジスタのN値をインクリメントして、ステップS119で回数Nが規定値を超えたかどうか判断する。ステップS119で“YES”が判断されると、そのまま図15のステップS59にリターンする。しかしながら、“NO”が判断されると、先のステップS105に戻って、ステップS105以下の各ステップを繰り返し実行する。
なお、ステップS109で“NO”が判断されたとき、つまり、最大輝度の画素の輝度が規定値を超えないと判断されたときには、次のステップS121で規定個数のデータをすべて検索した結果かどうか判断する。ステップS121で“YES”が判断されると、つまり、規定個数の画素をすべて検索したときには、ステップS123で、注目点がないとして検索結果を保存する。ただし、ステップS121で“NO”が判断されたときには、ステップS125で次に輝度の大きな画素の座標データを取得して、ステップS107に戻る。
ステップS57でこのようにして注目点の抽出処理をした後、次のステップS59で、速度ベクトルを計算するなどの動き算出処理を実行する。
図20がこの動き算出処理の一例である速度ベクトル算出処理の具体例を詳細図示している。図20のステップS127では上で述べたように、回数レジスタNに「1」を代入する。その後、ステップS129では、N回目の注目点座標(PX[N],PY[N]:図21)からN−1回目の注目点座標(PX[N−1],PY[N−1])を減算してN回目の速度ベクトル(VX[N],VY[N])を算出して内部メモリに格納する。
図21には、直径Φ[1]を有する第1回目の注目領域の画像が示され、この第1回目の注目領域の中心座標は(PX[1],PY[1])で、直径Φ[2]を有する第2回目の注目領域の中心座標は(PX[2],PY[2])である。同様に、第3回目および第4回目の注目領域はそれぞれ直径Φ[3]およびΦ[4]を有し、それらの中心座標は、それぞれ(PX[3],PY[3])および(PX[4],PY[4])で示されている。
第2回目の注目領域をN回目とした場合、N−1回目のものは第1回目の注目領域である。したがって、ステップS129では、この場合、X方向の速度ベクトルVX[2]は(PX[2]−PX[1])で与えられ、Y方向の速度ベクトルVY[2]は(PY[2]−PY[1])で与えられ。なお、N=1の場合、N−1の座標データはないので、前回の最終結果データを用いるか、あるいはその最終結果データがなければ、規定値を用いて速度ベクトルを計算することになる。
なお、図21には、各ストロボ映像の注目点領域(反射体)の画像毎の変化量ΔX,ΔYも併せて図示されている。したがって、必要なら、この変化量を使って変化または変位速度を計算することもできる。
ステップS129で速度ベクトルを計算した後、ステップS131で回数Nをインクリメントし、続くステップS133でNが規定値に達したかどうか判断する。ステップSか133で“NO”なら先のステップS129に戻って、ステップS129を繰り返し実行する。
ステップS59の後、次のステップS61で、図22に詳細に示す判定処理を実行する。この判定処理では、ゴルフクラブ型入力装置14をスイングしたかどうかを判定する。図22の最初のステップS135では、Nに「1」を代入し、ついで、ステップS137で、N点目の速度ベクトル(VX[N],VY[N])から速度V[N](スカラー値)を算出する。そして、次のステップS139において、そのようにして算出した速度V[N]が第1の閾値を超えているかどうか判断する。このステップS139で“YES”なら、直ちにステップS141で「スイングは行われた」と判定するとともに、ステップS143で、N点目の速度ベクトルから打球時のゴルフボールの初速度ベクトルを求める。したがって、実施例のゴルフゲームシステムの場合であれば、この初速度ベクトル、風向き、風の強さおよび地形のデータからボールの飛距離を計算することができる。
ステップS139で“NO”が判断されたとき、つまり、ゴルフクラブのスイングの速度が第1の閾値を下回ったときには、次のステップS145において、N点目とN−1点目とを結ぶ線分が規定の領域と交わっているかどうかを判定する。そして、この判定の結果、ステップS147で“YES”が得られたら、次のステップS149で、今度は、そのN点目の速度(スカラー値)が第2の閾値を超えているかどうか判断する。ただし、第2の閾値は当然第1の閾値より小さい値である。
ステップS149で“YES”のときには、先のステップS141に進むが、“NO”なら、ステップS147で“NO”のときと同様に、ステップS151に進み、N値をインクリメントする。そして、N>規定値かどうか判断し、“NO”なら先のステップS137に戻ってそれ以降の各ステップを繰り返し実行する。ただし、ステップS153で“NO”が判断されたときには、すなわち、ステップS145の線分が所定の領域と交わることがなく、あるいは交わっていたとしても、速度が所定値より小さい場合には、ステップS155で、結局、「スイングは行われていない」と判定される。
図22の判定処理が終わると、図15のステップS63にリターンするが、このステップS63では、ゲーム等のアプリケーションに応じた処理が行われ」、さらに、ステップS65で処理が終了したかどうか(ゲームの場合であればゲーム終了どうか)判断され、“YES”なら終了する。
なお、上述の実施例では、ゴルフクラブ型入力装置14に円形の反射体50を設けて、その移動軌跡から初速度ベクトルを求め、その初速度ベクトルでゴルフボールが打ち出されたものとして、ボールの飛距離を計算した。つまり、ボールに与えられる回転は無視していた。円形の反射体ではゴルフクラブ型入力装置14の向きを特定することができないからである。そこで、次の実施例では、ゴルフクラブ型入力装置14の向きをも計算することができるようにする。
そのために、次の実施例では、図23に示すゴルフクラブ型入力装置14を使う。この実施例では、先の図4のゴルフクラブ型入力装置が円形の反射体を用いていたのに対し、長円形または長手の反射体50Aを用いる。
そして、図15のステップS55で発光ダイオード42の点灯時および消灯時の各画素データを取得した後、図24で示す注目点抽出処理を実行する。ただし、ステップS157−S163は図18のステップS103−S109と同様である。
そして、次のステップS165において、ステップS161で取得した座標の画素に接する画素、さらにはそれに接する画素が規定値を超えているかどうかを順次判定し、注目部(実施例でいえば反射体の画像)の全画素を抽出する。そして、ステップS166で、注目部の全画素の中から、互いの距離が最も離れた2つの画素Pa(Xa,Ya)およびPb(Xb,Yb)を抽出する。この2点は、図26に示すように、長円形の反射体50Aの長手方向両端位置を示すことになる。長手方向両端以外に、2点間距離が最遠となる点はない。
そして、ステップS167で、2点Pa,Pbの中点座標をN点目の座標(PX[N],PY[N])としてメモリに格納する。そして、ステップS169において、図26に示す、2点Pa,Pb間の傾きを計算して、角度データθ[N]として格納する。ただし、この傾きθ[N]は、ステップS169に示すように、(Xb-Xa)/(Ya-Yb)のアークタンジェントで計算することができる。
このようにして、ゴルフクラブ型入力装置14の撮像素子に対する向きが角度データθ[N]として得られる。
図24のステップS171−S179は、図18の対応する各ステップS117−S125と同様である。そして、次の判定処理では、図25に示す各ステップを実行するが、図25のステップS181−S189およびS191−S201は、図22の対応するステップS135−S143およびS145−S155と同様である。
図25のステップS203において、図24のステップS169で求めた、N点目の座標およびN−1点目の座標によって、角度θj(図26)を計算する。この角度θjは、ステップS203に示すように、(PY[N]-PY[N−1])/(PX[N]-PX[N−1])のアークタンジェントで計算することができ、ゴルフクラブ型入力装置のスイングの方向を示す。そして、ステップS205において、このステップS205に示す式に従って、ゴルフクラブ型入力装置14のスイングの方向に対するゴルフクラブ型入力装置14の傾きθk(=θ[N]−θj)が算出され、θkより打球時のフック/スライスのパラメータを計算する。このようにして、フック/スライスのパラメータを求めることによって、単純な飛距離だけでなく、球のスピンによる飛翔方向の変化をも加味することができ、実施例のゴルフゲームシステムに一層のリアリティや面白さを与えることができる。
図27を参照して、この発明の他の実施例であるボーリングゲームシステム78は、ゲーム機80を含み、このゲーム機80は、図2のシステム10のゲーム機12と同様に、ACアダプタや電池で駆動され、AVケーブル16を通して、テレビジョンモニタ(図示せず)のAV端子(図示せず)に接続される。
ゲーム機78は、また、ハウジング82を含み、このハウジング82上に電源スイッチ84が設けられるとともに、方向ボタン86ならびに決定キー88およびキャンセルキー90が設けられる。これらのボタンや操作キーは図2の対応のものと同様の機能を持つ。
ゲーム機80のハウジング82の一部が切り欠かれ、その部分に可動体92が俯仰方向に回動可能に軸支され、その可動体92の側面には、先に図3を参照して説明した撮像ユニット28が収納され、したがって、可動体92には、先のものと同様のイメージセンサ40が設けられる。そして、可動体92の側面上であってイメージセンサ40の近傍に、このイメージセンサ40と一体的に俯仰される赤外発光ダイオード42が設けられ、ストロボスコーブ撮像手段を構成する。
可動体92は、実施例の場合、俯仰方向に一定の自由度を有するように支持されている。しかしながら、俯仰方向に代えて、あるいは俯仰方向と併用して、旋回方向に自由度を持つようにされてもよい。つまり、可動体92すなわちイメージセンサ40および赤外発光ダイオード42は、任意の方向に変位可能に設けられる。
ただし、イメージセンサ40のレンズ(図4に示す凹レンズや凸レンズ)をより広角なレンズとすれば、イメージセンサ40を可動なものにする必要はなく、イメージセンサ40を固定的に取り付けるようにしてもよい。
ボール型入力装置94は、実際のボーリングゲームと同様に、ユーザの手の3本の指すなわち親指,中指および薬指をそれぞれ挿入する穴94a,94bおよび94c有するとともに、子供が親指以外の任意の1本または複数の指を挿入できる幅広の孔94dをさらに形成している。そして、ストラップ96が設けられていて、ゲームプレイヤは、このストラップ96を自分の腕(上腕または前腕)に装着することによって、安全が図られている。すなわち、ボール型入力装置94がストラップ96によって自分の腕に連結されているので、ゲームプレイヤが誤ってボール型入力装置94を実際のボーリングゲームのように放しても、ボール型入力装置94がどこかに飛んで行き、結果的に自己または他人に当たるなどの事故は起きない。
さらに、この実施例のボール型入力装置94は、図28に示すように、透明または半透明の半球状外殻98Aおよび98Bをボスで連結することによってボール型入力装置94のハウジングを形成していて、その外殻98Aおよび98B中に、同様にボスで連結された半球状内殻100Aおよび100Bを固定している。そして、各半球状内殻100Aおよび100Bの表面に反射性シートを貼付することによって反射体を形成している。つまり、内殻が反射体となる。したがって、この実施例では、反射体100とする。
さらに、この実施例のボーリングゲームシステム78では、先に説明したように、ストロボスコープによってボール型入力装置94の動きを検出し、それによって、図29に示すゲーム画面102上でボーリングボール104の位置を制御する。このゲーム画面102は、ユーザまたはプレイヤの視点から見た投影画像(perspective image) として表示される。すなわち、ゲーム画面102には、ボーリングレーン106およびその奥行き方向位置に配置されるピン108が表示され、そのゲーム画面102上でレーン106上をボーリングボール104が移動し、そのボール104の到達位置や強さに応じて、実際のボーリングゲームと同様に、ピンが倒される。ただし、たとえばボーリングボール104がピン108に当たる直前からそのピン部部を拡大した画像をウィンドウ(図示せず)として画面中央に表示すると、一層大きな臨場感をプレイヤに与えることかできる。
なお、プレイヤの投球動作が終了する毎に、図29に示すゲーム画面102と図30に示すスコアシート110とが切り替えて表示される。そして、複数のゲームプレイヤがプレイする場合には、各人のスコアが同時に表示される。図30の例は、4人のゲームプレイヤがボーリングゲームに同時に参加している場合のスコアシートの例を示す。
このボーリングゲームシステム78では、ボール型入力装置94を用いてプレイヤが実空間中で実際に投球動作をしたとき、ゲームプロセサ52(図31)が、赤外発光ダイオード42を間欠的に点灯し、その点灯時および消灯時毎のCMOSイメージセンサ40の画像を解析または処理することによって、ボール型入力装置94の位置を間欠的に検出する。そして、そのボール型入力装置94の位置(座標)に応じてボーリングボール104の動きを制御し、それによって0本のまたは1本以上のピンを倒す。
図31を参照して、ボール型入力装置94は、上述のように、赤外発光ダイオード42の発光に照射され、その赤外光を反射体100で反射する。この反射体100からの反射光がCMOSイメージセンサ40によって撮影され、したがって、CMOSイメージセンサ40からは反射体100の映像信号が出力される。ただし、それ以外の部分は、図5に示すゴルフゲームシステム10の場合と同様である。
ここで、図32を参照して、実施例のボーリングゲームシステム78の概略動作を説明する。図27に示す電源スイッチ84をオンしてゲームスタートとなるが、図31に示すゲームプロセサ52は、まず、ステップS1で初期化処理を実行する。具体的には、システムおよび各変数を初期化する。ただし、初期化の具体的方法は先に述べたとおりである。
そして、図32のステップS1の後、ゲームプロセサ52は、ステップS2で画像信号を更新してモニタ20に表示される画像を更新する。ただし、この表示画像更新は、1フレーム(テレビジョンフレームまたはビデオフレーム)毎に実行される。
そして、ゲームプロセサ52は、ステート(状態)に応じた処理を実行する。ただし、最初に処理するのは、ゲームモードの選択である。このゲームモード選択では、ユーザないしゲームプレイヤは、図32のステップS3で、図27に示す選択キー86を操作して、1人プレイモードまたは2人プレイモードなどのゲームモードを選択するとともに、ゲームの難易度等を設定する。
実際のボーリングゲームではレーン上にボールを転動させる必要があるが、実施例のボーリングゲームシステム10では、先に述べたように、ボール型入力装置94を用いて投球動作を行う。そこで、ゲームプロセサ52は、ステップS4で投球動作の判定処理を実行し、投球動作が行われたかどうか判定する。そして、投球動作が行われたのであれば、ついでステップS5で、ボール104がレーン106(いずれも図30)上を移動しているとき、ボールの軌道を計算するとともに、ボール104のピン108(図30)への衝突判定処理を実行する。そして、ボール104がレーン106の終端まで到着したときに、ステップS6において、ステップS5でのピン衝突判断処理の結果として、スコア計算および結果判定処理を実行する。
なお、この実施例のボーリングゲームシステム78においても、ストロボスコープによって反射体100を撮影することによって、ゲーム入力とすることは先の実施例と同様である。したがって、先の実施例に比べて図15の判定処理ステップS61が異なるだけである。
判定処理ステップが図33に詳細に図示され、それぞれの最初のステップS207はN値を「1」として設定する。そして、ステップS209で、速度ベクトルのY成分(上下方向成分)VY[N](図21)が規定値を超えているかどうか判断する。このステップS209で“YES”の場合には、ステップS211に進み、たとえば内部メモリに形成されたカウンタをインクリメントする。そして、次のステップS213で、そのカウンタのカウント値が規定の定数C(たとえば「3」)になったかどうか判断する。“YES”なら、ステップS215で「投球動作が行われた」と判断し、続くステップS217でN点目のX座標PX[N]を投球位置のX座標とするとともに、ステップS219で、N点目の速度ベクトル(VX[N],VY[N])から投球時のボールの初速度を求める。そして、この初速度に応じてボーリングボールが投げ出されたものとして、ゲーム処理が実行される。
なお、ステップS209で“NO”が判断されたときには、ステップS221で上述のカウンタをリセットする。したがって、たとえば3回分連続して速度ベクトルのY成分が規定値を超えないと投球動作があったと判断されることはない。これによって、ゲームプレイヤの不所望の動きがゲームに反映されるが防止されている。
ステップS221の後、ステップS223でN値をインクリメントし、ステップS225でそのNが所定値に達したかどうか判定する。“YES”が判断されると、ステップS227で「投球はまだ行われていない」と判断される。そして、ステップS219の後と同じように、図15のステップS63にリターンする。
図34はストロボスコープを利用する入力装置の他の実施例を示し、この実施例の入力装置112は、手袋型入力装置である。手袋型入力装置112はゲームプレイヤまたはユーザの左右両手に装着される手袋114Lおよび114Rを含み、この手袋114Lおよび114Rのそれぞれの所定位置(この実施例では先端部分)に再帰反射シートで反射体116Lおよび116Rを設ける。この反射体116Lおよび116Rは、それぞれ、手袋114Lおよび114Rの一部として形成され得るが、手袋114Lおよび114Rの上に貼付するようにしてもよい。
そして、入力信号を与えるためには、ユーザは手袋114Lおよび114Rを両手に装着し、両手をたとえば図27に示すようなゲーム機80の撮影ユニット28(図3)の上で移動させる。そうすると、既に説明した図15のステップS55すなわち図16に従って、反射体116Lおよび116Rがともに、赤外発光ダイオード42によって照射され、または照射されないで、イメージセンサ40によって撮影される。そして、図15のステップS57すなわち図18に従って注目点(この実施例では2つの反射体116があるので2つの注目点がある)を抽出する。その後、図15のステップS59を適用して、動き算出または検出処理を実行する。ただし、図34の手袋型入力装置112を利用する場合には、ステップS59は図35に示すように変形される。
図35に示すフロー図では、移動平均を検出または算出することによって入力を得る。詳しく説明すると、最初のステップS207では、回数レジスタNに「規定値−M」を設定する。次いで、ステップS209において、変数ΣX,ΣYにそれぞれ「0」を設定する。
そして、ステップS211において、N回目の座標(PX[N],PY[N]:図21)を取得する。ただし、このとき、N<1の場合には、前回までの座標情報から座標データを取得する。次のステップS213で、ステップS209で初期化した変数ΣX,ΣYに、ステップS211で取得した座標をそれぞれ加算し、ΣX,ΣYを更新する。このことを、ステップS215でインクリメントした回数Nが規定値に達したとステップS217で検出されるまで、繰り返し実行される。したがって、ゲームプロセサ52はこの時点でM個の座標を加算した変数ΣX,ΣYを保存している。そして、ステップS219において、ΣX,ΣYを個数Mで除算することによって、移動平均(AX,AY)を算出する。この移動平均AX,AYを使って、ゲームプロセサ52は、たとえばゲーム画面上のプレイヤ操作可能な移動体の位置を変化させる。
なお、この発明は上で説明した実施例以外に、次のような実施例または変形例が可能である。
たとえば、図2に示す実施例では、ゴルフクラブ型入力装置14を用いて入力を行うが、同様のシステムを用いて、野球のバット型の入力装置かつ/または野球のボール型の入力装置を用いる野球ゲーム装置、卓球のラケット型入力装置を用いる卓球ゲーム、テニスのラケット型入力装置を用いるテニスゲーム等の変形が多数考えられる。
また、反射体を備える入力装置を下脚部または足首に取り付け、プレイヤの足の位置、速度、運動軌跡のパターンを入力信号として扱うサッカーゲーム装置のような変形も考えられる。
また、図34に示す手袋型入力装置を用いる実施例については、図35のフローチャートにて算出する移動平均値を入力信号として用いているが、手袋型入力装置の位置、移動速度、移動軌跡を算出し、これらを入力信号として扱う拳闘ゲーム装置、ダンスゲーム装置のような変形が多数考えられる。また、これらの変形例においては、手袋型入力装置の代りに、手首に巻くリストバンド形状の入力装置によっても手袋型入力装置と同様の効果が期待できる。
また、前述の足に取り付ける入力装置を、図34に示す手袋型入力装置、あるいはリストバンド形状の入力装置と組み合わせて用いることにより、四肢を使うダンスゲーム装置のような変形も多数考えられる。
また、図23に示すゴルフクラブ型入力装置14のように、細長い形状の反射体50Aを剣の形状をした入力装置に貼付し、剣の角度、位置、移動速度、移動軌跡を入力信号として扱う剣闘ゲーム装置のような変形も多数考えられる。
この発明ではストロボスコープと撮像手段を用いて対象物を撮影し、複数の発光時映像信号と複数の非発光時映像信号とのそれぞれの差に基づいて対象物の位置、大きさ、速度、加速度、運動軌跡パターンの情報の一部または全部を算出する。情報処理装置やエンターテインメント装置は、その情報を用いて情報処理やゲーム,その他のエンターテインメント処理を実行する。
ただし、上述の例では1つのゲームプロセサによってすべての情報処理を実行するようにしたが、2以上のプロセサやコンピュータを用いて全体の処理を分担させることも当然できる。