(57)【要約】【課題】ユーザが手に持って使用する入力装置を用いて従来にはない新たな操作が可能な情報処理システムおよびそれにおいて用いられるプログラムを提供する。【解決手段】ゲームシステムは、画像取得手段と、方向算出手段と、第１回転手段と、表示制御手段とを備えている。画像取得手段は、撮像装置によって撮像された画像を取得する。方向算出手段は、取得された画像内に含まれる撮像対象の画像から一意に決定される方向を算出する。第１回転手段は、算出された方向に応じて操作対象を回転させる。表示制御手段は、第１回転手段による操作対象の回転に応じた画像を生成して表示装置の画面に表示させる。【選択図】図７
2011177596.tif 000002
【特許請求の範囲】
【請求項１】
撮像対象を撮像するための撮像手段を備える操作装置から操作データを受け取り、当該操作データを用いて所定の操作対象に演算処理を加えた後の仮想空間を表示装置に表示させる、情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記操作装置の前記撮像手段で撮像された撮像画像を操作データとして取得する取得ステップと、
前記撮像画像における前記撮像対象の位置を用いて、２次元ベクトルを算出するベクトル算出ステップと、
算出された前記２次元ベクトルの値に応じて、前記操作対象を回転させる第１回転ステップと、
前記第１回転ステップにおける前記操作対象の回転に応じて変更される前記仮想空間を前記表示装置の表示領域に表示させる表示ステップとを前記コンピュータに実行させる、情報処理プログラム。
【請求項２】
前記ベクトル算出ステップは、
前記撮像画像に対応した座標系において、前記撮像対象の画像のうちの所定の２点の座標を算出する第１算出ステップと、
前記所定の２点の座標を結ぶ２次元ベクトルを算出する第２算出ステップとを含む、請求項１に記載の情報処理プログラム。
【請求項３】
撮像対象を撮像するための撮像手段と、当該撮像手段によって撮像された撮像画像に含まれる撮像対象の画像のうちの所定の２点の座標を算出する第１算出手段とを備える操作装置から操作データを受け取り、当該操作データを用いて所定の操作対象に演算処理を加えた後の仮想空間を表示装置に表示させる、情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記所定の２点の座標を操作データとして取得する取得ステップと、
前記２点の座標を結ぶ２次元ベクトルを算出するベクトル算出ステップと、
算出された前記２次元ベクトルの値に応じて、前記操作対象を回転させる第１回転ステップと、
前記第１回転ステップにおける前記操作対象の回転に応じて変更される前記仮想空間を前記表示装置の表示領域に表示させる表示ステップとを前記コンピュータに実行させる、情報処理プログラム。
【請求項４】
撮像対象を撮像するための撮像手段と、当該撮像手段によって撮像された撮像画像における当該撮像対象の位置を用いて２次元ベクトルを算出するベクトル算出手段とを備える操作装置から操作データを受け取り、当該操作データを用いて所定の操作対象に演算処理を加えた後の仮想空間を表示装置に表示させる、情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記２次元ベクトルを操作データとして取得するステップと、
取得された前記２次元ベクトルの値に応じて、前記操作対象を回転させる第１回転ステップと、
前記第１回転ステップにおける前記操作対象の回転に応じて変更される前記仮想空間を前記表示装置の表示領域に表示させる表示ステップとを前記コンピュータに実行させる、情報処理プログラム。
【請求項５】
前記取得された撮像画像における前記撮像対象の画像の位置に対応させて、前記表示領域上の位置に対応した所定の指示座標を算出する指示座標算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記指示座標とを用いた演算によって操作対象を回転させる、請求項１に記載の情報処理プログラム。
【請求項６】
前記２点の座標の中点座標に対応させて、前記表示領域上の位置に対応した所定の指示座標を算出する指示座標算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記指示座標とを用いた演算によって操作対象を回転させる、請求項２または請求項３のいずれかに記載の情報処理プログラム。
【請求項７】
前記操作データには、前記撮像対象の画像位置に対応した１点の座標がさらに含まれ、
前記１点の座標に対応させて、前記表示領域上の位置に対応した所定の指示座標を算出する指示座標算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記指示座標とを用いた演算によって操作対象を回転させる、請求項４に記載の情報処理プログラム。
【請求項８】
前記指示座標算出ステップは、前記撮像手段によって撮像された画像を、画像中心を軸として回転させ、当該回転によって前記２次元ベクトルが一定の方向になるようにした場合における、前記撮像対象の画像の位置に対応させて前記表示領域上の位置に対応した指示座標を算出する、請求項５ないし請求項７のいずれかに記載の情報処理プログラム。
【請求項９】
前記表示領域上の位置に対応した所定の座標を指示座標として設定する指示座標算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記指示座標とを用いた演算によって操作対象を回転させる、請求項１ないし請求項４のいずれかに記載の情報処理プログラム。
【請求項１０】
前記仮想空間は仮想的な３次元空間であって、
前記指示座標算出ステップで算出された指示座標に対応する前記仮想空間内での３次元座標を算出して、当該３次元座標を３次元指示座標として設定する３次元指示座標設定ステップを前記コンピュータにさらに実行させ、
前記第１移動ステップにおいては、前記２次元ベクトルと、前記３次元指示座標とを用いた演算によって前記３次元空間において前記操作対象を回転させる、請求項５ないし請求項９のいずれかに記載の情報処理プログラム。
【請求項１１】
前記仮想空間内に少なくとも１つのオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記仮想空間に配置されるオブジェクトを前記操作対象として回転させる、請求項１ないし請求項４のいずれかに記載の情報処理プログラム。
【請求項１２】
前記仮想空間内に少なくとも１つのオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記指示座標に対応した前記表示領域上の位置に、前記オブジェクトのいずれかが表示されるか否か判別する判別ステップと、
前記指示座標に対応した位置に前記オブジェクトが表示される場合には、当該オブジェクトを前記操作対象として設定する操作対象設定ステップと、
前記操作対象設定ステップにおいて設定されたオブジェクトを回転させるステップとを含む、請求項５ないし９のいずれかに記載の情報処理プログラム。
【請求項１３】
前記仮想空間内に前記操作対象となるオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記指示座標算出ステップにおいて算出された位置に表示されるように前記オブジェクトを移動させるオブジェクト移動ステップと、
前記オブジェクトを回転させるステップとを含む、請求項５ないし９のいずれかに記載の情報処理プログラム。
【請求項１４】
前記仮想空間内に前記操作対象となるオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記３次元指示座標設定ステップにおいて算出された３次元指示座標に前記オブジェクトを移動させるオブジェクト移動ステップと、
前記オブジェクトを回転させるステップとを含む、請求項１０に記載の情報処理プログラム。
【請求項１５】
前記仮想空間内に前記操作対象となるオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記指示座標算出ステップにおいて算出された座標を回転の中心座標として設定する中心座標設定ステップと、
前記中心座標を中心として前記オブジェクトを回転させるステップとを含む、請求項５ないし９のいずれかに記載の情報処理プログラム。
【請求項１６】
前記仮想空間内に前記操作対象となるオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記３次元指示座標設定ステップにおいて算出された３次元座標を回転の中心座標として設定する中心座標設定ステップと、
前記中心座標を中心として前記３次元空間において前記オブジェクトを回転させるステップとを含む、請求項１０に記載の情報処理プログラム。
【請求項１７】
前記仮想空間は仮想的な３次元空間であって、
当該仮想空間内における所定位置に所定方向を向く仮想カメラを設定する仮想カメラ設定ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記仮想カメラを前記操作対象として回転させ、
前記表示ステップにおいては、前記仮想カメラから見た前記仮想空間の画像を前記画面に表示する、請求項１ないし請求項４のいずれかに記載の情報処理プログラム。
【請求項１８】
前記仮想空間は仮想的な３次元空間であって、
当該仮想空間内における所定位置に所定方向を向く仮想カメラを設定する仮想カメラ設定ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記３次元指示座標設定ステップにおいて算出された座標を回転の中心として前記仮想カメラを前記操作対象として回転させる、請求項１０に記載の情報処理プログラム。
【請求項１９】
前記第１回転ステップにおいては、前記仮想カメラの注視点の位置を中心として前記仮想カメラを回転させる、請求項１７に記載の情報処理プログラム。
【請求項２０】
前記第１回転ステップにおいては、前記仮想カメラの視線方向が変化するように前記仮想カメラを回転させる、請求項１７に記載の情報処理プログラム。
【請求項２１】
前記第１回転ステップにおいては、前記回転によって前記操作対象の姿勢を変化させる、請求項１ないし請求項４のいずれかに記載の情報処理プログラム。
【請求項２２】
前記第１回転ステップにおいては、所定の位置を中心とした回転によって前記操作対象の位置を移動させる、請求項１ないし請求項４のいずれかに記載の情報処理プログラム。
【請求項２３】
前記第１回転ステップにおいては、前記算出された２次元ベクトルの方向に応じて前記操作対象の姿勢または位置が決定される、請求項２１または請求項２２のいずれかに記載の情報処理プログラム。
【請求項２４】
前記第１回転ステップは、
前記２次元ベクトルの方向が所定の範囲を超えたか否かを判別する判別ステップと、
前記判別ステップにおいて前記２次元ベクトルの方向が所定の範囲を超えたと判別された場合に操作対象を回転させるステップとを含む、請求項１ないし請求項４のいずれかに記載の情報処理プログラム。
【請求項２５】
前記２次元ベクトルの方向と、所定の基準方向との差を角度またはベクトルとして求める傾き算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記傾き算出ステップで算出された差に応じて前記操作対象を回転させる、請求項１ないし請求項４のいずれかに記載の情報処理プログラム。
【請求項２６】
前記第１回転ステップは、
前記傾き算出ステップで算出された差の大きさに応じて回転量を設定する回転量設定ステップと、
当該回転量だけ前記操作対象を回転させるステップとを含む、請求項２５に記載の情報処理プログラム。
【請求項２７】
前記第１回転ステップは、
前記傾き算出ステップで算出された差が所定値を超えたか否か判別する判別ステップと、
前記判別ステップにおいて当該差が所定値を超えたと判別された場合に前記操作対象を回転させるステップとを含む、請求項２５に記載の情報処理プログラム。
【請求項２８】
前記取得された撮像画像における前記撮像対象の画像の大きさを示すデータを前記操作データから算出する大きさ算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記大きさ算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる、請求項１に記載の情報処理プログラム。
【請求項２９】
前記２点の座標の間の長さを示すデータを算出する長さ算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記長さ算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる、請求項２または請求項３のいずれかに記載の情報処理プログラム。
【請求項３０】
前記操作データには、前記撮像手段によって撮像された撮像画像に含まれる撮像対象の画像のうちの所定の２点の座標の間の長さを示すデータがさらに含まれ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記２点の座標の間の長さを示すデータとを用いた演算によって操作対象を回転させる、請求項４に記載の情報処理プログラム。
【請求項３１】
前記第１回転ステップは、
前記大きさ算出ステップにおいて算出されたデータから、前記撮像手段と前記撮像対象との距離を示す距離データを算出するステップと、
前記２次元ベクトルと、前記距離データとを用いた演算によって操作対象を回転させるステップとを含む、請求項２８に記載の情報処理プログラム。
【請求項３２】
前記第１回転ステップは、
前記長さ算出ステップにおいて算出されたデータから、前記撮像手段と前記撮像対象との距離を示す距離データを算出するステップと、
前記２次元ベクトルと、前記距離データとを用いた演算によって操作対象を回転させるステップとを含む、請求項２９に記載の情報処理プログラム。
【請求項３３】
前記第１回転ステップは、
前記２点の座標の間の長さを示すデータから、前記撮像手段と前記撮像対象との距離を示す距離データを算出するステップと、
前記２次元ベクトルと、前記距離データとを用いた演算によって操作対象を回転させるステップとを含む、請求項３０に記載の情報処理プログラム。
【請求項３４】
前記操作データには、前記撮像手段と前記撮像対象との距離を示す距離データがさらに含まれ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記距離データとを用いた演算によって操作対象を回転させる、請求項４に記載の情報処理プログラム。
【請求項３５】
前記撮像手段と前記撮像対象との距離に対応したデータを算出する距離算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記距離算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる、請求項１ないし請求項４のいずれかに記載の情報処理プログラム。
【請求項３６】
前記仮想空間は仮想的な３次元空間であって、
前記仮想空間内に少なくとも１つのオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記距離データに対応させて、前記仮想空間内の奥行き方向の座標を決定する奥行き設定ステップと、
前記奥行き設定ステップにおいて算出された奥行き方向の座標位置に前記少なくとも１つのオブジェクトのいずれかが存在するか否か判別する判別ステップと、
前記判別ステップにおいてオブジェクトが存在すると判別された場合に、当該オブジェクトを前記操作対象として設定する操作対象設定ステップとを含む、請求項３１ないし請求項３４のいずれかに記載の情報処理プログラム。
【請求項３７】
前記仮想空間は仮想的な３次元空間であって、
前記第１回転ステップは、
前記距離データに対応させて、前記仮想空間内の奥行き方向の座標を決定する奥行き設定ステップと、
前記奥行き設定ステップにおいて算出された奥行き方向の座標に前記操作対象の奥行き方向の位置を移動させる移動ステップと、
前記２次元ベクトルに応じて前記操作対象を回転させるステップとを含む、請求項３１ないし請求項３４のいずれかに記載の情報処理プログラム。
【請求項３８】
前記入力装置は、自機の傾きを検出する傾き検出手段を備え、
前記取得された画像から前記ベクトル算出ステップによって２次元ベクトルが算出可能か否かを判定する判定ステップと、
前記判定ステップにおいて方向が算出不可能と判定されたとき、前記傾き検出手段によって検出される傾き方向に応じて前記操作対象を回転させる第２回転ステップとを前記コンピュータにさらに実行させる、請求項１ないし請求項４のいずれかに記載の情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理プログラムに関し、より特定的には、撮像装置を備える入力装置を用いてユーザが操作を行う情報処理システムに用いられる情報処理プログラムに関する。
【背景技術】
【０００２】
従来、光学式のポインティングシステムを用いて表示画面上の特定の位置を指定する技術が考えられている。例えば、特許文献１に記載の光学式ポインティングシステムは、複数の視聴者を対象とした会議等において用いられるシステムである。このシステムでは、表示画面の近傍に発光素子が設けられ、指示器には光電変換素子を用いた撮像装置が内蔵される。指示者が指示器を用いて表示画面の任意の位置を指定する場合、指示器は、撮像装置によって上記発光素子を撮像し、撮像された画像に基づいて指示器が指定する位置を算出する。算出された位置にマークが表示されることによって、指示者が指示したい位置がマークによって示されることとなる。
【０００３】
また、上記と同様の光学式のポインティングシステムを用いたゲーム用コントローラが考えられている（例えば、特許文献２参照。）。このコントローラは、ガン（拳銃）型の形状を有しており、射撃ゲームに用いられる。この射撃ゲームは、画面に表示されている標的に向かってガンを用いて射撃させるゲームである。ガンは、画面上の任意の位置（弾が飛んでいく位置）を指定するために用いられる。ガン型のコントローラにはＣＣＤカメラが内蔵されており、画面の周囲の４箇所に配置された発光体をＣＣＤカメラが撮像する。コントローラは、撮像された画像を用いてガンの向きや回転や傾きを算出する。算出結果を用いて、画面に表示されている標的の向きをガンが正しく向いているか否かを検出することによって、標的に命中したか否かを判断する。以上の構成によって、プレイヤが手に持ったコントローラ（ガン）自体を動かしてゲーム操作を行うゲームシステムを実現することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−３０８８７９号公報
【特許文献２】特開平８−７１２５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記の技術では、ユーザが手に持って使用する入力装置（上記指示器やガン型のコントローラ）は、表示画面上の位置を指定するために用いられるのみである。つまり、上記の指示器やガン型のコントローラでは、表示画面上の位置を指定するという単一の操作のみが可能であり、他の操作を行うことができなかった。例えば、上記入力装置をゲーム装置に用いる場合、表示画面上の位置を指定するという１種類の単純なゲーム操作しか行うことができない。そのため、ゲーム操作が単純であることからゲーム自体も単純な内容となってしまい、興趣性に欠けるものとなる。
【０００６】
それ故、本発明の目的は、ユーザが手に持って使用する入力装置を用いて従来にはない新たな操作が可能な情報処理システムおよびそれにおいて用いられるプログラムを提供することである。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００８】
第１の発明は、情報処理装置（ゲーム装置３）のコンピュータ（ＣＰＵ１０等）で実行される情報処理プログラムである。情報処理装置は、撮像対象（マーカ８ａおよび８ｂ）を撮像するための撮像手段（撮像素子４０）を備える操作装置（コントローラ７）から操作データを受け取り、当該操作データを用いて所定の操作対象（プレイヤオブジェクト７１、鍵７６、仮想カメラ８１、またはドアノブ８５ａおよび８６ａ）に演算処理を加えた後の仮想空間を表示装置（モニタ２）に表示させる。情報処理プログラムは、取得ステップ（Ｓ１）と、ベクトル算出ステップ（Ｓ１６）と、第１回転ステップ（Ｓ３）と、表示ステップ（Ｓ４）とをコンピュータに実行させる。取得ステップにおいては、操作装置の撮像手段で撮像された撮像画像を操作データとして取得する。ベクトル算出ステップにおいては、撮像画像における撮像対象の位置を用いて、２次元ベクトル（方向データ５７により示されるベクトル）を算出する。第１回転ステップにおいては、算出された２次元ベクトルの値に応じて、操作対象を回転させる。表示ステップにおいては、第１回転ステップにおける操作対象の回転に応じて変更される仮想空間を、表示装置の表示領域に表示させる。
【０００９】
第２の発明においては、ベクトル算出ステップは、第１算出ステップと、第２算出ステップとを含んでいてもよい。第１算出ステップにおいては、撮像画像に対応した座標系において、撮像対象の画像のうちの所定の２点の座標を算出する。第２算出ステップにおいては、所定の２点の座標を結ぶ２次元ベクトルを算出する。
【００１０】
第３の発明は、情報処理装置（ゲーム装置３）のコンピュータ（ＣＰＵ１０等）で実行される情報処理プログラムである。情報処理装置は、操作装置（コントローラ７）から操作データを受け取り、当該操作データを用いて所定の操作対象（プレイヤオブジェクト７１、鍵７６、仮想カメラ８１、またはドアノブ８５ａおよび８６ａ）に演算処理を加えた後の仮想空間を表示装置（モニタ２）に表示させる。操作装置は、撮像対象を撮像するための撮像手段（撮像素子４０）と、当該撮像手段によって撮像された撮像画像に含まれる撮像対象の画像のうちの所定の２点の座標を算出する第１算出手段（画像処理回路４１）とを備えている。情報処理プログラムは、取得ステップ（Ｓ１）と、ベクトル算出ステップ（Ｓ１６）と、第１回転ステップ（Ｓ３）と、表示ステップ（Ｓ４）とをコンピュータに実行させる。取得ステップにおいては、所定の２点の座標を操作データとして取得する。ベクトル算出ステップにおいては、２点の座標を結ぶ２次元ベクトルを算出する。第１回転ステップにおいては、算出された２次元ベクトルの値に応じて、操作対象を回転させる。表示ステップにおいては、第１回転ステップにおける操作対象の回転に応じて変更される仮想空間を表示装置の表示領域に表示させる。
【００１１】
第４の発明は、情報処理装置（ゲーム装置３）のコンピュータ（ＣＰＵ１０等）で実行される情報処理プログラムである。情報処理装置は、操作装置（コントローラ７）から操作データを受け取り、当該操作データを用いて所定の操作対象（プレイヤオブジェクト７１、鍵７６、仮想カメラ８１、またはドアノブ８５ａおよび８６ａ）に演算処理を加えた後の仮想空間を表示装置（モニタ２）に表示させる。操作装置は、撮像対象を撮像するための撮像手段（撮像素子４０）と、当該撮像手段によって撮像された撮像画像における当該撮像対象の位置を用いて２次元ベクトルを算出するベクトル算出手段（画像処理回路４１）とを備えている。情報処理プログラムは、取得ステップ（Ｓ１）と、第１回転ステップ（Ｓ３）と、表示ステップ（Ｓ４）とをコンピュータに実行させる。取得ステップにおいては、２次元ベクトルデータを操作データとして取得する。第１回転ステップにおいては、取得された２次元ベクトルの値に応じて、操作対象を回転させる。表示ステップにおいては、第１回転ステップにおける操作対象の回転に応じて変更される仮想空間の画像を表示装置の表示領域に表示させる。
【００１２】
第５の発明においては、情報処理プログラムは、指示座標算出ステップ（Ｓ２２，Ｓ５２，Ｓ６２）をコンピュータにさらに実行させてもよい。指示座標算出ステップにおいては、取得された撮像画像における撮像対象の画像の位置に対応させて、表示領域上の位置に対応した所定の指示座標（指示座標データ６２）を算出する。このとき、第１回転ステップにおいては、２次元ベクトルと、指示座標とを用いた演算によって操作対象を回転させる。
【００１３】
第６の発明においては、情報処理プログラムは、指示座標算出ステップ（Ｓ２２，Ｓ５２，Ｓ６２）をコンピュータにさらに実行させてもよい。指示座標算出ステップにおいては、２点の座標の中点座標に対応させて、表示領域上の位置に対応した所定の指示座標を算出する。このとき、第１回転ステップにおいては、２次元ベクトルと、指示座標とを用いた演算によって操作対象を回転させる。
【００１４】
第７の発明においては、操作データには、撮像対象の画像位置に対応した１点の座標がさらに含まれていてもよい。このとき、情報処理プログラムは、指示座標算出ステップ（Ｓ２２，Ｓ５２，Ｓ６２）をコンピュータにさらに実行させる。指示座標算出ステップにおいては、１点の座標に対応させて、表示領域上の位置に対応した所定の指示座標を算出する。第１回転ステップにおいては、２次元ベクトルと、指示座標とを用いた演算によって操作対象を回転させる。
【００１５】
第８の発明においては、指示座標算出ステップは、撮像手段によって撮像された画像を、画像中心を軸として回転させ、当該回転によって２次元ベクトルが一定の方向になるようにした場合における、撮像対象の画像の位置に対応させて表示領域上の位置に対応した指示座標を算出するようにしてもよい。
【００１６】
第９の発明においては、情報処理プログラムは、指示座標算出ステップ（Ｓ２２，Ｓ５２，Ｓ６２）をコンピュータにさらに実行させてもよい。指示座標算出ステップにおいては、表示領域上の位置に対応した所定の座標を指示座標として設定する。第１回転ステップにおいては、２次元ベクトルと、指示座標とを用いた演算によって操作対象を回転させる。
【００１７】
第１０の発明においては、仮想空間は仮想的な３次元空間であってもよい。このとき、情報処理プログラムは、３次元指示座標設定ステップ（Ｓ５３）をコンピュータにさらに実行させる。３次元指示座標設定ステップにおいては、指示座標算出ステップで算出された指示座標に対応する仮想空間内での３次元座標を算出して、当該３次元座標を３次元指示座標として設定する。このとき、第１移動ステップにおいては、２次元ベクトルと、３次元指示座標とを用いた演算によって３次元空間において操作対象を回転させる。
【００１８】
第１１の発明においては、情報処理プログラムは、オブジェクト配置ステップ（Ｓ３１，Ｓ４１，Ｓ６０）をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に少なくとも１つのオブジェクトを配置する。第１回転ステップにおいては、仮想空間に配置されるオブジェクトを操作対象として回転させる。
【００１９】
第１２の発明においては、情報処理プログラムは、オブジェクト配置ステップ（Ｓ３１，Ｓ４１，Ｓ６０）をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に少なくとも１つのオブジェクトを配置する。このとき、第１回転ステップは、指示座標に対応した表示領域上の位置に、オブジェクトのいずれかが表示されるか否か判別する判別ステップ（Ｓ６４）と、指示座標に対応した位置にオブジェクトが表示される場合には、当該オブジェクトを操作対象として設定する操作対象設定ステップ（Ｓ６５）と、操作対象設定ステップにおいて設定されたオブジェクトを回転させるステップ（Ｓ２１）とを含んでいてもよい。
【００２０】
第１３の発明においては、情報処理プログラムは、オブジェクト配置ステップ（Ｓ３１，Ｓ４１，Ｓ６０）をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に操作対象となるオブジェクトを配置する。このとき、第１回転ステップは、指示座標算出ステップにおいて算出された位置に表示されるようにオブジェクトを移動させるオブジェクト移動ステップ（Ｓ２１）と、オブジェクトを回転させるステップ（Ｓ２２）とを含む。
【００２１】
第１４の発明においては、情報処理プログラムは、オブジェクト配置ステップ（Ｓ３１，Ｓ４１，Ｓ６０）をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に操作対象となるオブジェクトを配置する。このとき、第１回転ステップは、３次元指示座標設定ステップにおいて算出された３次元指示座標（対応座標）にオブジェクトを移動させるオブジェクト移動ステップ（Ｓ２１）と、オブジェクトを回転させるステップ（Ｓ２２）とを含む。
【００２２】
第１５の発明においては、情報処理プログラムは、オブジェクト配置ステップ（Ｓ３１，Ｓ４１，Ｓ６０）をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に操作対象となるオブジェクトを配置する。このとき、第１回転ステップは、指示座標算出ステップにおいて算出された座標を回転の中心座標として設定する中心座標設定ステップ（Ｓ５３）と、中心座標を中心としてオブジェクトを回転させるステップ（Ｓ２２）とを含む。
【００２３】
第１６の発明においては、情報処理プログラムは、オブジェクト配置ステップ（Ｓ３１，Ｓ４１，Ｓ６０）をコンピュータにさらに実行させてもよい。オブジェクト配置ステップにおいては、仮想空間内に操作対象となるオブジェクトを配置する。このとき、第１回転ステップは、３次元指示座標設定ステップにおいて算出された３次元座標を回転の中心座標として設定する中心座標設定ステップ（Ｓ５３）と、中心座標を中心として３次元空間においてオブジェクトを回転させるステップ（Ｓ２２）とを含む。
【００２４】
第１７の発明においては、仮想空間は仮想的な３次元空間であってもよい。このとき、情報処理プログラムは、仮想カメラ設定ステップ（Ｓ５０）をコンピュータにさらに実行させる。仮想カメラ設定ステップにおいては、当該仮想空間内における所定位置に所定方向を向く仮想カメラを設定する。第１回転ステップにおいては、仮想カメラを操作対象として回転させる。表示ステップにおいては、仮想カメラから見た仮想空間の画像を画面に表示する。
【００２５】
第１８の発明においては、仮想空間は仮想的な３次元空間であってもよい。このとき、情報処理プログラムは、仮想カメラ設定ステップ（Ｓ５０）をコンピュータにさらに実行させる。仮想カメラ設定ステップにおいては、当該仮想空間内における所定位置に所定方向を向く仮想カメラを設定する。第１回転ステップにおいては、３次元指示座標設定ステップにおいて算出された座標を回転の中心として仮想カメラを操作対象として回転させる。
【００２６】
第１９の発明においては、第１回転ステップにおいて、仮想カメラの注視点の位置を中心として仮想カメラを回転させるようにしてもよい。
【００２７】
第２０の発明においては、第１回転ステップにおいて、仮想カメラの視線方向が変化するように仮想カメラを回転させるようにしてもよい。
【００２８】
第２１の発明においては、第１回転ステップにおいて、回転によって操作対象の姿勢を変化させるようにしてもよい。
【００２９】
第２２の発明においては、第１回転ステップにおいて、所定の位置を中心とした回転によって操作対象の位置を移動させるようにしてもよい。
【００３０】
第２３の発明においては、第１回転ステップにおいて、算出された２次元ベクトルの方向に応じて操作対象の姿勢または位置が決定されるようにしてもよい。
【００３１】
第２４の発明においては、第１回転ステップは、２次元ベクトルの方向が所定の範囲を超えたか否かを判別する判別ステップと、判別ステップにおいて２次元ベクトルの方向が所定の範囲を超えたと判別された場合に操作対象を回転させるステップとを含んでいてもよい。
【００３２】
第２５の発明においては、情報処理プログラムは、傾き算出ステップ（Ｓ５４）をコンピュータにさらに実行させてもよい。傾き算出ステップは、２次元ベクトルの方向と、所定の基準方向との差を角度またはベクトルとして求める。このとき、第１回転ステップにおいては、傾き算出ステップで算出された差に応じて操作対象を回転させる。
【００３３】
第２６の発明においては、第１回転ステップは、傾き算出ステップで算出された差の大きさに応じて回転量を設定する回転量設定ステップ（Ｓ５５）と、当該回転量だけ操作対象を回転させるステップ（Ｓ５６）とを含んでいてもよい。
【００３４】
第２７の発明においては、第１回転ステップは、傾き算出ステップで算出された差が所定値を超えたか否か判別する判別ステップと、判別ステップにおいて当該差が所定値を超えたと判別された場合に操作対象を回転させるステップとを含んでいてもよい。
【００３５】
第２８の発明においては、情報処理プログラムは、大きさ算出ステップ（Ｓ１９）をコンピュータにさらに実行させてもよい。大きさ算出ステップにおいては、取得された撮像画像における撮像対象の画像の大きさを示すデータを操作データから算出する。このとき、第１回転ステップにおいては、２次元ベクトルと、大きさ算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる。
【００３６】
第２９の発明においては、情報処理プログラムは、長さ算出ステップ（Ｓ１９）をコンピュータにさらに実行させてもよい。長さ算出ステップにおいては、２点の座標の間の長さを示すデータを算出する。このとき、第１回転ステップにおいては、２次元ベクトルと、長さ算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる。
【００３７】
第３０の発明は、操作データには、撮像手段によって撮像された撮像画像に含まれる撮像対象の画像のうちの所定の２点の座標の間の長さを示すデータがさらに含まれていてもよい。このとき、第１回転ステップにおいては、２次元ベクトルと、２点の座標の間の長さを示すデータとを用いた演算によって操作対象を回転させる。
【００３８】
第３１の発明においては、第１回転ステップは、大きさ算出ステップにおいて算出されたデータから、撮像手段と撮像対象との距離を示す距離データを算出するステップ（Ｓ４８）と、２次元ベクトルと距離データとを用いた演算によって操作対象を回転させるステップとを含んでいてもよい。
【００３９】
第３２の発明においては、第１回転ステップは、長さ算出ステップにおいて算出されたデータから、撮像手段と撮像対象との距離を示す距離データを算出するステップ（Ｓ４８）と、２次元ベクトルと距離データとを用いた演算によって操作対象を回転させるステップとを含んでいてもよい。
【００４０】
第３３の発明においては、第１回転ステップは、２点の座標の間の長さを示すデータから、撮像手段と撮像対象との距離を示す距離データを算出するステップ（Ｓ４８）と、２次元ベクトルと、距離データとを用いた演算によって操作対象を回転させるステップとを含んでいてもよい。
【００４１】
第３４の発明においては、操作データには、撮像手段と撮像対象との距離を示す距離データがさらに含まれていてもよい。このとき、第１回転ステップにおいては、２次元ベクトルと、距離データとを用いた演算によって操作対象を回転させる。
【００４２】
第３５の発明においては、情報処理プログラムは、距離算出ステップをコンピュータにさらに実行させてもよい。距離算出ステップ（Ｓ４８）においては、撮像手段と撮像対象との距離に対応したデータを算出する。このとき、第１回転ステップにおいては、２次元ベクトルと、距離算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる。
【００４３】
第３６の発明においては、仮想空間は仮想的な３次元空間であってもよい。このとき、情報処理プログラムは、オブジェクト配置ステップをコンピュータにさらに実行させる。オブジェクト配置ステップにおいては、仮想空間内に少なくとも１つのオブジェクトを配置する。このとき、第１回転ステップは、距離データに対応させて、仮想空間内の奥行き方向の座標を決定する奥行き設定ステップと、奥行き設定ステップにおいて算出された奥行き方向の座標位置に少なくとも１つのオブジェクトのいずれかが存在するか否か判別する判別ステップと、判別ステップにおいてオブジェクトが存在すると判別された場合に、当該オブジェクトを操作対象として設定する操作対象設定ステップとを含む。
【００４４】
第３７の発明においては、仮想空間は仮想的な３次元空間であってもよい。このとき、第１回転ステップは、距離データに対応させて、仮想空間内の奥行き方向の座標を決定する奥行き設定ステップ（Ｓ４９）と、奥行き設定ステップにおいて算出された奥行き方向の座標に操作対象の奥行き方向の位置を移動させる移動ステップと、２次元ベクトルに応じて操作対象を回転させるステップとを含む。
【００４５】
第３８の発明においては、入力装置は、自機の傾きを検出する傾き検出手段（加速度センサ３７）を備えていてもよい。このとき、情報処理プログラムは、判定ステップと、第２回転ステップとをコンピュータにさらに実行させる。判定ステップは、取得された画像からベクトル算出ステップによって２次元ベクトルが算出可能か否かを判定する。第２回転ステップにおいては、判定ステップにおいて方向が算出不可能と判定されたとき、傾き検出手段によって検出される傾き方向に応じて操作対象を回転させる。
【発明の効果】
【００４６】
第１の発明によれば、ベクトル算出ステップによって、撮像対象の画像（撮像画像）から２次元のベクトルが算出される。この２次元ベクトルの値は、撮像装置を備える操作装置の回転状態によって変化する。したがって、この方向に応じて回転するように操作対象を表示することによって、操作装置を回転させる操作に応じて操作対象を回転させることができる。すなわち、第１の発明によれば、ユーザが手に持って使用する操作装置を用いて、操作装置自体を回転させるという今までにない操作によって操作対象を回転させるという、新規な操作方法を提供することができる。また、第１の発明によれば、撮像画像が操作装置から取得されるので、操作装置は、画像を撮像する機能のみを有すればよい。したがって、操作装置の構成を簡易化することができる。
【００４７】
第２の発明によれば、撮像対象の画像のうちの所定の２点の位置が算出されるので、当該２点の位置を用いて２次元ベクトルを容易に算出することができる。
【００４８】
第３の発明によれば、第１の発明と同様、ユーザが手に持って使用する操作装置を用いて、操作装置自体を回転させるという今までにない操作によって操作対象を回転させるという、新規な操作方法を提供することができる。また、第３の発明によれば、操作装置によって撮像対象の画像のうちの所定の２点の位置が算出されるので、情報処理装置は、当該２点の位置を用いて２次元ベクトルを容易に算出することができる。すなわち、情報処理装置のコンピュータにおける処理負荷を軽減することができる。
【００４９】
第４の発明によれば、第１の発明と同様、ユーザが手に持って使用する操作装置を用いて、操作装置自体を回転させるという今までにない操作によって操作対象を回転させるという、新規な操作方法を提供することができる。また、第４の発明によれば、操作装置によって２次元ベクトルが算出されるので、情報処理装置は、２次元ベクトルを算出する処理を実行する必要がない。すなわち、情報処理装置のコンピュータにおける処理負荷を軽減することができる。
【００５０】
第５の発明によれば、指示座標算出ステップによって、撮像画像内における撮像対象の画像の位置から、表示領域上の位置が算出される。したがって、ユーザは、ユーザが手に持って使用するタイプの操作装置を用いて、表示領域上の位置を指定することができる。さらに、このようなユーザによって指定される位置と２次元ベクトルとを用いて操作対象が回転される。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。例えば、ユーザは、回転の中心位置を指定したり、指定した位置に操作対象を移動させるとともに操作対象を回転させたりすることができる。
【００５１】
第６の発明によれば、指示座標算出ステップによって、撮像画像内における撮像対象の画像の位置から、表示領域上の位置が算出される。したがって、ユーザは、ユーザが手に持って使用するタイプの操作装置を用いて、表示領域上の位置を指定することができる。さらに、このようなユーザによって指定される位置と２次元ベクトルとを用いて操作対象が回転されるので、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
【００５２】
第７の発明によれば、指示座標算出ステップによって、撮像画像内における撮像対象の画像の位置から、表示領域上の位置が算出される。したがって、ユーザは、ユーザが手に持って使用するタイプの操作装置を用いて、表示領域上の位置を指定することができる。さらに、このようなユーザによって指定される位置と２次元ベクトルとを用いて操作対象が回転されるので、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
【００５３】
ここで、撮像画像内における対象画像の位置は、操作装置の回転状態によって異なる（図１５参照）。つまり、操作装置がある１箇所の位置を指し示す状態であっても、操作装置の回転状態によって対象画像の位置が異なってしまう場合がある。この場合、操作装置が指し示す位置（すなわち、指示座標算出ステップで算出される指示座標の位置）を対象画像の位置から正確に算出することができない。これに対して、第８の発明によれば、撮像画像の向きが一定となるように撮像対象の画像を回転させたときの当該撮像画像の位置を算出している。これによって、操作装置の回転状態の影響をなくすことができるので、位置算出ステップで算出される画面上または仮想空間内の位置を、撮像画像の位置から正確に算出することができる。
【００５４】
第９の発明によれば、指示座標算出ステップによって、撮像画像内における撮像対象の画像の位置から、表示領域上の位置が算出される。したがって、ユーザは、ユーザが手に持って使用するタイプの操作装置を用いて、表示領域上の位置を指定することができる。さらに、このようなユーザによって指定される位置と２次元ベクトルとを用いて操作対象が回転されるので、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
【００５５】
第１０の発明によれば、操作装置自体を回転させるという今までにない操作によって、３次元の仮想空間内に存在する操作対象を移動させることができる。また、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、３次元の仮想空間内に存在する操作対象の回転をより詳細に制御することができる。
【００５６】
第１１の発明によれば、操作装置自体を回転させるという今までにない操作によって、３次元の仮想空間内に存在するオブジェクトを移動させることができる。
【００５７】
第１２の発明によれば、指示座標算出ステップで算出される指示座標に対応した表示領域上の位置に表示されるオブジェクトが操作対象として設定される。したがって、ユーザは、操作装置を用いて、画面上に表示されているオブジェクトを指定する操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象となるオブジェクトの選択に関する指示と、選択したオブジェクトを回転させる指示という２種類の指示を、１つの操作装置に対する姿勢操作という１種類の操作方法によって行うことができる。
【００５８】
第１３の発明によれば、指示座標算出ステップで算出される指示座標に対応した表示領域上の位置にオブジェクトが移動される。したがって、ユーザは、操作装置を用いて、画面上に表示されているオブジェクトを移動させる操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象となるオブジェクトを移動させる指示と、オブジェクトを回転させる指示という２種類の指示を、１つの操作装置に対する姿勢操作という１種類の操作方法によって行うことができる。
【００５９】
第１４の発明によれば、指示座標算出ステップで算出される指示座標に対応した３次元指示座標の位置にオブジェクトが移動される。したがって、ユーザは、操作装置を用いて、仮想３次元空間内のオブジェクトを移動させる操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象となるオブジェクトを移動させる指示と、選択したオブジェクトを回転させる指示という２種類の指示を、１つの操作装置に対する姿勢操作という１種類の操作方法によって行うことができる。
【００６０】
第１５の発明によれば、ユーザは、ユーザが手に持って使用するタイプの入力装置を用いて、画面上における位置を指定することができる。ユーザは、当該入力装置を用いて、オブジェクトが行う回転動作の中心位置を指定することができる。これによって、回転動作のバリエーションが増えるので、より多彩な回転動作をオブジェクトに行わせることができる。
【００６１】
第１６の発明によれば、ユーザは、ユーザが手に持って使用するタイプの入力装置を用いて、仮想３次元空間における位置を指定することができる。ユーザは、当該入力装置を用いて、オブジェクトが行う回転動作の中心位置を指定することができる。これによって、回転動作のバリエーションが増えるので、より多彩な回転動作をオブジェクトに行わせることができる。
【００６２】
第１７の発明によれば、第１回転ステップで仮想カメラを回転させることによって、画面に表示されている仮想空間の画像の視点位置や視線方向を変化させることができる。ユーザは、入力装置自体を回転させるという今までにない操作によって、画面に表示されている仮想空間の画像の視点位置や視線方向を変化させることができる。
【００６３】
第１８の発明によれば、ユーザは、ユーザが手に持って使用するタイプの入力装置を用いて、画面上における位置を指定することができる。ユーザは、当該入力装置を用いて、仮想カメラが行う回転動作の中心位置を指定することができる。これによって、回転動作のバリエーションが増えるので、より多彩な回転動作を仮想カメラに行わせることができる。
【００６４】
第１９の発明によれば、入力装置自体を回転させるという今までにない操作によって、注視点の位置に存在するオブジェクトを見る視線方向を自由に変化させることができる。
【００６５】
第２０の発明によれば、入力装置自体を回転させるという今までにない操作によって、仮想カメラの視線方向を自由に変化させることができる。
【００６６】
第２１の発明によれば、入力装置自体を回転させるという今までにない操作によって、操作対象の姿勢を自由に変化させることができる。
【００６７】
第２２の発明によれば、入力装置自体を回転させるという今までにない操作によって、操作対象を自由に回転移動させることができる。
【００６８】
第２３の発明によれば、入力装置の回転角度に対応するように操作対象を回転させることができる。
【００６９】
第２４の発明によれば、算出される２次元ベクトルの方向が所定の範囲内にある場合、操作対象は回転しない。ここで、入力装置の回転角度に敏感に反応して操作対象が回転するとすれば、入力装置を厳密に操作することをユーザに要求することとなり、当該入力装置の操作性がかえって悪くなってしまう。これに対して、第２４の発明によれば、所定の範囲内においては操作対象が回転しないので、入力装置の回転操作においていわゆる遊びの部分を設定することができ、操作性を向上することができる。
【００７０】
第２５の発明によれば、２次元ベクトルの方向と所定の基準方向との差に基づいて操作対象が回転される。ここで、ユーザの使いやすい状態を基準方向とすることによって、入力装置の操作性を向上することができる。
【００７１】
第２６の発明によれば、２次元ベクトルの方向と所定の基準方向との差に応じて操作対象の回転量が増加するので、ユーザは、入力装置の回転量によって操作対象の回転量を制御することができる。これによって、ユーザは、操作対象の回転量を直感的かつ容易に制御することができる。
【００７２】
第２７の発明によれば、２次元ベクトルの方向と所定の基準方向との差が所定値を超えない範囲では操作対象は回転されない。すなわち、角度差が所定値を超えない範囲をいわゆる遊びの範囲とすることによって、第２４の発明と同様、入力装置の操作性を向上することができる。
【００７３】
第２８の発明によれば、撮像対象の画像の大きさを示すデータによって、撮像手段（操作装置）から撮像対象までの距離を検知することができる。したがって、ユーザは、この距離を変化させるように操作装置自体を動かすことによって、操作対象を回転させる操作を行うことができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
【００７４】
第２９の発明によれば、撮像対象の２箇所の位置に対応する２点の座標の長さを示すデータによって、撮像手段（操作装置）から撮像対象までの距離を検知することができる。したがって、ユーザは、この距離を変化させるように操作装置自体を動かすことによって、操作対象を回転させる操作を行うことができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
【００７５】
第３０の発明によれば、第２８および第２９の発明と同様、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
【００７６】
第３１の発明によれば、操作対象に対する回転操作に関して、撮像手段から撮像対象までの距離をより正確に反映させることができる。
【００７７】
第３２の発明によれば、操作対象に対する回転操作に関して、撮像手段から撮像対象までの距離をより正確に反映させることができる。
【００７８】
第３３の発明によれば、操作対象に対する回転操作に関して、撮像手段から撮像対象までの距離をより正確に反映させることができる。
【００７９】
第３４の発明によれば、操作対象に対する回転操作に関して、撮像手段から撮像対象までの距離をより正確に反映させることができる。
【００８０】
第３５の発明によれば、撮像手段（操作装置）から撮像対象までの距離に対応したデータ（長さデータ５９や距離データ６３）が算出される。これによって、ユーザは、この距離を変化させるように操作装置自体を動かすことによって、操作対象を回転させる操作を行うことができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いてより複雑な回転操作が可能となり、ユーザは、操作対象の回転をより詳細に制御することができる。
【００８１】
第３６の発明によれば、奥行き設定ステップで決定される奥行き方向の座標に対応した位置にあるオブジェクトが操作対象として設定される。したがって、ユーザは、操作装置を用いて、仮想空間内のオブジェクトを指定する操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象となるオブジェクトの選択に関する指示と、選択したオブジェクトを回転させる指示という２種類の指示を、操作装置自体を動かすという１種類の操作方法によって行うことができる。
【００８２】
第３７の発明によれば、奥行き設定ステップで決定される奥行き方向の座標に対応した位置に操作対象が移動される。したがって、ユーザは、操作装置を用いて、仮想空間内の操作対象を移動させる操作を行うことができる。さらに、ユーザは、この操作装置を用いて、指定されたオブジェクトを回転させることができる。したがって、本発明によれば、ユーザが手に持って使用するタイプの操作装置を用いて、操作対象を移動させる指示と、操作対象を回転させる指示という２種類の指示を、操作装置自体を動かすという１種類の操作方法によって行うことができる。
【００８３】
第３８の発明によれば、撮像手段が撮像対象を撮像することができる範囲（後述する操作可能範囲）を超えた状態で操作装置がユーザによって把持された場合、傾き検出手段によって検出される傾きに応じて操作対象が回転される。したがって、ユーザが操作装置を移動させる操作を行っている途中において操作可能範囲を超えた状態となっても、操作対象の回転動作を継続することができる。
【図面の簡単な説明】
【００８４】
【図１】本発明の一実施形態に係る情報処理システムの一例であるゲームシステム１の外観図
【図２】ゲーム装置３の機能ブロック図
【図３】コントローラ７の上面後方から見た斜視図
【図４】コントローラ７を下面後方から見た斜視図
【図５】コントローラ７を前方から見た図
【図６】コントローラ７の構成を示すブロック図
【図７】コントローラ７を用いてゲーム操作するときの状態を概説する図解図
【図８】マーカ８ａおよび８ｂとコントローラ７との視野角を説明するための図
【図９】対象画像を含む撮像画像の一例を示す図
【図１０】コントローラ７の位置および／または向きを変化させた場合における撮像画像の変化を示す図
【図１１】ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図
【図１２】ゲーム装置３において実行されるゲーム処理の流れを示すフローチャート
【図１３】図１２に示す操作状態算出処理（Ｓ２）の詳細な処理の流れを示すフローチャート
【図１４】第１座標および第２座標を決定するための処理を説明するための図
【図１５】コントローラの状態と、その状態にあるときに得られる撮像画像との対応を示す図
【図１６】図１２に示す移動処理（Ｓ３）の詳細な処理の流れを示すフローチャート
【図１７】操作対象の回転動作の例を示す図
【図１８】操作対象の回転動作の例を示す図
【図１９】第１実施例におけるゲーム画面の一例を示す図
【図２０】回転操作によるプレイヤオブジェクト７１の動作を説明するための図
【図２１】第１実施例におけるゲーム処理の流れを示すフローチャート
【図２２】第２実施例におけるゲーム画面の一例を示す図
【図２３】第２実施例におけるゲーム処理の流れを示すフローチャート
【図２４】第２実施例における移動処理の詳細を示すフローチャート
【図２５】図２４のステップＳ４８の処理の詳細を示すフローチャート
【図２６】図２４のステップＳ４８の処理を説明するための図
【図２７】第３実施例におけるゲーム空間の一例を示す図
【図２８】第３実施例においてメインメモリ１３に記憶される主なデータを示す図
【図２９】第３実施例におけるゲーム処理の流れを示すフローチャート
【図３０】第３実施例における移動処理の詳細を示す図
【図３１】第４実施例におけるゲーム画面の一例を示す図
【図３２】第４実施例におけるゲーム処理の流れを示すフローチャート
【発明を実施するための形態】
【００８５】
図１を参照して、本発明の一実施形態に係る情報処理システムの一例であるゲームシステム１について説明する。なお、図１は、当該ゲームシステム１を説明するための外観図である。以下、据置型ゲーム装置を一例にして、本発明のゲームシステム１について説明する。
【００８６】
図１において、当該ゲームシステム１は、家庭用テレビジョン受像機等のスピーカ２２を備えたディスプレイ（以下、モニタと記載する）２に、接続コードを介して接続される据置型ゲーム装置（以下、単にゲーム装置と記載する）３および当該ゲーム装置３に操作データを与えるコントローラ７によって構成される。また、モニタ２の周辺（図では画面の上側）には、２つのマーカ８ａおよび８ｂが設置される。マーカ８ａおよび８ｂは、具体的には赤外ＬＥＤであり、それぞれモニタ２の前方に向かって赤外光を出力する。ゲーム装置３は、接続端子を介して受信ユニット６が接続される。受信ユニット６は、コントローラ７から無線送信される操作データを受信し、コントローラ７とゲーム装置３とは無線通信によって接続される。また、ゲーム装置１には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例の光ディスク４が脱着される。ゲーム装置３の上部主面には、当該ゲーム装置３の電源ＯＮ／ＯＦＦスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置３上部の蓋を開くＯＰＥＮスイッチが設けられている。ここで、プレイヤがＯＰＥＮスイッチを押下することによって上記蓋が開き、光ディスク４の脱着が可能となる。
【００８７】
また、ゲーム装置３には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ２に表示する。さらに、ゲーム装置３は、外部メモリカード５に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００８８】
コントローラ７は、その内部に備える通信部３６（後述）から受信ユニット６が接続されたゲーム装置３へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて操作データを無線送信する。コントローラ７は、操作対象（モニタ２に表示されるオブジェクトや仮想カメラ）を操作するための操作手段である。コントローラ７は、複数の操作ボタンからなる操作部が設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７の位置および姿勢を検出するための撮像情報演算部３５（後述）を備えている。すなわち、撮像情報演算部３５は、モニタ２の周辺に配置された各マーカ８ａおよび８ｂを撮像対象として、各マーカ８ａおよび８ｂの画像を撮像する。ゲーム装置３は、この画像を用いてコントローラ７の位置および姿勢に対応した操作信号を得る。
【００８９】
次に、図２を参照して、ゲーム装置３の構成について説明する。なお、図２は、ゲーム装置３の機能ブロック図である。
【００９０】
図２において、ゲーム装置３は、各種プログラムを実行する例えばリスク（ＲＩＳＣ）ＣＰＵ（セントラルプロセッシングユニット）１０を備える。ＣＰＵ１０は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、メインメモリ１３等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。ＣＰＵ１０には、メモリコントローラ１１を介して、ＧＰＵ（Ｇｒａｐｈｉｃｓ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）１２、メインメモリ１３、ＤＳＰ（Ｄｉｇｉｔａｌ Ｓｉｇｎａｌ Ｐｒｏｃｅｓｓｏｒ）３４、およびＡＲＡＭ（Ａｕｄｉｏ ＲＡＭ）３５が接続される。また、メモリコントローラ１１には、所定のバスを介して、コントローラＩ／Ｆ（インターフェース）１６、ビデオＩ／Ｆ１７、外部メモリＩ／Ｆ１８、オーディオＩ／Ｆ１９、およびディスクＩ／Ｆ２１が接続され、それぞれ受信ユニット６、モニタ２、外部メモリカード５、スピーカ２２、およびディスクドライブ２０が接続されている。
【００９１】
ＧＰＵ１２は、ＣＰＵ１０の命令に基づいて画像処理を行うものあり、例えば、３Ｄグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。ＧＰＵ１２は、図示しない画像処理専用のメモリやメインメモリ１３の一部の記憶領域を用いて画像処理を行う。ＧＰＵ１２は、これらを用いてモニタ２に表示すべきゲーム画像データやムービー映像を生成し、適宜メモリコントローラ１１およびビデオＩ／Ｆ１７を介してモニタ２に出力する。
【００９２】
メインメモリ１３は、ＣＰＵ１０で使用される記憶領域であって、ＣＰＵ１０の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ１３は、ＣＰＵ１０によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ１３に記憶されたゲームプログラムや各種データ等がＣＰＵ１０によって実行される。
【００９３】
ＤＳＰ１４は、ゲームプログラム実行時にＣＰＵ１０において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのＡＲＡＭ１５が接続される。ＡＲＡＭ１５は、ＤＳＰ１４が所定の処理（例えば、先読みしておいたゲームプログラムやサウンドデータの記憶）を行う際に用いられる。ＤＳＰ１４は、ＡＲＡＭ１５に記憶されたサウンドデータを読み出し、メモリコントローラ１１およびオーディオＩ／Ｆ１９を介してモニタ２に備えるスピーカ２２に出力させる。
【００９４】
メモリコントローラ１１は、データ転送を統括的に制御するものであり、上述した各種Ｉ／Ｆが接続される。コントローラＩ／Ｆ１６は、例えば４つのコントローラＩ／Ｆで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置３とを通信可能に接続する。例えば、受信ユニット６は、上記コネクタと嵌合し、コントローラＩ／Ｆ１６を介してゲーム装置３と接続される。上述したように受信ユニット６は、コントローラ７からの操作データを受信し、コントローラＩ／Ｆ１６を介して当該操作データをＣＰＵ１０へ出力する。なお、他の実施形態においては、ゲーム装置３は、受信ユニット６に代えて、コントローラ７から送信されてくる操作データを受信する受信モジュールをその内部に設ける構成としてもよい。この場合、受信モジュールが受信した送信データは、所定のバスを介してＣＰＵ１０に出力される。ビデオＩ／Ｆ１７には、モニタ２が接続される。外部メモリＩ／Ｆ１８には、外部メモリカード５が接続され、その外部メモリカード５に設けられたバックアップメモリ等とアクセス可能となる。オーディオＩ／Ｆ１９にはモニタ２に内蔵されるスピーカ２２が接続され、ＤＳＰ１４がＡＲＡＭ１５から読み出したサウンドデータやディスクドライブ２０から直接出力されるサウンドデータをスピーカ２２から出力可能に接続される。ディスクＩ／Ｆ２１には、ディスクドライブ２０が接続される。ディスクドライブ２０は、所定の読み出し位置に配置された光ディスク４に記憶されたデータを読み出し、ゲーム装置３のバスやオーディオＩ／Ｆ１９に出力する。
【００９５】
次に、図３〜図７を参照して、コントローラ７について説明する。図３〜図５は、コントローラ７の外観構成を示す斜視図である。図３（ａ）は、コントローラ７の上面後方から見た斜視図であり、図３（ｂ）は、コントローラ７を下面後方から見た斜視図である。図４は、コントローラ７を前方から見た図である。
【００９６】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング３１を有している。ハウジング３１は、その前後方向（図３に示すＺ軸方向）を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ７を用いることによって、それに設けられたボタンを押下するゲーム操作を行うことに加え、コントローラ７自体の位置や向きを変えることによってゲーム操作を行うことができる。例えば、プレイヤは、長手方向を軸としてコントローラ７を回転させることによって、操作対象に移動動作を行わせることができる。また、プレイヤは、コントローラ７によって指し示される画面上の位置を変える操作によって、例えば、当該位置に向けて操作対象を移動させることができる。ここで、「コントローラ７によって指し示される画面上の位置」とは、コントローラ７の前端部から上記長手方向に延ばした直線と、モニタ２の画面とが交わる位置である。以下では、当該位置を「指示位置」と呼ぶことがある。また、コントローラ７（ハウジング３１）の長手方向を、「コントローラ７の指示方向」と呼ぶことがある。
【００９７】
ハウジング３１には、複数の操作ボタンが設けられる。ハウジング３１の上面には、十字キー３２ａ、Ｘボタン３２ｂ、Ｙボタン３２ｃ、Ｂボタン３２ｄ、セレクトスイッチ３２ｅ、メニュースイッチ３２ｆ、およびスタートスイッチ３２ｇが設けられる。一方、ハウジング３１の下面には凹部が形成されており、当該凹部の後面側傾斜面にはＡボタン３２ｉが設けられる。これらの各ボタン（スイッチ）は、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。また、ハウジング３１の上面には、遠隔からゲーム装置３本体の電源をオン／オフするための電源スイッチ３２ｈが設けられる。
【００９８】
また、コントローラ７は撮像情報演算部３５（図５）を有しており、図４に示すように、ハウジング３１前面には撮像情報演算部３５の光入射口３５ａが設けられる。一方、ハウジング３１の後面にはコネクタ３３が設けられている。コネクタ３３は、例えば３２ピンのエッジコネクタであり、コントローラ７に他の機器を接続するために利用される。また、ハウジング３１上面の後面側には複数のＬＥＤ３４が設けられる。ここで、コントローラ７には、他のコントローラ７と区別するためにコントローラ種別（番号）が付与される。ＬＥＤ３４は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７からゲーム装置３へ操作データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ３４のいずれか１つが点灯する。
【００９９】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。図５は、コントローラ７の内部構造を示す図である。なお、図５（ａ）は、コントローラ７の上筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５（ｂ）は、コントローラ７の下筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５（ｂ）に示す基板３００は、図５（ａ）に示す基板３００の裏面から見た斜視図となっている。
【０１００】
図５（ａ）において、ハウジング３１の内部には基板３００が固設されており、当該基板３００の上主面上に操作ボタン３２ａ〜３２ｈ、加速度センサ３７、ＬＥＤ３４、水晶振動子４６、無線モジュール４４、およびアンテナ４５等が設けられる。そして、これらは、基板３００等に形成された配線（図示せず）によってマイコン４２（図６参照）に接続される。また、無線モジュール４４およびアンテナ４５によって、コントローラ７がワイヤレスコントローラとして機能する。なお、水晶振動子４６は、後述するマイコン４２の基本クロックを生成する。
【０１０１】
一方、図５（ｂ）において、基板３００の下主面上の前端縁に撮像情報演算部３５が設けられる。撮像情報演算部３５は、コントローラ７の前方から順に赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１によって構成されおり、それぞれ基板３００の下主面に取り付けられる。また、基板３００の下主面上の後端縁にコネクタ３３が取り付けられる。そして、撮像情報演算部３５の後方であって基板３００の下主面上に操作ボタン３２ｉが取り付けられていて、それよりさらに後方に、電池４７が収容される。電池４７とコネクタ３３との間の基板３００の下主面上には、バイブレータ４８が取り付けられる。このバイブレータ４８は、例えば振動モータやソレノイドであってよい。バイブレータ４８が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームを実現することができる。
【０１０２】
図６は、コントローラ７の構成を示すブロック図である。コントローラ７は、上述した操作部３２（各操作ボタン）および撮像情報演算部３５の他に、その内部に通信部３６および加速度センサ３７を備えている。
【０１０３】
撮像情報演算部３５は、撮像手段が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムである。撮像情報演算部３５は、例えば最大２００フレーム／秒程度のサンプリング周期を有するので、比較的高速なコントローラ７の動きでも追跡して解析することができる。
【０１０４】
具体的には、撮像情報演算部３５は、赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を含んでいる。赤外線フィルタ３８は、コントローラ７の前方から入射する光から赤外線のみを通過させる。ここで、モニタ２の表示画面近傍に配置されるマーカ８ａおよび８ｂは、モニタ２の前方に向かって赤外光を出力する赤外ＬＥＤである。したがって、赤外線フィルタ３８を設けることによってマーカ８ａおよび８ｂの画像をより正確に撮像することができる。レンズ３９は、赤外線フィルタ３８を透過した赤外線を集光して撮像素子４０へ出射する。撮像素子４０は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ３９が集光した赤外線を撮像する。したがって、撮像素子４０は、赤外線フィルタ３８を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子４０によって撮像された画像を撮像画像と呼ぶ。撮像素子４０によって生成された画像データは、画像処理回路４１で処理される。画像処理回路４１は、撮像画像内における撮像対象（マーカ８ａおよび８ｂ）の位置を算出する。画像処理回路４１は、各マーカ８ａおよび８ｂの撮像画像内における位置を示す各座標値を通信部３６へ出力する。なお、画像処理回路４１における処理の詳細については後述する。
【０１０５】
加速度センサ３７は、コントローラ７の上下方向（図３に示すＹ軸方向）、左右方向（図３に示すＸ軸方向）および前後方向（図３に示すＺ軸方向）の３軸でそれぞれ加速度を検知する加速度センサである。この加速度センサによって、コントローラ７のＸ軸方向、Ｙ軸方向およびＺ軸方向に関する傾きを検知することが可能である。つまり、ゲーム装置３は、上記撮像画像からコントローラ７のＺ軸周りの回転角度を検出するだけでなく、加速度センサによっても当該回転角度を検出することが可能である。なお、加速度センサ３７は、必要な操作信号の種類によっては、上下方向および左右方向の２軸でそれぞれ加速度を検出する加速度センサが用いられてもかまわない。加速度センサ３７が検知した加速度を示すデータは、通信部３６へ出力される。なお、加速度センサ３７は、典型的には静電容量式の加速度センサが用いられるが、他の方式の加速度センサやジャイロセンサを用いてもかまわない。この加速度センサ３７から出力される加速度データに基づいて、コントローラ７の傾きを検出することができる。
【０１０６】
通信部３６は、マイクロコンピュータ（Ｍｉｃｒｏ Ｃｏｍｐｕｔｅｒ：マイコン）４２、メモリ４３、無線モジュール４４、およびアンテナ４５を含んでいる。マイコン４２は、処理の際にメモリ４３を記憶領域として用いながら、マイコン４２が取得したデータを無線送信する無線モジュール４４を制御する。
【０１０７】
操作部３２、加速度センサ３７、および撮像情報演算部３５からマイコン４２へ出力されたデータは、一時的にメモリ４３に格納される。ここで、通信部３６から受信ユニット６への無線送信は所定の周期毎に行われるが、ゲームの処理は１／６０を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。マイコン４２は、受信ユニット６への送信タイミングが到来すると、メモリ４３に格納されているデータを操作データとして無線モジュール４４へ出力する。無線モジュール４４は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ４５から放射する。つまり、操作データは、無線モジュール４４で微弱電波信号に変調されてコントローラ７から送信される。微弱電波信号はゲーム装置３側の受信ユニット６で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置３は操作データを取得することができる。そして、ゲーム装置３のＣＰＵ１０は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。
【０１０８】
なお、図３〜図５に示したコントローラ７の形状や、各操作スイッチの形状、数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができることは言うまでもない。また、コントローラ７における撮像情報演算部３５の位置（撮像情報演算部３５の光入射口３５ａ）は、ハウジング３１の前面でなくてもよく、ハウジング３１の外部から光を取り入れることができれば他の面に設けられてもかまわない。このとき、上記「コントローラ７の指示方向」は、光入射口に垂直な方向となる。
【０１０９】
上記コントローラ７を用いることによって、プレイヤは、各操作スイッチを押下する従来のゲーム操作に加えて、コントローラ７自身の位置を動かしたり、コントローラ７を回転させたりするという、今までにないゲーム操作を行うことができる。以下、上記コントローラ７を用いたゲーム操作について説明する。
【０１１０】
図７は、コントローラ７を用いてゲーム操作するときの状態を概説する図解図である。図７に示すように、ゲームシステム１でコントローラ７を用いてゲームをプレイする際、プレイヤは、一方の手（例えば右手）でコントローラ７を把持する。ここで、マーカ８ａおよび８ｂは、モニタ２の画面の横方向と平行に配置されている。プレイヤは、コントローラ７の前面（撮像情報演算部３５が撮像する光の入射口側）がマーカ８ａおよび８ｂの方向を向く状態でコントローラ７を把持する。この状態で、プレイヤは、コントローラ７を回転させたり（図７の矢印参照）、コントローラ７の指し示す画面上の位置を変更したりすることによってゲーム操作を行う。
【０１１１】
図８は、マーカ８ａおよび８ｂとコントローラ７との視野角を説明するための図である。図８に示すように、各マーカ８ａおよび８ｂは、それぞれ視野角θ１の範囲で赤外光を放射している。また、撮像情報演算部３５は、視野角θ２の範囲で入射する光を受光することができる。例えば、各マーカ８ａおよび８ｂの視野角θ１は共に３４°（半値角）であり、撮像情報演算部３５の視野角θ２は４１°である。プレイヤは、撮像情報演算部３５が２つのマーカ８ａおよび８ｂからの赤外光を共に受光することが可能な位置および向きとなるように、コントローラ７を把持する。具体的には、撮像情報演算部３５の視野角θ２の中に各マーカ８ａおよび８ｂが共に存在し、かつ、マーカ８ａの視野角θ１の中であってかつマーカ８ｂの視野角θ１の中にコントローラ７が存在する範囲で、プレイヤはコントローラ７を把持する。プレイヤは、この範囲内でコントローラ７の位置および向きを変化させることによってゲーム操作を行うことができる。なお、コントローラ７の位置および向きがこの範囲外となった場合、コントローラ７の位置および向きに基づいたゲーム操作を行うことができなくなる。以下では、上記範囲を「操作可能範囲」と呼ぶ。
【０１１２】
操作可能範囲内でコントローラ７が把持される場合、撮像情報演算部３５によって各マーカ８ａおよび８ｂの画像が撮像される。すなわち、撮像素子４０によって得られる撮像画像には、撮像対象である各マーカ８ａおよび８ｂの画像（対象画像）が含まれる。図９は、対象画像を含む撮像画像の一例を示す図である。対象画像を含む撮像画像の画像データを用いて、画像処理回路４１は、各マーカ８ａおよび８ｂの撮像画像における位置を表す座標を算出する。
【０１１３】
撮像画像の画像データにおいて対象画像は高輝度部分として現れるので、画像処理回路４１は、まず、この高輝度部分を対象画像の候補として検出する。次に、検出された高輝度部分の大きさに基づいて、その高輝度部分が対象画像であるか否かを判定する。撮像画像には、対象画像である２つのマーカ８ａおよび８ｂの画像８ａ’および８ｂ’の他、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれていることがある。上記の判定処理は、対象画像であるマーカ８ａおよび８ｂの画像８ａ’および８ｂ’とそれ以外の画像とを区別し、対象画像を正確に検出するための処理である。具体的には、当該判定処理においては、検出された高輝度部分が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度部分が所定範囲内の大きさである場合、当該高輝度部分は対象画像を表すと判定され、高輝度部分が所定範囲内の大きさでない場合、当該高輝度部分は対象画像以外の画像を表すと判定される。
【０１１４】
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度部分について画像処理回路４１は当該高輝度部分の位置を算出する。具体的には、当該高輝度部分の重心位置を算出する。対象画像が正しく検出される場合には上記判定処理によって２つの高輝度部分が対象画像として判定されるので、上記算出処理によって２箇所の位置が算出される。ここで、撮像画像における位置は、撮像画像の左上を原点とし、下向きをｙ軸正方向とし、右向きをｘ軸正方向とする座標系（ｘｙ座標系）で表現されるものとする。したがって、画像処理回路４１は、上記算出処理によって算出された２箇所の位置を示す２つの座標値を示すデータを出力する。出力された座標値のデータは、上述したように、マイコン４２によって操作データとしてゲーム装置３に送信される。
【０１１５】
ゲーム装置３は、受信した操作データに含まれる上記座標値のデータを用いて、上記指示位置（コントローラ７が指し示す画面上の位置）と、コントローラ７の指示方向を軸とした回転角度（姿勢）と、コントローラ７から各マーカ８ａおよび８ｂまでの距離を算出することができる。図１０は、コントローラ７の位置および／または向きを変化させた場合における撮像画像の変化を示す図である。図１０は、コントローラの状態と、その状態にあるときに得られる撮像画像との対応を示している。図１０において、コントローラ７が状態Ａにあるときの撮像画像を撮像画像Ｉ１とする。撮像画像Ｉ１では、対象画像である各マーカ８ａおよび８ｂの画像８ａ’および８ｂ’は、撮像画像Ｉ１の中央付近に位置している。また、対象画像８ａ’および８ｂ’は、ｘ軸方向にほぼ平行な配置となる。
【０１１６】
図１０に示す状態Ｂは、状態Ａからコントローラ７を指示方向を軸として（Ｚ軸周りに）右回りに９０°回転させた状態である。なお、以下、本明細書では、コントローラ７に関する「右回り」および「左回り」とは、コントローラ７の後方（図３に示すＺ軸負方向側）から見たときの回転方向を言うものとする。この状態Ｂにおいては、撮像情報演算部３５によって撮像画像Ｉ２が得られる。撮像画像Ｉ２においては、対象画像８ａ’および８ｂ’は、撮像画像Ｉ１の状態から左回りに９０°回転している。したがって、撮像画像内における対象画像の向き（画像８ａ’から画像８ｂ’への向きまたは画像８ｂ’から画像８ａ’への向き）を検出することによって、コントローラ７の指示方向を軸とした姿勢を知ることができる。
【０１１７】
図１０に示す状態Ｃは、状態Ａを基準としてコントローラ７を右方向（Ｘ軸正方向）に平行移動させた状態である。この状態Ｃにおいては、撮像情報演算部３５によって撮像画像Ｉ３が得られる。撮像画像Ｉ３においては、対象画像８ａ’および８ｂ’は、撮像画像Ｉ１を基準として左方向（ｘ軸負方向）に平行移動している。なお、状態Ｃは、コントローラ７の指示方向を状態Ａから右方向に向けた状態である。ここで、コントローラ７を右方向に平行移動させる場合だけでなく、コントローラ７をＹ軸周りに回転させることによっても、コントローラ７の指示方向を右方向に向けることができる。コントローラ７をＹ軸周りに回転させる場合にも撮像画像Ｉ３とほぼ同様の撮像画像が得られる。以上より、コントローラ７の指示方向を右方向に向けるようにコントローラ７を移動（回転）させた場合、撮像画像Ｉ３と同様の撮像画像が得られる、すなわち、対象画像８ａ’および８ｂ’が平行移動した画像が得られる。したがって、撮像画像内における対象画像の位置（後述する例では、画像８ａ’と画像８ｂ’の中点の位置）を検出することによって、コントローラ７が指し示す方向を知ることができる。
【０１１８】
図１０に示す状態Ｄは、状態Ａを基準としてコントローラ７を各マーカ８ａおよび８ｂから遠ざけた（すなわち、後方向に平行移動させた）状態である。この状態Ｄにおいては、撮像情報演算部３５によって撮像画像Ｉ４が得られる。撮像画像Ｉ４においては、画像８ａ’と画像８ｂ’との距離が、撮像画像Ｉ１よりも短くなっている。したがって、撮像画像内における２つの対象画像の距離（画像８ａ’と画像８ｂ’との距離。２つの対象画像を一体と見れば、対象画像の大きさ）を検出することによって、コントローラ７の指示方向に関する移動状態（コントローラ７と各マーカ８ａおよび８ｂとの距離）を知ることができる。
【０１１９】
次に、ゲーム装置３において行われるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる主なデータについて図１１を用いて説明する。図１１は、ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図である。図１１に示すように、メインメモリ１３には、現在操作データ５０、前操作データ５３、操作状態データ５６、操作処理用データ６０、および操作対象データ６４等が記憶される。なお、メインメモリ１３には、図１１に示すデータの他、ゲームに登場するプレイヤキャラクタに関するデータ（プレイヤキャラクタの画像データや位置データ等）やゲーム空間に関するデータ（地形データ等）等、ゲーム処理に必要なデータが記憶される。
【０１２０】
現在操作データ５０は、コントローラ７から送信されてくる操作データであり、最新の操作データである。現在操作データ５０には、現在第１座標データ５１および現在第２座標データ５２が含まれる。現在第１座標データ５１は、２つのマークのうちの一方の画像の位置（取得画像内における位置）を表す座標のデータである。現在第２座標データ５２は、他方のマークの画像の位置（取得画像内における位置）を表す座標のデータである。なお、マークの画像の位置は、上記ｘｙ座標系（図９参照）によって表される。以下では、現在第１座標データ５１により示される座標を第１座標と呼び、現在第２座標データ５２により示される座標を第２座標と呼ぶ。なお、第１座標および第２座標は、後述する方向データ５７を正しく算出するために区別され、いずれがマーカ８ａの画像の位置を示し、いずれがマーカ８ｂの画像の位置を示すものであってもよい。ただし、前回のフレームで第１座標が一方のマーカの画像の位置を示している場合、次のフレームにおいても第１座標は当該一方のマーカの画像の位置を示すように設定する必要がある（後述するステップＳ１３〜Ｓ１５参照）。
【０１２１】
また、現在操作データ５０には、撮像画像から得られる座標データ（現在第１座標データ５１および現在第２座標データ５２）の他、操作部３２や加速度センサ３７から得られるデータが含まれる。ゲーム装置３は、所定時間間隔（例えば、１フレーム時間間隔）で操作データをコントローラ７から取得する。取得された操作データのうちで最新の操作データが現在操作データ５０としてメインメモリ１３に記憶される。
【０１２２】
前操作データ５３には、前第１座標データ５４および前第２座標データ５５が含まれる。前第１座標データ５４は、現在第１座標データ５１よりも１つ前に取得された第１座標データである。すなわち、新たに操作データが取得されたとき、それまでの現在第１座標データ５１が前第１座標データ５４として記憶される。そして、新たに取得された操作データに含まれる座標データのうちの一方が新たな現在第１座標データ５１としてメインメモリ１３に記憶される。また、前第２座標データ５５は、前第１座標データ５４と同様、現在第２座標データ５２よりも１つ前に取得された第１座標データである。すなわち、新たに操作データが取得されたとき、それまでの現在第２座標データ５２が前第２座標データ５５として記憶され、新たに取得された操作データに含まれる座標データのうちの他方（現在第１座標データでない方）が新たな現在第２座標データ５２としてメインメモリ１３に記憶される。
【０１２３】
操作状態データ５６は、撮像画像に基づいて判断される、コントローラ７の操作状態を示すデータである。操作状態データ５６は、撮像画像に含まれる対象画像の位置や向きや大きさを示すデータである。操作状態データ５６には、方向データ５７、中点データ５８、および長さデータ５９が含まれる。方向データ５７は、第１座標から第２座標への方向を示すデータである。ここでは、方向データ５７は、第１座標の位置を始点とし第２座標の位置を終点とする２次元ベクトルのデータとする。方向データ５７は、取得画像内における対象画像（マーカ８ａおよび８ｂ）の向きを示す。また、中点データ５８は、第１座標と第２座標との中点の座標を示す。マーカ８ａおよび８ｂの画像を１つの対象画像としてみた場合、中点データ５８は、対象画像の位置を示す。長さデータ５９は、第１座標と第２座標との間の長さを示す。マーカ８ａおよび８ｂの画像を１つの対象画像としてみた場合、長さデータ５９は、対象画像の大きさを示す。
【０１２４】
操作処理用データ６０は、操作状態データ５６から操作対象データ６４を算出する処理過程において算出されるデータである。操作処理用データ６０には、方向処理データ６１、指示座標データ６２、および距離データ６３が含まれる。方向処理データ６１は、上記方向データ５７から操作対象データ６４の姿勢データ６５を算出する処理過程において算出されるデータである。方向処理データ６１は、例えば、予め定められた基準方向と方向データ５７により示される方向との差分（角度差）を示す。また、指示座標データ６２は、上記中点データ５８から算出されるデータであり、モニタ２の画面上の指示位置を表す座標のデータである。指示座標データ６２は、操作対象データ６４の位置データ６６を算出する処理過程において算出されるデータである。また、距離データ６３は、コントローラ７の撮像手段（撮像情報演算部３５）から撮像対象（マーカ８ａおよび８ｂ）までの距離を示すデータである。距離データ６３は、上記長さデータ５９から算出され、位置データ６６を算出する処理過程において算出される。なお、操作処理用データ６０の各データ６１〜６３は、操作対象データ６４を算出する際に必要に応じて用いられるものであり、操作対象データ６４を算出する際に必ず算出される必要はない。
【０１２５】
操作対象データ６４は、画面上またはゲーム空間内における操作対象の位置および姿勢を示すデータである。ここで、操作対象とは、画面に表示されているオブジェクトや、仮想のゲーム空間に登場するオブジェクトの他、仮想の３次元ゲーム空間が構築される場合には、当該３次元ゲーム空間を画面に表示するための仮想カメラであってもよい。また、操作対象データ６４には、姿勢データ６５および位置データ６６が含まれる。姿勢データ６５は、操作対象の姿勢を示すデータである。位置データ６６は、操作対象のゲーム空間における位置、または、画面上における位置を示すデータである。
【０１２６】
次に、ゲーム装置３において行われるゲーム処理の詳細を、図１２〜図１４を用いて説明する。図１２は、ゲーム装置３において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ１０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ１３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリ１３に読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１２に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図１２〜図１４に示すフローチャートにおいては、ゲーム処理のうち、コントローラ７の位置および向きに関するゲーム操作に基づいて行われるゲーム処理について詳細に示し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。
【０１２７】
図１２に示すステップＳ１において、コントローラ７から操作データが取得される。ＣＰＵ１０は、操作データを現在操作データ５０としてメインメモリ１３に記憶する。また、それまでの現在第１座標データ５１および現在第２座標データ５２の内容が、前第１座標データ５４および前第２座標データ５５としてメインメモリ１３に記憶される。なお、この時点では、操作データに含まれる２つの座標データのうち、いずれが現在第１座標データ５１となり、いずれが現在第２座標データ５２となるかが決定されていない。したがって、この時点では、現在第１座標データ５１および現在第２座標データ５２はメインメモリ１３に記憶されておらず、操作データに含まれる２つの座標データは現在第１座標データ５１および現在第２座標データ５２とは別にメインメモリ１３に記憶される。
【０１２８】
また、ステップＳ１で取得される操作データには、マーカ８ａおよび８ｂの撮像画像内における位置を示す座標データの他、コントローラ７の各操作ボタンが押下されたか否かを示すデータ、および、コントローラ７の上下方向および左右方向の加速度を示すデータが含まれている。ここでは、コントローラ７は１フレームより短い時間間隔で操作データを送信し、ＣＰＵ１０は、１フレーム毎に操作データを取得するものとする。したがって、図１２に示すステップＳ１〜Ｓ５の処理ループは、１フレーム毎に繰り返し実行される。
【０１２９】
ステップＳ１の次のステップＳ２において、操作状態算出処理が実行される。操作状態算出処理においては、コントローラ７からの操作データに基づいてコントローラ７の操作状態（コントローラ７の位置や向き等に対応した値）が算出される。以下、図１３および図１４を用いて操作状態算出処理の詳細を説明する。
【０１３０】
図１３は、図１２に示す操作状態算出処理（Ｓ２）の詳細な処理の流れを示すフローチャートである。操作状態算出処理においては、まずステップＳ１１において、コントローラ７の撮像情報演算部３５によって２つのマーカ８ａおよび８ｂが撮像されたか否かが判定される。ステップＳ１１の判定処理は、コントローラ７が上記操作可能範囲内で把持されているか否かを判定するための処理である。撮像情報演算部３５によって２つのマーカ８ａおよび８ｂが撮像されない場合（コントローラ７が操作可能範囲内で把持されていない場合）、コントローラ７からの操作データには座標データが２つ含まれない。すなわち、撮像情報演算部３５によって１つのマーカのみが撮像される場合には、画像処理回路４１は座標データを１つのみ出力するので、コントローラ７からの操作データには座標データが１つのみ含まれる。また、撮像情報演算部３５によってマーカが撮像されない場合には、画像処理回路４１は座標データを出力しないので、コントローラ７からの操作データには座標データが含まれない。したがって、ステップＳ１１の判定は、ステップＳ１で取得された操作データに座標データが２つ含まれるか否かによって行うことができる。ステップＳ１１の判定において、２つのマーカ８ａおよび８ｂが撮像されたと判定される場合、ステップＳ１３の処理が行われる。一方、ステップＳ１１の判定において、２つのマーカ８ａおよび８ｂが撮像されていないと判定される場合、ステップＳ１２の処理が行われる。
【０１３１】
ステップＳ１２において、メインメモリ１３に記憶されている操作状態データ５６の内容がクリアされる。なお、メインメモリ１３に操作状態データ５６が記憶されていない場合、後述する移動処理において操作対象の移動が行われない。つまり、本実施形態では、２つのマーカが撮像されない場合にはゲーム操作が行われない。ステップＳ１２の後、ＣＰＵ１０は操作状態算出処理を終了する。
【０１３２】
一方、ステップＳ１３〜Ｓ１５において、２つの座標データのいずれが第１座標であり、いずれが第２座標であるかが決定される。図１４は、第１座標および第２座標を決定するための処理を説明するための図である。図１４においては、点線で示す点Ｐ１’が前回の第１座標の位置を表し、点Ｐ２’が前回の第２座標の位置を表す。また、実線で示す点Ｐ１および点Ｐ２が、今回取得された２つの座標データにより示される座標の位置を表す。
【０１３３】
図１４において、新たに取得された２つの座標データにより示される座標Ｐ１およびＰ２については、これらの座標Ｐ１およびＰ２のみからでは、いずれが第１座標でいずれが第２座標かを検出することができない。つまり、座標Ｐ１’が移動して座標Ｐ１となったのか、それとも、座標Ｐ２’が移動して座標Ｐ１となったのかを、ゲーム装置３は座標Ｐ１およびＰ２のみからでは判断することができない。なお、第１座標と第２座標とは、いずれの一方がマーカ８ａの画像の位置を示し、他方がマーカ８ｂの画像の位置を示すものであってもよいが、第１座標から第２座標への方向を算出する（後述するステップＳ１６）都合上、第１座標と第２座標とが逆に検出されてしまうと、算出される方向が逆方向になってしまう。したがって、前回の第１座標が今回は第２座標として検出されると、ステップＳ１６において誤った方向が算出されてしまう。
【０１３４】
そこで、本実施形態においては、前回の座標と今回の座標との距離に基づいて、第１座標および第２座標を検出する。すなわち、新たに取得された２つの座標のうち、前回の第１座標に近い方の座標を第１座標とし、他方を第２座標とする。図１４を例にとって説明すると、前回の第１座標Ｐ１’に近い方の座標Ｐ１が第１座標に設定され、他方の座標Ｐ２が第２座標に決定される。なお、ある撮像フレームから次の撮像フレームまでの間においてコントローラ７が９０°よりも大きく回転した場合、前回の第１座標に遠い方の座標が正しい第１座標となる。しかし、座標が取得される（撮像情報演算部３５による撮像が行われる）時間間隔は通常非常に短い（例えば、１／２００秒間隔）ので、１フレームの間にコントローラ７が９０°よりも大きく回転することは実際にはあり得ないと考えられる。そのため、前回の第１座標に近い方の座標を第１座標とすることによって、第１座標を正しく判断することができる。
【０１３５】
具体的には、ステップＳ１３において、前回のフレームにおいて第１座標および第２座標が検出されているか否かが判定される。ステップＳ１３の判定は、メインメモリ１３に操作状態データ５６が記憶されているか否かによって行われる。なお、前回のフレームにおいてステップＳ１２が実行された場合には、メインメモリ１３に操作状態データ５６が記憶されていない。この場合、前回のフレームにおいて第１座標および第２座標の少なくとも一方が取得されていないので、前回の座標を用いて第１座標および第２座標を判断することができない。一方、前回のフレームにおいてステップＳ１３が実行された場合には、メインメモリ１３に操作状態データ５６が記憶されている。この場合、前回の座標を用いて第１座標および第２座標を判断することができる。ステップＳ１３の処理は、前回の座標を用いて第１座標および第２座標を判断するか否かを判定するための処理である。ステップＳ１３の判定において、前回のフレームにおいて第１座標および第２座標が検出されている場合、ステップＳ１４の処理が実行される。一方、前回のフレームにおいて第１座標および第２座標の少なくとも一方が検出されていない場合、ステップＳ１５の処理が実行される。
【０１３６】
ステップＳ１４においては、ステップＳ１で取得された操作データに含まれる２つの座標データにより示される２つの座標のうち、前回の第１座標に近い方が第１座標に設定される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている前第１座標データ５４と上記２つの座標データとを参照して、当該２つの座標データにより示される座標のうちで、前第１座標データ５４により示される座標に近い方の座標を特定する。そして、特定した座標の座標データを現在第１座標データ５１としてメインメモリ１３に記憶する。また、もう一方の座標データを現在第２座標データ５２としてメインメモリ１３に記憶する。
【０１３７】
一方、ステップＳ１５においては、上記２つの座標データにより示される座標のうち、予め定められた所定の条件に従って一方の座標を第１座標に決定する。所定の条件はどのような条件であってもよいが、ＣＰＵ１０は、例えば、ｙ座標値が小さい方の座標を第１座標に決定し、他方の座標を第２座標に決定する。第１座標に決定された座標データは、現在第１座標データ５１としてメインメモリ１３に記憶され、第２座標に決定された座標データは、現在第２座標データ５２としてメインメモリ１３に記憶される。
【０１３８】
ステップＳ１６において、第１座標から第２座標への方向が算出される。具体的には、ＣＰＵ１０は、現在第１座標データ５１および現在第２座標データ５２を参照して、第１座標の位置を始点とし第２座標の位置を終点とするベクトルを算出する。算出されたベクトルのデータは、方向データ５７としてメインメモリ１３に記憶される。算出されたベクトルの向きは、コントローラ７の指示方向に関する回転角度に対応する。つまり、このステップＳ１６によって、コントローラ７の指示方向に関する回転が算出されたこととなる。
【０１３９】
続くステップＳ１７において、第１座標と第２座標との中点の座標が算出される。具体的には、ＣＰＵ１０は、現在第１座標データ５１および現在第２座標データ５２を参照して、当該中点の座標を算出する。算出された中点の座標のデータは、中点データ５８としてメインメモリ１３に記憶される。この中点データ５８は、撮像画像内における対象画像（マーカ８ａおよび８ｂ）の位置を示している。
【０１４０】
続くステップＳ１８において、ステップＳ１７で算出された中点座標が補正される。図１５は、図１３に示すステップＳ１８の処理を説明するための図である。図１５は、コントローラの状態と、その状態にあるときに得られる撮像画像との対応を示している。図１５において、状態Ａおよび状態Ｂはともに、モニタ２の画面の中央がコントローラ７による指示位置となっている状態である。ただし、状態Ａはコントローラ７の上面が上方向を向いている状態（本実施形態では、この状態を基準状態とする。）であり、状態Ｂはコントローラ７の上面が右方向を向いている状態である。ここで、マーカ８ａおよび８ｂは画面の上方に配置されており、マーカ８ａおよび８ｂの配置位置が指示位置（画面の中央の位置）と一致しない。そのため、状態Ａにおいては、撮像画像における対象画像の位置は撮像画像の中心から上方の位置となる。一方、状態Ｂにおいては、撮像画像内における対象画像の位置は撮像画像の中心から左方の位置となる。図１５からわかるように、マーカ８ａおよび８ｂの配置位置が指示位置（画面の中央の位置）と一致しないことから、コントローラ７の指示方向を軸とした回転角度によって、撮像画像内における対象画像の位置が変化してしまう。そのため、対象画像の位置に基づいて指示位置を正確に算出することができない。
【０１４１】
そこで、ステップＳ１８においては、ステップＳ１６で算出された方向に基づいて、ステップＳ１７で算出された中点座標を補正する。具体的には、ステップＳ１７で算出された中点座標を、コントローラ７が基準状態にあるとした場合における中点座標に補正する。より具体的には、ステップＳ１７で算出された中点座標を、ステップＳ１６で算出された方向と基準状態における方向との角度差に応じた量だけ、撮像画像の中心を軸として回転移動させる。図１４の状態Ｂにおいては、ステップＳ１６では、基準状態から左方向に９０°に傾いた方向のベクトルが算出されるので、コントローラ７が基準状態から右方向に９０°に傾いた状態であることがわかる。したがって、ステップＳ１８では、ステップＳ１７で算出された中点座標を、撮像画像の中心を軸として右方向に９０°だけ回転移動させる。以上のステップＳ１８によって補正が行われた中点座標のデータは、中点データ５８としてメインメモリ１３に更新して記憶される。ステップＳ１８による補正が行われた中点座標によって、ゲーム装置３は、コントローラ７による指示位置を算出することができる。
【０１４２】
続くステップＳ１９において、第１座標と第２座標との間の長さが算出される。具体的には、ＣＰＵ１０は、現在第１座標データ５１および現在第２座標データ５２を参照して、当該長さを算出する。算出された長さのデータは、長さデータ５９としてメインメモリ１３に記憶される。なお、この長さは、コントローラ７からマーカ８ａおよび８ｂまでの距離に対応する。以上のステップＳ１９の後、ＣＰＵ１０は操作状態算出処理を終了する。
【０１４３】
図１２の説明に戻り、ステップＳ３において、操作対象を移動させる移動処理が実行される。以下、図１６を用いて移動処理の詳細を説明する。
【０１４４】
図１６は、図１２に示す移動処理（Ｓ３）の詳細な処理の流れを示すフローチャートである。移動処理においては、まずステップＳ２１において、ステップＳ１６で算出された方向に応じて操作対象が回転される。操作対象は、上述したように、仮想のゲーム空間に登場するオブジェクトまたは仮想カメラである。以下、操作対象の回転動作のバリエーションを図１７および図１８を用いて説明する。
【０１４５】
図１７および図１８は、操作対象の回転動作の例を示す図である。図１７および図１８においては、操作対象をゲーム空間に登場するオブジェクトとし、回転動作前のオブジェクトＯｂ’を点線で示し、回転動作後のオブジェクトＯｂを実線で示している。ステップＳ２１で行われる操作対象の回転動作は、操作対象の表示画面またはゲーム空間における位置を変化させる回転動作であってもよいし、操作対象の姿勢を変化させる回転動作であってもよいし、当該位置および姿勢の両方を変化させるものであってもよい。すなわち、操作対象の回転動作は、図１７（ａ）に示すように、操作対象の位置を変化させずに姿勢を変化させる動作であってもよいし、図１７（ｂ）に示すように、操作対象が姿勢（向き）を変化させずに所定の位置Ｐを中心に回転移動する動作であってもよい。また、図１７（ｃ）に示すように、位置および姿勢を両方変化させて所定の位置Ｐを中心に操作対象が回転移動する動作であってもよい。また、仮想の３次元ゲーム空間に操作対象が配置される場合、操作対象は画面に垂直な軸周りの回転動作を行う必要はない。図１８（ａ）は、仮想の３次元ゲーム空間においてオブジェクトが回転する様子を示す図である。図１８（ａ）のようにオブジェクトが回転する場合において、Ｙ軸に平行な方向から見たゲーム空間が画面に表示されるとすると、画面の表示は図１８（ｂ）に示すような表示となる。このように、オブジェクトに回転動作を行わせる処理は、表示上においてオブジェクトを回転させる（表示画面上においてオブジェクトを回転させる）処理の他、ゲーム処理上においてオブジェクトを回転させる（ゲーム空間においてオブジェクトを回転させる）処理であってもよく、オブジェクトが回転していることが表示上においてはわかりにくいものであってもよい。
【０１４６】
上記ステップＳ２１においては、具体的には、ステップＳ１６でメインメモリ１３に記憶された方向データ５７により示されるベクトルの方向に応じて、操作対象の姿勢および／または位置が決められる。より具体的には、当該ベクトルの方向と、当該ベクトルがその方向を向くときに操作対象がとるべき姿勢および／または位置との対応を予め定めておき、当該対応に基づいてベクトルから操作対象の姿勢および／または位置を決定するようにしてもよい。また、前回のフレームにおけるベクトルと今回のフレームにおけるベクトルとのなす角度（角度差）を算出し、角度差に基づいて操作対象の姿勢および／または位置の変化量を決定するようにしてもよい。例えば、上記角度差に比例した角度だけ操作対象を回転させるようにしてもよい。なお、この角度差を示すデータは、操作処理用データ６０の方向処理データ６１に相当する。以上のようにして操作対象の姿勢および／または位置が決定されると、メインメモリ１３に記憶されている操作対象データ６４の内容が更新される。すなわち、ステップＳ２１で決定された姿勢を示すデータが姿勢データ６５としてメインメモリ１３に記憶され、ステップＳ２１で決定された位置を示すデータが位置データ６６としてメインメモリ１３に記憶される。
【０１４７】
なお、他の実施形態においては、ステップＳ１６で算出されたベクトルの向きが所定の範囲内の角度となる場合、操作対象の回転を行わないようにしてもよい。操作対象の回転が入力装置の回転角度に敏感に反応してしまうと、操作性が悪くなることがあるからである。ゲームの種類や状況によっては、操作対象を一定の姿勢で維持することをプレイヤが望む場合も考えられる。このような場合に、操作対象の回転が入力装置の回転角度に敏感に反応してしまうと、操作対象を一定の姿勢に維持することが困難となり、操作性が悪くなる。例えば、当該ベクトルとｙ軸とのなす角が−５°から５°となる範囲では、操作対象の回転を行わないようにしてもよい。これによって、コントローラ７が多少回転しても、コントローラ７を水平状態で維持している場合と同じの操作結果となる。以上のように、コントローラ７の回転操作においていわゆる遊びの部分を設定することによって操作性を向上することができる。
【０１４８】
ステップＳ２１の次のステップＳ２２において、操作対象が平行移動される。すなわち、操作対象の移動後の位置が算出される。なお、上記ステップＳ２１において操作対象の移動後の位置が決定される場合（図１７（ｂ）および図１７（ｃ）に示す回転動作が行われる場合）、ステップＳ２２の処理は省略される。一方、上記ステップＳ２１において操作対象の姿勢のみが決定される場合（図１７（ａ）に示す回転動作が行われる場合）、ステップＳ２２の処理が行われる。
【０１４９】
ステップＳ２２における操作対象の平行移動動作は、ステップＳ１７で算出された中点座標と、ステップＳ１８で算出された距離との少なくとも一方に基づいて決定される。典型的には、ステップＳ１７で算出された中点座標に基づいて、操作対象の画面上の位置（画面上の位置に対応するゲーム空間内の位置）が決定される。また、ステップＳ１８で算出された距離に基づいて、画面に対する奥行き方向に関する操作対象の位置が決定される。
【０１５０】
操作対象の画面上の位置は、中点座標をモニタ２の画面上の座標に変換する関数を用いて算出される。この関数は、ある撮像画像から算出される中点座標の値を、当該撮像画像が撮像される時のコントローラ７によって指し示される画面上の位置（指示位置）に対応する座標に変換するものである。たとえば、予め前記中点座標と、画面に対応した指示位置との両方に所定の基準値が設定され、当該中点座標の前記基準値からの変位を算出し、当該変位の正負を反転させ、所定の割合でスケーリングすることによって、現在の指示位置の基準値からの変位を算出し、現在の指示位置を設定する。この関数によって、中点座標から画面上の指示位置を算出することができる。なお、指示位置を示すデータは、操作処理用データ６０の指示座標データ６２に相当する。また、中点座標をゲーム空間内における位置を表す座標（後述する対応座標）に変換する場合には、上記指示位置を、当該指示位置に対応するゲーム空間内における位置にさらに変換すればよい。なお、指示位置に対応するゲーム空間内における位置とは、画面上における指示位置に表示されるゲーム空間内における位置である。
【０１５１】
また、画面に対する奥行き方向に関する操作対象の位置は、ステップＳ１９で算出された長さに基づいて算出される。具体的には、奥行き方向に関する所定の位置と所定の長さとを予め対応付けておく。そして、ステップＳ１９で算出された長さと当該所定の長さとの差分に応じて操作対象の位置を決定する。具体的には、ステップＳ１９で算出された長さから当該所定の長さを減算した差分が大きくなるほど、より奥側の位置になるように操作対象の位置を決定する。なお、差分が負の値になる場合、所定位置よりも手前の位置になるように操作対象の位置を決定する。なお、ステップＳ１８で算出された長さから、コントローラ７の撮像手段（撮像情報演算部３５）から撮像対象（マーカ８ａおよび８ｂ）までの距離を算出し（後述する図２６参照）、算出した距離に基づいて操作対象の位置を決定するようにしてもよい。なお、当該距離を示すデータは、操作処理用データ６０の距離データ６３に相当する。
【０１５２】
ステップＳ２２で決定された操作対象の位置を示すデータは、位置データ６６としてメインメモリ１３に記憶される。なお、ステップＳ２２においては、操作対象の画面上の位置および奥行き方向の位置の両方を決定する必要はなく、いずれか一方のみを決定するようにしてもよい。例えば、ゲーム空間が２次元平面である場合には、ステップＳ１７で算出された中点座標に基づいて操作対象の画面上の位置のみを決定すればよい。以上のステップＳ２１およびＳ２２の後、ＣＰＵ１０は移動処理を終了する。
【０１５３】
なお、本実施形態における移動処理では、コントローラ７による指示位置に操作対象が常に移動されるように操作対象の移動制御を行った。ここで、他の実施形態においては、コントローラ７に対する所定の操作（例えば、Ｂボタン３２ｄを押下する操作）が行われた場合に、当該操作が行われた時点におけるコントローラ７による指示位置に操作対象が移動されるようにしてもよい。上記実施形態のように、操作対象を移動させる操作と回転させる操作とを同時に行う場合、プレイヤは、操作対象を移動させようとした場合に意図せずにコントローラ７を回転させてしまい、意図しないにもかかわらず操作対象に回転動作を行わせてしまうおそれがある。これに対して、必要なときのみ操作対象に移動操作を行わせることによって、移動操作と回転操作とを同時に行う操作の困難性を低減することができる。
【０１５４】
図１２の説明に戻り、ステップＳ３の次のステップＳ４において、表示処理が実行される。ＣＰＵ１０は、メインメモリ１３に記憶されている操作対象データ６４を参照し、ステップＳ３で決定された姿勢および向きに応じた画像を生成する。そして、生成した画像をモニタ２の画面に表示させる。例えば、操作対象が画面に表示されるオブジェクトである場合、ステップＳ３で決定された姿勢および向きでオブジェクトを画面に表示させる。また例えば、操作対象が仮想カメラである場合、ステップＳ３で決定された姿勢および向きに設定された仮想カメラから見たゲーム空間の画像を生成して当該画像を表示させる。１フレーム毎にステップＳ４の処理が繰り返し実行されることによって、操作対象が回転している様子を表す動画を表示することができる。
【０１５５】
ステップＳ５において、ゲームを終了するか否かが判定される。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件（例えば、プレイヤキャラクタの体力を示すパラメータが０になったこと等）が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等が考えられる。ゲームを終了しないと判定された場合、ステップＳ１の処理が再度実行され、以降、ステップＳ５でゲームを終了すると判定されるまでステップＳ１〜Ｓ５の処理が繰り返し実行される。一方、ゲームを終了すると判定された場合、ＣＰＵ１０は、図１２に示すゲーム処理を終了する。
【０１５６】
以上のように、本実施形態によれば、撮像情報演算部３５によって撮像された撮像画像から、コントローラ７の前後方向を軸とした回転に関するコントローラ７の姿勢に対応した値を算出することができる。そして、当該コントローラ７の姿勢に基づいて操作対象に回転動作を行わせることができる。これによって、プレイヤは、コントローラ７を前後方向の軸周りに回転させるゲーム操作を行うことによって、コントローラ７の回転に応じた回転動作を操作対象に行わせることができる。したがって、ゲーム装置３は、コントローラ７を回転させることによって操作対象に回転移動を行わせるという、新たなゲーム操作をプレイヤに行わせることが可能となる。
【０１５７】
なお、本発明では、コントローラ７の指示方向を軸とした回転を算出することができればよく、ゲーム装置３は、コントローラ７による指示位置や、コントローラ７と撮像対象（各マーカ８ａおよび８ｂ）との距離については検知しなくてもよい。なお、コントローラ７の指示方向を軸とした回転を算出するためには、ゲーム装置３は、少なくとも方向を示す情報を撮像画像から得ることができればよい。したがって、画像処理回路４１は、上記２つの位置の座標値を出力することに代えて、方向を示す情報を出力するようにしてもよい。具体的には、画像処理回路４１は、マーカ８ａの画像の位置からマーカ８ｂの画像の位置への方向（マーカ８ｂの画像の位置からマーカ８ａの画像の位置への方向であってもよい）を示すベクトルのデータを算出するようにしてもよい。さらに、このベクトルは方向を示すベクトルであればよいので、画像処理回路４１は、大きさが一定の単位ベクトルのデータを出力するようにしてもよい。
【０１５８】
また、コントローラ７による指示位置は、撮像画像内における対象画像の位置を算出することによって検知することができる。撮像画像内における対象画像の位置は、上述の実施形態において述べたように中点座標の位置で表すことができる。したがって、コントローラ７による指示位置を操作対象の移動に用いる場合、画像処理回路４１は、撮像画像内における対象画像の位置を示すデータと、方向を示すデータとを出力するようにしてもよい。すなわち、画像処理回路４１は、各マーカ８ａおよび８ｂの画像の位置を示す座標のデータを出力する代わりに、マーカ８ａの画像の位置からマーカ８ｂの画像の位置への方向（マーカ８ｂの画像の位置からマーカ８ａの画像の位置への方向であってもよい）を示すベクトルのデータと、上記中間座標のデータとを出力するようにしてもよい。これによって、ゲーム装置３側で方向データおよび中間データを算出する処理（ステップＳ１６およびＳ１７）を実行する必要がないので、ゲーム装置３の処理負担を軽減することができる。このとき、上記ステップＳ１８における補正処理は、画像処理回路４１によって行われてもよいし、ゲーム装置３側で行われてもよい。
【０１５９】
また、他の実施形態においては、撮像情報演算部３５が画像処理回路４１を含まない構成であってもよい。このとき、撮像情報演算部３５は、撮像画像の画像データをマイコン４２に出力し、当該画像データが操作データとしてコントローラ７からゲーム装置３へ送信されることとなる。このとき、ゲーム装置３は、上記方向データを当該画像データに基づいて算出する。以上のように、撮像画像の画像データから方向データを算出する処理は、その一部の処理が専用の回路（画像処理回路４１）によって行われてもよいし、その全部が当該回路に行われてもよいし、ゲーム装置３によってソフトウェア処理として行われてもよい。
【０１６０】
また、上述した実施形態では、赤外光を出射する２つのマーカ８ａおよび８ｂを撮像対象としたが、他のものを撮像対象にしてもかまわない。撮像対象は、その画像を撮像した場合に方向を検出することができるものであればよく、例えば、３つ以上のマーカを撮像対象としてもよいし、方向を検出することができる１つのマーカを撮像対象としてもよい。なお、１つのマーカを撮像対象とする場合、方向を検出することができる必要があるので、円形のマーカは適切ではなく、直線状の形状等、その形状から所定の２点を特定することができる形状であることが好ましい。このとき、ゲーム装置３は、撮像対象の所定の２点を結ぶ方向を算出することによって、撮像画像内における対象画像の方向を算出することができる。また、マーカは、発光体であることが好ましいが、赤外光を出射するものに限らず、他の波長の光を出射するものであってもよいし白色光を出射するものであってもよい。さらに、モニタ２の画面の枠を撮像対象としてもよいし、撮像対象を画面に表示するようにしてもよい。これによれば、マーカをモニタと別に用意する必要がなく、システムの構成を簡略化することができる。
【０１６１】
なお、他の実施形態においては、コントローラ７が操作可能範囲から外れた場合、加速度センサの出力を用いて操作対象を回転させるようにしてもよい。具体的には、図１３のステップＳ１１の判定結果が否定であった場合、ステップＳ１２に代えて、加速度センサの出力を用いて、コントローラ７の指示方向を軸とした回転状態を検出する処理を実行するようにする。この処理においては、ＣＰＵ１０は、操作データに含まれる加速度を示すデータを参照して、コントローラ７の当該回転状態を検出する。そして、ステップＳ３の移動処理においては、上記処理によって検出された回転状態に応じて操作対象を回転させる。これによって、コントローラ７が操作可能範囲から外れた場合であっても、操作対象を回転させる操作を継続することができる。また、コントローラ７が操作可能範囲から外れ、コントローラ７の姿勢が変わった状態で再び操作可能範囲内に入った場合にも、加速度センサの出力によって、コントローラ７の姿勢が判断できるため、２つのマーカがそれぞれどちらのマーカであるか識別が可能となる。
【０１６２】
上記実施形態において、操作可能範囲から一旦外れたコントローラ７が操作可能範囲に戻った場合を考える。この場合、コントローラ７が表向きの状態（コントローラ７の上面が上方向を向いている状態）で操作可能範囲に戻ったのか、裏向きの状態（コントローラ７の上面が下方向を向いている状態）で操作可能範囲に戻ったのかを、撮像画像のみから判断することはできない。ここで、表向きの状態と裏向きの状態とでは撮像画像における対象画像の位置が一致しないので、裏向きの状態で操作可能範囲に戻った場合、対象画像の位置に基づいて指示位置を正確に算出することができない。
【０１６３】
そのため、他の実施形態においては、操作可能範囲から一旦外れたコントローラ７が操作可能範囲に戻った場合、ゲーム装置３は、加速度センサ３７の検知結果を用いてコントローラ７が裏向きの状態か否かを判断するようにしてもよい。そして、コントローラ７が裏向きの状態と判断される場合、ステップＳ１８の補正処理を実行するようにする。図１３に示すフローチャートに沿って説明すると、ステップＳ１３における判定結果が否定の場合、ＣＰＵ１０は、操作データに含まれる加速度のデータを参照して、コントローラ７が裏向きの状態か否かを判定する。コントローラ７が裏向きの状態であると判定される場合、ステップＳ１８の補正処理において、ステップＳ１６で算出された方向と基準状態における方向との角度差に１８０°を加えて中点座標を回転させる処理を実行する。この処理は、次にコントローラ７が操作可能範囲から外れるまで継続される。以上によって、コントローラ７が裏向きの状態で操作可能範囲に戻った場合でも、コントローラ７による指示位置を正確に算出することができる。
【０１６４】
なお、上記の実施形態は、コントローラ７を用いて指示方向を軸とした回転操作を行って遊ぶ種々のゲームに適用することが可能である。以下では、具体的なゲーム例を実施例として説明する。
【０１６５】
（第１実施例）
図１９は、第１実施例におけるゲーム画面の一例を示す図である。図１９においては、２次元のゲーム空間に、板状オブジェクト７１および７２、ボールオブジェクト７３、および壁オブジェクト７４が配置されている。板状オブジェクト７１は、プレイヤによって操作される操作対象となるオブジェクトである。板状オブジェクト７１は、プレイヤの操作によって、画面の上下左右方向に移動可能であるとともに回転可能である（図１９に示す矢印参照）。板状オブジェクト７２は、ゲーム装置３のＣＰＵ１０によって制御され、板状オブジェクト７１と同様、画面の上下左右方向に移動可能であるとともに回転可能である。以下では、プレイヤによって操作される板状オブジェクト７１をプレイヤオブジェクトと呼び、ＣＰＵ１０によって制御される板状オブジェクト７２を相手オブジェクトと呼ぶ。ボールオブジェクト７３（以下、単に「ボール７３」と記載する）は、画面内の２次元ゲーム空間を移動する。ボール７３は、ゲーム空間内を直線的に移動し、プレイヤオブジェクト７１、相手オブジェクト７２、または壁オブジェクト７４に衝突すると、跳ね返って移動を続ける。壁オブジェクト７４は、画面の上側および下側に固定的に配置される。第１実施例におけるゲームは、対戦型のゲームであり、プレイヤオブジェクト７１を操作してボールオブジェクト７３を打ち合って遊ぶホッケーゲームである。プレイヤは、自陣（画面の右端、すなわち、プレイヤオブジェクト７１の右側）にボール７３が到達しないようにボール７３を打ち返しながら、相手陣（画面の左端、すなわち、相手オブジェクト７２の左側）にボール７３を入れるようにプレイヤオブジェクト７１を操作する。
【０１６６】
次に、コントローラ７を用いたプレイヤオブジェクト７１の操作方法について説明する。プレイヤオブジェクト７１は、コントローラ７による位置指定操作に応じて上下左右方向に移動（平行移動）する。ここで、位置指定操作とは、上記指示位置を指定する操作である。具体的には、コントローラ７の位置や向きを変更することによって、コントローラ７の前端部を上記長手方向に延ばした直線とモニタ２の画面とが交わる位置を変更する操作であり、コントローラ７の位置や向きに対応して指示位置が決定される。プレイヤは、指示位置を画面の上下左右方向に移動させることによって、プレイヤオブジェクト７１を画面の上下左右方向に移動させることが可能である。具体的には、ゲーム装置３は、プレイヤオブジェクト７１が指示位置に配置されるようにプレイヤオブジェクト７１の動作を制御する。
【０１６７】
また、プレイヤオブジェクト７１は、回転操作に応じて、その中心位置を中心とした回転動作を行う。ここで、回転操作とは、指示方向を軸としてコントローラ７を回転させる操作である。図２０は、回転操作によるプレイヤオブジェクト７１の動作を説明するための図である。図２０は、コントローラ７の状態と、当該状態にあるときに得られる撮像画像と、当該状態にあるときのオブジェクトの姿勢との対応を示している。
【０１６８】
図２０に示す状態Ａは、コントローラ７の上面が上方向を向いている状態である。この状態Ａにおける撮像画像Ｉ７において、各マーカ８ａおよび８ｂの画像８ａ’および８ｂ’は水平に配置される（ｙ軸方向の座標が同じ値になる）。このとき、プレイヤオブジェクト７１は、モニタ２の画面の上下方向に水平な姿勢となる。本実施形態ではこの状態Ａを基準状態と呼ぶ。
【０１６９】
また、図２０に示す状態Ｂは、コントローラ７を状態Ａから左回りに所定角度回転させた状態である。この状態Ｂにおける撮像画像Ｉ８において、各画像８ａ’および８ｂ’は、状態Ａから右回りに上記所定角度回転した状態となる。このとき、プレイヤオブジェクト７１は、画面の上下方向から所定角度だけ左回りに回転した姿勢となる。また、図２０に示す状態Ｃは、コントローラ７を状態Ａから右回りに所定角度回転させた状態である。この状態Ｃにおける撮像画像Ｉ９において、各画像８ａ’および８ｂ’は、状態Ａから左回りに上記所定角度回転した状態となる。このとき、プレイヤオブジェクト７１は、画面の上下方向から所定角度だけ右回りに回転した姿勢となる。以上のように、ゲーム装置３は、基準状態からコントローラ７が回転した向きに、回転した角度と同じ角度だけプレイヤオブジェクト７１が回転するように、プレイヤオブジェクト７１の姿勢を制御する。
【０１７０】
次に、第１実施例におけるゲーム処理の詳細を説明する。なお、第１実施例では、図１１に示した操作状態データ５６のうちの長さデータ５９は、ゲーム処理に不要であるのでメインメモリ１３に記憶されない。また、操作処理用データ６０のうちの方向処理データ６１および距離データ６３は、ゲーム処理に不要であるのでメインメモリ１３に記憶されない。また、図１１に示した操作対象データ６４は、操作対象であるプレイヤオブジェクト７１の位置および姿勢を示す。すなわち、姿勢データ６５は、プレイヤオブジェクト７１の姿勢を示す。具体的には、姿勢データ６５は、プレイヤオブジェクトの画面上における向きを表すベクトルを示す。このベクトルは、画面の左上を原点とし、下向きをｙ’軸正方向とし、右向きをｘ’軸正方向とする座標系（ｘ’ｙ’座標系）で表現される。ここでは、姿勢データ６５により示されるベクトルは、長方形のプレイヤオブジェクト７１の長手方向に垂直な向きを表す。また、位置データ６６は、プレイヤオブジェクト７１の画面上における位置を示す。当該位置を表す座標は、上記ｘ’ｙ’座標系の座標である。ここでは、位置データ６６により示される位置は、プレイヤオブジェクト７２の中心位置を表す。
【０１７１】
なお、第１実施例においては、図１１に示したデータの他、各オブジェクトの画像データや、相手オブジェクト７２の位置および姿勢を示すデータ、ボール７３の位置および速度を示すデータ等がメインメモリ１３に記憶される。
【０１７２】
図２１は、第１実施例におけるゲーム処理の流れを示すフローチャートである。なお、図２１において、図１２に示すゲーム処理のステップと同様のステップについては図１２と同じステップ番号を付し、詳細な説明を省略する。図２１に示すフローチャートが開始されるまでの処理は、図１２に示した場合と同様である。
【０１７３】
第１実施例におけるゲーム処理においては、まずステップＳ３１において、初期処理が実行される。初期処理においては、ＣＰＵ１０は、初期状態のゲーム画面を表示させる。すなわち、各オブジェクト７１〜７４が初期位置に配置される。このとき、操作対象データ６４については、プレイヤオブジェクト７１の初期状態の姿勢を示すデータが姿勢データ６５としてメインメモリ１３に記憶され、プレイヤオブジェクト７１の初期状態の位置を示すデータが位置データ６６としてメインメモリ１３に記憶される。ＣＰＵ１０は、各オブジェクト７１〜７４が初期位置に配置されたゲーム画面をモニタ２に表示させる。
【０１７４】
ステップＳ３１の次に上述のステップＳ１の処理が実行され、ステップＳ１の次にステップＳ２の操作状態算出処理が実行される。ここで、第１実施例における操作状態算出処理においては、２つの座標値の間の距離を算出する処理（ステップＳ１９）は実行されない。第１実施例における操作状態算出処理は、ステップＳ１９の処理を除いて図１２と同様である。
【０１７５】
ステップＳ２の次にステップＳ３の移動処理が実行される。第１実施例における移動処理においても図１６と同様、コントローラ７の指示方向を軸とした回転に応じて算出された方向（ステップＳ１６で算出された方向）に応じてプレイヤオブジェクト７１を回転させる処理（ステップＳ２１）が実行される。以下、第１実施例におけるステップＳ２１の具体的な処理を説明する。
【０１７６】
第１実施例におけるステップＳ２１では、撮像画像内における方向（ｘｙ座標系における方向）を示すベクトルが、画面上の方向（ｘ’ｙ’座標系における方向）を示すベクトルに変換される。ここで、撮像画像内における方向を示すベクトルとは、ステップＳ１６で算出されたベクトルであり、方向データ５７により示されるベクトルである。このベクトルを画面上の方向を示すベクトルに変換することによって、プレイヤオブジェクト７１の方向を示すベクトルが算出されることとなる。具体的には、ステップＳ２１において、メインメモリ１３に記憶されている方向データ５７により示されるベクトルの向きが、ｘ軸またはｙ軸に関して反転される。例えば当該ベクトルを（ｖｘ１，ｖｙ１）とすると、ＣＰＵ１０は、反転後のベクトルを（−ｖｘ１，ｖｙ１）として算出する。これによって、ベクトルは、ｙ軸に対して反転されたこととなり、ｘ’ｙ’座標系の方向を示すベクトルに変換されたこととなる。ＣＰＵ１０は、変換されたベクトルを示すデータを姿勢データ６５としてメインメモリ１３に更新して記憶する。
【０１７７】
続くステップＳ２２においては、プレイヤオブジェクト７１が平行移動される。すなわち、プレイヤオブジェクト７１の画面上における位置が算出される。具体的には、ＣＰＵ１０は、まず、上述したステップＳ２２と同様に、中点座標を表すｘｙ座標系の座標値から、画面上の指示位置を表すｘ’ｙ’座標系の座標（指示座標）を算出する。算出された指示座標のデータは、指示座標データ６２としてメインメモリ１３に記憶される。次に、算出された指示座標がプレイヤオブジェクト７１の位置として設定される。ただし、指示座標が、ゲーム内において設定されているプレイヤオブジェクト７１の可動範囲（たとえば、壁オブジェクト７４に挟まれる領域）を超えている場合等には、プレイヤオブジェクト７１の位置は、指示座標位置とは異なった位置、たとえば当該可動範囲の境界付近に設定される。ステップＳ２２で設定されたプレイヤオブジェクト７１の画面上の位置を表す座標（指示座標）のデータは、位置データ６６としてメインメモリ１３に記憶される。
【０１７８】
ステップＳ３の次のステップＳ３２において、相手オブジェクト７２が移動される。ＣＰＵ１０は、予め定められたアルゴリズムに従って相手オブジェクト７２の移動後における位置および姿勢を決定する。続くステップＳ３３において、ボール７３が移動される。ＣＰＵ１０は、プレイヤオブジェクト７１、相手オブジェクト７２、または壁オブジェクト７４にボール７３が衝突したか否かを判断する。衝突した場合、衝突前のボールの移動方向、および、ボールと衝突したオブジェクトとの衝突角度に基づいて、衝突後のボールの移動方向が決定される。衝突していない場合、ボールの移動方向は維持される。なお、衝突時のプレイヤオブジェクト７１または相手オブジェクト７２の移動速度または回転速度に応じてボールの速度を変化させるようにしてもよい。
【０１７９】
ステップＳ３３の次のステップＳ４では、表示処理が実行される。すなわち、ステップＳ３〜Ｓ５で決定された新たな位置および姿勢で、各オブジェクト７１〜７３が画面に表示される。ステップＳ４の処理が１フレーム毎に実行されることによって、各オブジェクト７１〜７３の移動する様子が表現されることとなる。続くステップＳ５においては、ゲーム終了か否かが判定される。第１実施例においては、例えば、ボール７３が自陣または相手陣に達した回数等によってゲーム終了か否かが判定される。
【０１８０】
以上に説明した第１実施例によれば、コントローラ７自体を移動させたり回転させることによって、プレイヤオブジェクト７１を移動させたり回転させたりするという、今までにないゲーム操作でゲームを楽しむことができる。
【０１８１】
なお、第１実施例では、１つのコントローラ７を用いてプレイヤオブジェクト７１のみを操作する場合を例にとって説明したが、コントローラを２つ用いることによって２つのオブジェクト（例えば、図１９に示すオブジェクト７１および７２）を操作するようにしてもよい。これによって、２人のプレイヤがコントローラを１つずつ用いてそれぞれ１つのオブジェクトを操作することによって、対戦プレイが可能となる。
【０１８２】
（第２実施例）
図２２は、第２実施例におけるゲーム画面の一例を示す図である。図２２は、ゲーム中においてプレイヤが鍵を使ってドアを開ける一場面を示している。図２２においては、３次元のゲーム空間が構築され、当該ゲーム空間にドア７５および鍵７６が配置される。ドア７５には鍵穴７５ａが設けられている。プレイヤは、コントローラ７を操作することによって鍵７６を移動させたり回転させたりすることができる。プレイヤは、コントローラ７を用いて３次元のゲーム空間内において鍵７６を移動させる操作を行い、鍵穴７５ａに鍵７６を入れる。さらに、鍵穴７５ａに鍵７６が入った状態で鍵７６を回転させる操作を行うと、ドア７５が開く。なお、図２２に示すＸＹＺ座標系は、３次元のゲーム空間における座標系であり、実際には画面に表示されない。ここでは、Ｚ軸方向は奥行き方向であり、仮想カメラの視線方向と平行な方向である。
【０１８３】
第２実施形態においては、鍵７６は、コントローラ７による上記位置指定操作および奥行き指定操作に応じて、３次元空間内を移動する。ここで、奥行き指定操作とは、コントローラ７からマーカ８ａおよび８ｂまでの距離を変化させる操作である。具体的には、ゲーム装置３は、位置指定操作に応じて、ゲーム空間におけるＸ軸方向およびＹ軸方向に鍵７６を移動させる。また、奥行き指定操作に応じて、ゲーム空間におけるＺ軸方向に鍵７６を移動させる。また、鍵７６は、プレイヤによる上記回転操作に応じて回転する。ここでは、鍵７６は、ゲーム空間におけるＺ軸周りの回転を行う。
【０１８４】
次に、第２実施例におけるゲーム処理の詳細を説明する。なお、第２実施例では、メインメモリ１３に記憶される操作対象データ６４（図１１参照）は、操作対象である鍵７６の位置および姿勢を示す。すなわち、姿勢データ６５は、鍵７６のＺ軸周りの回転に関する姿勢を示す。また、位置データ６６は、３次元のゲーム空間における鍵７６の位置を示す。位置データ６６は３次元の座標データである。なお、第２実施例においては、方向処理データ６１は用いられないのでメインメモリ１３に記憶されない。
【０１８５】
図２３は、第２実施例におけるゲーム処理の流れを示すフローチャートである。なお、図２３において、図１２に示すゲーム処理のステップと同様のステップについては図１２と同じステップ番号を付し、詳細な説明を省略する。図２３に示すフローチャートが開始されるまでの処理は、図１２に示した場合と同様である。
【０１８６】
第２実施例におけるゲーム処理においては、まずステップＳ４１において、初期処理が実行される。初期処理においては、ＣＰＵ１０は、初期状態のゲーム画面を表示させる。すなわち、３次元の仮想のゲーム空間が構築され、ドア７５や鍵７６等が配置される。鍵７６は、予め定められた初期位置に配置される。このとき、操作対象データ６４については、鍵７６の初期状態の姿勢を示すデータが姿勢データ６５としてメインメモリ１３に記憶され、鍵７６の初期状態の位置を示すデータが位置データ６６としてメインメモリ１３に記憶される。ＣＰＵ１０は、ドア７５や鍵７６が配置されたゲーム空間を所定の仮想カメラから見た画像を生成し、生成した画像をモニタ２に表示させる。
【０１８７】
ステップＳ４１の次に上述のステップＳ１の処理が実行され、ステップＳ１の次にステップＳ２の操作状態算出処理が実行される。ステップＳ１およびＳ２の処理は、図１２の場合と同様である。
【０１８８】
ステップＳ２の次にステップＳ３の移動処理が実行される。図２４は、第２実施例における移動処理の詳細を示すフローチャートである。第２実施例における移動処理においては、まずステップＳ４５において、ステップＳ１６で算出された方向に応じて鍵７６の姿勢が算出される。ステップＳ４５は、前述のステップＳ２１に相当する。第２実施例では、コントローラ７の指示方向を軸とした回転に応じて、鍵７６が画面の奥行き方向（Ｚ軸方向）を軸とした回転を行う。つまり、コントローラ７を回転させる向きと画面に表示される鍵７６が回転する向きとは同じ向きになる。したがって、プレイヤは、コントローラ７を回転させる操作を行うことで、鍵７６を実際に回転させているような操作感覚を得ることができる。
【０１８９】
ステップＳ４５の次のステップＳ４６〜Ｓ４９において、鍵７６のゲーム空間内における位置が決定される。ステップＳ４６〜Ｓ４９の処理は、前述のステップＳ２２に相当する。
【０１９０】
ステップＳ４６においては、メインメモリ１３に記憶されている操作状態データ５６の中点データ５８に基づいて、画面上の指示位置が算出される。指示座標の算出方法は、前述のステップＳ２２で説明した関数を用いる方法と同様である。指示位置を示す座標（指示座標）のデータは、指示座標データ６２としてメインメモリ１３に記憶される。
【０１９１】
ステップＳ４７においては、ステップＳ４６で算出された指示位置に基づいて、鍵７６のゲーム空間内におけるＸ軸方向およびＹ軸方向の位置が決定される。より具体的には、指示座標データ６２により示される座標値のｘ成分に基づいて鍵７６のゲーム空間内におけるＸ軸方向の位置が決定され、当該座標値のｙ成分に基づいて鍵７６のゲーム空間内におけるＹ軸方向の位置が決定される。したがって、コントローラ７を移動させる方向と、画面に表示される鍵７６が移動する方向とは同じになる。
【０１９２】
ステップＳ４８においては、ステップＳ１９で算出された長さに基づいて、撮像手段とマーカ８ａおよび８ｂとの距離を算出する処理（距離算出処理）が実行される。以下、距離算出処理の詳細について説明する。
【０１９３】
図２５は、図２４のステップＳ４８の処理の詳細を示すフローチャートである。また、図２６は、図２４のステップＳ４８の処理を説明するための図である。図２６（ａ）は、コントローラ７による撮像画像の一例を示す図であり、図２６（ｂ）は、当該撮像画像が撮像された時のマーカとコントローラ７との位置関係を示す図である。なお、前述のステップＳ１９において、撮像画像内での２点間の長さｍｉが算出される。
【０１９４】
距離算出処理において、まず、ステップＳ４８１において、マーカ８ａおよび８ｂの設置位置に対する撮像素子４０の撮像可能範囲の幅ｗ（図２６（ｂ）参照）が算出される。具体的には、ＣＰＵ１０は、次の式から幅ｗを算出する。
ｗ＝ｗｉ×ｍ／ｍｉ
上式において、ｍは、マーカ８ａおよび８ｂの設置間隔（例えば、３０ｃｍ）であり、固定値である。また、ｗｉは、幅ｗに対応する撮像素子４０の撮像画像の幅ｗｉであり、固定値である。これら設置間隔ｍおよび幅ｗｉは、いずれも固定値であるため、予めゲーム装置３内の記憶手段（図示せず）に格納される。なお、設置間隔ｍについては、プレイヤの設置環境に応じて任意の間隔でマーカ８ａおよび８ｂを設置してもかまわない。この場合、マーカ８ａおよび８ｂを設置した間隔を設置間隔ｍとしてプレイヤが入力するようにすればよい。
【０１９５】
次に、ステップＳ８４２において、幅ｗおよび撮像素子４０の視野角θ２に基づいて、マーカ８ａおよび８ｂと撮像素子４０（コントローラ７）との距離ｄが算出される。具体的には、ＣＰＵ１０は、次の式から距離ｄを算出する。
ｔａｎ（θ２／２）＝（ｗ／２）／ｄ＝ｗ／２ｄ
なお、視野角θ２は固定値であるため、予めゲーム装置３内の記憶手段（図示せず）に格納される。上式によって算出された距離ｄのデータは、距離データ６３としてメインメモリ１３に記憶される。ステップＳ８４２の後、ＣＰＵ１０は距離算出処理を終了する。
【０１９６】
図２４の説明に戻り、ステップＳ４９において、ステップＳ４８で算出された距離データ６３に基づいて、鍵７６のゲーム空間内におけるＺ軸方向の位置が決定される。例えば、距離データ６３により示される距離の値が大きいほど、鍵７６が画面の手前側に位置するように、鍵７６のＺ軸方向に関する位置が決定される。したがって、画面の上下左右方向と同様画面の奥行き方向に関しても、コントローラを移動させる方向と、鍵７６が移動する方向とはほぼ同じになる。以上より、プレイヤは、コントローラ７を移動させる操作を行うことで、鍵７６を実際に移動させているような操作感覚を得ることができる。以上のステップＳ４６〜Ｓ４９の処理によって決定された鍵７６の位置のデータは、位置データ６６としてメインメモリ１３に記憶される。ステップ４９の処理の後、ＣＰＵ１０は移動処理を終了する。
【０１９７】
なお、ステップＳ３の移動処理において決定された鍵７６の位置が壁やドア７５の内部になる場合、鍵７６の位置データ６６は更新されず、ステップＳ３の処理前の内容が維持される。つまり、鍵７６が壁やドア７５に衝突する場合、鍵７６は移動されない。また、鍵７６をＺ軸周りの回転に関して所定の向きにした状態でなければ、鍵７６は鍵穴７５ａを通過しないこととする。
【０１９８】
ステップＳ３の次のステップＳ４では、表示処理が実行される。すなわち、ステップＳ３で決定された新たな位置および姿勢で、鍵７６が画面に表示される。ステップＳ４の処理が１フレーム毎に実行されることによって、コントローラ７の移動および回転操作に応じて鍵７６が移動および回転する様子が表現されることとなる。
【０１９９】
ステップＳ４の次のステップＳ４２においては、鍵７６が鍵穴７５ａに位置しているか否かが判定される。この判定は、メインメモリ１３に記憶されている操作対象データ６４の位置データ６６と、鍵穴７５ａの位置を示すデータ（メインメモリ１３に記憶されている）とを参照することによって行うことができる。ステップＳ４２の判定において、鍵７６が鍵穴７５ａに位置していると判定される場合、ステップＳ４３の処理が実行される。一方、鍵７６が鍵穴７５ａに位置していないと判定される場合、ステップＳ１の処理が再度実行される。
【０２００】
ステップＳ４３においては、鍵７６がＺ軸を軸とした回転に関して、予め定められた所定の姿勢となっているか否かが判定される。この判定は、メインメモリ１３に記憶されている操作対象データ６４の姿勢データ６５を参照することによって行うことができる。鍵７６が所定の姿勢となっていると判定される場合、ステップＳ４４の処理が実行される。一方、鍵７６が所定の姿勢となっていないと判定される場合、ステップＳ１の処理が再度実行される。
【０２０１】
ステップＳ４４においては、ドア７５が開く様子が画面に表示される。ステップＳ４４の後の処理は本発明とは直接関連しないので説明を省略するが、この後、プレイヤキャラクタがドア７５の向こう側に移動することができたり、ドア７５の向こう側の様子が画面に表示されたりする。以上で、第２実施例におけるゲーム処理の説明を終了する。
【０２０２】
以上のように、第２実施例によれば、コントローラ７を移動させたり回転させたりする方向と、操作対象を移動させたり回転させたりする方向とを一致させる。これによって、プレイヤは、操作対象を実際に移動させたり回転させたりするような、今までにない操作感覚を得ることができる。
【０２０３】
また、上記実施例では、撮像対象（マーカ）から撮像手段（撮像素子４０）までの距離を、撮像された撮像対象の画像の大きさ（２つのマーカ画像８ａ‘および８ｂ’の長さ）に基づいて算出した。ここで、他の実施例においては、撮像手段が受光した光の強度を検出可能である場合には、撮像手段が受光したマーカからの光の強度に基づいて当該距離を算出するようにしてもよい。
【０２０４】
（第３実施例）
次に、第３実施例におけるゲーム処理を説明する。第３実施例においては、３次元の仮想のゲーム空間が構築され、当該ゲーム空間の画像を生成するために仮想カメラが設定される。第３実施例においては、当該仮想カメラを操作対象とする。なお、本実施例においては仮想カメラを移動させる処理について主に説明し、その他のゲーム処理については説明を省略する。
【０２０５】
図２７は、第３実施例におけるゲーム空間の一例を示す図である。図２７は、操作対象である仮想カメラ８１が回転移動する様子を示している。図２７において、仮想カメラ８１は移動前の位置および向きを示し、仮想カメラ８１’は移動後の位置および向きを示している。図２７においては、ゲーム空間内の位置を表すための座標系（ＸＹＺ座標系）が設定される。この座標系は、地面８３とＸ軸およびＺ軸とが平行となり、Ｙ軸が地面８３に垂直となるように設定される。ここで、仮想カメラ８１は、上記回転操作に応じて、プレイヤによって指定されたゲーム空間内の所定点を中心として回転移動する。具体的には、仮想カメラ８１は、Ｙ座標値を変化させずにＸＺ平面と平行に回転移動を行う。また、回転移動を行っても仮想カメラ８１の注視点が変化しないように仮想カメラ８１の向きが制御されるものとする。なお、第３実施例においては、仮想カメラ８１は回転移動のみを行うものとする。
【０２０６】
次に、第３実施例におけるゲーム処理の詳細を説明する。図２８は、第３実施例においてメインメモリ１３に記憶される主なデータを示す図である。なお、第３実施例では、図１１に示した操作状態データ５６のうちの長さデータ５９は、ゲーム処理に不要であるのでメインメモリ１３に記憶されない。また、操作処理用データ６０の距離データ６３は、ゲーム処理に不要であるのでメインメモリ１３に記憶されない。また、図１１に示した操作対象データ６４は、操作対象である仮想カメラの位置および姿勢を示す。すなわち、姿勢データ６５は仮想カメラの姿勢を示し、位置データは仮想カメラのゲーム空間内における位置を示す。
【０２０７】
第３実施例においては、図１１に示したデータに加えて、対応座標データ６７がメインメモリ１３に記憶される。対応座標データ６７は、指示位置に対応するゲーム空間内での位置を表す３次元座標を示すデータである。また、第３実施例においては、図１１に示したデータに加えて、基準方向を示す基準方向データ６８がメインメモリ１３に記憶される。ここで、基準方向は、撮像画像から得られる方向に関して基準となる方向を示す。基準方向は、仮想カメラの回転量を決定する際に用いられ、仮想カメラの回転量は、基準方向と現在の方向（方向データ５７により示される方向）との角度差に基づいて決定される。なお、第３実施例においては、基準方向はゲーム開始時にプレイヤによって設定されるものとする。
【０２０８】
図２９は、第３実施例におけるゲーム処理の流れを示すフローチャートである。なお、図２９において、図１２に示すゲーム処理のステップと同様のステップについては図１２と同じステップ番号を付し、詳細な説明を省略する。図２９に示すフローチャートが開始されるまでの処理は、図１２に示した場合と同様である。
【０２０９】
第３実施例においては、まず、ステップＳ５０において、３次元の仮想ゲーム空間が構築される。すなわち、ＣＰＵ１０は、３次元の仮想ゲーム空間を構築し、当該ゲーム空間内にオブジェクトを配置する。また、当該ゲーム空間内における所定位置に所定の視線方向で仮想カメラを設定する。なお、所定位置および所定の視線方向は、予め定められている。
【０２１０】
続くステップＳ５１において、基準方向を設定する処理が実行される。具体的には、ＣＰＵ１０は、基準方向を設定する旨の操作を行うことを表示等によりプレイヤに促す。これに応じて、プレイヤは、指示方向を軸とした回転に関して任意の姿勢でコントローラ７を把持し、基準方向を決定する操作（例えば、Ａボタンを押下する操作）を行う。当該操作が行われると、ＣＰＵ１０は、当該操作が行われた時点において撮像された撮像画像に基づいて、ステップＳ１６と同様の処理によって方向を算出する。算出された方向を示すベクトルのデータは、基準方向データ６８としてメインメモリ１３に記憶される。第３実施例においては、以上のステップＳ５１の処理が、仮想カメラを移動させる処理（ステップＳ１〜Ｓ３）の前に実行される。
【０２１１】
ステップＳ５１の次に上述のステップＳ１の処理が実行され、ステップＳ１の次にステップＳ２の操作状態算出処理が実行される。ここで、第３実施例における操作状態算出処理においては、２つの座標値の間の距離を算出する処理（ステップＳ１９）は実行されない。第３実施例における操作状態算出処理は、ステップＳ１９の処理を除いて図１２と同様である。
【０２１２】
ステップＳ２の次にステップＳ３の移動処理が実行される。図３０は、第３実施例における移動処理の詳細を示す図である。第３実施例における移動処理においては、まず、ステップＳ５２およびＳ５３において、仮想カメラを回転させる際の中心点の位置が決定される。まず、ステップＳ５２において、画面上の指示位置が算出される。指示位置（指示座標）の算出方法は、前述のステップＳ４６やステップＳ２２と同様である。続くステップＳ５３において、指示座標に対応する対応座標が算出される。本実施例では、この対応座標の位置が、仮想カメラを回転させる際の中心位置となる。対応座標の位置は、具体的には、画面上における指示位置に表示されている対象（地面等）がゲーム空間内において存在している３次元位置であってもよいし、画面上における指示位置と、予め定められた奥行き方向（仮想カメラの視線方向）とによって設定される３次元位置であってもよい。ステップＳ５３で算出された対応座標のデータは、対応座標データ６７としてメインメモリ１３に記憶される。ステップＳ５２およびＳ５３の処理は、前述したステップＳ２２に相当する。
【０２１３】
ステップＳ５４〜Ｓ５６において、コントローラ７の指示方向を軸とした回転に応じて算出された方向（ステップＳ１６で算出された方向）に応じて仮想カメラを回転させる処理が実行される。ステップＳ５４〜Ｓ５６の処理は、図１２のステップＳ２１の処理に相当する。以下、第３実施例におけるステップＳ２１の具体的な処理を説明する。
【０２１４】
まずステップＳ５４において、ＣＰＵ１０は、ステップＳ１６で算出された方向と基準方向とのなす角度（角度差）を算出する。具体的には、メインメモリ１３に記憶されている基準方向データ６７により示されるベクトルと、操作状態データ５６の方向データ５７により示されるベクトルとのなす角度を算出する。この角度θ’は、例えば−１８０°＜θ’≦１８０の範囲で表現される。算出された角度差のデータは、方向処理データ６１としてメインメモリ１３に記憶される。
【０２１５】
続くステップＳ５５において、ＣＰＵ１０は、ステップＳ５４で算出された角度に応じて仮想カメラの回転量（図２７に示す回転角度θ）を決定する。例えば、算出された角度の大きさをそのまま仮想カメラの回転量としてもよいし、算出された角度の大きさを定数倍して仮想カメラの回転量としてもよい。なお、上記角度が所定値以上となった場合のみ、操作対象を回転させるようにしてもよい。また、ＣＰＵ１０は、算出された角度が正となる場合と、算出された角度が負となる場合とで仮想カメラを回転させる方向を変化させる。
【０２１６】
さらに、ステップＳ５６において、回転後の仮想カメラの位置および姿勢が算出される。具体的には、ＣＰＵ１０は、ステップＳ５２で決定された中心点の位置（対応座標の位置）を中心としてステップＳ５５で決定された回転量だけ回転させたときの仮想カメラの位置を算出する。なお、上述したように、仮想カメラの向きは、回転前から注視点の位置が変わらないように制御される。ステップＳ５６で算出された仮想カメラの位置を示すデータは、位置データ６６としてメインメモリ１３に記憶され、ステップＳ５６で算出された仮想カメラの姿勢を示すデータは、姿勢データ６５としてメインメモリ１３に記憶される。以上のステップＳ５６の処理の後、ＣＰＵ１０は移動処理を終了する。
【０２１７】
ステップＳ４においては、ステップＳ３で移動された仮想カメラの位置および姿勢（視線方向）を用いて表示処理が実行される。すなわち、移動後における仮想カメラから見たゲーム空間の画像が生成され、生成された画像が画面に表示される。なお、ステップＳ５の処理は図１２と同様である。
【０２１８】
以上の第３実施例に示したように、操作対象の回転動作は、撮像画像から得られる方向（ステップＳ１６で算出される方向）をそのまま用いて行われるだけでなく、当該方向と基準方向との角度差を用いて行われてもよい。また、回転を行う中心は、プレイヤが上記位置指定操作を行うことによって指定されるようにしてもよい。なお、他の実施例においては、仮想カメラの注視点を回転の中心点としてもよい。さらに、前記指示座標の対応座標が注視点となるようにカメラの向きを移動し、さらに当該注視点を回転の中心として、注視点を固定したままカメラを回転移動させるようにすれば、注視点とカメラの向きの両方を同時に設定することができる。また、仮想カメラの位置を変化させずに、上記角度差に応じて仮想カメラの姿勢（向き）のみを変化させるようにしてもよい。
【０２１９】
また、上記第３実施例においては、仮想カメラを上記角度差に基づいて回転させたが、ゲーム空間に登場するオブジェクトを操作対象とする場合でも、操作対象を角度差に基づいて回転させることができる。例えば、上記第１および第２実施例で示したオブジェクト（プレイヤオブジェクト７１および鍵７６）についても、角度差に基づいて回転させるようにしてもよい。また、仮想カメラは、角度差に代えて、撮像画像から得られる方向自体を演算に利用して回転させるようにしてもよい。
【０２２０】
また、他の実施例においては、ゲーム空間に登場するオブジェクトを操作対象とし、上記対応座標の位置にオブジェクトを平行移動させるとともに、上記方向データ５７により示される方向に応じて当該オブジェクトを回転させるようにしてもよい。
【０２２１】
また、第３実施例においては、方向データ５７により示される方向と基準方向との差を、角度差として算出したが、方向データ５７により示されるベクトルと基準方向を示すベクトルとの差分をベクトルとして算出してもよい。そして、当該差分を示すベクトルの所定成分の値を角度差の代わりに用いてもよい。このようにすることで、コントローラの傾きに応じた制御を可能としつつ、角度を算出する処理コストを軽減することができる。
【０２２２】
（第４実施例）
図３１は、第４実施例におけるゲーム画面の一例を示す図である。図３１は、ゲーム中においてプレイヤがゲーム空間内のドアを開ける一場面を示している。図３１においては、３次元のゲーム空間が構築され、当該ゲーム空間に２つのドア８５および８６が配置される。ドア８５にはドアノブ８５ａが設けられ、ドア８６にはドアノブ８６ａが設けられている。ここでは、２つのドアノブ８５ａおよび８６ａが操作対象となり得るオブジェクトである。
【０２２３】
また、画面にはプレイヤによって移動可能なカーソル８７が表示されている。プレイヤは、コントローラ７を操作することによってカーソル８７を移動させる。カーソル８７は、上記指示位置に表示される。プレイヤは、カーソル８７を用いて操作対象とするオブジェクト（ドアノブ８５ａまたは８６ａ）を指定することができる。本実施例では、カーソル８７によって指定されているオブジェクトが回転操作の操作対象となる。
【０２２４】
次に、第４実施例におけるゲーム処理の詳細を説明する。なお、第４実施例では、操作対象データ６４は、ゲーム処理開始時点では記憶されていない。また、操作対象となり得るドアノブは、回転のみが可能であり移動することはないので、第４実施例においては操作対象データ６４には位置データ６６が含まれない。また、第４実施例では、図１１に示した操作状態データ５６のうちの長さデータ５９は、ゲーム処理に不要であるのでメインメモリ１３に記憶されない。また、図１１に示した操作処理用データ６０のうちの方向処理データ６１および距離データ６３は、ゲーム処理に不要であるのでメインメモリ１３に記憶されない。
【０２２５】
図３２は、第４実施例におけるゲーム処理の流れを示すフローチャートである。なお、図３２において、図１２に示すゲーム処理のステップと同様のステップについては図１２と同じステップ番号を付し、詳細な説明を省略する。図３２に示すフローチャートが開始されるまでの処理は、図１２に示した場合と同様である。
【０２２６】
第４実施例におけるゲーム処理においては、まずステップＳ６１において、初期処理が実行される。初期処理においては、ＣＰＵ１０は、初期状態のゲーム画面を表示させる。すなわち、３次元の仮想のゲーム空間が構築され、ドア８５および８６等が配置される。また、画面上の所定の位置にカーソル８７が表示される。
【０２２７】
ステップＳ６１の次に上述のステップＳ１の処理が実行され、ステップＳ１の次にステップＳ２の操作状態算出処理が実行される。ここで、第４実施例における操作状態算出処理においては、２つの座標値の間の長さを算出する処理（ステップＳ１９）は実行されない。第４実施例における操作状態算出処理は、ステップＳ１９の処理を除いて図１２と同様である。
【０２２８】
第４実施例においては、ステップＳ２の次にステップＳ６２の処理が実行される。ステップＳ６２においては、指示位置が算出される。ステップＳ６２の処理は前述のステップＳ４６と同様である。指示位置を示す座標（指示座標）のデータは、指示座標データ６２としてメインメモリ１３に記憶される。続くステップＳ６３において、指示座標に従ってカーソル８７の位置が更新される。つまり、カーソル８７の位置は、当該指示座標の位置に決定される。
【０２２９】
ステップＳ６４においては、ステップＳ６３で位置が更新されたカーソル８７が操作対象となりうるオブジェクト（ドアノブ８５ａまたは８６ｂ）を指定しているか否かが判定される。すなわち、カーソル８７により指し示される位置がドアノブ８５ａまたは８６ａの表示位置となっているか否か（カーソルの位置がドアノブ８５ａまたは８６ａの表示位置の所定範囲内にあるか否か）が判定される。カーソル８７がオブジェクトを指定している場合、ステップＳ６５の処理が実行される。一方、カーソル８７がオブジェクトを指定していない場合、ステップＳ６５およびＳ３の処理がスキップされてステップＳ４の処理が実行される。
【０２３０】
ステップＳ６５においては、ステップＳ６４でカーソル８７によって指定されていると判定されたオブジェクトが操作対象に設定される。具体的には、当該オブジェクトの姿勢を示すデータが操作対象データ６４の姿勢データ６５としてメインメモリ１３に記憶される。
【０２３１】
ステップＳ３においては移動処理が実行される。第４実施例における移動処理も上記実施例と同様、コントローラ７の指示方向を軸とした回転に応じて算出された方向（ステップＳ１６で算出された方向）に応じて操作対象を回転させる処理（ステップＳ２１）が実行される。ただし、第４実施例では、その姿勢を示すデータが操作対象データ６４としてメインメモリ１３に記憶されているオブジェクト、すなわち、カーソル８７によって指定されているドアノブを操作対象として行われる。
【０２３２】
ステップＳ４においては、表示処理が実行される。具体的には、ステップＳ６３で更新された位置にカーソル８７が表示されるとともに、ステップＳ３が実行されている場合はドアノブ８５ａまたは８６ａが回転されている様子が表示される。続くステップＳ６６において、ドアノブ８５ａおよび８６ａのうちのいずれかのドアノブが予め定められた所定の姿勢となっているか否かが判定される。この判定処理は、第２実施例のステップＳ４３と同様の処理である。いずれか一方のドアノブが所定の姿勢となっていると判定される場合、ステップＳ６７の処理が実行される。一方、２つのドアノブがともに所定の姿勢となっていないと判定される場合、ステップＳ１の処理が再度実行される。ステップＳ６７においては、所定の姿勢となったドアノブが設けられたドアが開く様子が画面に表示される。
【０２３３】
以上の第４実施例に示したように、プレイヤによる回転操作の操作対象は、予め定められているオブジェクトに限らず、プレイヤが指定したオブジェクトを操作対象とするようにしてもよい。また、コントローラ７による指示位置を用いて、操作対象となるオブジェクトを指定するようにしてもよい。
【０２３４】
なお、上記第１実施例では、コントローラ７によって画面上の位置を指定してカーソルを移動させることによって、操作対象となるドアノブを選択するようにした。ここで、他の実施例では、画面上の位置を指定する方法は、どのような方法であってもよい。例えば、コントローラ７に設けられた十字キーによってカーソルを移動させるようにしてもよい。
【０２３５】
なお、上記第４実施例では、カーソル８７は、画面上に設定され、画面の２次元平面を移動するものであった。ここで、他の実施例では、カーソル８７を、３次元のゲーム空間内を移動させるようにしてもよい。カーソル８７については、例えば、上記第３実施例で示した仮想カメラと同様の方法で３次元のゲーム空間内を移動させることが可能である。そして、カーソル８７のＺ軸方向に関する位置と、ドアノブのＺ軸方向に関する位置とが一致する（または、２つの位置の差が所定距離以内となる）場合にのみ、ドアノブを回転させることができるようにしてもよい。つまり、ＣＰＵ１０は、Ｚ軸方向の座標位置に操作対象となりうるオブジェクト（ドアノブ）のいずれかが存在するか否かを判別し、オブジェクトが存在すると判別された場合に、当該オブジェクトを操作対象として設定する。
【０２３６】
（その他の実施例）
なお、本発明は、上記実施例に示したゲーム例の他にも種々のゲームにおいて用いることができる。例えば、レースゲームに本発明を適用することも可能である。具体的には、プレイヤが操作するレースカーを操作対象とし、コントローラ７の指示方向を軸とした回転に応じて、上方向から見た場合のレースカーの向きを回転によって変化させる。すなわち、レースカーの進行方向を変化させる。これによって、レースカーは、図１７（ａ）または（ｃ）に示したような回転移動を行うこととなる。したがって、ユーザから見て、コントローラ７を実際の車のハンドルのような回転方向で回転させることでレースカーの進行方向を変えることができ、直感的なレースカーの操作をすることができる。
【０２３７】
なお、以上においては、本発明に係る情報処理システムおよびプログラムを、ゲームシステムおよびゲームプログラムとして実現する場合を例として説明したが、本発明は、ゲーム分野に限らず、撮像画像を用いて入力装置自体の位置や向きを検知する入力装置を用いる情報処理システムに適用することが可能である。
【産業上の利用可能性】
【０２３８】
本発明は、ユーザが手に持って使用する入力装置を使用する情報処理システムにおいて、従来にはない新たな操作を可能とすること等を目的として、例えばゲーム装置やゲームプログラムに利用することが可能である。
【符号の説明】
【０２３９】
１  ゲームシステム
２  モニタ
３  ゲーム装置
４  光ディスク
５  メモリカード
７  コントローラ
８ａ，８ｂ  マーカ
１０  ＣＰＵ
１３  メインメモリ
３２  操作部
３５  撮像情報演算部
３６  通信部
３７  加速度センサ
４０  撮像素子
７１  プレイヤオブジェクト
７６  鍵
８１  仮想カメラ
８５ａ，８６ａ  ドアノブ
【図１】
2011177596.tif 000003
【図２】
2011177596.tif 000004
【図３】
2011177596.tif 000005
【図４】
2011177596.tif 000006
【図５】
2011177596.tif 000007
【図６】
2011177596.tif 000008
【図７】
2011177596.tif 000009
【図８】
2011177596.tif 000010
【図９】
2011177596.tif 000011
【図１０】
2011177596.tif 000012
【図１１】
2011177596.tif 000013
【図１２】
2011177596.tif 000014
【図１３】
2011177596.tif 000015
【図１４】
2011177596.tif 000016
【図１５】
2011177596.tif 000017
【図１６】
2011177596.tif 000018
【図１７】
2011177596.tif 000019
【図１８】
2011177596.tif 000020
【図１９】
2011177596.tif 000021
【図２０】
2011177596.tif 000022
【図２１】
2011177596.tif 000023
【図２２】
2011177596.tif 000024
【図２３】
2011177596.tif 000025
【図２４】
2011177596.tif 000026
【図２５】
2011177596.tif 000027
【図２６】
2011177596.tif 000028
【図２７】
2011177596.tif 000029
【図２８】
2011177596.tif 000030
【図２９】
2011177596.tif 000031
【図３０】
2011177596.tif 000032
【図３１】
2011177596.tif 000033
【図３２】
2011177596.tif 000034
【手続補正書】
【提出日】平成23年7月7日(2011.7.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
撮像対象を撮像するための撮像手段を備える操作装置から操作データを受け取り、当該操作データを用いて所定の操作対象に演算処理を加えた後の仮想空間を表示装置に表示させる、情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記操作装置の前記撮像手段で撮像された撮像画像を操作データとして取得する取得ステップと、
前記撮像画像における前記撮像対象の位置を用いて、２次元ベクトルを算出するベクトル算出ステップと、
前記取得された撮像画像における前記撮像対象の画像の位置に対応させて、前記表示装置の表示領域上の位置に対応した所定の指示座標を算出する指示座標算出ステップと、
算出された前記２次元ベクトルの値に応じて、前記操作対象を回転させる第１回転ステップと、
前記第１回転ステップにおける前記操作対象の回転に応じて変更される前記仮想空間を前記表示領域に表示させる表示ステップとを前記コンピュータに実行させ、
前記ベクトル算出ステップは、
前記撮像画像に対応した座標系において、前記撮像対象の画像のうちの所定の２点の座標を算出する第１算出ステップと、
前記所定の２点の座標を結ぶ２次元ベクトルを算出する第２算出ステップとを含み、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記指示座標とを用いた演算によって操作対象が回転される、情報処理プログラム。
【請求項２】
撮像対象を撮像するための撮像手段と、当該撮像手段によって撮像された撮像画像に含まれる撮像対象の画像のうちの所定の２点の座標を算出する第１算出手段とを備える操作装置から操作データを受け取り、当該操作データを用いて所定の操作対象に演算処理を加えた後の仮想空間を表示装置に表示させる、情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記所定の２点の座標を操作データとして取得する取得ステップと、
前記２点の座標を結ぶ２次元ベクトルを算出するベクトル算出ステップと、
前記２点の座標の中点座標に対応させて、前記表示領域上の位置に対応した所定の指示座標を算出する指示座標算出ステップと、
算出された前記２次元ベクトルの値に応じて、前記操作対象を回転させる第１回転ステップと、
前記第１回転ステップにおける前記操作対象の回転に応じて変更される前記仮想空間を前記表示装置の表示領域に表示させる表示ステップとを前記コンピュータに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記指示座標とを用いた演算によって操作対象が回転される、情報処理プログラム。
【請求項３】
撮像対象を撮像するための撮像手段と、当該撮像手段によって撮像された撮像画像における当該撮像対象の位置を用いて２次元ベクトルを算出するベクトル算出手段とを備える操作装置から操作データを受け取り、当該操作データを用いて所定の操作対象に演算処理を加えた後の仮想空間を表示装置に表示させる、情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記２次元ベクトルと、前記撮像対象の画像位置に対応した１点の座標とを操作データとして取得する取得ステップと、
前記１点の座標に対応させて、前記表示領域上の位置に対応した所定の指示座標を算出する指示座標算出ステップと、
取得された前記２次元ベクトルの値に応じて、前記操作対象を回転させる第１回転ステップと、
前記第１回転ステップにおける前記操作対象の回転に応じて変更される前記仮想空間を前記表示装置の表示領域に表示させる表示ステップとを前記コンピュータに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記指示座標とを用いた演算によって操作対象が回転される、情報処理プログラム。
【請求項４】
前記仮想空間は仮想的な３次元空間であって、
前記指示座標算出ステップで算出された指示座標に対応する前記仮想空間内での３次元座標を算出して、当該３次元座標を３次元指示座標として設定する３次元指示座標設定ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記３次元指示座標とを用いた演算によって前記３次元空間において前記操作対象を回転させる、請求項１ないし請求項３のいずれかに記載の情報処理プログラム。
【請求項５】
前記仮想空間内に前記操作対象となるオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記３次元指示座標設定ステップにおいて算出された３次元指示座標に前記オブジェクトを移動させるオブジェクト移動ステップと、
前記オブジェクトを回転させるステップとを含む、請求項４に記載の情報処理プログラム。
【請求項６】
前記仮想空間内に前記操作対象となるオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記３次元指示座標設定ステップにおいて算出された３次元座標を回転の中心座標として設定する中心座標設定ステップと、
前記中心座標を中心として前記３次元空間において前記オブジェクトを回転させるステップとを含む、請求項４に記載の情報処理プログラム。
【請求項７】
前記仮想空間は仮想的な３次元空間であって、
当該仮想空間内における所定位置に所定方向を向く仮想カメラを設定する仮想カメラ設定ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記３次元指示座標設定ステップにおいて算出された座標を回転の中心として前記仮想カメラを前記操作対象として回転させる、請求項４に記載の情報処理プログラム。
【請求項８】
前記仮想空間内に少なくとも１つのオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記仮想空間に配置されるオブジェクトを前記操作対象として回転させる、請求項１ないし請求項３のいずれかに記載の情報処理プログラム。
【請求項９】
前記仮想空間内に少なくとも１つのオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記指示座標に対応した前記表示領域上の位置に、前記オブジェクトのいずれかが表示されるか否か判別する判別ステップと、
前記指示座標に対応した位置に前記オブジェクトが表示される場合には、当該オブジェクトを前記操作対象として設定する操作対象設定ステップと、
前記操作対象設定ステップにおいて設定されたオブジェクトを回転させるステップとを含む、請求項１ないし３のいずれかに記載の情報処理プログラム。
【請求項１０】
前記仮想空間内に前記操作対象となるオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記指示座標算出ステップにおいて算出された位置に表示されるように前記オブジェクトを移動させるオブジェクト移動ステップと、
前記オブジェクトを回転させるステップとを含む、請求項１ないし３のいずれかに記載の情報処理プログラム。
【請求項１１】
前記仮想空間内に前記操作対象となるオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記指示座標算出ステップにおいて算出された座標を回転の中心座標として設定する中心座標設定ステップと、
前記中心座標を中心として前記オブジェクトを回転させるステップとを含む、請求項１ないし３のいずれかに記載の情報処理プログラム。
【請求項１２】
前記仮想空間は仮想的な３次元空間であって、
当該仮想空間内における所定位置に所定方向を向く仮想カメラを設定する仮想カメラ設定ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記仮想カメラを前記操作対象として回転させ、
前記表示ステップにおいては、前記仮想カメラから見た前記仮想空間の画像を画面に表示する、請求項１ないし請求項３のいずれかに記載の情報処理プログラム。
【請求項１３】
前記第１回転ステップにおいては、前記仮想カメラの注視点の位置を中心として前記仮想カメラを回転させる、請求項１２に記載の情報処理プログラム。
【請求項１４】
前記第１回転ステップにおいては、前記仮想カメラの視線方向が変化するように前記仮想カメラを回転させる、請求項１２に記載の情報処理プログラム。
【請求項１５】
前記第１回転ステップにおいては、前記回転によって前記操作対象の姿勢を変化させる、請求項１ないし請求項３のいずれかに記載の情報処理プログラム。
【請求項１６】
前記第１回転ステップにおいては、前記算出された２次元ベクトルの方向に応じて前記操作対象の姿勢または位置が決定される、請求項１５に記載の情報処理プログラム。
【請求項１７】
前記２次元ベクトルの方向と、所定の基準方向との差を角度またはベクトルとして求める傾き算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記傾き算出ステップで算出された差に応じて前記操作対象を回転させる、請求項１ないし請求項３のいずれかに記載の情報処理プログラム。
【請求項１８】
前記第１回転ステップは、
前記傾き算出ステップで算出された差の大きさに応じて回転量を設定する回転量設定ステップと、
当該回転量だけ前記操作対象を回転させるステップとを含む、請求項１７に記載の情報処理プログラム。
【請求項１９】
前記第１回転ステップは、
前記傾き算出ステップで算出された差が所定値を超えたか否か判別する判別ステップと、
前記判別ステップにおいて当該差が所定値を超えたと判別された場合に前記操作対象を回転させるステップとを含む、請求項１７に記載の情報処理プログラム。
【請求項２０】
前記撮像手段と前記撮像対象との距離に対応したデータを算出する距離算出ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップにおいては、前記２次元ベクトルと、前記距離算出ステップにおいて算出されたデータとを用いた演算によって操作対象を回転させる、請求項１ないし請求項３のいずれかに記載の情報処理プログラム。
【請求項２１】
前記仮想空間は仮想的な３次元空間であって、
前記仮想空間内に少なくとも１つのオブジェクトを配置するオブジェクト配置ステップを前記コンピュータにさらに実行させ、
前記第１回転ステップは、
前記距離に対応させて、前記仮想空間内の奥行き方向の座標を決定する奥行き設定ステップと、
前記奥行き設定ステップにおいて算出された奥行き方向の座標位置に前記少なくとも１つのオブジェクトのいずれかが存在するか否か判別する判別ステップと、
前記判別ステップにおいてオブジェクトが存在すると判別された場合に、当該オブジェクトを前記操作対象として設定する操作対象設定ステップとを含む、請求項２０に記載の情報処理プログラム。
【請求項２２】
前記仮想空間は仮想的な３次元空間であって、
前記第１回転ステップは、
前記距離に対応させて、前記仮想空間内の奥行き方向の座標を決定する奥行き設定ステップと、
前記奥行き設定ステップにおいて算出された奥行き方向の座標に前記操作対象の奥行き方向の位置を移動させる移動ステップと、
前記２次元ベクトルに応じて前記操作対象を回転させるステップとを含む、請求項２０に記載の情報処理プログラム。