上記の技術では、ユーザが手に持って使用する入力装置(上記指示器やガン型のコントローラ)は、表示画面上の位置を指定するために用いられるのみである。つまり、上記の指示器やガン型のコントローラでは、表示画面上の位置を指定するという単一の操作のみが可能であり、他の操作を行うことができなかった。例えば、上記入力装置をゲーム装置に用いる場合、表示画面上の位置を指定するという1種類の単純なゲーム操作しか行うことができない。そのため、ゲーム操作が単純であることからゲーム自体も単純な内容となってしまい、興趣性に欠けるものとなる。
それ故、本発明の目的は、ユーザが手に持って使用する入力装置を用いて従来にはない新たな操作が可能な情報処理システムおよびそれにおいて用いられるプログラムを提供することである。
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
第1の発明は、情報処理装置(ゲーム装置3)のコンピュータ(CPU10等)で実行される情報処理プログラムである。情報処理装置は、撮像対象(マーカ8aおよび8b)を撮像するための撮像手段(撮像素子40)を備える操作装置(コントローラ7)から操作データを受け取り、当該操作データを用いて所定の操作対象(プレイヤオブジェクト71、鍵76、仮想カメラ81、またはドアノブ85aおよび86a)に演算処理を加えた後の仮想空間を表示装置(モニタ2)に表示させる。情報処理プログラムは、取得ステップ(S1)と、ベクトル算出ステップ(S16)と、第1回転ステップ(S3)と、表示ステップ(S4)とをコンピュータに実行させる。取得ステップにおいては、操作装置の撮像手段で撮像された撮像画像を操作データとして取得する。ベクトル算出ステップにおいては、撮像画像における撮像対象の位置を用いて、2次元ベクトル(方向データ57により示されるベクトル)を算出する。第1回転ステップにおいては、算出された2次元ベクトルの値に応じて、操作対象を回転させる。表示ステップにおいては、第1回転ステップにおける操作対象の回転に応じて変更される仮想空間を、表示装置の表示領域に表示させる。
第2の発明においては、ベクトル算出ステップは、第1算出ステップと、第2算出ステップとを含んでいてもよい。第1算出ステップにおいては、撮像画像に対応した座標系において、撮像対象の画像のうちの所定の2点の座標を算出する。第2算出ステップにおいては、所定の2点の座標を結ぶ2次元ベクトルを算出する。
第3の発明は、情報処理装置(ゲーム装置3)のコンピュータ(CPU10等)で実行される情報処理プログラムである。情報処理装置は、操作装置(コントローラ7)から操作データを受け取り、当該操作データを用いて所定の操作対象(プレイヤオブジェクト71、鍵76、仮想カメラ81、またはドアノブ85aおよび86a)に演算処理を加えた後の仮想空間を表示装置(モニタ2)に表示させる。操作装置は、撮像対象を撮像するための撮像手段(撮像素子40)と、当該撮像手段によって撮像された撮像画像に含まれる撮像対象の画像のうちの所定の2点の座標を算出する第1算出手段(画像処理回路41)とを備えている。情報処理プログラムは、取得ステップ(S1)と、ベクトル算出ステップ(S16)と、第1回転ステップ(S3)と、表示ステップ(S4)とをコンピュータに実行させる。取得ステップにおいては、所定の2点の座標を操作データとして取得する。ベクトル算出ステップにおいては、2点の座標を結ぶ2次元ベクトルを算出する。第1回転ステップにおいては、算出された2次元ベクトルの値に応じて、操作対象を回転させる。表示ステップにおいては、第1回転ステップにおける操作対象の回転に応じて変更される仮想空間を表示装置の表示領域に表示させる。
第4の発明は、情報処理装置(ゲーム装置3)のコンピュータ(CPU10等)で実行される情報処理プログラムである。情報処理装置は、操作装置(コントローラ7)から操作データを受け取り、当該操作データを用いて所定の操作対象(プレイヤオブジェクト71、鍵76、仮想カメラ81、またはドアノブ85aおよび86a)に演算処理を加えた後の仮想空間を表示装置(モニタ2)に表示させる。操作装置は、撮像対象を撮像するための撮像手段(撮像素子40)と、当該撮像手段によって撮像された撮像画像における当該撮像対象の位置を用いて2次元ベクトルを算出するベクトル算出手段(画像処理回路41)とを備えている。情報処理プログラムは、取得ステップ(S1)と、第1回転ステップ(S3)と、表示ステップ(S4)とをコンピュータに実行させる。取得ステップにおいては、2次元ベクトルデータを操作データとして取得する。第1回転ステップにおいては、取得された2次元ベクトルの値に応じて、操作対象を回転させる。表示ステップにおいては、第1回転ステップにおける操作対象の回転に応じて変更される仮想空間の画像を表示装置の表示領域に表示させる。
第5の発明においては、情報処理プログラムは、指示座標算出ステップ(S22,S52,S62)をコンピュータにさらに実行させてもよい。指示座標算出ステップにおいては、取得された撮像画像における撮像対象の画像の位置に対応させて、表示領域上の位置に対応した所定の指示座標(指示座標データ62)を算出する。このとき、第1回転ステップにおいては、2次元ベクトルと、指示座標とを用いた演算によって操作対象を回転させる。
第6の発明においては、情報処理プログラムは、指示座標算出ステップ(S22,S52,S62)をコンピュータにさらに実行させてもよい。指示座標算出ステップにおいては、2点の座標の中点座標に対応させて、表示領域上の位置に対応した所定の指示座標を算出する。このとき、第1回転ステップにおいては、2次元ベクトルと、指示座標とを用いた演算によって操作対象を回転させる。
第7の発明においては、操作データには、撮像対象の画像位置に対応した1点の座標がさらに含まれていてもよい。このとき、情報処理プログラムは、指示座標算出ステップ(S22,S52,S62)をコンピュータにさらに実行させる。指示座標算出ステップにおいては、1点の座標に対応させて、表示領域上の位置に対応した所定の指示座標を算出する。第1回転ステップにおいては、2次元ベクトルと、指示座標とを用いた演算によって操作対象を回転させる。
第8の発明においては、指示座標算出ステップは、撮像手段によって撮像された画像を、画像中心を軸として回転させ、当該回転によって2次元ベクトルが一定の方向になるようにした場合における、撮像対象の画像の位置に対応させて表示領域上の位置に対応した指示座標を算出するようにしてもよい。
第9の発明においては、情報処理プログラムは、指示座標算出ステップ(S22,S52,S62)をコンピュータにさらに実行させてもよい。指示座標算出ステップにおいては、表示領域上の位置に対応した所定の座標を指示座標として設定する。第1回転ステップにおいては、2次元ベクトルと、指示座標とを用いた演算によって操作対象を回転させる。
第10の発明においては、仮想空間は仮想的な3次元空間であってもよい。このとき、情報処理プログラムは、3次元指示座標設定ステップ(S53)をコンピュータにさらに実行させる。3次元指示座標設定ステップにおいては、指示座標算出ステップで算出された指示座標に対応する仮想空間内での3次元座標を算出して、当該3次元座標を3次元指示座標として設定する。このとき、第1移動ステップにおいては、2次元ベクトルと、3次元指示座標とを用いた演算によって3次元空間において操作対象を回転させる。
第11の発明においては、情報処理プログラムは、オブジェクト配置ステップ(S31,S41,S60)をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に少なくとも1つのオブジェクトを配置する。第1回転ステップにおいては、仮想空間に配置されるオブジェクトを操作対象として回転させる。
第12の発明においては、情報処理プログラムは、オブジェクト配置ステップ(S31,S41,S60)をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に少なくとも1つのオブジェクトを配置する。このとき、第1回転ステップは、指示座標に対応した表示領域上の位置に、オブジェクトのいずれかが表示されるか否か判別する判別ステップ(S64)と、指示座標に対応した位置にオブジェクトが表示される場合には、当該オブジェクトを操作対象として設定する操作対象設定ステップ(S65)と、操作対象設定ステップにおいて設定されたオブジェクトを回転させるステップ(S21)とを含んでいてもよい。
第13の発明においては、情報処理プログラムは、オブジェクト配置ステップ(S31,S41,S60)をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に操作対象となるオブジェクトを配置する。このとき、第1回転ステップは、指示座標算出ステップにおいて算出された位置に表示されるようにオブジェクトを移動させるオブジェクト移動ステップ(S21)と、オブジェクトを回転させるステップ(S22)とを含む。
第14の発明においては、情報処理プログラムは、オブジェクト配置ステップ(S31,S41,S60)をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に操作対象となるオブジェクトを配置する。このとき、第1回転ステップは、3次元指示座標設定ステップにおいて算出された3次元指示座標(対応座標)にオブジェクトを移動させるオブジェクト移動ステップ(S21)と、オブジェクトを回転させるステップ(S22)とを含む。
第15の発明においては、情報処理プログラムは、オブジェクト配置ステップ(S31,S41,S60)をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に操作対象となるオブジェクトを配置する。このとき、第1回転ステップは、指示座標算出ステップにおいて算出された座標を回転の中心座標として設定する中心座標設定ステップ(S53)と、中心座標を中心としてオブジェクトを回転させるステップ(S22)とを含む。
第16の発明においては、情報処理プログラムは、オブジェクト配置ステップ(S31,S41,S60)をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に操作対象となるオブジェクトを配置する。このとき、第1回転ステップは、3次元指示座標設定ステップにおいて算出された3次元座標を回転の中心座標として設定する中心座標設定ステップ(S53)と、中心座標を中心として3次元空間においてオブジェクトを回転させるステップ(S22)とを含む。
第17の発明においては、仮想空間は仮想的な3次元空間であってもよい。このとき、情報処理プログラムは、仮想カメラ設定ステップ(S50)をコンピュータにさらに実行させる。仮想カメラ設定ステップにおいては、当該仮想空間内における所定位置に所定方向を向く仮想カメラを設定する。第1回転ステップにおいては、仮想カメラを操作対象として回転させる。表示ステップにおいては、仮想カメラから見た仮想空間の画像を画面に表示する。
第18の発明においては、仮想空間は仮想的な3次元空間であってもよい。このとき、情報処理プログラムは、仮想カメラ設定ステップ(S50)をコンピュータにさらに実行させる。仮想カメラ設定ステップにおいては、当該仮想空間内における所定位置に所定方向を向く仮想カメラを設定する。第1回転ステップにおいては、3次元指示座標設定ステップにおいて算出された座標を回転の中心として仮想カメラを操作対象として回転させる。
第19の発明においては、第1回転ステップにおいて、仮想カメラの注視点の位置を中心として仮想カメラを回転させるようにしてもよい。
第20の発明においては、第1回転ステップにおいて、仮想カメラの視線方向が変化するように仮想カメラを回転させるようにしてもよい。
第21の発明においては、第1回転ステップにおいて、回転によって操作対象の姿勢を変化させるようにしてもよい。
第22の発明においては、第1回転ステップにおいて、所定の位置を中心とした回転によって操作対象の位置を移動させるようにしてもよい。
第23の発明においては、第1回転ステップにおいて、算出された2次元ベクトルの方向に応じて操作対象の姿勢または位置が決定されるようにしてもよい。
第24の発明においては、第1回転ステップは、2次元ベクトルの方向が所定の範囲を超えたか否かを判別する判別ステップと、判別ステップにおいて2次元ベクトルの方向が所定の範囲を超えたと判別された場合に操作対象を回転させるステップとを含んでいてもよい。
第25の発明においては、情報処理プログラムは、傾き算出ステップ(S54)をコンピュータにさらに実行させてもよい。傾き算出ステップは、2次元ベクトルの方向と、所定の基準方向との差を角度またはベクトルとして求める。このとき、第1回転ステップにおいては、傾き算出ステップで算出された差に応じて操作対象を回転させる。
第26の発明においては、第1回転ステップは、傾き算出ステップで算出された差の大きさに応じて回転量を設定する回転量設定ステップ(S55)と、当該回転量だけ操作対象を回転させるステップ(S56)とを含んでいてもよい。
第27の発明においては、第1回転ステップは、傾き算出ステップで算出された差が所定値を超えたか否か判別する判別ステップと、判別ステップにおいて当該差が所定値を超えたと判別された場合に操作対象を回転させるステップとを含んでいてもよい。
第28の発明においては、情報処理プログラムは、大きさ算出ステップ(S19)をコンピュータにさらに実行させてもよい。大きさ算出ステップにおいては、取得された撮像画像における撮像対象の画像の大きさを示すデータを操作データから算出する。このとき、第1回転ステップにおいては、2次元ベクトルと、大きさ算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる。
第29の発明においては、情報処理プログラムは、長さ算出ステップ(S19)をコンピュータにさらに実行させてもよい。長さ算出ステップにおいては、2点の座標の間の長さを示すデータを算出する。このとき、第1回転ステップにおいては、2次元ベクトルと、長さ算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる。
第30の発明は、操作データには、撮像手段によって撮像された撮像画像に含まれる撮像対象の画像のうちの所定の2点の座標の間の長さを示すデータがさらに含まれていてもよい。このとき、第1回転ステップにおいては、2次元ベクトルと、2点の座標の間の長さを示すデータとを用いた演算によって操作対象を回転させる。
第31の発明においては、第1回転ステップは、大きさ算出ステップにおいて算出されたデータから、撮像手段と撮像対象との距離を示す距離データを算出するステップ(S48)と、2次元ベクトルと距離データとを用いた演算によって操作対象を回転させるステップとを含んでいてもよい。
第32の発明においては、第1回転ステップは、長さ算出ステップにおいて算出されたデータから、撮像手段と撮像対象との距離を示す距離データを算出するステップ(S48)と、2次元ベクトルと距離データとを用いた演算によって操作対象を回転させるステップとを含んでいてもよい。
第33の発明においては、第1回転ステップは、2点の座標の間の長さを示すデータから、撮像手段と撮像対象との距離を示す距離データを算出するステップ(S48)と、2次元ベクトルと、距離データとを用いた演算によって操作対象を回転させるステップとを含んでいてもよい。
第34の発明においては、操作データには、撮像手段と撮像対象との距離を示す距離データがさらに含まれていてもよい。このとき、第1回転ステップにおいては、2次元ベクトルと、距離データとを用いた演算によって操作対象を回転させる。
第35の発明においては、情報処理プログラムは、距離算出ステップをコンピュータにさらに実行させてもよい。距離算出ステップ(S48)においては、撮像手段と撮像対象との距離に対応したデータを算出する。このとき、第1回転ステップにおいては、2次元ベクトルと、距離算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる。
第36の発明においては、仮想空間は仮想的な3次元空間であってもよい。このとき、情報処理プログラムは、オブジェクト配置ステップをコンピュータにさらに実行させる。オブジェクト配置ステップにおいては、仮想空間内に少なくとも1つのオブジェクトを配置する。このとき、第1回転ステップは、距離データに対応させて、仮想空間内の奥行き方向の座標を決定する奥行き設定ステップと、奥行き設定ステップにおいて算出された奥行き方向の座標位置に少なくとも1つのオブジェクトのいずれかが存在するか否か判別する判別ステップと、判別ステップにおいてオブジェクトが存在すると判別された場合に、当該オブジェクトを操作対象として設定する操作対象設定ステップとを含む。
第37の発明においては、仮想空間は仮想的な3次元空間であってもよい。このとき、第1回転ステップは、距離データに対応させて、仮想空間内の奥行き方向の座標を決定する奥行き設定ステップ(S49)と、奥行き設定ステップにおいて算出された奥行き方向の座標に操作対象の奥行き方向の位置を移動させる移動ステップと、2次元ベクトルに応じて操作対象を回転させるステップとを含む。
第38の発明においては、入力装置は、自機の傾きを検出する傾き検出手段(加速度センサ37)を備えていてもよい。このとき、情報処理プログラムは、判定ステップと、第2回転ステップとをコンピュータにさらに実行させる。判定ステップは、取得された画像からベクトル算出ステップによって2次元ベクトルが算出可能か否かを判定する。第2回転ステップにおいては、判定ステップにおいて方向が算出不可能と判定されたとき、傾き検出手段によって検出される傾き方向に応じて操作対象を回転させる。
第1の発明によれば、ベクトル算出ステップによって、撮像対象の画像(撮像画像)から2次元のベクトルが算出される。この2次元ベクトルの値は、撮像装置を備える操作装置の回転状態によって変化する。したがって、この方向に応じて回転するように操作対象を表示することによって、操作装置を回転させる操作に応じて操作対象を回転させることができる。すなわち、第1の発明によれば、ユーザが手に持って使用する操作装置を用いて、操作装置自体を回転させるという今までにない操作によって操作対象を回転させるという、新規な操作方法を提供することができる。また、第1の発明によれば、撮像画像が操作装置から取得されるので、操作装置は、画像を撮像する機能のみを有すればよい。したがって、操作装置の構成を簡易化することができる。
第2の発明によれば、撮像対象の画像のうちの所定の2点の位置が算出されるので、当該2点の位置を用いて2次元ベクトルを容易に算出することができる。
第3の発明によれば、第1の発明と同様、ユーザが手に持って使用する操作装置を用いて、操作装置自体を回転させるという今までにない操作によって操作対象を回転させるという、新規な操作方法を提供することができる。また、第3の発明によれば、操作装置によって撮像対象の画像のうちの所定の2点の位置が算出されるので、情報処理装置は、当該2点の位置を用いて2次元ベクトルを容易に算出することができる。すなわち、情報処理装置のコンピュータにおける処理負荷を軽減することができる。
第4の発明によれば、第1の発明と同様、ユーザが手に持って使用する操作装置を用いて、操作装置自体を回転させるという今までにない操作によって操作対象を回転させるという、新規な操作方法を提供することができる。また、第4の発明によれば、操作装置によって2次元ベクトルが算出されるので、情報処理装置は、2次元ベクトルを算出する処理を実行する必要がない。すなわち、情報処理装置のコンピュータにおける処理負荷を軽減することができる。
第5の発明によれば、指示座標算出ステップによって、撮像画像内における撮像対象の画像の位置から、表示領域上の位置が算出される。したがって、ユーザは、ユーザが手に持って使用するタイプの操作装置を用いて、表示領域上の位置を指定することができる。さらに、このようなユーザによって指定される位置と2次元ベクトルとを用いて操作対象が回転される。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。例えば、ユーザは、回転の中心位置を指定したり、指定した位置に操作対象を移動させるとともに操作対象を回転させたりすることができる。
第6の発明によれば、指示座標算出ステップによって、撮像画像内における撮像対象の画像の位置から、表示領域上の位置が算出される。したがって、ユーザは、ユーザが手に持って使用するタイプの操作装置を用いて、表示領域上の位置を指定することができる。さらに、このようなユーザによって指定される位置と2次元ベクトルとを用いて操作対象が回転されるので、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
第7の発明によれば、指示座標算出ステップによって、撮像画像内における撮像対象の画像の位置から、表示領域上の位置が算出される。したがって、ユーザは、ユーザが手に持って使用するタイプの操作装置を用いて、表示領域上の位置を指定することができる。さらに、このようなユーザによって指定される位置と2次元ベクトルとを用いて操作対象が回転されるので、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
ここで、撮像画像内における対象画像の位置は、操作装置の回転状態によって異なる(図15参照)。つまり、操作装置がある1箇所の位置を指し示す状態であっても、操作装置の回転状態によって対象画像の位置が異なってしまう場合がある。この場合、操作装置が指し示す位置(すなわち、指示座標算出ステップで算出される指示座標の位置)を対象画像の位置から正確に算出することができない。これに対して、第8の発明によれば、撮像画像の向きが一定となるように撮像対象の画像を回転させたときの当該撮像画像の位置を算出している。これによって、操作装置の回転状態の影響をなくすことができるので、位置算出ステップで算出される画面上または仮想空間内の位置を、撮像画像の位置から正確に算出することができる。
第9の発明によれば、指示座標算出ステップによって、撮像画像内における撮像対象の画像の位置から、表示領域上の位置が算出される。したがって、ユーザは、ユーザが手に持って使用するタイプの操作装置を用いて、表示領域上の位置を指定することができる。さらに、このようなユーザによって指定される位置と2次元ベクトルとを用いて操作対象が回転されるので、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
第10の発明によれば、操作装置自体を回転させるという今までにない操作によって、3次元の仮想空間内に存在する操作対象を移動させることができる。また、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、3次元の仮想空間内に存在する操作対象の回転をより詳細に制御することができる。
第11の発明によれば、操作装置自体を回転させるという今までにない操作によって、3次元の仮想空間内に存在するオブジェクトを移動させることができる。
第12の発明によれば、指示座標算出ステップで算出される指示座標に対応した表示領域上の位置に表示されるオブジェクトが操作対象として設定される。したがって、ユーザは、操作装置を用いて、画面上に表示されているオブジェクトを指定する操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象となるオブジェクトの選択に関する指示と、選択したオブジェクトを回転させる指示という2種類の指示を、1つの操作装置に対する姿勢操作という1種類の操作方法によって行うことができる。
第13の発明によれば、指示座標算出ステップで算出される指示座標に対応した表示領域上の位置にオブジェクトが移動される。したがって、ユーザは、操作装置を用いて、画面上に表示されているオブジェクトを移動させる操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象となるオブジェクトを移動させる指示と、オブジェクトを回転させる指示という2種類の指示を、1つの操作装置に対する姿勢操作という1種類の操作方法によって行うことができる。
第14の発明によれば、指示座標算出ステップで算出される指示座標に対応した3次元指示座標の位置にオブジェクトが移動される。したがって、ユーザは、操作装置を用いて、仮想3次元空間内のオブジェクトを移動させる操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象となるオブジェクトを移動させる指示と、選択したオブジェクトを回転させる指示という2種類の指示を、1つの操作装置に対する姿勢操作という1種類の操作方法によって行うことができる。
第15の発明によれば、ユーザは、ユーザが手に持って使用するタイプの入力装置を用いて、画面上における位置を指定することができる。ユーザは、当該入力装置を用いて、オブジェクトが行う回転動作の中心位置を指定することができる。これによって、回転動作のバリエーションが増えるので、より多彩な回転動作をオブジェクトに行わせることができる。
第16の発明によれば、ユーザは、ユーザが手に持って使用するタイプの入力装置を用いて、仮想3次元空間における位置を指定することができる。ユーザは、当該入力装置を用いて、オブジェクトが行う回転動作の中心位置を指定することができる。これによって、回転動作のバリエーションが増えるので、より多彩な回転動作をオブジェクトに行わせることができる。
第17の発明によれば、第1回転ステップで仮想カメラを回転させることによって、画面に表示されている仮想空間の画像の視点位置や視線方向を変化させることができる。ユーザは、入力装置自体を回転させるという今までにない操作によって、画面に表示されている仮想空間の画像の視点位置や視線方向を変化させることができる。
第18の発明によれば、ユーザは、ユーザが手に持って使用するタイプの入力装置を用いて、画面上における位置を指定することができる。ユーザは、当該入力装置を用いて、仮想カメラが行う回転動作の中心位置を指定することができる。これによって、回転動作のバリエーションが増えるので、より多彩な回転動作を仮想カメラに行わせることができる。
第19の発明によれば、入力装置自体を回転させるという今までにない操作によって、注視点の位置に存在するオブジェクトを見る視線方向を自由に変化させることができる。
第20の発明によれば、入力装置自体を回転させるという今までにない操作によって、仮想カメラの視線方向を自由に変化させることができる。
第21の発明によれば、入力装置自体を回転させるという今までにない操作によって、操作対象の姿勢を自由に変化させることができる。
第22の発明によれば、入力装置自体を回転させるという今までにない操作によって、操作対象を自由に回転移動させることができる。
第23の発明によれば、入力装置の回転角度に対応するように操作対象を回転させることができる。
第24の発明によれば、算出される2次元ベクトルの方向が所定の範囲内にある場合、操作対象は回転しない。ここで、入力装置の回転角度に敏感に反応して操作対象が回転するとすれば、入力装置を厳密に操作することをユーザに要求することとなり、当該入力装置の操作性がかえって悪くなってしまう。これに対して、第24の発明によれば、所定の範囲内においては操作対象が回転しないので、入力装置の回転操作においていわゆる遊びの部分を設定することができ、操作性を向上することができる。
第25の発明によれば、2次元ベクトルの方向と所定の基準方向との差に基づいて操作対象が回転される。ここで、ユーザの使いやすい状態を基準方向とすることによって、入力装置の操作性を向上することができる。
第26の発明によれば、2次元ベクトルの方向と所定の基準方向との差に応じて操作対象の回転量が増加するので、ユーザは、入力装置の回転量によって操作対象の回転量を制御することができる。これによって、ユーザは、操作対象の回転量を直感的かつ容易に制御することができる。
第27の発明によれば、2次元ベクトルの方向と所定の基準方向との差が所定値を超えない範囲では操作対象は回転されない。すなわち、角度差が所定値を超えない範囲をいわゆる遊びの範囲とすることによって、第24の発明と同様、入力装置の操作性を向上することができる。
第28の発明によれば、撮像対象の画像の大きさを示すデータによって、撮像手段(操作装置)から撮像対象までの距離を検知することができる。したがって、ユーザは、この距離を変化させるように操作装置自体を動かすことによって、操作対象を回転させる操作を行うことができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
第29の発明によれば、撮像対象の2箇所の位置に対応する2点の座標の長さを示すデータによって、撮像手段(操作装置)から撮像対象までの距離を検知することができる。したがって、ユーザは、この距離を変化させるように操作装置自体を動かすことによって、操作対象を回転させる操作を行うことができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
第30の発明によれば、第28および第29の発明と同様、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
第31の発明によれば、操作対象に対する回転操作に関して、撮像手段から撮像対象までの距離をより正確に反映させることができる。
第32の発明によれば、操作対象に対する回転操作に関して、撮像手段から撮像対象までの距離をより正確に反映させることができる。
第33の発明によれば、操作対象に対する回転操作に関して、撮像手段から撮像対象までの距離をより正確に反映させることができる。
第34の発明によれば、操作対象に対する回転操作に関して、撮像手段から撮像対象までの距離をより正確に反映させることができる。
第35の発明によれば、撮像手段(操作装置)から撮像対象までの距離に対応したデータ(長さデータ59や距離データ63)が算出される。これによって、ユーザは、この距離を変化させるように操作装置自体を動かすことによって、操作対象を回転させる操作を行うことができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
第36の発明によれば、奥行き設定ステップで決定される奥行き方向の座標に対応した位置にあるオブジェクトが操作対象として設定される。したがって、ユーザは、操作装置を用いて、仮想空間内のオブジェクトを指定する操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象となるオブジェクトの選択に関する指示と、選択したオブジェクトを回転させる指示という2種類の指示を、操作装置自体を動かすという1種類の操作方法によって行うことができる。
第37の発明によれば、奥行き設定ステップで決定される奥行き方向の座標に対応した位置に操作対象が移動される。したがって、ユーザは、操作装置を用いて、仮想空間内の操作対象を移動させる操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象を移動させる指示と、操作対象を回転させる指示という2種類の指示を、操作装置自体を動かすという1種類の操作方法によって行うことができる。
第38の発明によれば、撮像手段が撮像対象を撮像することができる範囲(後述する操作可能範囲)を超えた状態で操作装置がユーザによって把持された場合、傾き検出手段によって検出される傾きに応じて操作対象が回転される。したがって、ユーザが操作装置を移動させる操作を行っている途中において操作可能範囲を超えた状態となっても、操作対象の回転動作を継続することができる。
図1を参照して、本発明の一実施形態に係る情報処理システムの一例であるゲームシステム1について説明する。なお、図1は、当該ゲームシステム1を説明するための外観図である。以下、据置型ゲーム装置を一例にして、本発明のゲームシステム1について説明する。
図1において、当該ゲームシステム1は、家庭用テレビジョン受像機等のスピーカ22を備えたディスプレイ(以下、モニタと記載する)2に、接続コードを介して接続される据置型ゲーム装置(以下、単にゲーム装置と記載する)3および当該ゲーム装置3に操作データを与えるコントローラ7によって構成される。また、モニタ2の周辺(図では画面の上側)には、2つのマーカ8aおよび8bが設置される。マーカ8aおよび8bは、具体的には赤外LEDであり、それぞれモニタ2の前方に向かって赤外光を出力する。ゲーム装置3は、接続端子を介して受信ユニット6が接続される。受信ユニット6は、コントローラ7から無線送信される操作データを受信し、コントローラ7とゲーム装置3とは無線通信によって接続される。また、ゲーム装置1には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。ゲーム装置3の上部主面には、当該ゲーム装置3の電源ON/OFFスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置3上部の蓋を開くOPENスイッチが設けられている。ここで、プレイヤがOPENスイッチを押下することによって上記蓋が開き、光ディスク4の脱着が可能となる。
また、ゲーム装置3には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード5が必要に応じて着脱自在に装着される。ゲーム装置3は、光ディスク4に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ2に表示する。さらに、ゲーム装置3は、外部メモリカード5に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置3のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
コントローラ7は、その内部に備える通信部36(後述)から受信ユニット6が接続されたゲーム装置3へ、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて操作データを無線送信する。コントローラ7は、操作対象(モニタ2に表示されるオブジェクトや仮想カメラ)を操作するための操作手段である。コントローラ7は、複数の操作ボタンからなる操作部が設けられている。また、後述により明らかとなるが、コントローラ7は、当該コントローラ7の位置および姿勢を検出するための撮像情報演算部35(後述)を備えている。すなわち、撮像情報演算部35は、モニタ2の周辺に配置された各マーカ8aおよび8bを撮像対象として、各マーカ8aおよび8bの画像を撮像する。ゲーム装置3は、この画像を用いてコントローラ7の位置および姿勢に対応した操作信号を得る。
次に、図2を参照して、ゲーム装置3の構成について説明する。なお、図2は、ゲーム装置3の機能ブロック図である。
図2において、ゲーム装置3は、各種プログラムを実行する例えばリスク(RISC)CPU(セントラルプロセッシングユニット)10を備える。CPU10は、図示しないブートROMに記憶された起動プログラムを実行し、メインメモリ13等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。CPU10には、メモリコントローラ11を介して、GPU(Graphics Processing Unit)12、メインメモリ13、DSP(Digital Signal Processor)34、およびARAM(Audio RAM)35が接続される。また、メモリコントローラ11には、所定のバスを介して、コントローラI/F(インターフェース)16、ビデオI/F17、外部メモリI/F18、オーディオI/F19、およびディスクI/F21が接続され、それぞれ受信ユニット6、モニタ2、外部メモリカード5、スピーカ22、およびディスクドライブ20が接続されている。
GPU12は、CPU10の命令に基づいて画像処理を行うものあり、例えば、3Dグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。GPU12は、図示しない画像処理専用のメモリやメインメモリ13の一部の記憶領域を用いて画像処理を行う。GPU12は、これらを用いてモニタ2に表示すべきゲーム画像データやムービー映像を生成し、適宜メモリコントローラ11およびビデオI/F17を介してモニタ2に出力する。
メインメモリ13は、CPU10で使用される記憶領域であって、CPU10の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ13は、CPU10によって光ディスク4から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ13に記憶されたゲームプログラムや各種データ等がCPU10によって実行される。
DSP14は、ゲームプログラム実行時にCPU10において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのARAM15が接続される。ARAM15は、DSP14が所定の処理(例えば、先読みしておいたゲームプログラムやサウンドデータの記憶)を行う際に用いられる。DSP14は、ARAM15に記憶されたサウンドデータを読み出し、メモリコントローラ11およびオーディオI/F19を介してモニタ2に備えるスピーカ22に出力させる。
メモリコントローラ11は、データ転送を統括的に制御するものであり、上述した各種I/Fが接続される。コントローラI/F16は、例えば4つのコントローラI/Fで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置3とを通信可能に接続する。例えば、受信ユニット6は、上記コネクタと嵌合し、コントローラI/F16を介してゲーム装置3と接続される。上述したように受信ユニット6は、コントローラ7からの操作データを受信し、コントローラI/F16を介して当該操作データをCPU10へ出力する。なお、他の実施形態においては、ゲーム装置3は、受信ユニット6に代えて、コントローラ7から送信されてくる操作データを受信する受信モジュールをその内部に設ける構成としてもよい。この場合、受信モジュールが受信した送信データは、所定のバスを介してCPU10に出力される。ビデオI/F17には、モニタ2が接続される。外部メモリI/F18には、外部メモリカード5が接続され、その外部メモリカード5に設けられたバックアップメモリ等とアクセス可能となる。オーディオI/F19にはモニタ2に内蔵されるスピーカ22が接続され、DSP14がARAM15から読み出したサウンドデータやディスクドライブ20から直接出力されるサウンドデータをスピーカ22から出力可能に接続される。ディスクI/F21には、ディスクドライブ20が接続される。ディスクドライブ20は、所定の読み出し位置に配置された光ディスク4に記憶されたデータを読み出し、ゲーム装置3のバスやオーディオI/F19に出力する。
次に、図3〜図7を参照して、コントローラ7について説明する。図3〜図5は、コントローラ7の外観構成を示す斜視図である。図3(a)は、コントローラ7の上面後方から見た斜視図であり、図3(b)は、コントローラ7を下面後方から見た斜視図である。図4は、コントローラ7を前方から見た図である。
図3および図4において、コントローラ7は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ7を用いることによって、それに設けられたボタンを押下するゲーム操作を行うことに加え、コントローラ7自体の位置や向きを変えることによってゲーム操作を行うことができる。例えば、プレイヤは、長手方向を軸としてコントローラ7を回転させることによって、操作対象に移動動作を行わせることができる。また、プレイヤは、コントローラ7によって指し示される画面上の位置を変える操作によって、例えば、当該位置に向けて操作対象を移動させることができる。ここで、「コントローラ7によって指し示される画面上の位置」とは、コントローラ7の前端部から上記長手方向に延ばした直線と、モニタ2の画面とが交わる位置である。以下では、当該位置を「指示位置」と呼ぶことがある。また、コントローラ7(ハウジング31)の長手方向を、「コントローラ7の指示方向」と呼ぶことがある。
ハウジング31には、複数の操作ボタンが設けられる。ハウジング31の上面には、十字キー32a、Xボタン32b、Yボタン32c、Bボタン32d、セレクトスイッチ32e、メニュースイッチ32f、およびスタートスイッチ32gが設けられる。一方、ハウジング31の下面には凹部が形成されており、当該凹部の後面側傾斜面にはAボタン32iが設けられる。これらの各ボタン(スイッチ)は、ゲーム装置3が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。また、ハウジング31の上面には、遠隔からゲーム装置3本体の電源をオン/オフするための電源スイッチ32hが設けられる。
また、コントローラ7は撮像情報演算部35(図5)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射口35aが設けられる。一方、ハウジング31の後面にはコネクタ33が設けられている。コネクタ33は、例えば32ピンのエッジコネクタであり、コントローラ7に他の機器を接続するために利用される。また、ハウジング31上面の後面側には複数のLED34が設けられる。ここで、コントローラ7には、他のコントローラ7と区別するためにコントローラ種別(番号)が付与される。LED34は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ7からゲーム装置3へ操作データを送信する際、上記コントローラ種別に応じて複数のLED34のいずれか1つが点灯する。
次に、図5および図6を参照して、コントローラ7の内部構造について説明する。図5は、コントローラ7の内部構造を示す図である。なお、図5(a)は、コントローラ7の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5(b)は、コントローラ7の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5(b)に示す基板300は、図5(a)に示す基板300の裏面から見た斜視図となっている。
図5(a)において、ハウジング31の内部には基板300が固設されており、当該基板300の上主面上に操作ボタン32a〜32h、加速度センサ37、LED34、水晶振動子46、無線モジュール44、およびアンテナ45等が設けられる。そして、これらは、基板300等に形成された配線(図示せず)によってマイコン42(図6参照)に接続される。また、無線モジュール44およびアンテナ45によって、コントローラ7がワイヤレスコントローラとして機能する。なお、水晶振動子46は、後述するマイコン42の基本クロックを生成する。
一方、図5(b)において、基板300の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ7の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41によって構成されおり、それぞれ基板300の下主面に取り付けられる。また、基板300の下主面上の後端縁にコネクタ33が取り付けられる。そして、撮像情報演算部35の後方であって基板300の下主面上に操作ボタン32iが取り付けられていて、それよりさらに後方に、電池47が収容される。電池47とコネクタ33との間の基板300の下主面上には、バイブレータ48が取り付けられる。このバイブレータ48は、例えば振動モータやソレノイドであってよい。バイブレータ48が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームを実現することができる。
図6は、コントローラ7の構成を示すブロック図である。コントローラ7は、上述した操作部32(各操作ボタン)および撮像情報演算部35の他に、その内部に通信部36および加速度センサ37を備えている。
撮像情報演算部35は、撮像手段が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムである。撮像情報演算部35は、例えば最大200フレーム/秒程度のサンプリング周期を有するので、比較的高速なコントローラ7の動きでも追跡して解析することができる。
具体的には、撮像情報演算部35は、赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を含んでいる。赤外線フィルタ38は、コントローラ7の前方から入射する光から赤外線のみを通過させる。ここで、モニタ2の表示画面近傍に配置されるマーカ8aおよび8bは、モニタ2の前方に向かって赤外光を出力する赤外LEDである。したがって、赤外線フィルタ38を設けることによってマーカ8aおよび8bの画像をより正確に撮像することができる。レンズ39は、赤外線フィルタ38を透過した赤外線を集光して撮像素子40へ出射する。撮像素子40は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ39が集光した赤外線を撮像する。したがって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象(マーカ8aおよび8b)の位置を算出する。画像処理回路41は、各マーカ8aおよび8bの撮像画像内における位置を示す各座標値を通信部36へ出力する。なお、画像処理回路41における処理の詳細については後述する。
加速度センサ37は、コントローラ7の上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸でそれぞれ加速度を検知する加速度センサである。この加速度センサによって、コントローラ7のX軸方向、Y軸方向およびZ軸方向に関する傾きを検知することが可能である。つまり、ゲーム装置3は、上記撮像画像からコントローラ7のZ軸周りの回転角度を検出するだけでなく、加速度センサによっても当該回転角度を検出することが可能である。なお、加速度センサ37は、必要な操作信号の種類によっては、上下方向および左右方向の2軸でそれぞれ加速度を検出する加速度センサが用いられてもかまわない。加速度センサ37が検知した加速度を示すデータは、通信部36へ出力される。なお、加速度センサ37は、典型的には静電容量式の加速度センサが用いられるが、他の方式の加速度センサやジャイロセンサを用いてもかまわない。この加速度センサ37から出力される加速度データに基づいて、コントローラ7の傾きを検出することができる。
通信部36は、マイクロコンピュータ(Micro Computer:マイコン)42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理の際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータを無線送信する無線モジュール44を制御する。
操作部32、加速度センサ37、および撮像情報演算部35からマイコン42へ出力されたデータは、一時的にメモリ43に格納される。ここで、通信部36から受信ユニット6への無線送信は所定の周期毎に行われるが、ゲームの処理は1/60を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。マイコン42は、受信ユニット6への送信タイミングが到来すると、メモリ43に格納されているデータを操作データとして無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変調されてコントローラ7から送信される。微弱電波信号はゲーム装置3側の受信ユニット6で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。
なお、図3〜図5に示したコントローラ7の形状や、各操作スイッチの形状、数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができることは言うまでもない。また、コントローラ7における撮像情報演算部35の位置(撮像情報演算部35の光入射口35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。このとき、上記「コントローラ7の指示方向」は、光入射口に垂直な方向となる。
上記コントローラ7を用いることによって、プレイヤは、各操作スイッチを押下する従来のゲーム操作に加えて、コントローラ7自身の位置を動かしたり、コントローラ7を回転させたりするという、今までにないゲーム操作を行うことができる。以下、上記コントローラ7を用いたゲーム操作について説明する。
図7は、コントローラ7を用いてゲーム操作するときの状態を概説する図解図である。図7に示すように、ゲームシステム1でコントローラ7を用いてゲームをプレイする際、プレイヤは、一方の手(例えば右手)でコントローラ7を把持する。ここで、マーカ8aおよび8bは、モニタ2の画面の横方向と平行に配置されている。プレイヤは、コントローラ7の前面(撮像情報演算部35が撮像する光の入射口側)がマーカ8aおよび8bの方向を向く状態でコントローラ7を把持する。この状態で、プレイヤは、コントローラ7を回転させたり(図7の矢印参照)、コントローラ7の指し示す画面上の位置を変更したりすることによってゲーム操作を行う。
図8は、マーカ8aおよび8bとコントローラ7との視野角を説明するための図である。図8に示すように、各マーカ8aおよび8bは、それぞれ視野角θ1の範囲で赤外光を放射している。また、撮像情報演算部35は、視野角θ2の範囲で入射する光を受光することができる。例えば、各マーカ8aおよび8bの視野角θ1は共に34°(半値角)であり、撮像情報演算部35の視野角θ2は41°である。プレイヤは、撮像情報演算部35が2つのマーカ8aおよび8bからの赤外光を共に受光することが可能な位置および向きとなるように、コントローラ7を把持する。具体的には、撮像情報演算部35の視野角θ2の中に各マーカ8aおよび8bが共に存在し、かつ、マーカ8aの視野角θ1の中であってかつマーカ8bの視野角θ1の中にコントローラ7が存在する範囲で、プレイヤはコントローラ7を把持する。プレイヤは、この範囲内でコントローラ7の位置および向きを変化させることによってゲーム操作を行うことができる。なお、コントローラ7の位置および向きがこの範囲外となった場合、コントローラ7の位置および向きに基づいたゲーム操作を行うことができなくなる。以下では、上記範囲を「操作可能範囲」と呼ぶ。
操作可能範囲内でコントローラ7が把持される場合、撮像情報演算部35によって各マーカ8aおよび8bの画像が撮像される。すなわち、撮像素子40によって得られる撮像画像には、撮像対象である各マーカ8aおよび8bの画像(対象画像)が含まれる。図9は、対象画像を含む撮像画像の一例を示す図である。対象画像を含む撮像画像の画像データを用いて、画像処理回路41は、各マーカ8aおよび8bの撮像画像における位置を表す座標を算出する。
撮像画像の画像データにおいて対象画像は高輝度部分として現れるので、画像処理回路41は、まず、この高輝度部分を対象画像の候補として検出する。次に、検出された高輝度部分の大きさに基づいて、その高輝度部分が対象画像であるか否かを判定する。撮像画像には、対象画像である2つのマーカ8aおよび8bの画像8a’および8b’の他、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれていることがある。上記の判定処理は、対象画像であるマーカ8aおよび8bの画像8a’および8b’とそれ以外の画像とを区別し、対象画像を正確に検出するための処理である。具体的には、当該判定処理においては、検出された高輝度部分が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度部分が所定範囲内の大きさである場合、当該高輝度部分は対象画像を表すと判定され、高輝度部分が所定範囲内の大きさでない場合、当該高輝度部分は対象画像以外の画像を表すと判定される。
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度部分について画像処理回路41は当該高輝度部分の位置を算出する。具体的には、当該高輝度部分の重心位置を算出する。対象画像が正しく検出される場合には上記判定処理によって2つの高輝度部分が対象画像として判定されるので、上記算出処理によって2箇所の位置が算出される。ここで、撮像画像における位置は、撮像画像の左上を原点とし、下向きをy軸正方向とし、右向きをx軸正方向とする座標系(xy座標系)で表現されるものとする。したがって、画像処理回路41は、上記算出処理によって算出された2箇所の位置を示す2つの座標値を示すデータを出力する。出力された座標値のデータは、上述したように、マイコン42によって操作データとしてゲーム装置3に送信される。
ゲーム装置3は、受信した操作データに含まれる上記座標値のデータを用いて、上記指示位置(コントローラ7が指し示す画面上の位置)と、コントローラ7の指示方向を軸とした回転角度(姿勢)と、コントローラ7から各マーカ8aおよび8bまでの距離を算出することができる。図10は、コントローラ7の位置および/または向きを変化させた場合における撮像画像の変化を示す図である。図10は、コントローラの状態と、その状態にあるときに得られる撮像画像との対応を示している。図10において、コントローラ7が状態Aにあるときの撮像画像を撮像画像I1とする。撮像画像I1では、対象画像である各マーカ8aおよび8bの画像8a’および8b’は、撮像画像I1の中央付近に位置している。また、対象画像8a’および8b’は、x軸方向にほぼ平行な配置となる。
図10に示す状態Bは、状態Aからコントローラ7を指示方向を軸として(Z軸周りに)右回りに90°回転させた状態である。なお、以下、本明細書では、コントローラ7に関する「右回り」および「左回り」とは、コントローラ7の後方(図3に示すZ軸負方向側)から見たときの回転方向を言うものとする。この状態Bにおいては、撮像情報演算部35によって撮像画像I2が得られる。撮像画像I2においては、対象画像8a’および8b’は、撮像画像I1の状態から左回りに90°回転している。したがって、撮像画像内における対象画像の向き(画像8a’から画像8b’への向きまたは画像8b’から画像8a’への向き)を検出することによって、コントローラ7の指示方向を軸とした姿勢を知ることができる。
図10に示す状態Cは、状態Aを基準としてコントローラ7を右方向(X軸正方向)に平行移動させた状態である。この状態Cにおいては、撮像情報演算部35によって撮像画像I3が得られる。撮像画像I3においては、対象画像8a’および8b’は、撮像画像I1を基準として左方向(x軸負方向)に平行移動している。なお、状態Cは、コントローラ7の指示方向を状態Aから右方向に向けた状態である。ここで、コントローラ7を右方向に平行移動させる場合だけでなく、コントローラ7をY軸周りに回転させることによっても、コントローラ7の指示方向を右方向に向けることができる。コントローラ7をY軸周りに回転させる場合にも撮像画像I3とほぼ同様の撮像画像が得られる。以上より、コントローラ7の指示方向を右方向に向けるようにコントローラ7を移動(回転)させた場合、撮像画像I3と同様の撮像画像が得られる、すなわち、対象画像8a’および8b’が平行移動した画像が得られる。したがって、撮像画像内における対象画像の位置(後述する例では、画像8a’と画像8b’の中点の位置)を検出することによって、コントローラ7が指し示す方向を知ることができる。
図10に示す状態Dは、状態Aを基準としてコントローラ7を各マーカ8aおよび8bから遠ざけた(すなわち、後方向に平行移動させた)状態である。この状態Dにおいては、撮像情報演算部35によって撮像画像I4が得られる。撮像画像I4においては、画像8a’と画像8b’との距離が、撮像画像I1よりも短くなっている。したがって、撮像画像内における2つの対象画像の距離(画像8a’と画像8b’との距離。2つの対象画像を一体と見れば、対象画像の大きさ)を検出することによって、コントローラ7の指示方向に関する移動状態(コントローラ7と各マーカ8aおよび8bとの距離)を知ることができる。
次に、ゲーム装置3において行われるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる主なデータについて図11を用いて説明する。図11は、ゲーム装置3のメインメモリ13に記憶される主なデータを示す図である。図11に示すように、メインメモリ13には、現在操作データ50、前操作データ53、操作状態データ56、操作処理用データ60、および操作対象データ64等が記憶される。なお、メインメモリ13には、図11に示すデータの他、ゲームに登場するプレイヤキャラクタに関するデータ(プレイヤキャラクタの画像データや位置データ等)やゲーム空間に関するデータ(地形データ等)等、ゲーム処理に必要なデータが記憶される。
現在操作データ50は、コントローラ7から送信されてくる操作データであり、最新の操作データである。現在操作データ50には、現在第1座標データ51および現在第2座標データ52が含まれる。現在第1座標データ51は、2つのマークのうちの一方の画像の位置(取得画像内における位置)を表す座標のデータである。現在第2座標データ52は、他方のマークの画像の位置(取得画像内における位置)を表す座標のデータである。なお、マークの画像の位置は、上記xy座標系(図9参照)によって表される。以下では、現在第1座標データ51により示される座標を第1座標と呼び、現在第2座標データ52により示される座標を第2座標と呼ぶ。なお、第1座標および第2座標は、後述する方向データ57を正しく算出するために区別され、いずれがマーカ8aの画像の位置を示し、いずれがマーカ8bの画像の位置を示すものであってもよい。ただし、前回のフレームで第1座標が一方のマーカの画像の位置を示している場合、次のフレームにおいても第1座標は当該一方のマーカの画像の位置を示すように設定する必要がある(後述するステップS13〜S15参照)。
また、現在操作データ50には、撮像画像から得られる座標データ(現在第1座標データ51および現在第2座標データ52)の他、操作部32や加速度センサ37から得られるデータが含まれる。ゲーム装置3は、所定時間間隔(例えば、1フレーム時間間隔)で操作データをコントローラ7から取得する。取得された操作データのうちで最新の操作データが現在操作データ50としてメインメモリ13に記憶される。
前操作データ53には、前第1座標データ54および前第2座標データ55が含まれる。前第1座標データ54は、現在第1座標データ51よりも1つ前に取得された第1座標データである。すなわち、新たに操作データが取得されたとき、それまでの現在第1座標データ51が前第1座標データ54として記憶される。そして、新たに取得された操作データに含まれる座標データのうちの一方が新たな現在第1座標データ51としてメインメモリ13に記憶される。また、前第2座標データ55は、前第1座標データ54と同様、現在第2座標データ52よりも1つ前に取得された第1座標データである。すなわち、新たに操作データが取得されたとき、それまでの現在第2座標データ52が前第2座標データ55として記憶され、新たに取得された操作データに含まれる座標データのうちの他方(現在第1座標データでない方)が新たな現在第2座標データ52としてメインメモリ13に記憶される。
操作状態データ56は、撮像画像に基づいて判断される、コントローラ7の操作状態を示すデータである。操作状態データ56は、撮像画像に含まれる対象画像の位置や向きや大きさを示すデータである。操作状態データ56には、方向データ57、中点データ58、および長さデータ59が含まれる。方向データ57は、第1座標から第2座標への方向を示すデータである。ここでは、方向データ57は、第1座標の位置を始点とし第2座標の位置を終点とする2次元ベクトルのデータとする。方向データ57は、取得画像内における対象画像(マーカ8aおよび8b)の向きを示す。また、中点データ58は、第1座標と第2座標との中点の座標を示す。マーカ8aおよび8bの画像を1つの対象画像としてみた場合、中点データ58は、対象画像の位置を示す。長さデータ59は、第1座標と第2座標との間の長さを示す。マーカ8aおよび8bの画像を1つの対象画像としてみた場合、長さデータ59は、対象画像の大きさを示す。
操作処理用データ60は、操作状態データ56から操作対象データ64を算出する処理過程において算出されるデータである。操作処理用データ60には、方向処理データ61、指示座標データ62、および距離データ63が含まれる。方向処理データ61は、上記方向データ57から操作対象データ64の姿勢データ65を算出する処理過程において算出されるデータである。方向処理データ61は、例えば、予め定められた基準方向と方向データ57により示される方向との差分(角度差)を示す。また、指示座標データ62は、上記中点データ58から算出されるデータであり、モニタ2の画面上の指示位置を表す座標のデータである。指示座標データ62は、操作対象データ64の位置データ66を算出する処理過程において算出されるデータである。また、距離データ63は、コントローラ7の撮像手段(撮像情報演算部35)から撮像対象(マーカ8aおよび8b)までの距離を示すデータである。距離データ63は、上記長さデータ59から算出され、位置データ66を算出する処理過程において算出される。なお、操作処理用データ60の各データ61〜63は、操作対象データ64を算出する際に必要に応じて用いられるものであり、操作対象データ64を算出する際に必ず算出される必要はない。
操作対象データ64は、画面上またはゲーム空間内における操作対象の位置および姿勢を示すデータである。ここで、操作対象とは、画面に表示されているオブジェクトや、仮想のゲーム空間に登場するオブジェクトの他、仮想の3次元ゲーム空間が構築される場合には、当該3次元ゲーム空間を画面に表示するための仮想カメラであってもよい。また、操作対象データ64には、姿勢データ65および位置データ66が含まれる。姿勢データ65は、操作対象の姿勢を示すデータである。位置データ66は、操作対象のゲーム空間における位置、または、画面上における位置を示すデータである。
次に、ゲーム装置3において行われるゲーム処理の詳細を、図12〜図14を用いて説明する。図12は、ゲーム装置3において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置3の電源が投入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ13等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリ13に読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図12に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図12〜図14に示すフローチャートにおいては、ゲーム処理のうち、コントローラ7の位置および向きに関するゲーム操作に基づいて行われるゲーム処理について詳細に示し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。
図12に示すステップS1において、コントローラ7から操作データが取得される。CPU10は、操作データを現在操作データ50としてメインメモリ13に記憶する。また、それまでの現在第1座標データ51および現在第2座標データ52の内容が、前第1座標データ54および前第2座標データ55としてメインメモリ13に記憶される。なお、この時点では、操作データに含まれる2つの座標データのうち、いずれが現在第1座標データ51となり、いずれが現在第2座標データ52となるかが決定されていない。したがって、この時点では、現在第1座標データ51および現在第2座標データ52はメインメモリ13に記憶されておらず、操作データに含まれる2つの座標データは現在第1座標データ51および現在第2座標データ52とは別にメインメモリ13に記憶される。
また、ステップS1で取得される操作データには、マーカ8aおよび8bの撮像画像内における位置を示す座標データの他、コントローラ7の各操作ボタンが押下されたか否かを示すデータ、および、コントローラ7の上下方向および左右方向の加速度を示すデータが含まれている。ここでは、コントローラ7は1フレームより短い時間間隔で操作データを送信し、CPU10は、1フレーム毎に操作データを取得するものとする。したがって、図12に示すステップS1〜S5の処理ループは、1フレーム毎に繰り返し実行される。
ステップS1の次のステップS2において、操作状態算出処理が実行される。操作状態算出処理においては、コントローラ7からの操作データに基づいてコントローラ7の操作状態(コントローラ7の位置や向き等に対応した値)が算出される。以下、図13および図14を用いて操作状態算出処理の詳細を説明する。
図13は、図12に示す操作状態算出処理(S2)の詳細な処理の流れを示すフローチャートである。操作状態算出処理においては、まずステップS11において、コントローラ7の撮像情報演算部35によって2つのマーカ8aおよび8bが撮像されたか否かが判定される。ステップS11の判定処理は、コントローラ7が上記操作可能範囲内で把持されているか否かを判定するための処理である。撮像情報演算部35によって2つのマーカ8aおよび8bが撮像されない場合(コントローラ7が操作可能範囲内で把持されていない場合)、コントローラ7からの操作データには座標データが2つ含まれない。すなわち、撮像情報演算部35によって1つのマーカのみが撮像される場合には、画像処理回路41は座標データを1つのみ出力するので、コントローラ7からの操作データには座標データが1つのみ含まれる。また、撮像情報演算部35によってマーカが撮像されない場合には、画像処理回路41は座標データを出力しないので、コントローラ7からの操作データには座標データが含まれない。したがって、ステップS11の判定は、ステップS1で取得された操作データに座標データが2つ含まれるか否かによって行うことができる。ステップS11の判定において、2つのマーカ8aおよび8bが撮像されたと判定される場合、ステップS13の処理が行われる。一方、ステップS11の判定において、2つのマーカ8aおよび8bが撮像されていないと判定される場合、ステップS12の処理が行われる。
ステップS12において、メインメモリ13に記憶されている操作状態データ56の内容がクリアされる。なお、メインメモリ13に操作状態データ56が記憶されていない場合、後述する移動処理において操作対象の移動が行われない。つまり、本実施形態では、2つのマーカが撮像されない場合にはゲーム操作が行われない。ステップS12の後、CPU10は操作状態算出処理を終了する。
一方、ステップS13〜S15において、2つの座標データのいずれが第1座標であり、いずれが第2座標であるかが決定される。図14は、第1座標および第2座標を決定するための処理を説明するための図である。図14においては、点線で示す点P1’が前回の第1座標の位置を表し、点P2’が前回の第2座標の位置を表す。また、実線で示す点P1および点P2が、今回取得された2つの座標データにより示される座標の位置を表す。
図14において、新たに取得された2つの座標データにより示される座標P1およびP2については、これらの座標P1およびP2のみからでは、いずれが第1座標でいずれが第2座標かを検出することができない。つまり、座標P1’が移動して座標P1となったのか、それとも、座標P2’が移動して座標P1となったのかを、ゲーム装置3は座標P1およびP2のみからでは判断することができない。なお、第1座標と第2座標とは、いずれの一方がマーカ8aの画像の位置を示し、他方がマーカ8bの画像の位置を示すものであってもよいが、第1座標から第2座標への方向を算出する(後述するステップS16)都合上、第1座標と第2座標とが逆に検出されてしまうと、算出される方向が逆方向になってしまう。したがって、前回の第1座標が今回は第2座標として検出されると、ステップS16において誤った方向が算出されてしまう。
そこで、本実施形態においては、前回の座標と今回の座標との距離に基づいて、第1座標および第2座標を検出する。すなわち、新たに取得された2つの座標のうち、前回の第1座標に近い方の座標を第1座標とし、他方を第2座標とする。図14を例にとって説明すると、前回の第1座標P1’に近い方の座標P1が第1座標に設定され、他方の座標P2が第2座標に決定される。なお、ある撮像フレームから次の撮像フレームまでの間においてコントローラ7が90°よりも大きく回転した場合、前回の第1座標に遠い方の座標が正しい第1座標となる。しかし、座標が取得される(撮像情報演算部35による撮像が行われる)時間間隔は通常非常に短い(例えば、1/200秒間隔)ので、1フレームの間にコントローラ7が90°よりも大きく回転することは実際にはあり得ないと考えられる。そのため、前回の第1座標に近い方の座標を第1座標とすることによって、第1座標を正しく判断することができる。
具体的には、ステップS13において、前回のフレームにおいて第1座標および第2座標が検出されているか否かが判定される。ステップS13の判定は、メインメモリ13に操作状態データ56が記憶されているか否かによって行われる。なお、前回のフレームにおいてステップS12が実行された場合には、メインメモリ13に操作状態データ56が記憶されていない。この場合、前回のフレームにおいて第1座標および第2座標の少なくとも一方が取得されていないので、前回の座標を用いて第1座標および第2座標を判断することができない。一方、前回のフレームにおいてステップS13が実行された場合には、メインメモリ13に操作状態データ56が記憶されている。この場合、前回の座標を用いて第1座標および第2座標を判断することができる。ステップS13の処理は、前回の座標を用いて第1座標および第2座標を判断するか否かを判定するための処理である。ステップS13の判定において、前回のフレームにおいて第1座標および第2座標が検出されている場合、ステップS14の処理が実行される。一方、前回のフレームにおいて第1座標および第2座標の少なくとも一方が検出されていない場合、ステップS15の処理が実行される。
ステップS14においては、ステップS1で取得された操作データに含まれる2つの座標データにより示される2つの座標のうち、前回の第1座標に近い方が第1座標に設定される。具体的には、CPU10は、メインメモリ13に記憶されている前第1座標データ54と上記2つの座標データとを参照して、当該2つの座標データにより示される座標のうちで、前第1座標データ54により示される座標に近い方の座標を特定する。そして、特定した座標の座標データを現在第1座標データ51としてメインメモリ13に記憶する。また、もう一方の座標データを現在第2座標データ52としてメインメモリ13に記憶する。
一方、ステップS15においては、上記2つの座標データにより示される座標のうち、予め定められた所定の条件に従って一方の座標を第1座標に決定する。所定の条件はどのような条件であってもよいが、CPU10は、例えば、y座標値が小さい方の座標を第1座標に決定し、他方の座標を第2座標に決定する。第1座標に決定された座標データは、現在第1座標データ51としてメインメモリ13に記憶され、第2座標に決定された座標データは、現在第2座標データ52としてメインメモリ13に記憶される。
ステップS16において、第1座標から第2座標への方向が算出される。具体的には、CPU10は、現在第1座標データ51および現在第2座標データ52を参照して、第1座標の位置を始点とし第2座標の位置を終点とするベクトルを算出する。算出されたベクトルのデータは、方向データ57としてメインメモリ13に記憶される。算出されたベクトルの向きは、コントローラ7の指示方向に関する回転角度に対応する。つまり、このステップS16によって、コントローラ7の指示方向に関する回転が算出されたこととなる。
続くステップS17において、第1座標と第2座標との中点の座標が算出される。具体的には、CPU10は、現在第1座標データ51および現在第2座標データ52を参照して、当該中点の座標を算出する。算出された中点の座標のデータは、中点データ58としてメインメモリ13に記憶される。この中点データ58は、撮像画像内における対象画像(マーカ8aおよび8b)の位置を示している。
続くステップS18において、ステップS17で算出された中点座標が補正される。図15は、図13に示すステップS18の処理を説明するための図である。図15は、コントローラの状態と、その状態にあるときに得られる撮像画像との対応を示している。図15において、状態Aおよび状態Bはともに、モニタ2の画面の中央がコントローラ7による指示位置となっている状態である。ただし、状態Aはコントローラ7の上面が上方向を向いている状態(本実施形態では、この状態を基準状態とする。)であり、状態Bはコントローラ7の上面が右方向を向いている状態である。ここで、マーカ8aおよび8bは画面の上方に配置されており、マーカ8aおよび8bの配置位置が指示位置(画面の中央の位置)と一致しない。そのため、状態Aにおいては、撮像画像における対象画像の位置は撮像画像の中心から上方の位置となる。一方、状態Bにおいては、撮像画像内における対象画像の位置は撮像画像の中心から左方の位置となる。図15からわかるように、マーカ8aおよび8bの配置位置が指示位置(画面の中央の位置)と一致しないことから、コントローラ7の指示方向を軸とした回転角度によって、撮像画像内における対象画像の位置が変化してしまう。そのため、対象画像の位置に基づいて指示位置を正確に算出することができない。
そこで、ステップS18においては、ステップS16で算出された方向に基づいて、ステップS17で算出された中点座標を補正する。具体的には、ステップS17で算出された中点座標を、コントローラ7が基準状態にあるとした場合における中点座標に補正する。より具体的には、ステップS17で算出された中点座標を、ステップS16で算出された方向と基準状態における方向との角度差に応じた量だけ、撮像画像の中心を軸として回転移動させる。図14の状態Bにおいては、ステップS16では、基準状態から左方向に90°に傾いた方向のベクトルが算出されるので、コントローラ7が基準状態から右方向に90°に傾いた状態であることがわかる。したがって、ステップS18では、ステップS17で算出された中点座標を、撮像画像の中心を軸として右方向に90°だけ回転移動させる。以上のステップS18によって補正が行われた中点座標のデータは、中点データ58としてメインメモリ13に更新して記憶される。ステップS18による補正が行われた中点座標によって、ゲーム装置3は、コントローラ7による指示位置を算出することができる。
続くステップS19において、第1座標と第2座標との間の長さが算出される。具体的には、CPU10は、現在第1座標データ51および現在第2座標データ52を参照して、当該長さを算出する。算出された長さのデータは、長さデータ59としてメインメモリ13に記憶される。なお、この長さは、コントローラ7からマーカ8aおよび8bまでの距離に対応する。以上のステップS19の後、CPU10は操作状態算出処理を終了する。
図12の説明に戻り、ステップS3において、操作対象を移動させる移動処理が実行される。以下、図16を用いて移動処理の詳細を説明する。
図16は、図12に示す移動処理(S3)の詳細な処理の流れを示すフローチャートである。移動処理においては、まずステップS21において、ステップS16で算出された方向に応じて操作対象が回転される。操作対象は、上述したように、仮想のゲーム空間に登場するオブジェクトまたは仮想カメラである。以下、操作対象の回転動作のバリエーションを図17および図18を用いて説明する。
図17および図18は、操作対象の回転動作の例を示す図である。図17および図18においては、操作対象をゲーム空間に登場するオブジェクトとし、回転動作前のオブジェクトOb’を点線で示し、回転動作後のオブジェクトObを実線で示している。ステップS21で行われる操作対象の回転動作は、操作対象の表示画面またはゲーム空間における位置を変化させる回転動作であってもよいし、操作対象の姿勢を変化させる回転動作であってもよいし、当該位置および姿勢の両方を変化させるものであってもよい。すなわち、操作対象の回転動作は、図17(a)に示すように、操作対象の位置を変化させずに姿勢を変化させる動作であってもよいし、図17(b)に示すように、操作対象が姿勢(向き)を変化させずに所定の位置Pを中心に回転移動する動作であってもよい。また、図17(c)に示すように、位置および姿勢を両方変化させて所定の位置Pを中心に操作対象が回転移動する動作であってもよい。また、仮想の3次元ゲーム空間に操作対象が配置される場合、操作対象は画面に垂直な軸周りの回転動作を行う必要はない。図18(a)は、仮想の3次元ゲーム空間においてオブジェクトが回転する様子を示す図である。図18(a)のようにオブジェクトが回転する場合において、Y軸に平行な方向から見たゲーム空間が画面に表示されるとすると、画面の表示は図18(b)に示すような表示となる。このように、オブジェクトに回転動作を行わせる処理は、表示上においてオブジェクトを回転させる(表示画面上においてオブジェクトを回転させる)処理の他、ゲーム処理上においてオブジェクトを回転させる(ゲーム空間においてオブジェクトを回転させる)処理であってもよく、オブジェクトが回転していることが表示上においてはわかりにくいものであってもよい。
上記ステップS21においては、具体的には、ステップS16でメインメモリ13に記憶された方向データ57により示されるベクトルの方向に応じて、操作対象の姿勢および/または位置が決められる。より具体的には、当該ベクトルの方向と、当該ベクトルがその方向を向くときに操作対象がとるべき姿勢および/または位置との対応を予め定めておき、当該対応に基づいてベクトルから操作対象の姿勢および/または位置を決定するようにしてもよい。また、前回のフレームにおけるベクトルと今回のフレームにおけるベクトルとのなす角度(角度差)を算出し、角度差に基づいて操作対象の姿勢および/または位置の変化量を決定するようにしてもよい。例えば、上記角度差に比例した角度だけ操作対象を回転させるようにしてもよい。なお、この角度差を示すデータは、操作処理用データ60の方向処理データ61に相当する。以上のようにして操作対象の姿勢および/または位置が決定されると、メインメモリ13に記憶されている操作対象データ64の内容が更新される。すなわち、ステップS21で決定された姿勢を示すデータが姿勢データ65としてメインメモリ13に記憶され、ステップS21で決定された位置を示すデータが位置データ66としてメインメモリ13に記憶される。
なお、他の実施形態においては、ステップS16で算出されたベクトルの向きが所定の範囲内の角度となる場合、操作対象の回転を行わないようにしてもよい。操作対象の回転が入力装置の回転角度に敏感に反応してしまうと、操作性が悪くなることがあるからである。ゲームの種類や状況によっては、操作対象を一定の姿勢で維持することをプレイヤが望む場合も考えられる。このような場合に、操作対象の回転が入力装置の回転角度に敏感に反応してしまうと、操作対象を一定の姿勢に維持することが困難となり、操作性が悪くなる。例えば、当該ベクトルとy軸とのなす角が−5°から5°となる範囲では、操作対象の回転を行わないようにしてもよい。これによって、コントローラ7が多少回転しても、コントローラ7を水平状態で維持している場合と同じの操作結果となる。以上のように、コントローラ7の回転操作においていわゆる遊びの部分を設定することによって操作性を向上することができる。
ステップS21の次のステップS22において、操作対象が平行移動される。すなわち、操作対象の移動後の位置が算出される。なお、上記ステップS21において操作対象の移動後の位置が決定される場合(図17(b)および図17(c)に示す回転動作が行われる場合)、ステップS22の処理は省略される。一方、上記ステップS21において操作対象の姿勢のみが決定される場合(図17(a)に示す回転動作が行われる場合)、ステップS22の処理が行われる。
ステップS22における操作対象の平行移動動作は、ステップS17で算出された中点座標と、ステップS18で算出された距離との少なくとも一方に基づいて決定される。典型的には、ステップS17で算出された中点座標に基づいて、操作対象の画面上の位置(画面上の位置に対応するゲーム空間内の位置)が決定される。また、ステップS18で算出された距離に基づいて、画面に対する奥行き方向に関する操作対象の位置が決定される。
操作対象の画面上の位置は、中点座標をモニタ2の画面上の座標に変換する関数を用いて算出される。この関数は、ある撮像画像から算出される中点座標の値を、当該撮像画像が撮像される時のコントローラ7によって指し示される画面上の位置(指示位置)に対応する座標に変換するものである。たとえば、予め前記中点座標と、画面に対応した指示位置との両方に所定の基準値が設定され、当該中点座標の前記基準値からの変位を算出し、当該変位の正負を反転させ、所定の割合でスケーリングすることによって、現在の指示位置の基準値からの変位を算出し、現在の指示位置を設定する。この関数によって、中点座標から画面上の指示位置を算出することができる。なお、指示位置を示すデータは、操作処理用データ60の指示座標データ62に相当する。また、中点座標をゲーム空間内における位置を表す座標(後述する対応座標)に変換する場合には、上記指示位置を、当該指示位置に対応するゲーム空間内における位置にさらに変換すればよい。なお、指示位置に対応するゲーム空間内における位置とは、画面上における指示位置に表示されるゲーム空間内における位置である。
また、画面に対する奥行き方向に関する操作対象の位置は、ステップS19で算出された長さに基づいて算出される。具体的には、奥行き方向に関する所定の位置と所定の長さとを予め対応付けておく。そして、ステップS19で算出された長さと当該所定の長さとの差分に応じて操作対象の位置を決定する。具体的には、ステップS19で算出された長さから当該所定の長さを減算した差分が大きくなるほど、より奥側の位置になるように操作対象の位置を決定する。なお、差分が負の値になる場合、所定位置よりも手前の位置になるように操作対象の位置を決定する。なお、ステップS18で算出された長さから、コントローラ7の撮像手段(撮像情報演算部35)から撮像対象(マーカ8aおよび8b)までの距離を算出し(後述する図26参照)、算出した距離に基づいて操作対象の位置を決定するようにしてもよい。なお、当該距離を示すデータは、操作処理用データ60の距離データ63に相当する。
ステップS22で決定された操作対象の位置を示すデータは、位置データ66としてメインメモリ13に記憶される。なお、ステップS22においては、操作対象の画面上の位置および奥行き方向の位置の両方を決定する必要はなく、いずれか一方のみを決定するようにしてもよい。例えば、ゲーム空間が2次元平面である場合には、ステップS17で算出された中点座標に基づいて操作対象の画面上の位置のみを決定すればよい。以上のステップS21およびS22の後、CPU10は移動処理を終了する。
なお、本実施形態における移動処理では、コントローラ7による指示位置に操作対象が常に移動されるように操作対象の移動制御を行った。ここで、他の実施形態においては、コントローラ7に対する所定の操作(例えば、Bボタン32dを押下する操作)が行われた場合に、当該操作が行われた時点におけるコントローラ7による指示位置に操作対象が移動されるようにしてもよい。上記実施形態のように、操作対象を移動させる操作と回転させる操作とを同時に行う場合、プレイヤは、操作対象を移動させようとした場合に意図せずにコントローラ7を回転させてしまい、意図しないにもかかわらず操作対象に回転動作を行わせてしまうおそれがある。これに対して、必要なときのみ操作対象に移動操作を行わせることによって、移動操作と回転操作とを同時に行う操作の困難性を低減することができる。
図12の説明に戻り、ステップS3の次のステップS4において、表示処理が実行される。CPU10は、メインメモリ13に記憶されている操作対象データ64を参照し、ステップS3で決定された姿勢および向きに応じた画像を生成する。そして、生成した画像をモニタ2の画面に表示させる。例えば、操作対象が画面に表示されるオブジェクトである場合、ステップS3で決定された姿勢および向きでオブジェクトを画面に表示させる。また例えば、操作対象が仮想カメラである場合、ステップS3で決定された姿勢および向きに設定された仮想カメラから見たゲーム空間の画像を生成して当該画像を表示させる。1フレーム毎にステップS4の処理が繰り返し実行されることによって、操作対象が回転している様子を表す動画を表示することができる。
ステップS5において、ゲームを終了するか否かが判定される。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件(例えば、プレイヤキャラクタの体力を示すパラメータが0になったこと等)が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等が考えられる。ゲームを終了しないと判定された場合、ステップS1の処理が再度実行され、以降、ステップS5でゲームを終了すると判定されるまでステップS1〜S5の処理が繰り返し実行される。一方、ゲームを終了すると判定された場合、CPU10は、図12に示すゲーム処理を終了する。
以上のように、本実施形態によれば、撮像情報演算部35によって撮像された撮像画像から、コントローラ7の前後方向を軸とした回転に関するコントローラ7の姿勢に対応した値を算出することができる。そして、当該コントローラ7の姿勢に基づいて操作対象に回転動作を行わせることができる。これによって、プレイヤは、コントローラ7を前後方向の軸周りに回転させるゲーム操作を行うことによって、コントローラ7の回転に応じた回転動作を操作対象に行わせることができる。したがって、ゲーム装置3は、コントローラ7を回転させることによって操作対象に回転移動を行わせるという、新たなゲーム操作をプレイヤに行わせることが可能となる。
なお、本発明では、コントローラ7の指示方向を軸とした回転を算出することができればよく、ゲーム装置3は、コントローラ7による指示位置や、コントローラ7と撮像対象(各マーカ8aおよび8b)との距離については検知しなくてもよい。なお、コントローラ7の指示方向を軸とした回転を算出するためには、ゲーム装置3は、少なくとも方向を示す情報を撮像画像から得ることができればよい。したがって、画像処理回路41は、上記2つの位置の座標値を出力することに代えて、方向を示す情報を出力するようにしてもよい。具体的には、画像処理回路41は、マーカ8aの画像の位置からマーカ8bの画像の位置への方向(マーカ8bの画像の位置からマーカ8aの画像の位置への方向であってもよい)を示すベクトルのデータを算出するようにしてもよい。さらに、このベクトルは方向を示すベクトルであればよいので、画像処理回路41は、大きさが一定の単位ベクトルのデータを出力するようにしてもよい。
また、コントローラ7による指示位置は、撮像画像内における対象画像の位置を算出することによって検知することができる。撮像画像内における対象画像の位置は、上述の実施形態において述べたように中点座標の位置で表すことができる。したがって、コントローラ7による指示位置を操作対象の移動に用いる場合、画像処理回路41は、撮像画像内における対象画像の位置を示すデータと、方向を示すデータとを出力するようにしてもよい。すなわち、画像処理回路41は、各マーカ8aおよび8bの画像の位置を示す座標のデータを出力する代わりに、マーカ8aの画像の位置からマーカ8bの画像の位置への方向(マーカ8bの画像の位置からマーカ8aの画像の位置への方向であってもよい)を示すベクトルのデータと、上記中間座標のデータとを出力するようにしてもよい。これによって、ゲーム装置3側で方向データおよび中間データを算出する処理(ステップS16およびS17)を実行する必要がないので、ゲーム装置3の処理負担を軽減することができる。このとき、上記ステップS18における補正処理は、画像処理回路41によって行われてもよいし、ゲーム装置3側で行われてもよい。
また、他の実施形態においては、撮像情報演算部35が画像処理回路41を含まない構成であってもよい。このとき、撮像情報演算部35は、撮像画像の画像データをマイコン42に出力し、当該画像データが操作データとしてコントローラ7からゲーム装置3へ送信されることとなる。このとき、ゲーム装置3は、上記方向データを当該画像データに基づいて算出する。以上のように、撮像画像の画像データから方向データを算出する処理は、その一部の処理が専用の回路(画像処理回路41)によって行われてもよいし、その全部が当該回路に行われてもよいし、ゲーム装置3によってソフトウェア処理として行われてもよい。
また、上述した実施形態では、赤外光を出射する2つのマーカ8aおよび8bを撮像対象としたが、他のものを撮像対象にしてもかまわない。撮像対象は、その画像を撮像した場合に方向を検出することができるものであればよく、例えば、3つ以上のマーカを撮像対象としてもよいし、方向を検出することができる1つのマーカを撮像対象としてもよい。なお、1つのマーカを撮像対象とする場合、方向を検出することができる必要があるので、円形のマーカは適切ではなく、直線状の形状等、その形状から所定の2点を特定することができる形状であることが好ましい。このとき、ゲーム装置3は、撮像対象の所定の2点を結ぶ方向を算出することによって、撮像画像内における対象画像の方向を算出することができる。また、マーカは、発光体であることが好ましいが、赤外光を出射するものに限らず、他の波長の光を出射するものであってもよいし白色光を出射するものであってもよい。さらに、モニタ2の画面の枠を撮像対象としてもよいし、撮像対象を画面に表示するようにしてもよい。これによれば、マーカをモニタと別に用意する必要がなく、システムの構成を簡略化することができる。
なお、他の実施形態においては、コントローラ7が操作可能範囲から外れた場合、加速度センサの出力を用いて操作対象を回転させるようにしてもよい。具体的には、図13のステップS11の判定結果が否定であった場合、ステップS12に代えて、加速度センサの出力を用いて、コントローラ7の指示方向を軸とした回転状態を検出する処理を実行するようにする。この処理においては、CPU10は、操作データに含まれる加速度を示すデータを参照して、コントローラ7の当該回転状態を検出する。そして、ステップS3の移動処理においては、上記処理によって検出された回転状態に応じて操作対象を回転させる。これによって、コントローラ7が操作可能範囲から外れた場合であっても、操作対象を回転させる操作を継続することができる。また、コントローラ7が操作可能範囲から外れ、コントローラ7の姿勢が変わった状態で再び操作可能範囲内に入った場合にも、加速度センサの出力によって、コントローラ7の姿勢が判断できるため、2つのマーカがそれぞれどちらのマーカであるか識別が可能となる。
上記実施形態において、操作可能範囲から一旦外れたコントローラ7が操作可能範囲に戻った場合を考える。この場合、コントローラ7が表向きの状態(コントローラ7の上面が上方向を向いている状態)で操作可能範囲に戻ったのか、裏向きの状態(コントローラ7の上面が下方向を向いている状態)で操作可能範囲に戻ったのかを、撮像画像のみから判断することはできない。ここで、表向きの状態と裏向きの状態とでは撮像画像における対象画像の位置が一致しないので、裏向きの状態で操作可能範囲に戻った場合、対象画像の位置に基づいて指示位置を正確に算出することができない。
そのため、他の実施形態においては、操作可能範囲から一旦外れたコントローラ7が操作可能範囲に戻った場合、ゲーム装置3は、加速度センサ37の検知結果を用いてコントローラ7が裏向きの状態か否かを判断するようにしてもよい。そして、コントローラ7が裏向きの状態と判断される場合、ステップS18の補正処理を実行するようにする。図13に示すフローチャートに沿って説明すると、ステップS13における判定結果が否定の場合、CPU10は、操作データに含まれる加速度のデータを参照して、コントローラ7が裏向きの状態か否かを判定する。コントローラ7が裏向きの状態であると判定される場合、ステップS18の補正処理において、ステップS16で算出された方向と基準状態における方向との角度差に180°を加えて中点座標を回転させる処理を実行する。この処理は、次にコントローラ7が操作可能範囲から外れるまで継続される。以上によって、コントローラ7が裏向きの状態で操作可能範囲に戻った場合でも、コントローラ7による指示位置を正確に算出することができる。
なお、上記の実施形態は、コントローラ7を用いて指示方向を軸とした回転操作を行って遊ぶ種々のゲームに適用することが可能である。以下では、具体的なゲーム例を実施例として説明する。
(第1実施例)
図19は、第1実施例におけるゲーム画面の一例を示す図である。図19においては、2次元のゲーム空間に、板状オブジェクト71および72、ボールオブジェクト73、および壁オブジェクト74が配置されている。板状オブジェクト71は、プレイヤによって操作される操作対象となるオブジェクトである。板状オブジェクト71は、プレイヤの操作によって、画面の上下左右方向に移動可能であるとともに回転可能である(図19に示す矢印参照)。板状オブジェクト72は、ゲーム装置3のCPU10によって制御され、板状オブジェクト71と同様、画面の上下左右方向に移動可能であるとともに回転可能である。以下では、プレイヤによって操作される板状オブジェクト71をプレイヤオブジェクトと呼び、CPU10によって制御される板状オブジェクト72を相手オブジェクトと呼ぶ。ボールオブジェクト73(以下、単に「ボール73」と記載する)は、画面内の2次元ゲーム空間を移動する。ボール73は、ゲーム空間内を直線的に移動し、プレイヤオブジェクト71、相手オブジェクト72、または壁オブジェクト74に衝突すると、跳ね返って移動を続ける。壁オブジェクト74は、画面の上側および下側に固定的に配置される。第1実施例におけるゲームは、対戦型のゲームであり、プレイヤオブジェクト71を操作してボールオブジェクト73を打ち合って遊ぶホッケーゲームである。プレイヤは、自陣(画面の右端、すなわち、プレイヤオブジェクト71の右側)にボール73が到達しないようにボール73を打ち返しながら、相手陣(画面の左端、すなわち、相手オブジェクト72の左側)にボール73を入れるようにプレイヤオブジェクト71を操作する。
次に、コントローラ7を用いたプレイヤオブジェクト71の操作方法について説明する。プレイヤオブジェクト71は、コントローラ7による位置指定操作に応じて上下左右方向に移動(平行移動)する。ここで、位置指定操作とは、上記指示位置を指定する操作である。具体的には、コントローラ7の位置や向きを変更することによって、コントローラ7の前端部を上記長手方向に延ばした直線とモニタ2の画面とが交わる位置を変更する操作であり、コントローラ7の位置や向きに対応して指示位置が決定される。プレイヤは、指示位置を画面の上下左右方向に移動させることによって、プレイヤオブジェクト71を画面の上下左右方向に移動させることが可能である。具体的には、ゲーム装置3は、プレイヤオブジェクト71が指示位置に配置されるようにプレイヤオブジェクト71の動作を制御する。
また、プレイヤオブジェクト71は、回転操作に応じて、その中心位置を中心とした回転動作を行う。ここで、回転操作とは、指示方向を軸としてコントローラ7を回転させる操作である。図20は、回転操作によるプレイヤオブジェクト71の動作を説明するための図である。図20は、コントローラ7の状態と、当該状態にあるときに得られる撮像画像と、当該状態にあるときのオブジェクトの姿勢との対応を示している。
図20に示す状態Aは、コントローラ7の上面が上方向を向いている状態である。この状態Aにおける撮像画像I7において、各マーカ8aおよび8bの画像8a’および8b’は水平に配置される(y軸方向の座標が同じ値になる)。このとき、プレイヤオブジェクト71は、モニタ2の画面の上下方向に水平な姿勢となる。本実施形態ではこの状態Aを基準状態と呼ぶ。
また、図20に示す状態Bは、コントローラ7を状態Aから左回りに所定角度回転させた状態である。この状態Bにおける撮像画像I8において、各画像8a’および8b’は、状態Aから右回りに上記所定角度回転した状態となる。このとき、プレイヤオブジェクト71は、画面の上下方向から所定角度だけ左回りに回転した姿勢となる。また、図20に示す状態Cは、コントローラ7を状態Aから右回りに所定角度回転させた状態である。この状態Cにおける撮像画像I9において、各画像8a’および8b’は、状態Aから左回りに上記所定角度回転した状態となる。このとき、プレイヤオブジェクト71は、画面の上下方向から所定角度だけ右回りに回転した姿勢となる。以上のように、ゲーム装置3は、基準状態からコントローラ7が回転した向きに、回転した角度と同じ角度だけプレイヤオブジェクト71が回転するように、プレイヤオブジェクト71の姿勢を制御する。
次に、第1実施例におけるゲーム処理の詳細を説明する。なお、第1実施例では、図11に示した操作状態データ56のうちの長さデータ59は、ゲーム処理に不要であるのでメインメモリ13に記憶されない。また、操作処理用データ60のうちの方向処理データ61および距離データ63は、ゲーム処理に不要であるのでメインメモリ13に記憶されない。また、図11に示した操作対象データ64は、操作対象であるプレイヤオブジェクト71の位置および姿勢を示す。すなわち、姿勢データ65は、プレイヤオブジェクト71の姿勢を示す。具体的には、姿勢データ65は、プレイヤオブジェクトの画面上における向きを表すベクトルを示す。このベクトルは、画面の左上を原点とし、下向きをy’軸正方向とし、右向きをx’軸正方向とする座標系(x’y’座標系)で表現される。ここでは、姿勢データ65により示されるベクトルは、長方形のプレイヤオブジェクト71の長手方向に垂直な向きを表す。また、位置データ66は、プレイヤオブジェクト71の画面上における位置を示す。当該位置を表す座標は、上記x’y’座標系の座標である。ここでは、位置データ66により示される位置は、プレイヤオブジェクト72の中心位置を表す。
なお、第1実施例においては、図11に示したデータの他、各オブジェクトの画像データや、相手オブジェクト72の位置および姿勢を示すデータ、ボール73の位置および速度を示すデータ等がメインメモリ13に記憶される。
図21は、第1実施例におけるゲーム処理の流れを示すフローチャートである。なお、図21において、図12に示すゲーム処理のステップと同様のステップについては図12と同じステップ番号を付し、詳細な説明を省略する。図21に示すフローチャートが開始されるまでの処理は、図12に示した場合と同様である。
第1実施例におけるゲーム処理においては、まずステップS31において、初期処理が実行される。初期処理においては、CPU10は、初期状態のゲーム画面を表示させる。すなわち、各オブジェクト71〜74が初期位置に配置される。このとき、操作対象データ64については、プレイヤオブジェクト71の初期状態の姿勢を示すデータが姿勢データ65としてメインメモリ13に記憶され、プレイヤオブジェクト71の初期状態の位置を示すデータが位置データ66としてメインメモリ13に記憶される。CPU10は、各オブジェクト71〜74が初期位置に配置されたゲーム画面をモニタ2に表示させる。
ステップS31の次に上述のステップS1の処理が実行され、ステップS1の次にステップS2の操作状態算出処理が実行される。ここで、第1実施例における操作状態算出処理においては、2つの座標値の間の距離を算出する処理(ステップS19)は実行されない。第1実施例における操作状態算出処理は、ステップS19の処理を除いて図12と同様である。
ステップS2の次にステップS3の移動処理が実行される。第1実施例における移動処理においても図16と同様、コントローラ7の指示方向を軸とした回転に応じて算出された方向(ステップS16で算出された方向)に応じてプレイヤオブジェクト71を回転させる処理(ステップS21)が実行される。以下、第1実施例におけるステップS21の具体的な処理を説明する。
第1実施例におけるステップS21では、撮像画像内における方向(xy座標系における方向)を示すベクトルが、画面上の方向(x’y’座標系における方向)を示すベクトルに変換される。ここで、撮像画像内における方向を示すベクトルとは、ステップS16で算出されたベクトルであり、方向データ57により示されるベクトルである。このベクトルを画面上の方向を示すベクトルに変換することによって、プレイヤオブジェクト71の方向を示すベクトルが算出されることとなる。具体的には、ステップS21において、メインメモリ13に記憶されている方向データ57により示されるベクトルの向きが、x軸またはy軸に関して反転される。例えば当該ベクトルを(vx1,vy1)とすると、CPU10は、反転後のベクトルを(−vx1,vy1)として算出する。これによって、ベクトルは、y軸に対して反転されたこととなり、x’y’座標系の方向を示すベクトルに変換されたこととなる。CPU10は、変換されたベクトルを示すデータを姿勢データ65としてメインメモリ13に更新して記憶する。
続くステップS22においては、プレイヤオブジェクト71が平行移動される。すなわち、プレイヤオブジェクト71の画面上における位置が算出される。具体的には、CPU10は、まず、上述したステップS22と同様に、中点座標を表すxy座標系の座標値から、画面上の指示位置を表すx’y’座標系の座標(指示座標)を算出する。算出された指示座標のデータは、指示座標データ62としてメインメモリ13に記憶される。次に、算出された指示座標がプレイヤオブジェクト71の位置として設定される。ただし、指示座標が、ゲーム内において設定されているプレイヤオブジェクト71の可動範囲(たとえば、壁オブジェクト74に挟まれる領域)を超えている場合等には、プレイヤオブジェクト71の位置は、指示座標位置とは異なった位置、たとえば当該可動範囲の境界付近に設定される。ステップS22で設定されたプレイヤオブジェクト71の画面上の位置を表す座標(指示座標)のデータは、位置データ66としてメインメモリ13に記憶される。
ステップS3の次のステップS32において、相手オブジェクト72が移動される。CPU10は、予め定められたアルゴリズムに従って相手オブジェクト72の移動後における位置および姿勢を決定する。続くステップS33において、ボール73が移動される。CPU10は、プレイヤオブジェクト71、相手オブジェクト72、または壁オブジェクト74にボール73が衝突したか否かを判断する。衝突した場合、衝突前のボールの移動方向、および、ボールと衝突したオブジェクトとの衝突角度に基づいて、衝突後のボールの移動方向が決定される。衝突していない場合、ボールの移動方向は維持される。なお、衝突時のプレイヤオブジェクト71または相手オブジェクト72の移動速度または回転速度に応じてボールの速度を変化させるようにしてもよい。
ステップS33の次のステップS4では、表示処理が実行される。すなわち、ステップS3〜S5で決定された新たな位置および姿勢で、各オブジェクト71〜73が画面に表示される。ステップS4の処理が1フレーム毎に実行されることによって、各オブジェクト71〜73の移動する様子が表現されることとなる。続くステップS5においては、ゲーム終了か否かが判定される。第1実施例においては、例えば、ボール73が自陣または相手陣に達した回数等によってゲーム終了か否かが判定される。
以上に説明した第1実施例によれば、コントローラ7自体を移動させたり回転させることによって、プレイヤオブジェクト71を移動させたり回転させたりするという、今までにないゲーム操作でゲームを楽しむことができる。
なお、第1実施例では、1つのコントローラ7を用いてプレイヤオブジェクト71のみを操作する場合を例にとって説明したが、コントローラを2つ用いることによって2つのオブジェクト(例えば、図19に示すオブジェクト71および72)を操作するようにしてもよい。これによって、2人のプレイヤがコントローラを1つずつ用いてそれぞれ1つのオブジェクトを操作することによって、対戦プレイが可能となる。
(第2実施例)
図22は、第2実施例におけるゲーム画面の一例を示す図である。図22は、ゲーム中においてプレイヤが鍵を使ってドアを開ける一場面を示している。図22においては、3次元のゲーム空間が構築され、当該ゲーム空間にドア75および鍵76が配置される。ドア75には鍵穴75aが設けられている。プレイヤは、コントローラ7を操作することによって鍵76を移動させたり回転させたりすることができる。プレイヤは、コントローラ7を用いて3次元のゲーム空間内において鍵76を移動させる操作を行い、鍵穴75aに鍵76を入れる。さらに、鍵穴75aに鍵76が入った状態で鍵76を回転させる操作を行うと、ドア75が開く。なお、図22に示すXYZ座標系は、3次元のゲーム空間における座標系であり、実際には画面に表示されない。ここでは、Z軸方向は奥行き方向であり、仮想カメラの視線方向と平行な方向である。
第2実施形態においては、鍵76は、コントローラ7による上記位置指定操作および奥行き指定操作に応じて、3次元空間内を移動する。ここで、奥行き指定操作とは、コントローラ7からマーカ8aおよび8bまでの距離を変化させる操作である。具体的には、ゲーム装置3は、位置指定操作に応じて、ゲーム空間におけるX軸方向およびY軸方向に鍵76を移動させる。また、奥行き指定操作に応じて、ゲーム空間におけるZ軸方向に鍵76を移動させる。また、鍵76は、プレイヤによる上記回転操作に応じて回転する。ここでは、鍵76は、ゲーム空間におけるZ軸周りの回転を行う。
次に、第2実施例におけるゲーム処理の詳細を説明する。なお、第2実施例では、メインメモリ13に記憶される操作対象データ64(図11参照)は、操作対象である鍵76の位置および姿勢を示す。すなわち、姿勢データ65は、鍵76のZ軸周りの回転に関する姿勢を示す。また、位置データ66は、3次元のゲーム空間における鍵76の位置を示す。位置データ66は3次元の座標データである。なお、第2実施例においては、方向処理データ61は用いられないのでメインメモリ13に記憶されない。
図23は、第2実施例におけるゲーム処理の流れを示すフローチャートである。なお、図23において、図12に示すゲーム処理のステップと同様のステップについては図12と同じステップ番号を付し、詳細な説明を省略する。図23に示すフローチャートが開始されるまでの処理は、図12に示した場合と同様である。
第2実施例におけるゲーム処理においては、まずステップS41において、初期処理が実行される。初期処理においては、CPU10は、初期状態のゲーム画面を表示させる。すなわち、3次元の仮想のゲーム空間が構築され、ドア75や鍵76等が配置される。鍵76は、予め定められた初期位置に配置される。このとき、操作対象データ64については、鍵76の初期状態の姿勢を示すデータが姿勢データ65としてメインメモリ13に記憶され、鍵76の初期状態の位置を示すデータが位置データ66としてメインメモリ13に記憶される。CPU10は、ドア75や鍵76が配置されたゲーム空間を所定の仮想カメラから見た画像を生成し、生成した画像をモニタ2に表示させる。
ステップS41の次に上述のステップS1の処理が実行され、ステップS1の次にステップS2の操作状態算出処理が実行される。ステップS1およびS2の処理は、図12の場合と同様である。
ステップS2の次にステップS3の移動処理が実行される。図24は、第2実施例における移動処理の詳細を示すフローチャートである。第2実施例における移動処理においては、まずステップS45において、ステップS16で算出された方向に応じて鍵76の姿勢が算出される。ステップS45は、前述のステップS21に相当する。第2実施例では、コントローラ7の指示方向を軸とした回転に応じて、鍵76が画面の奥行き方向(Z軸方向)を軸とした回転を行う。つまり、コントローラ7を回転させる向きと画面に表示される鍵76が回転する向きとは同じ向きになる。したがって、プレイヤは、コントローラ7を回転させる操作を行うことで、鍵76を実際に回転させているような操作感覚を得ることができる。
ステップS45の次のステップS46〜S49において、鍵76のゲーム空間内における位置が決定される。ステップS46〜S49の処理は、前述のステップS22に相当する。
ステップS46においては、メインメモリ13に記憶されている操作状態データ56の中点データ58に基づいて、画面上の指示位置が算出される。指示座標の算出方法は、前述のステップS22で説明した関数を用いる方法と同様である。指示位置を示す座標(指示座標)のデータは、指示座標データ62としてメインメモリ13に記憶される。
ステップS47においては、ステップS46で算出された指示位置に基づいて、鍵76のゲーム空間内におけるX軸方向およびY軸方向の位置が決定される。より具体的には、指示座標データ62により示される座標値のx成分に基づいて鍵76のゲーム空間内におけるX軸方向の位置が決定され、当該座標値のy成分に基づいて鍵76のゲーム空間内におけるY軸方向の位置が決定される。したがって、コントローラ7を移動させる方向と、画面に表示される鍵76が移動する方向とは同じになる。
ステップS48においては、ステップS19で算出された長さに基づいて、撮像手段とマーカ8aおよび8bとの距離を算出する処理(距離算出処理)が実行される。以下、距離算出処理の詳細について説明する。
図25は、図24のステップS48の処理の詳細を示すフローチャートである。また、図26は、図24のステップS48の処理を説明するための図である。図26(a)は、コントローラ7による撮像画像の一例を示す図であり、図26(b)は、当該撮像画像が撮像された時のマーカとコントローラ7との位置関係を示す図である。なお、前述のステップS19において、撮像画像内での2点間の長さmiが算出される。
距離算出処理において、まず、ステップS481において、マーカ8aおよび8bの設置位置に対する撮像素子40の撮像可能範囲の幅w(図26(b)参照)が算出される。具体的には、CPU10は、次の式から幅wを算出する。
w=wi×m/mi
上式において、mは、マーカ8aおよび8bの設置間隔(例えば、30cm)であり、固定値である。また、wiは、幅wに対応する撮像素子40の撮像画像の幅wiであり、固定値である。これら設置間隔mおよび幅wiは、いずれも固定値であるため、予めゲーム装置3内の記憶手段(図示せず)に格納される。なお、設置間隔mについては、プレイヤの設置環境に応じて任意の間隔でマーカ8aおよび8bを設置してもかまわない。この場合、マーカ8aおよび8bを設置した間隔を設置間隔mとしてプレイヤが入力するようにすればよい。
次に、ステップS842において、幅wおよび撮像素子40の視野角θ2に基づいて、マーカ8aおよび8bと撮像素子40(コントローラ7)との距離dが算出される。具体的には、CPU10は、次の式から距離dを算出する。
tan(θ2/2)=(w/2)/d=w/2d
なお、視野角θ2は固定値であるため、予めゲーム装置3内の記憶手段(図示せず)に格納される。上式によって算出された距離dのデータは、距離データ63としてメインメモリ13に記憶される。ステップS842の後、CPU10は距離算出処理を終了する。
図24の説明に戻り、ステップS49において、ステップS48で算出された距離データ63に基づいて、鍵76のゲーム空間内におけるZ軸方向の位置が決定される。例えば、距離データ63により示される距離の値が大きいほど、鍵76が画面の手前側に位置するように、鍵76のZ軸方向に関する位置が決定される。したがって、画面の上下左右方向と同様画面の奥行き方向に関しても、コントローラを移動させる方向と、鍵76が移動する方向とはほぼ同じになる。以上より、プレイヤは、コントローラ7を移動させる操作を行うことで、鍵76を実際に移動させているような操作感覚を得ることができる。以上のステップS46〜S49の処理によって決定された鍵76の位置のデータは、位置データ66としてメインメモリ13に記憶される。ステップ49の処理の後、CPU10は移動処理を終了する。
なお、ステップS3の移動処理において決定された鍵76の位置が壁やドア75の内部になる場合、鍵76の位置データ66は更新されず、ステップS3の処理前の内容が維持される。つまり、鍵76が壁やドア75に衝突する場合、鍵76は移動されない。また、鍵76をZ軸周りの回転に関して所定の向きにした状態でなければ、鍵76は鍵穴75aを通過しないこととする。
ステップS3の次のステップS4では、表示処理が実行される。すなわち、ステップS3で決定された新たな位置および姿勢で、鍵76が画面に表示される。ステップS4の処理が1フレーム毎に実行されることによって、コントローラ7の移動および回転操作に応じて鍵76が移動および回転する様子が表現されることとなる。
ステップS4の次のステップS42においては、鍵76が鍵穴75aに位置しているか否かが判定される。この判定は、メインメモリ13に記憶されている操作対象データ64の位置データ66と、鍵穴75aの位置を示すデータ(メインメモリ13に記憶されている)とを参照することによって行うことができる。ステップS42の判定において、鍵76が鍵穴75aに位置していると判定される場合、ステップS43の処理が実行される。一方、鍵76が鍵穴75aに位置していないと判定される場合、ステップS1の処理が再度実行される。
ステップS43においては、鍵76がZ軸を軸とした回転に関して、予め定められた所定の姿勢となっているか否かが判定される。この判定は、メインメモリ13に記憶されている操作対象データ64の姿勢データ65を参照することによって行うことができる。鍵76が所定の姿勢となっていると判定される場合、ステップS44の処理が実行される。一方、鍵76が所定の姿勢となっていないと判定される場合、ステップS1の処理が再度実行される。
ステップS44においては、ドア75が開く様子が画面に表示される。ステップS44の後の処理は本発明とは直接関連しないので説明を省略するが、この後、プレイヤキャラクタがドア75の向こう側に移動することができたり、ドア75の向こう側の様子が画面に表示されたりする。以上で、第2実施例におけるゲーム処理の説明を終了する。
以上のように、第2実施例によれば、コントローラ7を移動させたり回転させたりする方向と、操作対象を移動させたり回転させたりする方向とを一致させる。これによって、プレイヤは、操作対象を実際に移動させたり回転させたりするような、今までにない操作感覚を得ることができる。
また、上記実施例では、撮像対象(マーカ)から撮像手段(撮像素子40)までの距離を、撮像された撮像対象の画像の大きさ(2つのマーカ画像8a‘および8b’の長さ)に基づいて算出した。ここで、他の実施例においては、撮像手段が受光した光の強度を検出可能である場合には、撮像手段が受光したマーカからの光の強度に基づいて当該距離を算出するようにしてもよい。
(第3実施例)
次に、第3実施例におけるゲーム処理を説明する。第3実施例においては、3次元の仮想のゲーム空間が構築され、当該ゲーム空間の画像を生成するために仮想カメラが設定される。第3実施例においては、当該仮想カメラを操作対象とする。なお、本実施例においては仮想カメラを移動させる処理について主に説明し、その他のゲーム処理については説明を省略する。
図27は、第3実施例におけるゲーム空間の一例を示す図である。図27は、操作対象である仮想カメラ81が回転移動する様子を示している。図27において、仮想カメラ81は移動前の位置および向きを示し、仮想カメラ81’は移動後の位置および向きを示している。図27においては、ゲーム空間内の位置を表すための座標系(XYZ座標系)が設定される。この座標系は、地面83とX軸およびZ軸とが平行となり、Y軸が地面83に垂直となるように設定される。ここで、仮想カメラ81は、上記回転操作に応じて、プレイヤによって指定されたゲーム空間内の所定点を中心として回転移動する。具体的には、仮想カメラ81は、Y座標値を変化させずにXZ平面と平行に回転移動を行う。また、回転移動を行っても仮想カメラ81の注視点が変化しないように仮想カメラ81の向きが制御されるものとする。なお、第3実施例においては、仮想カメラ81は回転移動のみを行うものとする。
次に、第3実施例におけるゲーム処理の詳細を説明する。図28は、第3実施例においてメインメモリ13に記憶される主なデータを示す図である。なお、第3実施例では、図11に示した操作状態データ56のうちの長さデータ59は、ゲーム処理に不要であるのでメインメモリ13に記憶されない。また、操作処理用データ60の距離データ63は、ゲーム処理に不要であるのでメインメモリ13に記憶されない。また、図11に示した操作対象データ64は、操作対象である仮想カメラの位置および姿勢を示す。すなわち、姿勢データ65は仮想カメラの姿勢を示し、位置データは仮想カメラのゲーム空間内における位置を示す。
第3実施例においては、図11に示したデータに加えて、対応座標データ67がメインメモリ13に記憶される。対応座標データ67は、指示位置に対応するゲーム空間内での位置を表す3次元座標を示すデータである。また、第3実施例においては、図11に示したデータに加えて、基準方向を示す基準方向データ68がメインメモリ13に記憶される。ここで、基準方向は、撮像画像から得られる方向に関して基準となる方向を示す。基準方向は、仮想カメラの回転量を決定する際に用いられ、仮想カメラの回転量は、基準方向と現在の方向(方向データ57により示される方向)との角度差に基づいて決定される。なお、第3実施例においては、基準方向はゲーム開始時にプレイヤによって設定されるものとする。
図29は、第3実施例におけるゲーム処理の流れを示すフローチャートである。なお、図29において、図12に示すゲーム処理のステップと同様のステップについては図12と同じステップ番号を付し、詳細な説明を省略する。図29に示すフローチャートが開始されるまでの処理は、図12に示した場合と同様である。
第3実施例においては、まず、ステップS50において、3次元の仮想ゲーム空間が構築される。すなわち、CPU10は、3次元の仮想ゲーム空間を構築し、当該ゲーム空間内にオブジェクトを配置する。また、当該ゲーム空間内における所定位置に所定の視線方向で仮想カメラを設定する。なお、所定位置および所定の視線方向は、予め定められている。
続くステップS51において、基準方向を設定する処理が実行される。具体的には、CPU10は、基準方向を設定する旨の操作を行うことを表示等によりプレイヤに促す。これに応じて、プレイヤは、指示方向を軸とした回転に関して任意の姿勢でコントローラ7を把持し、基準方向を決定する操作(例えば、Aボタンを押下する操作)を行う。当該操作が行われると、CPU10は、当該操作が行われた時点において撮像された撮像画像に基づいて、ステップS16と同様の処理によって方向を算出する。算出された方向を示すベクトルのデータは、基準方向データ68としてメインメモリ13に記憶される。第3実施例においては、以上のステップS51の処理が、仮想カメラを移動させる処理(ステップS1〜S3)の前に実行される。
ステップS51の次に上述のステップS1の処理が実行され、ステップS1の次にステップS2の操作状態算出処理が実行される。ここで、第3実施例における操作状態算出処理においては、2つの座標値の間の距離を算出する処理(ステップS19)は実行されない。第3実施例における操作状態算出処理は、ステップS19の処理を除いて図12と同様である。
ステップS2の次にステップS3の移動処理が実行される。図30は、第3実施例における移動処理の詳細を示す図である。第3実施例における移動処理においては、まず、ステップS52およびS53において、仮想カメラを回転させる際の中心点の位置が決定される。まず、ステップS52において、画面上の指示位置が算出される。指示位置(指示座標)の算出方法は、前述のステップS46やステップS22と同様である。続くステップS53において、指示座標に対応する対応座標が算出される。本実施例では、この対応座標の位置が、仮想カメラを回転させる際の中心位置となる。対応座標の位置は、具体的には、画面上における指示位置に表示されている対象(地面等)がゲーム空間内において存在している3次元位置であってもよいし、画面上における指示位置と、予め定められた奥行き方向(仮想カメラの視線方向)とによって設定される3次元位置であってもよい。ステップS53で算出された対応座標のデータは、対応座標データ67としてメインメモリ13に記憶される。ステップS52およびS53の処理は、前述したステップS22に相当する。
ステップS54〜S56において、コントローラ7の指示方向を軸とした回転に応じて算出された方向(ステップS16で算出された方向)に応じて仮想カメラを回転させる処理が実行される。ステップS54〜S56の処理は、図12のステップS21の処理に相当する。以下、第3実施例におけるステップS21の具体的な処理を説明する。
まずステップS54において、CPU10は、ステップS16で算出された方向と基準方向とのなす角度(角度差)を算出する。具体的には、メインメモリ13に記憶されている基準方向データ67により示されるベクトルと、操作状態データ56の方向データ57により示されるベクトルとのなす角度を算出する。この角度θ’は、例えば−180°<θ’≦180の範囲で表現される。算出された角度差のデータは、方向処理データ61としてメインメモリ13に記憶される。
続くステップS55において、CPU10は、ステップS54で算出された角度に応じて仮想カメラの回転量(図27に示す回転角度θ)を決定する。例えば、算出された角度の大きさをそのまま仮想カメラの回転量としてもよいし、算出された角度の大きさを定数倍して仮想カメラの回転量としてもよい。なお、上記角度が所定値以上となった場合のみ、操作対象を回転させるようにしてもよい。また、CPU10は、算出された角度が正となる場合と、算出された角度が負となる場合とで仮想カメラを回転させる方向を変化させる。
さらに、ステップS56において、回転後の仮想カメラの位置および姿勢が算出される。具体的には、CPU10は、ステップS52で決定された中心点の位置(対応座標の位置)を中心としてステップS55で決定された回転量だけ回転させたときの仮想カメラの位置を算出する。なお、上述したように、仮想カメラの向きは、回転前から注視点の位置が変わらないように制御される。ステップS56で算出された仮想カメラの位置を示すデータは、位置データ66としてメインメモリ13に記憶され、ステップS56で算出された仮想カメラの姿勢を示すデータは、姿勢データ65としてメインメモリ13に記憶される。以上のステップS56の処理の後、CPU10は移動処理を終了する。
ステップS4においては、ステップS3で移動された仮想カメラの位置および姿勢(視線方向)を用いて表示処理が実行される。すなわち、移動後における仮想カメラから見たゲーム空間の画像が生成され、生成された画像が画面に表示される。なお、ステップS5の処理は図12と同様である。
以上の第3実施例に示したように、操作対象の回転動作は、撮像画像から得られる方向(ステップS16で算出される方向)をそのまま用いて行われるだけでなく、当該方向と基準方向との角度差を用いて行われてもよい。また、回転を行う中心は、プレイヤが上記位置指定操作を行うことによって指定されるようにしてもよい。なお、他の実施例においては、仮想カメラの注視点を回転の中心点としてもよい。さらに、前記指示座標の対応座標が注視点となるようにカメラの向きを移動し、さらに当該注視点を回転の中心として、注視点を固定したままカメラを回転移動させるようにすれば、注視点とカメラの向きの両方を同時に設定することができる。また、仮想カメラの位置を変化させずに、上記角度差に応じて仮想カメラの姿勢(向き)のみを変化させるようにしてもよい。
また、上記第3実施例においては、仮想カメラを上記角度差に基づいて回転させたが、ゲーム空間に登場するオブジェクトを操作対象とする場合でも、操作対象を角度差に基づいて回転させることができる。例えば、上記第1および第2実施例で示したオブジェクト(プレイヤオブジェクト71および鍵76)についても、角度差に基づいて回転させるようにしてもよい。また、仮想カメラは、角度差に代えて、撮像画像から得られる方向自体を演算に利用して回転させるようにしてもよい。
また、他の実施例においては、ゲーム空間に登場するオブジェクトを操作対象とし、上記対応座標の位置にオブジェクトを平行移動させるとともに、上記方向データ57により示される方向に応じて当該オブジェクトを回転させるようにしてもよい。
また、第3実施例においては、方向データ57により示される方向と基準方向との差を、角度差として算出したが、方向データ57により示されるベクトルと基準方向を示すベクトルとの差分をベクトルとして算出してもよい。そして、当該差分を示すベクトルの所定成分の値を角度差の代わりに用いてもよい。このようにすることで、コントローラの傾きに応じた制御を可能としつつ、角度を算出する処理コストを軽減することができる。
(第4実施例)
図31は、第4実施例におけるゲーム画面の一例を示す図である。図31は、ゲーム中においてプレイヤがゲーム空間内のドアを開ける一場面を示している。図31においては、3次元のゲーム空間が構築され、当該ゲーム空間に2つのドア85および86が配置される。ドア85にはドアノブ85aが設けられ、ドア86にはドアノブ86aが設けられている。ここでは、2つのドアノブ85aおよび86aが操作対象となり得るオブジェクトである。
また、画面にはプレイヤによって移動可能なカーソル87が表示されている。プレイヤは、コントローラ7を操作することによってカーソル87を移動させる。カーソル87は、上記指示位置に表示される。プレイヤは、カーソル87を用いて操作対象とするオブジェクト(ドアノブ85aまたは86a)を指定することができる。本実施例では、カーソル87によって指定されているオブジェクトが回転操作の操作対象となる。
次に、第4実施例におけるゲーム処理の詳細を説明する。なお、第4実施例では、操作対象データ64は、ゲーム処理開始時点では記憶されていない。また、操作対象となり得るドアノブは、回転のみが可能であり移動することはないので、第4実施例においては操作対象データ64には位置データ66が含まれない。また、第4実施例では、図11に示した操作状態データ56のうちの長さデータ59は、ゲーム処理に不要であるのでメインメモリ13に記憶されない。また、図11に示した操作処理用データ60のうちの方向処理データ61および距離データ63は、ゲーム処理に不要であるのでメインメモリ13に記憶されない。
図32は、第4実施例におけるゲーム処理の流れを示すフローチャートである。なお、図32において、図12に示すゲーム処理のステップと同様のステップについては図12と同じステップ番号を付し、詳細な説明を省略する。図32に示すフローチャートが開始されるまでの処理は、図12に示した場合と同様である。
第4実施例におけるゲーム処理においては、まずステップS61において、初期処理が実行される。初期処理においては、CPU10は、初期状態のゲーム画面を表示させる。すなわち、3次元の仮想のゲーム空間が構築され、ドア85および86等が配置される。また、画面上の所定の位置にカーソル87が表示される。
ステップS61の次に上述のステップS1の処理が実行され、ステップS1の次にステップS2の操作状態算出処理が実行される。ここで、第4実施例における操作状態算出処理においては、2つの座標値の間の長さを算出する処理(ステップS19)は実行されない。第4実施例における操作状態算出処理は、ステップS19の処理を除いて図12と同様である。
第4実施例においては、ステップS2の次にステップS62の処理が実行される。ステップS62においては、指示位置が算出される。ステップS62の処理は前述のステップS46と同様である。指示位置を示す座標(指示座標)のデータは、指示座標データ62としてメインメモリ13に記憶される。続くステップS63において、指示座標に従ってカーソル87の位置が更新される。つまり、カーソル87の位置は、当該指示座標の位置に決定される。
ステップS64においては、ステップS63で位置が更新されたカーソル87が操作対象となりうるオブジェクト(ドアノブ85aまたは86b)を指定しているか否かが判定される。すなわち、カーソル87により指し示される位置がドアノブ85aまたは86aの表示位置となっているか否か(カーソルの位置がドアノブ85aまたは86aの表示位置の所定範囲内にあるか否か)が判定される。カーソル87がオブジェクトを指定している場合、ステップS65の処理が実行される。一方、カーソル87がオブジェクトを指定していない場合、ステップS65およびS3の処理がスキップされてステップS4の処理が実行される。
ステップS65においては、ステップS64でカーソル87によって指定されていると判定されたオブジェクトが操作対象に設定される。具体的には、当該オブジェクトの姿勢を示すデータが操作対象データ64の姿勢データ65としてメインメモリ13に記憶される。
ステップS3においては移動処理が実行される。第4実施例における移動処理も上記実施例と同様、コントローラ7の指示方向を軸とした回転に応じて算出された方向(ステップS16で算出された方向)に応じて操作対象を回転させる処理(ステップS21)が実行される。ただし、第4実施例では、その姿勢を示すデータが操作対象データ64としてメインメモリ13に記憶されているオブジェクト、すなわち、カーソル87によって指定されているドアノブを操作対象として行われる。
ステップS4においては、表示処理が実行される。具体的には、ステップS63で更新された位置にカーソル87が表示されるとともに、ステップS3が実行されている場合はドアノブ85aまたは86aが回転されている様子が表示される。続くステップS66において、ドアノブ85aおよび86aのうちのいずれかのドアノブが予め定められた所定の姿勢となっているか否かが判定される。この判定処理は、第2実施例のステップS43と同様の処理である。いずれか一方のドアノブが所定の姿勢となっていると判定される場合、ステップS67の処理が実行される。一方、2つのドアノブがともに所定の姿勢となっていないと判定される場合、ステップS1の処理が再度実行される。ステップS67においては、所定の姿勢となったドアノブが設けられたドアが開く様子が画面に表示される。
以上の第4実施例に示したように、プレイヤによる回転操作の操作対象は、予め定められているオブジェクトに限らず、プレイヤが指定したオブジェクトを操作対象とするようにしてもよい。また、コントローラ7による指示位置を用いて、操作対象となるオブジェクトを指定するようにしてもよい。
なお、上記第1実施例では、コントローラ7によって画面上の位置を指定してカーソルを移動させることによって、操作対象となるドアノブを選択するようにした。ここで、他の実施例では、画面上の位置を指定する方法は、どのような方法であってもよい。例えば、コントローラ7に設けられた十字キーによってカーソルを移動させるようにしてもよい。
なお、上記第4実施例では、カーソル87は、画面上に設定され、画面の2次元平面を移動するものであった。ここで、他の実施例では、カーソル87を、3次元のゲーム空間内を移動させるようにしてもよい。カーソル87については、例えば、上記第3実施例で示した仮想カメラと同様の方法で3次元のゲーム空間内を移動させることが可能である。そして、カーソル87のZ軸方向に関する位置と、ドアノブのZ軸方向に関する位置とが一致する(または、2つの位置の差が所定距離以内となる)場合にのみ、ドアノブを回転させることができるようにしてもよい。つまり、CPU10は、Z軸方向の座標位置に操作対象となりうるオブジェクト(ドアノブ)のいずれかが存在するか否かを判別し、オブジェクトが存在すると判別された場合に、当該オブジェクトを操作対象として設定する。
(その他の実施例)
なお、本発明は、上記実施例に示したゲーム例の他にも種々のゲームにおいて用いることができる。例えば、レースゲームに本発明を適用することも可能である。具体的には、プレイヤが操作するレースカーを操作対象とし、コントローラ7の指示方向を軸とした回転に応じて、上方向から見た場合のレースカーの向きを回転によって変化させる。すなわち、レースカーの進行方向を変化させる。これによって、レースカーは、図17(a)または(c)に示したような回転移動を行うこととなる。したがって、ユーザから見て、コントローラ7を実際の車のハンドルのような回転方向で回転させることでレースカーの進行方向を変えることができ、直感的なレースカーの操作をすることができる。
なお、以上においては、本発明に係る情報処理システムおよびプログラムを、ゲームシステムおよびゲームプログラムとして実現する場合を例として説明したが、本発明は、ゲーム分野に限らず、撮像画像を用いて入力装置自体の位置や向きを検知する入力装置を用いる情報処理システムに適用することが可能である。