(57)【特許請求の範囲】
【請求項１】
姿勢の操作が可能な入力装置の傾きを逐次算出する傾き算出装置であって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理手段と、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理手段と、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出手段と、
前記入力装置の傾きが、前記撮像手段が前記２つの撮像対象を撮像することが可能であると想定される範囲内の傾きとなるか否かを判定する判定手段とを備え、
前記傾き算出手段は、前記入力装置の傾きが前記範囲内の傾きとなると前記判定手段が判定したとき、少なくとも第１の傾き情報を用いて前記入力装置の傾きを算出し、前記入力装置の傾きが前記範囲外の傾きとなると前記判定手段が判定したとき、第１の傾き情報を用いずに当該第２の傾き情報を用いて前記入力装置の傾きを算出し、
前記加速度検出手段は、前記撮像手段の撮像方向に沿った１軸を含む３軸方向の加速度を検出することが可能であり、
前記判定手段は、前記撮像方向に沿った１軸に関する加速度の大きさが所定の閾値以下か否かによって、前記入力装置の傾きが前記範囲内の傾きとなるか否かを判定する、傾き算出装置。
【請求項２】
姿勢の操作が可能な入力装置の傾きを逐次算出する傾き算出装置であって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理手段と、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理手段と、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出手段と、
前記入力装置の傾きが、前記撮像手段が前記２つの撮像対象を撮像することが可能であると想定される範囲内の傾きとなるか否かを判定する判定手段とを備え、
前記傾き算出手段は、前記入力装置の傾きが前記範囲内の傾きとなると前記判定手段が判定したとき、少なくとも第１の傾き情報を用いて前記入力装置の傾きを算出し、前記入力装置の傾きが前記範囲外の傾きとなると前記判定手段が判定したとき、第１の傾き情報を用いずに当該第２の傾き情報を用いて前記入力装置の傾きを算出し、
前記加速度検出手段は、前記撮像手段の撮像方向に沿わない２軸方向の加速度を少なくとも検出することが可能であり、
前記判定手段は、前記２軸に関する加速度の大きさが所定の閾値以上か否かによって、前記入力装置の傾きが前記範囲内の傾きとなるか否かを判定する、傾き算出装置。
【請求項３】
姿勢の操作が可能な入力装置の傾きを逐次算出する傾き算出装置であって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理手段と、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理手段と、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出手段とを備え、
前記傾き算出手段は、
前記第１の傾き情報と第２の傾き情報とを比較する比較手段と、
前記第１の傾き情報により示される傾きを前記比較手段による比較結果に応じて補正した傾きを前記入力装置の傾きとする補正手段とを含み、
前記比較手段は、前記第１の傾き情報により示される傾きの向きと前記第２の傾き情報により示される傾きの向きとを比較して２つの向きが同じ向きと逆向きとのいずれに近いかを判定し、
前記補正手段は、前記２つの向きが逆向きに近いと判定されたとき、前記第１の傾き情報により示される傾きの向きを逆にする補正を行う、傾き算出装置。
【請求項４】
前記加速度検出手段によって検出された加速度の向きの変化量が所定量以下であるか否かを判定する判定手段をさらに備え、
前記補正手段は、前記判定手段の判定結果が肯定であるときのみ補正を行う、請求項３に記載の傾き算出装置。
【請求項５】
前記加速度検出手段によって検出された加速度の大きさと重力加速度の大きさとの差分が所定値以下であるか否かを判定する判定手段をさらに備え、
前記補正手段は、前記判定手段の判定結果が肯定であるときのみ補正を行う、請求項３に記載の傾き算出装置。
【請求項６】
前記加速度検出手段によって検出された加速度の値の変化量が所定量以下であるか否かを判定する判定手段をさらに備え、
前記補正手段は、前記判定手段の判定結果が肯定であるときのみ補正を行う、請求項３に記載の傾き算出装置。
【請求項７】
姿勢の操作が可能な入力装置の傾きを逐次算出する傾き算出装置のコンピュータにおいて実行されるプログラムであって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理ステップと、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理ステップと、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出ステップと、
前記入力装置の傾きが、前記撮像手段が前記２つの撮像対象を撮像することが可能であると想定される範囲内の傾きとなるか否かを判定する判定ステップとを前記コンピュータに実行させ、
前記傾き算出ステップにおいては、前記コンピュータは、前記入力装置の傾きが前記範囲内の傾きとなると前記判定ステップで判定されたとき、第１の傾き情報を少なくとも用いて前記入力装置の傾きを算出し、前記入力装置の傾きが前記範囲外の傾きとなると前記判定ステップで判定されたとき、第１の傾き情報を用いずに当該第２の傾き情報を用いて前記入力装置の傾きを算出し、
前記加速度検出手段は、前記撮像手段の撮像方向に平行な１軸を含む３軸方向の加速度を検出することが可能であり、
前記判定ステップにおいて、前記コンピュータは、前記撮像方向に平行な１軸に関する加速度の大きさが所定の閾値以下か否かによって、前記入力装置の傾きが前記範囲内の傾きとなるか否かを判定する、傾き算出プログラム。
【請求項８】
姿勢の操作が可能な入力装置の傾きを逐次算出する傾き算出装置のコンピュータにおいて実行されるプログラムであって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理ステップと、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理ステップと、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出ステップと、
前記入力装置の傾きが、前記撮像手段が前記２つの撮像対象を撮像することが可能であると想定される範囲内の傾きとなるか否かを判定する判定ステップとを前記コンピュータに実行させ、
前記傾き算出ステップにおいては、前記コンピュータは、前記入力装置の傾きが前記範囲内の傾きとなると前記判定ステップで判定されたとき、第１の傾き情報を少なくとも用いて前記入力装置の傾きを算出し、前記入力装置の傾きが前記範囲外の傾きとなると前記判定ステップで判定されたとき、第１の傾き情報を用いずに当該第２の傾き情報を用いて前記入力装置の傾きを算出し、
前記加速度検出手段は、前記撮像手段の撮像方向に平行でない２軸方向の加速度を少なくとも検出することが可能であり、
前記判定ステップにおいて、前記コンピュータは、前記２軸に関する加速度の大きさが所定の閾値以上か否かによって、前記入力装置の傾きが前記範囲内の傾きとなるか否かを判定する、傾き算出プログラム。
【請求項９】
姿勢の操作が可能な入力装置の傾きを逐次算出する傾き算出装置のコンピュータにおいて実行されるプログラムであって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理ステップと、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理ステップと、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出ステップとを前記コンピュータに実行させ、
前記傾き算出ステップは、
前記第１の傾き情報と第２の傾き情報とを比較する比較ステップと、
前記第１の傾き情報により示される傾きを前記比較ステップにおける比較結果に応じて補正した傾きを前記入力装置の傾きとする補正ステップとを含み、
前記比較ステップにおいて、前記コンピュータは、前記第１の傾き情報により示される傾きの向きと前記第２の傾き情報により示される傾きの向きとを比較して２つの向きが逆向きに近いか否かを判定し、
前記補正ステップにおいて、前記コンピュータは、前記２つの向きが逆向きに近いと判定されたとき、前記第１の傾き情報により示される傾きの向きを逆にする補正を行う、傾き算出プログラム。
【請求項１０】
前記加速度検出手段によって検出された加速度の向きの変化量が所定量以下であるか否かを判定する判定ステップを前記コンピュータにさらに実行させ、
前記補正ステップにおいて、前記コンピュータは、前記判定ステップの判定結果が肯定であるときのみ補正を行う、請求項９に記載の傾き算出プログラム。
【請求項１１】
前記加速度検出手段によって検出された加速度の大きさと重力加速度の大きさとの差分が所定値以下であるか否かを判定する判定ステップを前記コンピュータにさらに実行させ、
前記補正ステップにおいて、前記コンピュータは、前記判定ステップの判定結果が肯定であるときのみ補正を行う、請求項９に記載の傾き算出プログラム。
【請求項１２】
前記加速度検出手段によって検出された加速度の値の変化量が所定量以下であるか否かを判定する判定ステップを前記コンピュータにさらに実行させ、
前記補正ステップにおいて、前記コンピュータは、前記判定ステップの判定結果が肯定であるときのみ補正を行う、請求項９に記載の傾き算出プログラム。
【請求項１３】
姿勢の操作が可能な入力装置の傾きを逐次算出し、算出された傾きをゲームの操作入力として利用するゲーム装置であって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理手段と、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理手段と、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出手段と、
前記入力装置の傾きが、前記撮像手段が前記２つの撮像対象を撮像することが可能であると想定される範囲内の傾きとなるか否かを判定する判定手段とを備え、
前記傾き算出手段は、前記入力装置の傾きが前記範囲内の傾きとなると前記判定手段が判定したとき、第１の傾き情報を少なくとも用いて前記入力装置の傾きを算出し、前記入力装置の傾きが前記範囲外の傾きとなると前記判定手段が判定したとき、第１の傾き情報を用いずに当該第２の傾き情報を用いて前記入力装置の傾きを算出し、
前記加速度検出手段は、前記撮像手段の撮像方向に平行な１軸を含む３軸方向の加速度を検出することが可能であり、
前記判定手段は、前記撮像方向に平行な１軸に関する加速度の大きさが所定の閾値以下か否かによって、前記入力装置の傾きが前記範囲内の傾きとなるか否かを判定する、ゲーム装置。
【請求項１４】
姿勢の操作が可能な入力装置の傾きを逐次算出し、算出された傾きをゲームの操作入力として利用するゲーム装置であって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理手段と、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理手段と、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出手段と、
前記入力装置の傾きが、前記撮像手段が前記２つの撮像対象を撮像することが可能であると想定される範囲内の傾きとなるか否かを判定する判定手段とを備え、
前記傾き算出手段は、前記入力装置の傾きが前記範囲内の傾きとなると前記判定手段が判定したとき、第１の傾き情報を少なくとも用いて前記入力装置の傾きを算出し、前記入力装置の傾きが前記範囲外の傾きとなると前記判定手段が判定したとき、第１の傾き情報を用いずに当該第２の傾き情報を用いて前記入力装置の傾きを算出し、
前記加速度検出手段は、前記撮像手段の撮像方向に平行でない２軸方向の加速度を少なくとも検出することが可能であり、
前記判定手段は、前記２軸に関する加速度の大きさが所定の閾値以上か否かによって、前記入力装置の傾きが前記範囲内の傾きとなるか否かを判定する、ゲーム装置。
【請求項１５】
姿勢の操作が可能な入力装置の傾きを逐次算出し、算出された傾きをゲームの操作入力として利用するゲーム装置であって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理手段と、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理手段と、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出手段とを備え、
前記傾き算出手段は、
前記第１の傾き情報と第２の傾き情報とを比較する比較手段と、
前記第１の傾き情報により示される傾きを前記比較手段による比較結果に応じて補正した傾きを前記入力装置の傾きとする補正手段とを含み、
前記比較手段は、前記第１の傾き情報により示される傾きの向きと前記第２の傾き情報により示される傾きの向きとを比較して２つの向きが逆向きに近いか否かを判定し、
前記補正手段は、前記２つの向きが逆向きに近いと判定されたとき、前記第１の傾き情報により示される傾きの向きを逆にする補正を行う、ゲーム装置。
【請求項１６】
前記加速度検出手段によって検出された加速度の向きの変化量が所定量以下であるか否かを判定する判定手段をさらに備え、
前記補正手段は、前記判定手段の判定結果が肯定であるときのみ補正を行う、請求項１５に記載のゲーム装置。
【請求項１７】
前記加速度検出手段によって検出された加速度の大きさと重力加速度の大きさとの差分が所定値以下であるか否かを判定する判定手段をさらに備え、
前記補正手段は、前記判定手段の判定結果が肯定であるときのみ補正を行う、請求項１５に記載のゲーム装置。
【請求項１８】
前記加速度検出手段によって検出された加速度の値の変化量が所定量以下であるか否かを判定する判定手段をさらに備え、
前記補正手段は、前記判定手段の判定結果が肯定であるときのみ補正を行う、請求項１５に記載のゲーム装置。
【請求項１９】
姿勢の操作が可能な入力装置の傾きを逐次算出し、算出された傾きをゲームの操作入力として利用するゲーム装置のコンピュータにおいて実行されるプログラムであって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理ステップと、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理ステップと、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出ステップと、
前記入力装置の傾きが、前記撮像手段が前記２つの撮像対象を撮像することが可能であると想定される範囲内の傾きとなるか否かを判定する判定ステップとを前記コンピュータに実行させ、
前記傾き算出ステップにおいては、前記コンピュータは、前記入力装置の傾きが前記範囲内の傾きとなると前記判定ステップで判定されたとき、第１の傾き情報を少なくとも用いて前記入力装置の傾きを算出し、前記入力装置の傾きが前記範囲外の傾きとなると前記判定ステップで判定されたとき、第１の傾き情報を用いずに当該第２の傾き情報を用いて前記入力装置の傾きを算出し、
前記加速度検出手段は、前記撮像手段の撮像方向に平行な１軸を含む３軸方向の加速度を検出することが可能であり、
前記判定ステップにおいて、前記コンピュータは、前記撮像方向に平行な１軸に関する加速度の大きさが所定の閾値以下か否かによって、前記入力装置の傾きが前記範囲内の傾きとなるか否かを判定する、ゲームプログラム。
【請求項２０】
姿勢の操作が可能な入力装置の傾きを逐次算出し、算出された傾きをゲームの操作入力として利用するゲーム装置のコンピュータにおいて実行されるプログラムであって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理ステップと、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理ステップと、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出ステップと、
前記入力装置の傾きが、前記撮像手段が前記２つの撮像対象を撮像することが可能であると想定される範囲内の傾きとなるか否かを判定する判定ステップとを前記コンピュータに実行させ、
前記傾き算出ステップにおいては、前記コンピュータは、前記入力装置の傾きが前記範囲内の傾きとなると前記判定ステップで判定されたとき、第１の傾き情報を少なくとも用いて前記入力装置の傾きを算出し、前記入力装置の傾きが前記範囲外の傾きとなると前記判定ステップで判定されたとき、第１の傾き情報を用いずに当該第２の傾き情報を用いて前記入力装置の傾きを算出し、
前記加速度検出手段は、前記撮像手段の撮像方向に平行でない２軸方向の加速度を少なくとも検出することが可能であり、
前記判定ステップにおいて、前記コンピュータは、前記２軸に関する加速度の大きさが所定の閾値以上か否かによって、前記入力装置の傾きが前記範囲内の傾きとなるか否かを判定する、ゲームプログラム。
【請求項２１】
姿勢の操作が可能な入力装置の傾きを逐次算出し、算出された傾きをゲームの操作入力として利用するゲーム装置のコンピュータにおいて実行されるプログラムであって、
前記入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段と、２つの撮像対象を撮像するための撮像手段と備え、
前記撮像手段によって撮像された撮像画像内における前記２つの撮像対象の位置から、前記入力装置の傾きを示す第１の傾き情報を逐次算出する画像情報処理ステップと、
前記加速度検出手段によって検出された加速度から、前記入力装置の傾きを示す第２の傾き情報を逐次算出する加速度情報処理ステップと、
前記第１の傾き情報と前記第２の傾き情報とを用いて前記入力装置の傾きを算出する傾き算出ステップとを前記コンピュータに実行させ、
前記傾き算出ステップは、
前記第１の傾き情報と第２の傾き情報とを比較する比較ステップと、
前記第１の傾き情報により示される傾きを前記比較ステップにおける比較結果に応じて補正した傾きを前記入力装置の傾きとする補正ステップとを含み、
前記比較ステップにおいて、前記コンピュータは、前記第１の傾き情報により示される傾きの向きと前記第２の傾き情報により示される傾きの向きとを比較して２つの向きが逆向きに近いか否かを判定し、
前記補正ステップにおいて、前記コンピュータは、前記２つの向きが逆向きに近いと判定されたとき、前記第１の傾き情報により示される傾きの向きを逆にする補正を行う、ゲームプログラム。
【請求項２２】
前記加速度検出手段によって検出された加速度の向きの変化量が所定量以下であるか否かを判定する判定ステップを前記コンピュータにさらに実行させ、
前記補正ステップにおいて、前記コンピュータは、前記判定ステップの判定結果が肯定であるときのみ補正を行う、請求項２１に記載のゲームプログラム。
【請求項２３】
前記加速度検出手段によって検出された加速度の大きさと重力加速度の大きさとの差分が所定値以下であるか否かを判定する判定ステップを前記コンピュータにさらに実行させ、
前記補正ステップにおいて、前記コンピュータは、前記判定ステップの判定結果が肯定であるときのみ補正を行う、請求項２１に記載のゲームプログラム。
【請求項２４】
前記加速度検出手段によって検出された加速度の値の変化量が所定量以下であるか否かを判定する判定ステップを前記コンピュータにさらに実行させ、
前記補正ステップにおいて、前記コンピュータは、前記判定ステップの判定結果が肯定であるときのみ補正を行う、請求項２１に記載のゲームプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、傾き算出装置および傾き算出プログラムに関し、より特定的には、入力装置が備える加速度検出手段の出力を用いて入力装置の傾きを算出する傾き算出装置および傾き算出プログラムに関する。
【背景技術】
【０００２】
従来より、加速度検出手段を備えた装置の傾きを算出する技術が考えられている。例えば特許文献１には、加速度検出手段を備えた情報処理装置において、加速度検出手段が検出する加速度から装置の傾き（重力方向に対する装置の角度）を算出し、算出された傾きを用いて操作コマンドを生成することが記載されている。このような加速度検出手段を用いて装置の傾きを算出する方法は、加速度検出手段によって検出される重力加速度の方向を算出することによって装置の傾きを算出するものである。
【特許文献１】特開２００１−１５９９５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、特許文献１に記載された技術では、検出された加速度のみから入力装置の傾きを算出するので、検出される傾きが正確でない可能性があるという問題があった。すなわち、装置がユーザによって移動されている場合や、ユーザの手ぶれによって装置が振動している場合等には、重力加速度の他に慣性力に起因する加速度の成分を含めた加速度が検出されるので、検出された加速度の方向と重力加速度の方向とがずれてしまい、正確に傾きを算出できなくなるのである。
【０００４】
なお、特許文献１に記載された技術では、検出された加速度から低周波成分を抽出する等、できるだけ正確な値に近くなるように傾きを補正するための処理が記載されている。しかし、当該処理を行ったとしても、加速度のみを用いる方法では算出される傾きの正確性に限界がある。また、傾きを補正するための処理を実行する場合、当該処理によって、加速度が検出されてから傾きを算出するまでの応答性が悪くなるといった問題がある。
【０００５】
それ故、本発明は、入力装置の傾きを算出することによる操作入力において、検出された加速度を用いて傾きを算出する利点を活かしつつ、精度の高い傾き算出を行うことが可能な傾き算出装置および傾き算出プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００７】
第１の発明は、姿勢の操作が可能な入力装置（コントローラ７）の傾きを逐次算出する傾き算出装置（ゲーム装置３）である。入力装置は、少なくとも２軸方向の加速度を検出する加速度検出手段（加速度センサ３７）と、２つの撮像対象を撮像するための撮像手段（撮像素子４０）と備える。傾き算出装置は、画像情報処理手段（ステップＳ３を実行するＣＰＵ１０等。以下、この欄において単にステップ番号のみを示す。）と、加速度情報処理手段（ステップＳ４）と、傾き算出手段（ステップＳ５）とを備える。画像情報処理手段は、撮像手段によって撮像された撮像画像内における２つの撮像対象（マーカ８ａおよび８ｂ）の位置から、入力装置の傾きを示す第１の傾き情報（第１ベクトルデータ５３１）を逐次算出する。加速度情報処理手段は、加速度検出手段によって検出された加速度から、入力装置の傾きを示す第２の傾き情報（第２ベクトルデータ５３３）を逐次算出する。傾き算出手段は、第１の傾き情報と第２の傾き情報とを用いて入力装置の傾き（出力ベクトル）を算出する。
【０００８】
第２の発明においては、傾き算出手段は、第１の傾き情報を用いた算出方法（第１の方法）と第２の傾き情報を用いた算出方法（第２の方法）とのいずれか一方を選択し、選択した算出方法で入力装置の傾きを算出するようにしてもよい。
【０００９】
第３の発明においては、傾き算出装置は、画像情報処理手段による第１の傾き情報の算出が成功したか否かを判定する第１判定手段（ステップＳ２１）をさらに備えていてもよい。このとき、傾き算出手段は、第１の傾き情報の算出が成功したと第１判定手段が判定したとき、少なくとも第１の傾き情報を用いて入力装置の傾きを算出し（ステップＳ２８）、第１の傾き情報の算出が失敗したと第１判定手段が判定したとき、第１の傾き情報を用いずに第２の傾き情報を用いて入力装置の傾きを算出する（ステップＳ２２）。
【００１０】
第４の発明においては、傾き算出装置は、入力装置の傾きが、撮像手段が２つの撮像対象を撮像することが可能であると想定される範囲内の傾きとなるか否かを判定する第２判定手段（ステップＳ４２）をさらに備えていてもよい。このとき、傾き算出手段は、入力装置の傾きが範囲内の傾きとなると第２判定手段が判定したとき、少なくとも第１の傾き情報を用いて入力装置の傾きを算出し（ステップＳ２８）、入力装置の傾きが範囲外の傾きとなると第２判定手段が判定したとき、第１の傾き情報を用いずに当該第２の傾き情報を用いて入力装置の傾きを算出する（ステップＳ２２）。
【００１１】
第５の発明は、加速度検出手段は、撮像手段の撮像方向に沿った１軸（Ｚ’軸）を含む３軸方向の加速度を検出することが可能であってもよい。このとき、第２判定手段は、撮像方向に平行な１軸に関する加速度の大きさが所定の閾値以下か否かによって、入力装置の傾きが範囲内の傾きとなるか否かを判定する。
【００１２】
第６の発明は、加速度検出手段は、撮像手段の撮像方向に沿わない２軸（Ｘ’軸およびＹ’軸）方向の加速度を少なくとも検出することが可能であってもよい。このとき、第２判定手段は、２軸に関する加速度の大きさが所定の閾値以上か否かによって、入力装置の傾きが範囲内の傾きとなるか否かを判定する。
【００１３】
第７の発明は、傾き算出手段は、比較手段（ステップＳ２５およびＳ２６）と、補正手段（ステップＳ２７）とを含んでいてもよい。比較手段は、第１の傾き情報と第２の傾き情報とを比較する。補正手段は、第１の傾き情報により示される傾きを比較手段による比較結果に応じて補正した傾きを入力装置の傾きとする。
【００１４】
第８の発明は、比較手段は、第１の傾き情報により示される傾きの向きと第２の傾き情報により示される傾きの向きとを比較して２つの向きが同じ向きと逆向きとのいずれに近いか否かを判定してもよい。このとき、補正手段は、２つの向きが逆向きに近いと判定されたとき、第１の傾き情報により示される傾きの向きを逆にする補正を行う。
【００１５】
第９の発明は、傾き算出装置は、加速度検出手段によって検出された加速度の、向きの変化量が所定量以下であるか否かを判定する第３判定手段（ステップＳ２４）をさらに備えていてもよい。このとき、補正手段は、第３判定手段の判定結果が肯定であるときのみ補正を行う。
【００１６】
第１０の発明は、傾き算出装置は、加速度検出手段によって検出された加速度の大きさと重力加速度の大きさとの差分が所定値以下であるか否かを判定する第４判定手段をさらに備えていてもよい。このとき、補正手段は、第４判定手段の判定結果が肯定であるときのみ補正を行う。
【００１７】
第１１の発明は、傾き算出装置は、加速度検出手段によって検出された加速度の値の変化量が所定量以下であるか否かを判定する第５判定手段をさらに備えていてもよい。このとき、補正手段は、第５判定手段の判定結果が肯定であるときのみ補正を行う。
【００１８】
また、本発明は、上記発明を傾き算出装置のコンピュータに実行させるための傾き算出プログラムの形態で提供されてもよい。さらに、本発明は、上記発明によって算出された傾きをゲームの操作入力として利用するゲーム装置、または、上記発明を当該ゲーム装置のコンピュータにおいて実行させるためのゲームプログラムの形態で提供されてもよい。
【発明の効果】
【００１９】
第１の発明によれば、画像情報処理手段は撮像画像を用いて第１の傾き情報を算出するので、コントローラ７の傾きを正確に算出することができる。一方、加速度情報処理手段は加速度を用いて第２の傾き情報を算出するので、画像情報処理手段が第１の傾き情報を算出することができない場合であっても第２の傾き情報を算出することができる。本発明では、これら第１および第２の傾き情報を用いて最終的な傾きを算出することによって、撮像画像を用いて傾きを算出する第１の方法と加速度を用いて傾きを算出する第２の方法との両方の利点を生かして傾きを算出することができる。すなわち、常に傾きを算出することができるという第２の方法の利点を活かしつつ、さらに第１の方法によって精度良く傾きを算出することができる。
【００２０】
第２の発明によれば、第１の傾き情報と第２の傾き情報とのいずれかを選択することによって、２つの傾き情報のうちで適切な方を採用して入力装置の傾きを算出することができる。
【００２１】
第３の発明によれば、第１の傾き情報が算出されている場合には第１の傾き情報を用いて傾きを算出するので、コントローラ７の傾きを正確に算出することができる。これに加えて、第１の傾き情報が算出されない場合には第２の傾き情報を用いて傾きを算出するので、第１の傾き情報が算出されなくても傾きを算出することができる。すなわち、コントローラ７の傾きを正確に算出するとともに、傾きが算出されなくなることを防止することができる。
【００２２】
第４の発明によれば、第２の判定手段によって、撮像手段によって撮像対象を撮像可能であるか否かを判定することができる。そして、撮像可能と判定される場合にのみ、第１の傾き情報を用いて入力装置の傾きが算出される。ここで、撮像手段によって撮像対象を撮像可能でない場合には、画像処理手段は、第１の傾き情報を算出することができないか、あるいは、不正確な第１の傾き情報を算出することになる。本発明によれば、不正確な第１の傾き情報に基づいて入力装置の傾きが算出されることを防止することができるので、入力装置の傾きをより正確に算出することができる。
【００２３】
第５の発明によれば、撮像方向に沿った１軸に関する加速度の大きさを用いることによって、第２判定手段における判定処理を容易に行うことができる。
【００２４】
第６の発明によれば、撮像手段の撮像方向に沿わない２軸方向の加速度の大きさを用いることによって、第２判定手段における判定処理を容易に行うことができる。
【００２５】
第７の発明によれば、第１の傾き情報と第２の傾き情報との比較結果に応じて第１の傾き情報を補正することによって、第１の傾き情報をより正確に算出することができ、ひいては入力装置の傾きをより正確に算出することができる。
【００２６】
第８の発明によれば、第２の傾き情報により示される傾きの向きに合わせて、第１の傾き情報により示される傾きの向きを逆向きに補正する。ここで、２つの撮像対象を撮像した画像から傾きを算出する方法では、算出される傾きの向きが誤って逆方向になる場合がある。これに対して、本発明によれば、第１の傾き情報により示される傾きの向きが逆に算出された場合には、第２の傾き情報を用いて補正されるので、第１の傾き情報をより正確に算出することができ、ひいては入力装置の傾きをより正確に算出することができる。
【００２７】
第９の発明によれば、加速度の向きの変化量が所定量以下である場合にのみ、第１の傾き情報の補正処理が行われる。ここで、加速度の向きの変化量によって、入力装置が激しく動かされているかどうかを判別することができ、入力装置が激しく動かされている場合には検出された加速度は正確でない可能性が高くなる。本発明では、検出された加速度が正確でない場合には、当該加速度を用いた上記補正処理を行わないので、補正処理をより正確に行うことができる。
【００２８】
第１０の発明によれば、加速度の大きさと重力加速度との差分が所定値以下である場合にのみ、第１の傾き情報の補正処理が行われる。ここで、上記差分の大きさによって、入力装置が激しく動かされているかどうかを判別することができ、入力装置が激しく動かされている場合には検出された加速度は正確でない可能性が高くなる。本発明では、検出された加速度が正確でない場合には、当該加速度を用いた上記補正処理を行わないので、補正処理をより正確に行うことができる。
【００２９】
第１１の発明によれば、加速度の値の変化量が所定値以下である場合にのみ、第１の傾き情報の補正処理が行われる。ここで、加速度の値の変化量によって加速度の方向および大きさの変化がわかるので、入力装置が激しく動かされているかどうかを判別することができる。また、入力装置が激しく動かされている場合には検出された加速度は正確でない可能性が高くなる。本発明では、検出された加速度が正確でない場合には、当該加速度を用いた上記補正処理を行わないので、補正処理をより正確に行うことができる。
【発明を実施するための最良の形態】
【００３０】
（第１の実施形態）
図１を参照して、本発明の第１の実施形態に係る傾き算出装置の一例であるゲーム装置を含むゲームシステム１について説明する。なお、図１は、当該ゲームシステム１を説明するための外観図である。以下、据置型のゲーム装置を一例にして、本発明の座標算出装置について説明する。
【００３１】
図１において、ゲームシステム１は、家庭用テレビジョン受像機等のスピーカを備えたディスプレイ（以下、モニタと記載する）２に、接続コードを介して接続される据置型ゲーム装置（以下、単にゲーム装置と記載する）３および当該ゲーム装置３に操作データを与えるコントローラ７によって構成される。また、モニタ２の周辺（図では画面の上側）には、２つのマーカ８ａおよび８ｂが設置される。マーカ８ａおよび８ｂは、具体的には赤外ＬＥＤであり、それぞれモニタ２の前方に向かって赤外光を出力する。ゲーム装置３は、接続端子を介して受信ユニット６が接続される。受信ユニット６は、コントローラ７から無線送信される操作データを受信し、コントローラ７とゲーム装置３とは無線通信によって接続される。また、ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着される。ゲーム装置３の上部主面には、当該ゲーム装置３の電源ＯＮ／ＯＦＦスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置３上部の蓋を開くＯＰＥＮスイッチが設けられている。ここで、プレイヤがＯＰＥＮスイッチを押下することによって上記蓋が開き、光ディスク４の脱着が可能となる。
【００３２】
また、ゲーム装置３には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ２に表示する。さらに、ゲーム装置３は、外部メモリカード５に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００３３】
コントローラ７は、その内部に備える通信部３６（後述）から受信ユニット６が接続されたゲーム装置３へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて操作データを無線送信する。コントローラ７は、操作対象（モニタ２に表示されるオブジェクト）を操作するための操作手段である。コントローラ７は、複数の操作ボタンからなる操作部が設けられている。また、後述により明らかとなるが、コントローラ７は、少なくとも直行２軸方向の加速度を検出する加速度センサ３７（後述）を備えている。加速度センサ３７によって検出された加速度を示すデータは上記操作データの一部としてゲーム装置３へ送信される。また、コントローラ７は、当該コントローラ７から見た画像を撮像するための撮像情報演算部３５（後述）を備えている。すなわち、撮像情報演算部３５は、モニタ２の周辺に配置された各マーカ８ａおよび８ｂを撮像対象として、各マーカ８ａおよび８ｂの画像を撮像する。撮像された画像（撮像画像）におけるマーカ８ａおよび８ｂの画像の位置を示す座標データは、上記操作データの一部としてゲーム装置３へ送信される。ゲーム装置３は、上記加速度を示すデータおよび座標データを用いてコントローラ７の傾きを算出する。
【００３４】
次に、図２を参照して、ゲーム装置３の構成について説明する。なお、図２は、ゲーム装置３の機能ブロック図である。
【００３５】
図２において、ゲーム装置３は、各種プログラムを実行する例えばリスク（ＲＩＳＣ）ＣＰＵ（セントラルプロセッシングユニット）１０を備える。ＣＰＵ１０は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、メインメモリ１３等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。ＣＰＵ１０には、メモリコントローラ１１を介して、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１２、メインメモリ１３、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１４、およびＡＲＡＭ（Ａｕｄｉｏ  ＲＡＭ）１５が接続される。また、メモリコントローラ１１には、所定のバスを介して、コントローラＩ／Ｆ（インターフェース）１６、ビデオＩ／Ｆ１７、外部メモリＩ／Ｆ１８、オーディオＩ／Ｆ１９、およびディスクＩ／Ｆ２１が接続され、それぞれ受信ユニット６、モニタ２、外部メモリカード５、スピーカ２２、およびディスクドライブ２０が接続されている。
【００３６】
ＧＰＵ１２は、ＣＰＵ１０の命令に基づいて画像処理を行うものあり、例えば、３Ｄグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。ＧＰＵ１２は、図示しない画像処理専用のメモリやメインメモリ１３の一部の記憶領域を用いて画像処理を行う。ＧＰＵ１２は、これらを用いてモニタ２に表示すべきゲーム画像データやムービー映像を生成し、適宜メモリコントローラ１１およびビデオＩ／Ｆ１７を介してモニタ２に出力する。
【００３７】
メインメモリ１３は、ＣＰＵ１０で使用される記憶領域であって、ＣＰＵ１０の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ１３は、ＣＰＵ１０によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ１３に記憶されたゲームプログラムや各種データ等がＣＰＵ１０によって実行される。
【００３８】
ＤＳＰ１４は、ゲームプログラム実行時にＣＰＵ１０において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのＡＲＡＭ１５が接続される。ＡＲＡＭ１５は、ＤＳＰ１４が所定の処理（例えば、先読みしておいたゲームプログラムやサウンドデータの記憶）を行う際に用いられる。ＤＳＰ１４は、ＡＲＡＭ１５に記憶されたサウンドデータを読み出し、メモリコントローラ１１およびオーディオＩ／Ｆ１９を介してモニタ２に備えるスピーカ２２に出力させる。
【００３９】
メモリコントローラ１１は、データ転送を統括的に制御するものであり、上述した各種Ｉ／Ｆが接続される。コントローラＩ／Ｆ１６は、例えば４つのコントローラＩ／Ｆで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置３とを通信可能に接続する。例えば、受信ユニット６は、上記コネクタと嵌合し、コントローラＩ／Ｆ１６を介してゲーム装置３と接続される。上述したように受信ユニット６は、コントローラ７からの操作データを受信し、コントローラＩ／Ｆ１６を介して当該操作データをＣＰＵ１０へ出力する。なお、他の実施形態においては、ゲーム装置３は、受信ユニット６に代えて、コントローラ７から送信されてくる操作データを受信する受信モジュールをその内部に設ける構成としてもよい。この場合、受信モジュールが受信した送信データは、所定のバスを介してＣＰＵ１０に出力される。ビデオＩ／Ｆ１７には、モニタ２が接続される。外部メモリＩ／Ｆ１８には、外部メモリカード５が接続され、その外部メモリカード５に設けられたバックアップメモリ等とアクセス可能となる。オーディオＩ／Ｆ１９にはモニタ２に内蔵されるスピーカ２２が接続され、ＤＳＰ１４がＡＲＡＭ１５から読み出したサウンドデータやディスクドライブ２０から直接出力されるサウンドデータをスピーカ２２から出力可能に接続される。ディスクＩ／Ｆ２１には、ディスクドライブ２０が接続される。ディスクドライブ２０は、所定の読み出し位置に配置された光ディスク４に記憶されたデータを読み出し、ゲーム装置３のバスやオーディオＩ／Ｆ１９に出力する。
【００４０】
次に、図３〜図７を参照して、入力装置の一例であるコントローラ７について説明する。図３〜図５は、コントローラ７の外観構成を示す斜視図である。図３Ａは、コントローラ７の上面後方から見た斜視図であり、図３Ｂは、コントローラ７を下面後方から見た斜視図である。図４は、コントローラ７を前方から見た図である。
【００４１】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング３１を有している。ハウジング３１は、その前後方向（図３に示すＺ軸方向）を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ７を用いることによって、それに設けられたボタンを押下すること、コントローラ７自体の傾き（重力方向に対する角度）を変えること、および、コントローラ７自体の位置や向きを変えることによってゲーム操作を行うことができる。例えば、プレイヤは、コントローラ７の傾きを変化させることによって、ゲーム空間に登場する操作対象（オブジェクト）を移動させることができる。また、例えば、プレイヤは、長手方向を軸としてコントローラ７を回転させることによって、加速度センサ３７によって生成される直線加速度信号を用いた処理によって操作対象に移動動作を行わせたり、コントローラ７によって指し示される画面上の位置を変える操作によって、ゲーム空間に登場するオブジェクトを移動させたりすることができる。ここで、「コントローラ７によって指し示される画面上の位置」とは、理想的には、コントローラ７の前端部から上記長手方向に延ばした直線とモニタ２の画面とが交わる位置であるが、厳密に当該位置である必要はなく、その周辺の位置をゲーム装置３によって算出することができればよい。以下では、コントローラ７によって指し示される画面上の位置を「指示位置」と呼ぶ。また、コントローラ７（ハウジング３１）の長手方向を、「コントローラ７の指示方向」と呼ぶことがある。
【００４２】
ハウジング３１には、複数の操作ボタンが設けられる。ハウジング３１の上面には、十字キー３２ａ、Ｘボタン３２ｂ、Ｙボタン３２ｃ、Ｂボタン３２ｄ、セレクトスイッチ３２ｅ、メニュースイッチ３２ｆ、およびスタートスイッチ３２ｇが設けられる。一方、ハウジング３１の下面には凹部が形成されており、当該凹部の後面側傾斜面にはＡボタン３２ｉが設けられる。これらの各ボタン（スイッチ）は、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。また、ハウジング３１の上面には、遠隔からゲーム装置３本体の電源をオン／オフするための電源スイッチ３２ｈが設けられる。
【００４３】
また、コントローラ７は撮像情報演算部３５（図５Ｂ）を有しており、図４に示すように、ハウジング３１前面には撮像情報演算部３５の光入射口３５ａが設けられる。一方、ハウジング３１の後面にはコネクタ３３が設けられている。コネクタ３３は、例えば３２ピンのエッジコネクタであり、コントローラ７に他の機器を接続するために利用される。また、ハウジング３１上面の後面側には複数のＬＥＤ３４が設けられる。ここで、コントローラ７には、他のコントローラ７と区別するためにコントローラ種別（番号）が付与される。ＬＥＤ３４は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７からゲーム装置３へ操作データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ３４のいずれか１つが点灯する。
【００４４】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。図５Ａおよび図５Ｂは、コントローラ７の内部構造を示す図である。なお、図５Ａは、コントローラ７の上筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５Ｂは、コントローラ７の下筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５Ｂに示す基板３００は、図５Ａに示す基板３００の裏面から見た斜視図となっている。
【００４５】
図５Ａにおいて、ハウジング３１の内部には基板３００が固設されており、当該基板３００の上主面上に操作ボタン３２ａ〜３２ｈ、加速度センサ３７、ＬＥＤ３４、水晶振動子４６、無線モジュール４４、およびアンテナ４５等が設けられる。そして、これらは、基板３００等に形成された配線（図示せず）によってマイコン４２（図６参照）に接続される。また、無線モジュール４４およびアンテナ４５によって、コントローラ７がワイヤレスコントローラとして機能する。なお、水晶振動子４６は、後述するマイコン４２の基本クロックを生成する。
【００４６】
一方、図５Ｂにおいて、基板３００の下主面上の前端縁に撮像情報演算部３５が設けられる。撮像情報演算部３５は、コントローラ７の前方から順に赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１によって構成されおり、それぞれ基板３００の下主面に取り付けられる。また、基板３００の下主面上の後端縁にコネクタ３３が取り付けられる。そして、撮像情報演算部３５の後方であって基板３００の下主面上に操作ボタン３２ｉが取り付けられていて、それよりさらに後方に、電池４７が収容される。電池４７とコネクタ３３との間の基板３００の下主面上には、バイブレータ４８が取り付けられる。このバイブレータ４８は、例えば振動モータやソレノイドであってよい。バイブレータ４８が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームを実現することができる。
【００４７】
図６は、コントローラ７の構成を示すブロック図である。コントローラ７は、上述した加速度センサ３７をその内部に備えている。加速度センサ３７は、コントローラ７の加速度（重力を含む）を検出する、すなわち、コントローラ７に加わる力（慣性力および重力）を検出して加速度として出力する。図７および図８は、コントローラ７の傾きと加速度センサの出力との関係を示す図である。図７および図８に示すように、加速度センサ３７は、コントローラ７を基準とした上下方向（図７に示すＹ’軸方向）、左右方向（図７に示すＸ’軸方向）および前後方向（図７に示すＺ’軸方向）の３軸方向に関してそれぞれ加速度を検出する。つまり、加速度センサ３７は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサからの出力は各軸ごとの加速度値を表す。したがって、検出された加速度は、コントローラ７を基準に設定されるＸ’Ｙ’Ｚ’座標系（図７および図８参照）における３次元のベクトルとして表される。ここでは、コントローラ７を基準とした上方向をＹ’軸正方向とし、前方向をＺ’軸正方向とし、後側から前側に見たときの左方向をＸ’軸正方向とする。
【００４８】
上述したように、コントローラ７は、上述した３軸方向それぞれの直線加速度を検出する３軸の加速度センサ３７を備えていることが好ましい。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、Ｘ軸とＹ軸（または他の対になった軸）のそれぞれに沿った直線加速度のみを検知する２軸の加速度検出手段を使用してもよい。例えば、この３軸または２軸の加速度センサ３７は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはＳＴマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ３７は、シリコン微細加工されたＭＥＭＳ（Micro Electro Mechanical Systems：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であることが好ましい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて３軸または２軸の加速度センサ３７が提供されてもよい。
【００４９】
当業者には公知であるように、加速度センサ３７に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ３７からの直接の出力は、その２軸または３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ３７は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００５０】
しかしながら、加速度センサ３７から出力される加速度の信号に対して追加の処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、静的な加速度（重力加速度）が検知されると、加速度センサ３７からの出力を用いて、傾斜角度と検知された加速度とを用いた演算によって重力ベクトルに対する対象（コントローラ７）の傾きや傾斜を推測または算出することができる。このように、加速度センサ３７をマイコン４２（または他のプロセッサ）と組み合わせて用いることによって、コントローラ７の傾き、姿勢または位置を決定することができる。同様に、加速度センサ３７を備えるコントローラ７が例えばユーザの手で動的に加速されて動かされる場合に、加速度センサ３７によって生成される加速度信号を処理することによって、コントローラ７のさまざまな動きおよび／または位置を算出または推測することができる。他の実施例では、加速度センサ３７は、信号をマイコン４２に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角に変換するものであってもよい。
【００５１】
図７は、重力加速度（図７に示すベクトルＶ２ａ）がコントローラ７を基準として下方向を向く状態を示している。この状態では、加速度センサ３７によって検出される加速度の値（以下「加速度ベクトル」と呼ぶ）Ｖ２ａは、Ｙ’軸負方向を向く。なお、図７および図８では、コントローラ７は静止状態にあるものとする。このとき、加速度ベクトルＶ２ａは、Ｙ’座標値のみが０でない値をとり、Ｘ’座標値およびＺ’座標値は０となる。一方、図８は、図７に示す状態から、Ｚ’軸を中心として回転させるようにコントローラ７を傾けた状態を示している。図８に示す状態では、加速度ベクトルＶ２ａの向きは図７に示す状態から変化し、Ｘ’座標値およびＹ’座標値が０でない値となる。ただし、Ｚ’軸を回転の軸として回転させているのでＺ’座標値は０である。図７および図８に示したように、加速度センサ３７は、コントローラ７を基準とした３軸方向を各成分とする加速度の値を検出することができる。これにより、マイコン４２やＣＰＵ１０などのコンピュータを利用したソフトウェア処理によって、加速度の値を３軸方向の各成分からなる加速度ベクトルとして扱う演算を行うことによりコントローラ７の傾きを算出することができる。加速度センサ３７が検出した加速度を示すデータ（加速度データ）は、通信部３６へ出力される。なお、第１の実施形態では、加速度センサ３７は、逐次（具体的には１フレーム時間毎）に加速度に応じた値を出力する。ゲーム装置３は、この値を加速度ベクトルとして扱いかつ所定の演算によりコントローラ７の傾き（姿勢）を算出し、当該傾きに応じたゲーム処理を実行する。
【００５２】
また、本実施形態においては、コントローラ７が静止している状態で加速度センサ３７によって検出される加速度の大きさ、すなわち、加速度センサ３７によって検出される加速度が重力加速度のみを表すときの当該加速度の大きさを１とする。例えば、図７に示す状態において検出される加速度ベクトルＶ２ａの各成分の値は、（０，１，０）となる。
【００５３】
なお、第１の実施形態においては、撮像手段の撮像方向に垂直な２軸方向、すなわち、Ｘ’Ｙ’方向に関するコントローラ７の傾きを算出することを目的とする。そのため、第１の実施形態においては、３軸方向に関して加速度を検出する加速度センサ３７に代えて、Ｘ’軸方向およびＹ’軸方向の２軸方向に関してのみ加速度を検出する加速度センサが用いられてもかまわない。また、加速度センサ３７は、典型的には静電容量式の加速度センサが用いられるが、他の方式の加速度センサを用いてもかまわない。
【００５４】
また、コントローラ７は、加速度センサ３７の他に、操作部３２（各操作ボタン）、撮像情報演算部３５、および通信部３６を備えている。なお、本実施形態において、コントローラ７は、加速度検出手段（加速度センサ３７）を備えていればよく、操作部３２および撮像情報演算部３５を備えていない構成であってもよい。
【００５５】
図６の説明に戻り、撮像情報演算部３５は、撮像手段によって撮像された画像を用いて、マーカ８ａおよび８ｂの当該画像上の位置を算出する。撮像情報演算部３５は、撮像手段が撮像した画像データを解析し、画像の中で輝度が高い領域を判別してその領域の重心位置やサイズなどを検出するためのシステムである。撮像情報演算部３５は、例えば最大２００フレーム／秒程度のサンプリング周期を有するので、比較的高速なコントローラ７の動きでも追跡して解析することができる。
【００５６】
具体的には、撮像情報演算部３５は、赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を含んでいる。赤外線フィルタ３８は、コントローラ７の前方から入射する光から赤外線のみを通過させる。ここで、モニタ２の表示画面近傍に配置されるマーカ８ａおよび８ｂは、モニタ２の前方に向かって赤外光を出力する赤外ＬＥＤである。したがって、赤外線フィルタ３８を設けることによってマーカ８ａおよび８ｂの画像をより正確に撮像することができる。レンズ３９は、赤外線フィルタ３８を透過した赤外線を集光して撮像素子４０へ入射させる。撮像素子４０は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ３９が集光した赤外線を撮像する。したがって、撮像素子４０は、赤外線フィルタ３８を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子４０によって撮像された画像を撮像画像と呼ぶ。撮像素子４０によって生成された画像データは、画像処理回路４１で処理される。画像処理回路４１は、撮像画像内における撮像対象（マーカ８ａおよび８ｂ）の位置を算出する。なお、当該位置は、例えば、撮像画像の下向きをｙ軸正方向とし、右向きをｘ軸正方向とする座標系（ｘｙ座標系）で表現されるものとする。画像処理回路４１は、当該位置を示す各座標値を撮像データとして通信部３６へ出力する。この座標値はコントローラ７自体の向きや位置に応じて変化するので、ゲーム装置３は当該座標値を用いてコントローラ７の向きや位置を算出することができる。
【００５７】
通信部３６は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）４２、メモリ４３、無線モジュール４４、およびアンテナ４５を含んでいる。マイコン４２は、処理の際にメモリ４３を記憶領域として用いながら、マイコン４２が取得したデータを無線送信する無線モジュール４４を制御する。
【００５８】
操作部３２、加速度センサ３７、および撮像情報演算部３５からマイコン４２へ出力されたデータは、一時的にメモリ４３に格納される。ここで、通信部３６から受信ユニット６への無線送信は所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。マイコン４２は、受信ユニット６への送信タイミングが到来すると、メモリ４３に格納されているデータを操作データとして無線モジュール４４へ出力する。無線モジュール４４は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ４５から放射する。つまり、操作データは、無線モジュール４４で微弱電波信号に変調されてコントローラ７から送信される。微弱電波信号はゲーム装置３側の受信ユニット６で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置３は操作データを取得することができる。そして、ゲーム装置３のＣＰＵ１０は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。
【００５９】
なお、図３〜図５に示したコントローラ７の形状や、各操作スイッチの形状、数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができることは言うまでもない。また、コントローラ７における撮像情報演算部３５の位置（撮像情報演算部３５の光入射口３５ａ）は、ハウジング３１の前面でなくてもよく、ハウジング３１の外部から光を取り入れることができれば他の面に設けられてもかまわない。このとき、上記「コントローラ７の指示方向」は、光入射口に垂直な方向、すなわち、撮像素子４０の撮像方向となる。
【００６０】
上記コントローラ７を用いることによって、プレイヤは、各操作スイッチを押下する従来の一般的なゲーム操作に加えて、コントローラ７の傾きを変化させたり、コントローラ７自身の位置を動かしたり、コントローラ７を回転させたりするというゲーム操作を行うことができる。以下、上記コントローラ７を用いたゲーム操作について説明する。
【００６１】
図９は、コントローラ７を用いてゲーム操作するときの状態を概説する図解図である。図９に示すように、ゲームシステム１でコントローラ７を用いてゲームをプレイする際、プレイヤは、一方の手でコントローラ７を把持する。ここで、マーカ８ａおよび８ｂは、モニタ２の画面の横方向と平行に配置されている。本実施形態では、プレイヤはコントローラ７を、モニタ２と同じくらいの高さの位置関係で使用するものとし、コントローラ７の長手方向が地面と平行に近い姿勢でプレイヤがコントローラ７を把持する使用形態を想定する。プレイヤは、コントローラ７の前面（撮像情報演算部３５が撮像する光の入射口側）がマーカ８ａおよび８ｂの方向を向く状態でコントローラ７を把持する。この状態で、プレイヤは、コントローラ７の傾きを変化させたり、コントローラ７が指し示す画面上の位置（指示位置）を変更したり、コントローラ７と各マーカ８ａおよび８ｂとの距離を変更したりすることによってゲーム操作を行う。
【００６２】
図１０は、マーカ８ａおよび８ｂとコントローラ７との視野角を説明するための図である。図１０に示すように、各マーカ８ａおよび８ｂは、それぞれ視野角θ１の範囲で赤外光を放射する。また、撮像情報演算部３５の撮像素子４０は、上記コントローラ７の視線方向を中心とした視野角θ２の範囲で入射する光を受光することができる。例えば、各マーカ８ａおよび８ｂの視野角θ１は共に３４°（半値角）であり、撮像素子４０の視野角θ２は４１°である。プレイヤは、撮像素子４０が２つのマーカ８ａおよび８ｂからの赤外光を受光することが可能な位置および向きとなるように、コントローラ７を把持する。具体的には、撮像素子４０の視野角θ２の中に少なくとも一方のマーカ８ａおよび８ｂが存在し、かつ、マーカ８ａまたは８ｂの少なくとも一方の視野角θ１の中にコントローラ７が存在する状態となるように、プレイヤはコントローラ７を把持する。この状態にあるとき、コントローラ７は、マーカ８ａおよび／または８ｂを検知することができる。なお、コントローラ７の位置および向きがこの範囲外となった場合、マーカ８ａおよび／または８ｂを検知することができないので、ゲーム装置３は、撮像画像を用いてコントローラ７の傾きを算出することができなくなる。以下では、上記範囲を「検知可能範囲」と呼ぶ。
【００６３】
検知可能範囲内でコントローラ７が把持される場合、撮像情報演算部３５によって各マーカ８ａおよび８ｂの画像が撮像される。すなわち、撮像素子４０によって得られる撮像画像には、撮像対象である各マーカ８ａおよび８ｂの画像（対象画像）が含まれる。図１１は、対象画像を含む撮像画像の一例を示す図である。なお、図１１において、点線で囲まれる領域Ａ１は撮像画像内の領域を示す。対象画像を含む撮像画像の画像データを用いて、画像処理回路４１は、各マーカ８ａおよび８ｂの撮像画像における位置を表す座標を検出する。
【００６４】
具体的には、画像処理回路４１は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に検出する。ここで、所定条件とは、対象画像を検出するための条件であり、所定条件の具体的な内容は、輝度が所定値以上の領域（高輝度領域）であり、かつ、領域の大きさが所定範囲内の大きさであることである。なお、所定条件は撮像対象を検出するための条件であればよく、他の実施形態においては、画像の色に関する条件を含んでいてもよい。撮像画像の画像データにおいて対象画像は高輝度領域として現れるので、画像処理回路４１は、まず、この高輝度領域を対象画像の候補として検出する。次に、検出された高輝度領域の大きさに基づいて、その高輝度領域が対象画像であるか否かを判定する。撮像画像には、対象画像である２つのマーカ８ａおよび８ｂの画像８ａ’および８ｂ’の他、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれていることがある。上記の判定処理は、対象画像であるマーカ８ａおよび８ｂの画像８ａ’および８ｂ’とそれ以外の画像とを区別し、対象画像を正確に検出するための処理である。具体的には、当該判定処理においては、検出された高輝度領域が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度領域が所定範囲内の大きさである場合、当該高輝度領域は対象画像を表すと判定され、高輝度領域が所定範囲内の大きさでない場合、当該高輝度領域は対象画像以外の画像を表すと判定される。
【００６５】
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度領域について、画像処理回路４１は当該高輝度領域の位置を算出する。具体的には、当該高輝度領域の重心位置を算出する。なお、重心位置は撮像素子４０の解像度よりも詳細なスケールで算出することが可能である。ここでは、撮像素子４０によって撮像された撮像画像の解像度が１２６×９６であるとし、重心位置は１０２４×７６８のスケールで算出されるものとする。つまり、重心位置の座標は、（０，０）から（１０２４，７６８）までの整数値で表現される。なお、撮像画像における位置は、図１１に示すように、撮像画像の左上を原点とし、下向きをｙ軸正方向とし、右向きをｘ軸正方向とする座標系（ｘｙ座標系）で表現されるものとする。画像処理回路４１は、上記算出処理によって算出された座標を示すデータを出力する。出力された座標のデータは、上述したように、マイコン４２によって操作データとしてゲーム装置３に送信される。なお、本実施例では、撮像画像から対象画像の位置を示す座標を算出する処理までをコントローラ７の画像処理回路４１および／またはマイコン４２で行ったが、例えば撮像画像をゲーム装置３に送り、以降の処理と同等の処理をゲーム装置３のＣＰＵ１０等で行わせることもできる。
【００６６】
以上のようにして、画像処理回路４１は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に検出する。なお、以下では、画像処理回路４１によって検出される座標をマーカ座標と呼ぶことがある。
【００６７】
以下、コントローラ７の傾きを算出する処理の概要を説明する。なお、本実施形態では、Ｚ’軸周りの回転に関するコントローラ７の傾きを算出する場合について説明する。
【００６８】
本実施形態では、ゲーム装置３は、まず、異なる２つの方法によって２種類のコントローラ７の傾きを算出する。第１の方法は、撮像情報演算部３５によって得られた情報（撮像画像）からコントローラ７の傾きを算出する方法である。第２の方法は、加速度センサ３７によって得られた情報（加速度データ）からコントローラ７の傾きを算出する方法である。ゲーム装置は、２つの方法で算出された２種類の傾きを用いて、コントローラ７の傾きとして最終的にゲーム操作に用いられる傾きを算出する。
【００６９】
なお、本実施形態では、コントローラ７の傾きの方向をベクトルによって表す。以下では、上記第１の方法によって得られる傾きを示すベクトルを第１ベクトルと呼び、上記第２の方法によって得られる傾きを示すベクトルを第２ベクトルと呼ぶ。つまり、ゲーム装置３は、第１および第２ベクトルを用いて最終的なコントローラ７の傾きを算出する。以下では、コントローラ７の傾きを示すベクトルとして最終的にゲーム操作に用いられるベクトルを、出力ベクトルと呼ぶ。なお、本実施形態では、第１ベクトルおよび第２ベクトルを算出する処理、および、第１ベクトルおよび第２ベクトルを用いて出力ベクトルを算出する処理が１フレーム毎に実行される。
【００７０】
まず、第１の方法で第１ベクトルを算出する処理について図１１〜図１３を用いて説明する。図１１に示す撮像画像において、点ｐ１はおよび点ｐ２は、ｘｙ平面上におけるマーカ画像の位置を示す。以下では、マーカ画像の位置を示す座標をマーカ座標と呼ぶ。本実施形態では、このマーカ座標を示すデータがコントローラ７からゲーム装置３へ送信される。マーカ８ａおよび８ｂの画像が正常に撮像される場合、２つのマーカ座標（図１１では点ｐ１を示す座標と点ｐ２を示す座標）のデータが送信される。
【００７１】
ゲーム装置３は、２つのマーカ座標をコントローラ７から取得すると、２つのマーカ座標を結ぶベクトルＶ１を算出する。算出されたベクトルＶ１が第１ベクトルである。第１ベクトルＶ１は、２つのマーカ座標のうちの一方を始点とし、他方を終点とするベクトルである。第１ベクトルＶ１は、コントローラ７のＺ’軸（図７参照）を中心とした回転に関する傾きを表す。例えば、マーカ８ａおよび８ｂを結ぶ方向とコントローラ７のＸ’軸とが平行になる場合、図１１に示すように、第１ベクトルＶ１はｘ軸に平行になる。一方、図１２は、コントローラ７がＺ’軸を中心とした回転に関して傾いている状態を示す図である。図１２に示すように、マーカ８ａおよび８ｂを結ぶ方向に対してコントローラ７のＸ’軸が所定角度だけ傾いている場合、ゲーム装置３は、図１３に示す点ｐ１および点ｐ２の座標データをコントローラ７から得る。図１３は、図１２に示す状態において得られる第１ベクトルおよび第２ベクトルを示す図である。図１３に示すように、第１ベクトルＶ１は、ｘ軸に対して所定角度だけ傾いた方向を表す。第１ベクトルＶ１の向きは、Ｚ’軸周りの回転に関するコントローラ７の傾きに応じて変化するので、第１ベクトルＶ１によってコントローラ７のＺ’軸周りの回転に関する傾きを知ることができる。
【００７２】
次に、第２の方法で第２ベクトルを算出する処理について図１２および図１３を用いて説明する。図１２に示す状態にある場合、加速度センサ３７によって検出される加速度を示すベクトルは、図１２に示すベクトルＶ２ａのようになる。本実施形態では、このベクトルＶ２ａを示す加速度データがコントローラ７からゲーム装置３へ送信される。ベクトルＶ２ａは、Ｘ’Ｙ’Ｚ’座標系で表される３次元のベクトルである。
【００７３】
ベクトルＶ２ａをコントローラ７から取得すると、ゲーム装置３は、ベクトルＶ２ａをｘｙ座標系のベクトルに変換する。さらに、ゲーム装置３は、変換後のベクトルを用いて第２ベクトルＶ２ｂを算出する。本実施形態では、第２ベクトルＶ２ｂは、前回に算出された第２ベクトル（前回第２ベクトル）と、加速度センサ３７から今回得られたベクトルＶ１ａをｘｙ座標系のベクトルに変換したベクトルとに基づいて算出される。なお、第２ベクトルＶ２ｂを算出する処理の詳細は後述する（図１７および図１８参照）。例えば図１２に示すベクトルＶ２ａが加速度センサ３７によって検出された場合、変換によって得られる第２ベクトルは、図１３に示すベクトルＶ２ｂとなる。撮像情報演算部３５および加速度センサ３７による検出が正確である場合、図１３に示すように、第１ベクトルＶ１と第２ベクトルＶ２ｂとは同じ方向となる。
【００７４】
ここで、上記第１の方法と第２の方法とでは、それぞれ以下の特徴がある。すなわち、第１の方法は、第２の方法に比べて傾きを正確に算出することができるという利点があるものの、第１ベクトルを算出することができないことがあるという欠点がある。第１ベクトルを算出することができない場合とは、例えば、コントローラ７の位置および姿勢が上記検知可能範囲にない場合や、モニタに表示される画像や太陽光や蛍光灯等の他の光をマーカであると誤認識してしまう場合や、コントローラ７とマーカ８ａおよび８ｂとの距離が遠すぎてマーカ８ａおよび８ｂからの光をコントローラ７で検出できない場合等である。これらの場合、マーカ座標が検出されなかったり、１つしか検出されなかったり、３つ以上検出されたりするので、ゲーム装置３は第１ベクトルを算出することができない。
【００７５】
一方、第２の方法には、加速度センサ３７が常に加速度データを出力するので、第２ベクトルを常に算出することが可能であるという利点があるものの、第１の方法に比べて検出される傾きの精度が低くなるという欠点がある。例えばコントローラ７がプレイヤによって移動されている時には、重力加速度の他に慣性力に起因する加速度の成分を含めた加速度が検出される。このような加速度が検出されると傾きを正確に算出することができないのである。
【００７６】
上記第１の方法および第２の方法のそれぞれの利点および欠点を考慮して、本実施形態では、ゲーム装置３は、第１ベクトルおよび第２ベクトルを用いて出力ベクトルを算出する。具体的には、第１ベクトルが算出される場合、第１ベクトルに基づいて出力ベクトルを算出し、第１ベクトルが算出されない場合、第２ベクトルに基づいて出力ベクトルを算出する。これによれば、第１ベクトルが算出されている場合にはコントローラ７の傾きを正確に算出することができるとともに、第１ベクトルが算出されない場合には第２ベクトルを用いてコントローラ７の傾きを算出することによって、傾きが算出されなくなることを防止することができる。
【００７７】
さらに第１の実施形態では、第１ベクトルが算出されている場合、ゲーム装置３は、第１ベクトルを単に出力ベクトルとするのではなく、第１ベクトルと第２ベクトルとを比較し、比較結果に応じて第１ベクトルを補正する。具体的には、第１ベクトルと第２ベクトルとの向きが逆方向になっている場合、第１ベクトルの向きを逆向きになるように補正する。図１４は、ある状態における第１ベクトルＶ１および第２ベクトルＶ２ｂを示す図である。図１４に示す状態では、第１ベクトルＶ１と第２ベクトルＶ２ｂとの向きが約１８０°異なっている。このとき、ゲーム装置３は、第１ベクトルＶ１の向きを逆向きになるように補正し、補正後のベクトルを出力ベクトルとする。
【００７８】
上記比較結果に応じて第１ベクトルを補正する理由は、上記第１の方法では、実際のコントローラ７の傾きに対応するベクトルの向きに対して、第１ベクトルの向きが逆になることがあり得るからである。すなわち、第１の方法では、２つのマーカ座標を結ぶベクトルを第１ベクトルとするので、２つのマーカ座標のいずれを始点とするかの認識を誤った場合には、第１ベクトルの向きが１８０°異なる向きになることがあり得るからである。一方、第２の方法で算出される第２ベクトルは、実際のコントローラ７の傾きに正確に対応していない可能性はあるものの、向きが逆方向になるような算出結果はほとんどあり得ない。そこで、本実施形態では、ゲーム装置３は、第２ベクトルの向きと第１ベクトルの向きとが大きく（１８０°近く、例えば９０°〜２７０°）異なっている場合には、第１ベクトルの向きが本来とは逆向きであるとみなし、第１ベクトルの向きを逆向きにする補正を行う。これによって、第１ベクトルをより正確に算出することが可能となり、ひいてはコントローラ７の傾きをより正確に算出することが可能となる。
【００７９】
次に、ゲーム装置３において行われるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる主なデータについて図１５を用いて説明する。図１５は、ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図である。図１５に示すように、メインメモリ１３には、ゲームプログラム５１、操作データ５２、および算出処理用データ５３等が記憶される。なお、メインメモリ１３には、図１３に示すデータの他、ゲームに登場するキャラクタの画像データや、キャラクタの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
【００８０】
ゲームプログラム５１は、ゲーム装置３に電源が投入された後の適宜のタイミングで光ディスク４からその一部または全部が読み込まれてメインメモリ１３に記憶される。ゲームプログラム５１には、傾き算出プログラム５１１が含まれる。傾き算出プログラム５１１は、撮像情報演算部３５および加速度センサ３７の出力を用いてコントローラ７の傾きを算出する処理（傾き算出処理）を行うためのプログラムである。ゲームプログラム５１には、傾き算出プログラム５１１の他、ゲーム処理の実行に必要なプログラムが含まれている。
【００８１】
操作データ５２は、コントローラ７からゲーム装置３へ送信されてきて、メインメモリ１３に記憶される。操作データ５２には、マーカ座標データ５２１および加速度データ５２２が含まれる。マーカ座標データ５２１は、画像処理回路４１によって検出される座標、すなわち上記マーカ座標を示すデータである。上述したように、検出されるマーカ座標の数は決まっていないので、マーカ座標データ５２１は、複数個のマーカ座標を示すこともあるし、１個のみのマーカ座標を示すこともあるし、マーカ座標がないことを示すこともある。
【００８２】
加速度データ５２２は、加速度センサ３７によって検出された加速度を示すデータである。ここでは、加速度データ５２２は、図７に示すＸ’Ｙ’Ｚ’の３軸の方向に関する加速度ベクトルを示すデータである。なお、操作データ５２には、マーカ座標データ５２１および加速度データ５２２の他、操作部３２の各ボタンに対して行われた操作内容を示すデータが含まれている。
【００８３】
算出処理用データ５３は、出力ベクトルを算出するための処理（後述するステップＳ３〜Ｓ５）において用いられるデータである。算出処理用データ５３には、第１ベクトルデータ５３１、前回第１ベクトルデータ５３２、第２ベクトルデータ５３３、前回加速度データ５３４、変化量データ５３５、出力ベクトルデータ５３６、前回出力ベクトルデータ５３７、カウンタ値データ５３８、反映度データ５３９、および正面度データ５４０が含まれる。
【００８４】
第１ベクトルデータ５３１は、上記第１ベクトルを示すデータである。第１ベクトルは、原則として１フレーム時間毎に算出されるが、マーカ座標の内容によっては第１ベクトルの算出に失敗し、第１ベクトルが算出されないこともある。第１ベクトルデータ５３１は、常に最新の第１ベクトルの内容を示すように、新たな第１ベクトルが算出される度にその内容が更新される。前回第１ベクトルデータ５３２は、後述する第２の実施形態において用いられるデータであり、前回に算出された第１ベクトルを示すデータである。第１ベクトルが新たに算出されて第１ベクトルデータ５３１の内容が更新された場合、更新前の第１ベクトルデータが新たな前回第１ベクトルデータ５３２としてメインメモリ１３に更新して記憶される。
【００８５】
第２ベクトルデータ５３３は、上記第２ベクトルを示すデータである。第２ベクトルは、１フレーム時間毎に算出される。第２ベクトルデータ５３３は、常に最新の第２ベクトルの内容を示すように、新たな第２ベクトルが算出される度にその内容が更新される。
【００８６】
前回加速度データ５３４は、前回に算出された加速度ベクトルを示すデータである。コントローラ７からゲーム装置３へ新たな操作データが送信されて加速度データ５２２の内容が更新された場合、当該加速度データが次フレームにおけるベクトル算出のための新たな前回加速度データ５３４としてメインメモリ１３に更新して記憶される。
【００８７】
変化量データ５３５は、加速度センサ３７によって前回に検出された加速度に対する今回に検出された加速度の変化量を示す。具体的には、本実施形態では、変化量データ５３５は加速度の方向の変化量を示す。この変化量は、加速度センサ３７の出力が信頼できる度合い、換言すれば、加速度センサ３７の出力により示される傾きが実際のコントローラ７の傾きに正確に対応する度合いを示す。
【００８８】
出力ベクトルデータ５３６は、上記ベクトルを示すデータである。出力ベクトルは１フレーム時間毎に算出される。出力ベクトルデータ５３６は、常に最新の出力ベクトルの内容を示すように、新たな出力ベクトルが算出される度にその内容が更新される。
【００８９】
カウンタ値データ５３８は、後述する第２の実施形態で用いられるデータであり、第１ベクトルの算出状態が変化してからの経過フレーム数を表すカウンタ値を示す。なお、「第１ベクトルの算出状態が変化する」とは、前回において第１ベクトルが算出されていた場合に今回において第１ベクトルが算出されなかったこと、または、前回において第１ベクトルが算出されなかった場合に今回において第１ベクトルが算出されたことを意味する。
【００９０】
反映度データ５３９は、後述する第２の実施形態で用いられるデータであり、今回算出されたベクトルに前回算出されたベクトルを反映させる度合い（反映度）を示すデータである。反映度は、上記カウンタ値に基づいて算出される。
【００９１】
正面度データ５４０は、後述する第３の実施形態で用いられるデータであり、コントローラ７が正面を向いている度合い（正面度）を示すデータです。ここで、本明細書において、コントローラ７が正面を向いている状態とは、コントローラ７のＹ’軸負方向（図７）が重力加速度の方向に一致する状態である。
【００９２】
なお、前回第１ベクトルデータ５３２、カウンタ値データ５３８、反映度データ５３９および正面度データ５４０は、第２または第３の実施形態において用いられるデータであるので、第１の実施形態においては、これらのデータはメインメモリ１３に記憶されなくてもよい。
【００９３】
次に、ゲーム装置３において行われるゲーム処理の詳細を、図１６〜図１９を用いて説明する。図１６は、ゲーム装置３において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ１０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ１３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリ１３に読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１６に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図１６に示すフローチャートにおいては、ゲーム処理のうち、撮像情報演算部３５によって得られた撮像画像と加速度センサ３７によって検出された加速度とからコントローラ７の傾きを算出するための処理について詳細に示し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。
【００９４】
まず、ステップＳ１において、ゲーム空間が構築されてモニタ２に表示される。ＣＰＵ１０は、例えば３次元のゲーム空間（２次元でもよい）を構築し、さらに、ゲーム空間に登場するオブジェクトを所定の初期位置に配置する。以上のように構築されたゲーム空間を表すゲーム画像が生成され、生成されたゲーム画像がモニタ２に表示される。以降、ステップＳ２〜Ｓ８の処理ループが１フレーム毎に繰り返されることによって、ゲームが進行していく。
【００９５】
ステップＳ２において、ＣＰＵ１０は、コントローラ７から操作データを取得する。すなわち、コントローラ７は所定時間間隔（例えば、１フレーム時間間隔）で操作データをゲーム装置３へ送信してくるので、ＣＰＵ１０は、送信されてきた操作データをメインメモリ１３に記憶する。操作データにマーカ座標データが含まれている場合、ＣＰＵ１０は、当該マーカ座標データをメインメモリ１３に記憶する。また、操作データに加速度データが含まれている場合、ＣＰＵ１０は、当該加速度データをメインメモリ１３に記憶する。
【００９６】
ステップＳ２の後、ＣＰＵ１０が傾き算出プログラム５１１を実行することによってステップＳ３〜Ｓ５が実行される。まず、ステップＳ３において、メインメモリ１３に記憶されているマーカ座標データ５２１に基づいて第１ベクトルが算出される。ＣＰＵ１０は、検出されたマーカ座標が２つの場合（マーカ座標データ５２１が２つのマーカ座標を示す場合）、一方のマーカ座標を始点とし、他方のマーカ座標を終点とするベクトルを第１ベクトルとして算出する。なお、２つのマーカ座標のうちでいずれをベクトルの始点とし、いずれを終点とするかは、例えば「ｘ座標値が小さい方を始点とする」という条件のように、予め定められた条件に従って決定してもよい。また、前回の出力ベクトルの始点に近い方のマーカ座標を始点とするように決定してもよい。算出された第１ベクトルを示すデータは、第１ベクトルデータ５３１としてメインメモリ１３に更新して記憶される。また、更新前の第１ベクトルデータは、前回第１ベクトルデータ５３２としてメインメモリ１３に更新して記憶される。
【００９７】
なお、検出されたマーカ座標が２つでない場合（すなわち、マーカ座標が０個、１個、または３個以上の場合）、本実施形態では、ＣＰＵ１０は第１ベクトルを算出不可能と判断する。この場合、第１ベクトルデータ５３１は、第１ベクトルが算出不可能であったことを示す内容に更新される。また、検出されたマーカ座標が２つの場合と同様、更新前の第１ベクトルデータは、前回第１ベクトルデータ５３２としてメインメモリ１３に更新して記憶される。
【００９８】
なお、本実施形態では、第１ベクトルの算出方法として、２つのマーカ座標から第１ベクトルを算出する方法を適用したが、第１ベクトルの算出方法は他の方法であってもよい。第１ベクトルの算出方法は、少なくともマーカ座標を用いて第１ベクトルを算出する方法であればよく、例えば、マーカ座標データに加えて、加速度センサ３７の出力である加速度データを用いて第１ベクトルを算出する方法であってもよい。より具体的には、第１ベクトルの算出方法としては、検出されたマーカ座標が１つである場合に、加速度データを用いてもう１つのマーカ座標を推定することによって、２つのマーカ座標を算出して第１ベクトルを算出する方法が考えられる。また、マーカ座標が３つ以上検出された場合に、３つ以上のマーカ座標から、２つマーカ座標間の距離等に関する所定の条件を満たす２つのマーカ座標を選出し、第１ベクトルを算出するようにしてもよい。
【００９９】
続くステップＳ４において、第２ベクトル算出処理が実行される。第２ベクトル算出処理においては、ステップＳ２でメインメモリ１３に記憶された操作データ５２に含まれる加速度データ５２２に基づいて第２ベクトルが算出される。以下、図１７および図１８を用いて第２ベクトル算出処理を説明する。
【０１００】
まず、図１７を用いて第２ベクトル算出処理の概要を説明する。図１７は、第２ベクトル算出処理を説明するための図である。第２ベクトル算出処理において、ゲーム装置３はまず、加速度センサ３７によって検出された加速度ベクトルＶ２ａから仮ベクトルｖｈを算出する。仮ベクトルとは、加速度ベクトルそのものによって表されるコントローラ７の傾きを示す。具体的には、仮ベクトルｖｈは、加速度ベクトルＶ２ａのＸ’成分およびＹ’成分を抽出し、抽出した２次元ベクトルを、所定の座標変換によってｘｙ座標系（図１１参照）のベクトルに変換したものである。つまり、仮ベクトルｖｈは、ｘｙ座標系で表され、ｘｙ座標系の原点を始点とするベクトルである。また、仮ベクトルは長さが１の単位ベクトルとされる。仮ベクトルは、加速度ベクトルから一意に決められる。仮ベクトルは、加速度ベクトルが重力加速度を表す（加速度ベクトルが重力方向を向く）と仮定したときのコントローラ７の傾きを表すベクトルである。
【０１０１】
なお、加速度ベクトルＶ２ａのｘ成分およびｙ成分を抽出する理由は、第１の実施形態では、Ｚ’軸周りの回転に関する（Ｘ’Ｙ’方向に関する）コントローラ７の傾きを算出することが目的であるので、加速度ベクトルのＺ’成分は不要だからである。また、抽出した２次元ベクトルに対して所定の座標変換を行う目的は、加速度ベクトルに対応するベクトルを、第１ベクトルと同じ座標系において、理想的な状態において第１ベクトルと同じ方向を示すべきベクトルとして表すためである。このように、第１ベクトルと第２ベクトルとを同じ座標系で処理することによって、第１ベクトルおよび第２ベクトルを用いて出力ベクトルを算出する処理が容易になる。
【０１０２】
仮ベクトルｖｈを算出すると、ゲーム装置３は次に、当該仮ベクトルｖｈと前回第２ベクトルＶ２ｂ’とに基づいて第２ベクトルＶ２ｂを算出する（図１７参照）。なお、仮ベクトルと同様、第２ベクトルおよび前回第２ベクトルはともに、長さが１の単位ベクトルであり、かつ、ｘｙ座標系の原点を始点とするベクトルである。ここで、図１７に示すように、第２ベクトルＶ２ｂは、前回第２ベクトルＶ２ｂ’の方向を仮ベクトルｖｈの方向に所定の度合いで近づけたベクトルとなる。以下では、当該所定の度合いを有効度ｋ（０≦ｋ≦１）として表す。具体的には、第２ベクトルＶ２ｂは、原点から点Ｐへの方向を向き、長さが１のベクトルとなる。点Ｐは、前回第２ベクトルＶ２ｂ’の終点と仮ベクトルｖｈの終点とを結ぶ線分をｋ：（１−ｋ）に内分する点である。有効度ｋは、仮ベクトルｖｈの長さに基づいて算出される。なお、有効度ｋの算出方法の詳細については後述する。
【０１０３】
以下、図１８を用いて第２ベクトル算出処理の詳細を説明する。図１８は、図１６に示すステップＳ４の第２ベクトル算出処理の詳細を示すフローチャートである。第２ベクトル算出処理においてはまずステップＳ１１において、加速度センサ３７によって検出された加速度ベクトルＶ２ａのＸ’Ｙ’成分に関する長さＬ１が算出される。加速度ベクトルＶ２ａを（ａｘ，ａｙ，ａｚ）とすると、長さＬ１は次の式に従って算出することができる。
Ｌ１＝（ａｘ2 ＋ａｙ2 ）1/2 
【０１０４】
続くステップＳ１２においては、上記仮ベクトルｖｈ（図１７参照）が算出される。仮ベクトルｖｈは、上記加速度ベクトルＶ２ａから算出することができる。ＣＰＵ１０は、メインメモリ１３に記憶されている加速度データ５２２を参照して、以下の式に従って仮ベクトルｖｈの各成分（ｈｘ，ｈｙ）を算出する。
ｈｘ＝−ａｙ／Ｌ１
ｈｙ＝−ａｘ／Ｌ１
なお、上式において、ａｘは加速度ベクトルＶ２ａのＸ’成分値であり、ａｙは加速度ベクトルＶ２ａのＹ’成分値である。上式において、ｈｘを算出するために−ａｙを用い、ｈｙを算出するために−ａｘを用いているのは、加速度ベクトルの座標系（Ｘ’Ｙ’Ｚ’座標系）から第１ベクトルの座標系（ｘｙ座標系）への座標変換を行うためである。また、−ａｙおよび−ａｘの各値をそれぞれ長さＬ１で除算しているのは、仮ベクトルｖｈの長さを１とするためである。
【０１０５】
続くステップＳ１３〜Ｓ１７の一連の処理において、長さＬ１に基づいて第１変数ｄ１が算出される。これら一連の処理においては、第１変数ｄ１は、０≦ｄ１≦１の範囲で、長さＬ１の値が１に近いほど第１変数ｄ１の値が大きくなるように算出される。まず、ステップＳ１３において、長さＬ１が１より小さいか否かが判定される。ステップＳ１３の判定において、長さＬ１が１以上である場合、ステップＳ１４の処理が実行される。一方、長さＬ１が１よりも小さい場合、ステップＳ１５の処理が実行される。
【０１０６】
ステップＳ１４においては、長さＬ１が２より小さいか否かが判定される。ステップＳ１４の判定において、長さＬ１が２よりも小さい場合、ステップＳ１６の処理が実行される。一方、長さＬ２が２以上である場合、ステップＳ１７の処理が実行される。
【０１０７】
ステップＳ１５においては、長さＬ１の値がそのまま第１変数ｄ１の値とされる。また、ステップＳ１６においては、第１変数ｄ１は次の式に従って算出される。
ｄ１＝２−Ｌ１
また、ステップＳ１７においては、第１変数ｄ１は“０”に設定される。ステップＳ１５〜Ｓ１７に示したように、第１変数ｄ１は、長さＬ１の長さ１に対する近さを表す変数である。また、第１変数ｄ１は０≦ｄ１≦１の範囲で表されるので、Ｌ１が２以上である場合には、ｄ１の値は０とする。ステップＳ１５、Ｓ１６またはＳ１７の次にステップＳ１８の処理が実行される。
【０１０８】
ステップＳ１８において、第１変数ｄ１に基づいて有効度ｋが算出される。上述したように、有効度ｋは、第２ベクトルＶ２ｂを算出する際において、前回ベクトルｖｂｈの方向を仮ベクトルｖｈの方向に近づける度合いを示す変数である。具体的には、ＣＰＵ１０は、以下の式に従って有効度ｋを算出する。
ｋ＝ｄ１2 ×Ａ
上式において、Ａ（＞０）は傾き算出プログラム５１１において予め定められた定数であり、定数Ａを示すデータはメインメモリ１３に予め記憶されている。上式からわかるように、有効度ｋは、０≦ｋ≦１の範囲で、第１変数ｄ１の値が大きくなるほど大きくなる。
【０１０９】
続くステップＳ１９において、第２ベクトルＶ２ｂが算出される。本実施形態においては、第２ベクトルＶ２ｂは、仮ベクトルｖｈ、前回第２ベクトルＶ２ｂ’、および有効度ｋを用いて算出される。具体的には、ＣＰＵ１０は、まず、以下の式に従ってベクトル（ａｈｘ’，ａｈｙ’）を算出する。
ａｈｘ’＝（ｈｘ−ｂｈｘ）×ｋ＋ｂｈｘ
ａｈｙ’＝（ｈｙ−ｂｈｙ）×ｋ＋ｂｈｙ
上式においては、仮ベクトルｖｈを（ｈｘ，ｈｙ）とし、前回第２ベクトルＶ２ｂ’を（ｂｈｘ，ｂｈｙ）とする。上式によって算出されるベクトル（ａｈｘ’，ａｈｙ’）は、第２ベクトルＶ２ｂと同じ方向を向くベクトルである。次に、ＣＰＵ１０は、以下の式に従って上記ベクトルを単位ベクトルに補正することによって第２ベクトルＶ２ｂ＝（ａｈｘ，ａｈｙ）を算出する。
ａｈｘ＝ａｈｘ’／（（ａｈｘ’2 ＋ａｈｙ’2 ）1/2 ）
ａｈｙ＝ａｈｙ’／（（ａｈｘ’2 ＋ａｈｙ’2 ）1/2 ）
上式によって第２ベクトルＶ２ｂが算出される。ＣＰＵ１０は、算出された第２ベクトルを示すデータを第２ベクトルデータ５３３としてメインメモリ１３に更新して記憶する。上記ステップＳ１９の処理が完了すると、ＣＰＵ１０は第２ベクトル算出処理を終了する。
【０１１０】
なお、本実施形態では、加速度センサ３７によって検出された加速度ベクトルと前回第２ベクトルとを用いて第２ベクトルを算出した。ここで、他の実施形態においては、第２ベクトルの算出方法は、加速度ベクトルを用いて算出する方法であればどのようなものであってよく、例えば、加速度ベクトルのみを用いて第２ベクトルを算出するようにしてもよい。具体的には、加速度ベクトルに上記座標変換を行ったベクトル、すなわち、上記仮ベクトルを第２ベクトルとして用いるようにしてもよい。
【０１１１】
図１６の説明に戻り、ステップＳ５において、出力ベクトル算出処理が実行される。出力ベクトル算出処理は、第１ベクトルおよび第２ベクトルを用いて出力ベクトルを算出するための処理である。以下、図１９を用いて出力ベクトル算出処理を説明する。
【０１１２】
図１９は、図１６に示すステップＳ５の出力ベクトル算出処理の詳細を示すフローチャートである。出力ベクトル算出処理においては、まずステップＳ２１において、ＣＰＵ１０は、ステップＳ３で第１ベクトルの算出が成功したか否かを判定する。ステップＳ２１の判定は、メインメモリ１３に記憶されている第１ベクトルデータ５３１を参照することによって行うことができる。すなわち、第１ベクトルデータ５３１がベクトル値を示す場合、第１ベクトルの算出が成功したと判定され、第１ベクトルデータ５３１が算出不可能であったことを示す場合、第１ベクトルの算出が成功しなかったと判定される。ステップＳ２１の判定の結果、第１ベクトルの算出が成功したと判定される場合、ステップＳ２３〜Ｓ２８の処理が実行される。Ｓ２３〜Ｓ２８の処理は、第１ベクトルに基づいて出力ベクトルを算出する処理である。一方、第１ベクトルの算出が成功しなかったと判定される場合、ステップＳ２２の処理が実行される。Ｓ２２の処理は、第１ベクトルを用いずに第２ベクトルを用いて出力ベクトルを算出する処理である。
【０１１３】
ステップＳ２２においては、第２ベクトルが出力ベクトルに決定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている出力ベクトルデータ５３６の内容を第２ベクトルデータ５３３と同じ内容に更新して記憶する。このように、本実施形態では、第１ベクトルの算出に失敗した場合、第２の方法が選択され、第１ベクトルを用いずに第２ベクトルを用いて出力ベクトルが算出される。ステップＳ２２の処理が終了すると、ＣＰＵ１０は出力ベクトル算出処理を終了する。
【０１１４】
なお、本実施形態においては、第２ベクトルがそのまま出力ベクトルとして用いられる場合を例として説明したが、ステップＳ２２においては、第１ベクトルを用いずに第２ベクトルを用いて出力ベクトルを算出することができる方法であればどのような方法が用いられてもよい。例えば、後述する第２の実施形態のように、第２ベクトルと前回の出力ベクトルとを用いて出力ベクトルを算出するようにしてもよい。
【０１１５】
一方、ステップＳ２３において、ＣＰＵ１０は、加速度ベクトルの向きの変化量を算出する。具体的には、メインメモリ１３に記憶されている加速度データ５２２と前回加速度データ５３４とを参照し、加速度センサ３７によって前回に検出された加速度の向きに対する今回に検出された加速度の向きの変化量を算出する。変化量は、例えば、前回の加速度ベクトルと今回の加速度ベクトルとのなす角の大きさとして算出することができる。算出された変化量を示すデータは、変化量データ５３５としてメインメモリ１３に記憶される。
【０１１６】
続くステップＳ２４において、ＣＰＵ１０は、ステップＳ２３で算出された変化量が所定量以下であるか否かを判定する。この所定量は傾き算出プログラム５１１において予め定められている。ステップＳ２４の判定処理は、加速度センサ３７によって検出される加速度が実際のコントローラ７の傾きに正確に対応するか否かを判定するための処理である。ステップＳ２４の判定の結果、変化量が所定量以下である場合、ステップＳ２５〜Ｓ２７の処理が実行される。一方、変化量が所定量よりも大きい場合、ステップＳ２５〜Ｓ２７の処理がスキップされてステップＳ２８の処理が実行される。
【０１１７】
以上のように、本実施形態においては、検出された加速度ベクトルが実際のコントローラ７の傾きに正確に対応していると判定される場合（加速度ベクトルが信頼できる場合）、後述するステップＳ２５〜Ｓ２７の処理が実行される。これによって、第１ベクトルと第２ベクトルとの比較結果に応じて第１ベクトルが補正される。ここで、仮に、加速度ベクトルが実際のコントローラ７の傾きに正確に対応していない場合にステップＳ２５〜Ｓ２７の処理が実行されるとすれば、加速度ベクトルから算出される第２ベクトルは正確でないため、ステップＳ２５〜Ｓ２７における補正処理も正確に行うことができなくなる。そこで、本実施形態においては、ステップＳ２３およびＳ２４の処理によって加速度ベクトルが信頼できるものであるか否かを判定し、信頼できるものである場合にのみステップＳ２５〜Ｓ２７の処理を実行するようにしている。これによって、不正確な場合の第２ベクトルを用いて第１ベクトルを補正することがなくなるので、第１ベクトルをより正確に算出することができ、ひいては出力ベクトルをより正確に算出することができる。
【０１１８】
ステップＳ２５〜Ｓ２７においては、第１ベクトルと第２ベクトルとの比較が行われ、比較結果に応じて第１ベクトルが補正される。具体的には、第１ベクトルと第２ベクトルとの向きが反対であるか否かに応じて、第１ベクトルが補正される。まずステップＳ２５において、第１ベクトルと第２ベクトルとの内積値が算出される。続くステップＳ２６において、ステップＳ２５で算出された内積値が負であるか否かが判定される。ステップＳ２６の判定処理は、第１ベクトルと第２ベクトルとの角度差が９０°〜２７０°の範囲であるか否かを判定することによって、第１ベクトルと第２ベクトルとの向きが反対であるか否かを判定するための処理である。なお、本実施形態では、第１ベクトルと第２ベクトルとの角度差が９０°〜２７０°の範囲に含まれる場合、両者が逆向きであると判断しているが、他の実施形態においては、角度差が例えば１３５°〜２２５°の範囲に含まれる場合に両者が逆向きであると判断するようにしてもよい。
【０１１９】
ステップＳ２６の判定の結果、内積値が負である場合、ステップＳ２７の処理が実行される。すなわち、ステップＳ２７において、向きが逆方向になるように第１ベクトルが補正される。ＣＰＵ１０は、補正後の第１ベクトルを示すデータを第１ベクトルデータ５３１としてメインメモリ１３に記憶する。ステップＳ２７の後、ステップＳ２８の処理が実行される。一方、ステップＳ２６の判定の結果、内積値が０以上である場合、ステップＳ２７の処理がスキップされてステップＳ２８の処理が実行される。
【０１２０】
ステップＳ２８においては、第１ベクトルが出力ベクトルに決定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている出力ベクトルデータ５３６の内容を第１ベクトルデータ５３１と同じ内容に更新して記憶する。このように、本実施形態では、第１ベクトルの算出に成功した場合、第１ベクトルが選択され、第１ベクトルを用いて出力ベクトルが算出される。ステップＳ２８の処理が終了すると、ＣＰＵ１０は出力ベクトル算出処理を終了する。以上の出力ベクトル算出処理によってコントローラ７の傾きが算出される。
【０１２１】
図１６の説明に戻り、ステップＳ６において、ステップＳ５で算出されたコントローラ７の傾きに応じたゲーム処理が実行される。具体的には、メインメモリ１３に記憶されている出力ベクトルデータ５３６がゲーム処理を実行するプログラムに渡され（出力され）、当該プログラムによって当該ゲーム処理が実行される。当該ゲーム処理としては、例えば、ゲーム空間に登場するプレイヤキャラクタを上記傾きに応じて移動させる処理等が実行される。
【０１２２】
続くステップＳ７において、ステップＳ６で実行されたゲーム処理の結果を反映したゲーム画像が生成されて、ゲーム画像がモニタ２に表示される。続くステップＳ８において、ＣＰＵ１０はゲームを終了するか否かを判定する。ステップＳ８の判定は、例えば、プレイヤがゲームをクリアしたか否かや、ゲームに制限時間が設けられている場合には当該制限時間が経過したか否かによって行われる。ステップＳ８の判定結果が否定である場合、ステップＳ２の処理が再度実行され、以降、ゲームを終了すると判定されるまでステップＳ２〜Ｓ８の処理ループが実行される。一方、ステップＳ８の判定結果が肯定である場合、ＣＰＵ１０は図１６に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【０１２３】
なお、図１６に示したゲーム処理では、第２ベクトルを算出した（ステップＳ４）後、第１ベクトルが算出されたか否かを判定した（ステップＳ２１）が、他の実施形態では、第１ベクトルが算出されたか否かを判定した後、第１ベクトルが算出されなかった場合にのみ第２ベクトルを算出するようにしてもよい。具体的には、図１６のステップＳ３の後ステップＳ５の処理を実行し、ステップＳ５の処理におけるＳ２２の処理で、ステップＳ４と同様の処理によって第２ベクトルを算出するようにしてもよい。これによれば、出力ベクトルの算出のために第２ベクトルを用いない場合には第２ベクトルを算出する処理を省略することができるので、処理を簡略化することができゲーム装置３の負担を軽減することができる。
【０１２４】
以上のように、本実施形態によれば、加速度センサ３７を用いてコントローラ７の傾きを算出する方法（上記第１の方法）と、撮像手段を用いてコントローラ７の傾きを算出する方法（上記第２の方法）とによって算出される２種類の傾きを用いて、最終的なコントローラ７の傾きを算出する。これによって、第１および第２の方法の利点を生かしつつ欠点を補うことができるので、コントローラ７の傾きを正確に算出することができるとともに、常に傾きを算出することができる。
【０１２５】
なお、上記実施形態では、加速度ベクトルが信頼できるか否かを判定するために、ステップＳ２３において加速度ベクトルの向きの変化量を算出した。ここで、他の実施形態においては、加速度ベクトルの向きの変化量に代えて、加速度ベクトルの大きさを用いるようにしてもよい。このとき、ステップＳ２４においては、ＣＰＵ１０は、加速度ベクトルの大きさと重力加速度の大きさとの差分値が所定値以下となるか否かを判定する。ここで、加速度ベクトルが信頼できない場合とは、例えば、コントローラ７が急激に移動させられたり振動していたりする場合である。これらの場合、加速度ベクトルの大きさは、重力加速度の大きさである１から離れた値となる。したがって、加速度ベクトルの大きさと重力加速度の大きさとの差分が所定値以下である場合にのみステップＳ２５〜Ｓ２７の処理を実行することによって、上記実施形態と同様の効果を得ることができる。また、さらに他の実施形態においては、ステップＳ２３において、加速度ベクトルの値の変化量を用いるようにしてもよい。ベクトルの値の変化量が所定値以下か否かによってベクトルの信頼性を判定することによって、ベクトルの方向と、加速度の大きさの両方の変化を反映させた判定を行うことができる。
【０１２６】
なお、上記第１の実施形態においては、ステップＳ２３〜Ｓ２７の処理を１フレーム毎に実行するものとしたが、他の実施形態においては、数フレーム毎に当該処理を実行するようにしてもよい。また、ステップＳ２３およびＳ２４の処理を実行せずに、ステップＳ２５〜Ｓ２７の処理を１フレーム（または数フレーム）毎に実行するようにしてもよい。さらに、他の実施形態においては、上記変化量が所定値以上となった直後にのみステップＳ２５〜Ｓ２７を実行するようにしてもよい。具体的には、前回のフレームにおいてステップＳ２４の判定結果が否定であり、かつ、今回のフレームにおいてステップＳ２４の判定結果が肯定となった場合のみ、ステップＳ２５〜Ｓ２７の処理を実行するようにしてもよい。
【０１２７】
（第２の実施形態）
次に、第２の実施形態に係る傾き算出装置の一例であるゲーム装置を含むゲームシステムについて説明する。第２の実施形態に係るゲームシステムのハード構成は第１の実施形態に係るゲームシステム１と同様である。また、第２の実施形態においては、ゲーム装置３において実行されるゲーム処理のうちで、出力ベクトル算出処理の内容が第１の実施形態と異なっている。以下、第１の実施形態との相違点を中心に第２の実施形態について説明する。
【０１２８】
図２０は、第２の実施形態において実行される出力ベクトル算出処理の詳細を示すフローチャートである。なお、第２の実施形態におけるゲーム処理は、図１９に示す出力ベクトル算出処理以外の処理については第１の実施形態と同様である。
【０１２９】
第２の実施形態の出力ベクトル算出処理においては、まずステップＳ３１において、第１ベクトルの算出状態が変化したか否かが判定される。上述したように、「第１ベクトルの算出状態が変化する」とは、前回において第１ベクトルが算出されていた場合に今回において第１ベクトルが算出されなかったこと、または、前回において第１ベクトルが算出されなかった場合に今回において第１ベクトルが算出されたことを意味する。ステップＳ３１の判定は、メインメモリ１３に記憶されている第１ベクトルデータ５３１および前回第１ベクトルデータ５３２を参照して行われる。具体的には、第１ベクトルデータ５３１が算出不可能であったことを示し、かつ、前回第１ベクトルデータ５３２がベクトル値を示す場合、または、第１ベクトルデータ５３１がベクトル値を示し、かつ、前回第１ベクトルデータ５３２が算出不可能であったことを示す場合、ＣＰＵ１０は第１ベクトルの算出状態が変化したと判定する。ステップＳ３１の判定の結果、算出状態が変化したと判定される場合、ステップＳ３２の処理が実行される。一方、算出状態が変化していないと判定される場合、ステップＳ３２の処理がスキップされてステップＳ３３の処理が実行される。
【０１３０】
ステップＳ３２においては、カウンタ値が０に設定される。具体的にはＣＰＵ１０は、メインメモリ１３に記憶されているカウンタ値データ５３８の内容を、“０”を示す内容に更新して記憶する。ステップＳ３２の後、ステップＳ３３の処理が実行される。
【０１３１】
ステップＳ３３においては、カウンタ値が、予め定められた所定値以下であるか否かが判定される。なお、ステップＳ３２で“０”に設定されたカウンタ値は、所定値を超えるまでの間、１フレームにおいて１ずつインクリメントされるので、当該カウンタ値は、第１ベクトルの算出状態が変化してからの経過時間（フレーム時間を単位とした時間）を表す。したがって、ステップＳ３２の処理は、算出状態が変化してからの経過時間のカウントを開始する処理であり、ステップＳ３３の処理は、当該経過時間が所定時間を超えたか否かを判定するための処理である。ステップＳ３３の判定の結果、カウンタ値が所定値以下である場合、ステップＳ３４〜Ｓ３７の処理が実行される。一方、カウンタ値が所定値よりも大きい場合、ステップＳ３８の処理が実行される。
【０１３２】
ステップＳ３４においては、カウンタ値の大きさに応じて反映度の値が決定される。ＣＰＵ１０は、メインメモリ１３に記憶されているカウンタ値データ５３８を参照してカウンタ値の値を特定する。そして、０（％）〜１００（％）の範囲で、カウンタ値の大きさが大きくなるほど小さな値となるように反映度を決定する。決定した反映度を示すデータは、反映度データ５３９としてメインメモリ１３に記憶される。
【０１３３】
続くステップＳ３５において、ＣＰＵ１０は、前回出力ベクトルと対象ベクトルとを上記反映度に従って合成する。ここで、前回出力ベクトルとは、前回のフレームにおいて算出された出力ベクトルのことであり、メインメモリ１３に記憶されている前回出力ベクトルデータ５３７により示されるベクトルである。対象ベクトルとは、合成の対象となるベクトルのことであり、具体的には、第１ベクトルが算出された場合には第１ベクトルのことであり、第１ベクトルが算出されなかった場合には第２ベクトルのことである。なお、第１ベクトルが対象ベクトルとなる場合、他の実施形態においては、第１ベクトルに上記第１の実施形態と同様の補正を行うようにしてもよい。すなわち、ステップＳ２３〜Ｓ２７の処理を行った結果得られる第１ベクトルを対象ベクトルとして用いてもよい。
【０１３４】
ステップＳ３５における具体的な処理は、ステップＳ１８の仮ベクトルを前回出力ベクトルとし、ステップＳ１８の前回第２ベクトルを対象ベクトルとし、ステップＳ１８の有効度を反映度とすれば、ステップＳ１８の処理と同様である。これによって、合成の結果得られるベクトルは、反映度の値が大きいほど前回出力ベクトルに近い向きとなり、反映度の値が小さいほど対象ベクトルに近い向きとなるように算出される。反映度が“１００％”の場合、合成の結果得られるベクトルは前回出力ベクトルと同じ方向となり、反映度が“０％”の場合、合成の結果得られるベクトルは対象ベクトルと同じ方向となる。
【０１３５】
続くステップＳ３６において、ステップＳ３５で得られたベクトルが出力ベクトルに決定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている出力ベクトルデータ５３６の内容を、ステップＳ３５で得られたベクトルのデータと同じ内容に更新して記憶する。
【０１３６】
続くステップＳ３７において、カウンタ値が１だけインクリメントされる。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されているカウンタ値データ５３８の内容を、１だけ増加した値を示す内容に更新して記憶する。ステップＳ３７の後、ＣＰＵ１０は、図２０に示す出力ベクトル算出処理を終了する。
【０１３７】
一方、ステップＳ３８においては、図１９に示したステップＳ２１〜Ｓ２８と同様の処理が実行される。つまり、第２の実施形態においては、カウンタ値が所定値よりも大きい場合、第１の実施形態と同様の方法で出力ベクトルが算出算出される。
【０１３８】
以上のように、第２の実施形態においては、ゲーム装置３は、第１ベクトルの算出状態が変化したことに応じて経過時間の測定を開始する（ステップＳ３２）。そして、経過時間が所定時間を超えるまでは、対象ベクトルをそのまま出力ベクトルとするのではなく、前回出力ベクトルを反映させたベクトルを出力ベクトルとする（ステップＳ３４〜Ｓ３６）。このように、前回出力ベクトルを用いて出力ベクトルを算出する理由は、第１ベクトルの算出状態が変化した直後において出力ベクトルの向きが急激に変化することを防止するためである。ここで、あるフレームにおいて算出される第１ベクトルと第２ベクトルとは必ずしも同じ値とはならないにもかかわらず、第１ベクトルの算出状態が変化した場合には、出力ベクトルとして用いられるベクトルが、第１ベクトルから第２ベクトルへ、または、第２ベクトルから第１ベクトルへ変化したことになる。そのため、第１ベクトルの算出状態が変化した場合には、出力ベクトルの向きが急激に変化することがある。このとき、出力ベクトルに応じたゲーム処理の内容も急激に変化する（例えば、ゲーム空間中のオブジェクトの移動速度が急に変化する）ことになり、プレイヤが違和感を感じるおそれがある。これを防止するために、第２の実施形態においては、第１ベクトルの算出状態が変化した場合であっても出力ベクトルの向きが急激に変化することを防止すべく、前回出力ベクトルと対象ベクトルとを用いて出力ベクトルを算出するようにしている。これによって、前回出力ベクトルからの今回の出力ベクトルへの変化を緩和することができるので、プレイヤが違和感を感じることを防止することができる。
【０１３９】
また、他の実施形態においては、上記ステップＳ３８において、後述する第３の実施形態の出力ベクトル算出処理（図２１）を実行するようにしてもよい。
【０１４０】
（第３の実施形態）
次に、第３の実施形態に係る傾き算出装置の一例であるゲーム装置を含むゲームシステムについて説明する。第３の実施形態に係るゲームシステムのハード構成は第１の実施形態に係るゲームシステム１と同様である。また、第２の実施形態においては、ゲーム装置３において実行されるゲーム処理のうちで、出力ベクトル算出処理の内容が第１の実施形態と異なっている。以下、第１の実施形態との相違点を中心に第３の実施形態について説明する。
【０１４１】
図２１は、第３の実施形態において実行される出力ベクトル算出処理の詳細を示すフローチャートである。なお、第３の実施形態におけるゲーム処理は、出力ベクトル算出処理以外の処理については第１の実施形態と同様である。また、図２１において図１９と同じ処理については図１９と同じステップ番号を付し、詳細な説明を省略する。
【０１４２】
第３の実施形態においては、まず、ステップＳ４１において、正面度が算出される。具体的には、正面度は、加速度センサ３７によって検出される加速度ベクトルのＸ’成分およびＹ’成分の長さＬに基づいて算出される。なお、加速度ベクトルＶ１ａを（ａｘ，ａｙ，ａｚ）とすると、当該長さＬは次の式に従って算出することができる。
Ｌ＝（ａｘ2 ＋ａｙ2 ）1/2 
ここで、コントローラ７が正面を向いて静止している場合には、当該長さＬは重力加速度の大きさ、すなわち“１”になる。したがって、正面度は、長さＬが１に近いほど大きくなるように算出される。例えば、正面度Ｓは、次の式に従って算出される。
Ｓ＝Ｌ  （Ｌ≦１のとき）
Ｓ＝２−Ｌ  （１≦Ｌ≦２のとき）
Ｓ＝０  （Ｌ＞２のとき）
ＣＰＵ１０は、算出された正面度Ｓを示すデータを正面度データ５４０としてメインメモリ１３に記憶する。
【０１４３】
続くステップＳ４２においては、ステップＳ４１で算出された正面度Ｓが、予め定められた所定値よりも大きいか否かが判定される。ステップＳ４２の処理は、コントローラ７が正面に近い方向を向いているか否かを判定するための処理である。なお、コントローラ７が正面を向いている状態とは、コントローラ７のＹ’軸負方向（図７）が重力加速度の方向に一致する状態である。ステップＳ４２の判定の結果、正面度Ｓが所定値よりも大きい場合、第１の実施形態と同様のステップＳ２３〜Ｓ２８の処理が実行される。つまり、第１ベクトルを用いて出力ベクトルが算出される。一方、正面度Ｓが所定値以下である場合、第１の実施形態と同様のステップＳ２２の処理が実行される。つまり、第１ベクトルを用いずに第２ベクトルを用いて出力ベクトルが算出される。
【０１４４】
以上のように、第３の実施形態においては、コントローラ７が正面（正面に近い方向）を向いているか否かによって、第１の方法で出力ベクトルを算出するか、第２の方法で出力ベクトルを算出するかを切り替える。ここで、本実施形態では、図９に示すように、モニタ２の画面の正面付近でコントローラ７を操作することを前提とする。したがって、コントローラ７がほぼ正面を向いている状態ではコントローラ７は上記検知可能範囲となるが、コントローラ７が上方向を向いていたり下方向を向いていたりする場合には、検知可能範囲にないと想定される。この場合、マーカ８ａおよび８ｂは撮像されないので、撮像画像を用いた第１の方法で第１ベクトルを算出することができない。また、第１ベクトルを仮に算出することができたとしても、コントローラ７が上を向いているならば例えば太陽光や部屋の蛍光灯等をマーカと誤認識したものと想定されるので、算出された第１ベクトルは不正確であると考えられる。そこで、第３の実施形態においては、コントローラ７が正面を向いていないと判定される場合（ステップＳ４２でＮｏの場合）には、第２の方法で出力ベクトルを算出する。これによって、撮像手段がマーカを誤認識すること起因して不正確な出力ベクトルが算出することを防止することができる。
【０１４５】
なお、他の実施形態においては、第１の実施形態におけるステップＳ２１の判定処理と、第３の実施形態におけるステップＳ４２の判定処理との両方を実行するようにしてもよい。すなわち、ゲーム装置３は、ステップＳ２１およびＳ４２の両方の判定結果が肯定である場合、第１の方法で出力ベクトルを算出し、ステップＳ２１およびＳ４２の少なくともいずれかの判定結果が否定である場合、第２の方法で出力ベクトルを算出するようにしてもよい。
【０１４６】
また、上記第３の実施形態では、正面度は、撮像手段の撮像方向に平行でない２軸方向（Ｘ’軸方向およびＹ’軸方向）の加速度の大きさに基づいて算出された。ここで、他の実施形態においては、正面度は、撮像手段の撮像方向に平行な１軸の成分（Ｚ’成分）の加速度の大きさに基づいて算出されてもよい。このとき、加速度ベクトルのＺ’成分の長さは、コントローラ７が正面に近い方向を向くほど小さくなる（０に近づく）ので、ゲーム装置３は、加速度ベクトルのＺ’成分の長さが小さくなるほど正面度が大きくなるように正面度を算出する。上記第３の実施形態のように、加速度ベクトルのＸ’成分およびＹ’成分の長さを用いて正面度を算出する場合、加速度センサ３７はＸ’軸およびＹ’軸の２軸方向の加速度を検出すればよいので、加速度センサ３７の構成を簡易化することができるという利点がある。一方、加速度ベクトルのＺ’成分の長さを用いて正面度を算出する場合、正面度をより簡単に算出することができるという利点がある。
【産業上の利用可能性】
【０１４７】
本発明は、入力装置の傾きを検出することによる操作入力において、加速度から傾きを検出する利点を活かしつつ、精度の高い傾き検出を行うこと等を目的として、例えばゲーム装置やゲームプログラムに利用することが可能である。
【図面の簡単な説明】
【０１４８】
【図１】本発明の一実施形態に係る座標算出装置一例であるゲーム装置を含むゲームシステムの外観図
【図２】ゲーム装置３の機能ブロック図
【図３Ａ】コントローラ７の斜視図
【図３Ｂ】コントローラ７の斜視図
【図４】コントローラ７を前方から見た図
【図５Ａ】コントローラ７の内部構造を示す図
【図５Ｂ】コントローラ７の内部構造を示す図
【図６】コントローラ７の構成を示すブロック図
【図７】コントローラ７の傾きと加速度センサの出力との関係を示す図
【図８】コントローラ７の傾きと加速度センサの出力との関係を示す図
【図９】コントローラ７を用いてゲーム操作するときの状態を概説する図解図
【図１０】マーカ８ａおよび８ｂとコントローラ７との視野角を説明するための図
【図１１】対象画像を含む撮像画像の一例を示す図
【図１２】コントローラ７がＺ’軸を中心とした回転に関して傾いている状態を示す図
【図１３】図１２に示す状態において得られる第１ベクトルおよび第２ベクトルを示す図
【図１４】ある状態における第１ベクトルＶ１および第２ベクトルＶ２ｂを示す図
【図１５】ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図
【図１６】ゲーム装置３において実行されるゲーム処理の流れを示すフローチャート
【図１７】第２ベクトル算出処理を説明するための図
【図１８】図１６に示すステップＳ４の第２ベクトル算出処理の詳細を示すフローチャート
【図１９】図１６に示すステップＳ５の出力ベクトル算出処理の詳細を示すフローチャート
【図２０】第２の実施形態において実行される出力ベクトル算出処理の詳細を示すフローチャート
【図２１】第３の実施形態において実行される出力ベクトル算出処理の詳細を示すフローチャート
【符号の説明】
【０１４９】
１  ゲームシステム
２  モニタ
３  ゲーム装置
４  光ディスク
５  外部メモリカード
７  コントローラ
８ａ，８ｂ  マーカ
１０  ＣＰＵ
１３  メインメモリ
３２  操作部
３５  撮像情報演算部
３６  通信部
３７  加速度センサ
４０  撮像素子
５１  ゲームプログラム
５１１  傾き算出プログラム
【図１】
0004684147.tif 000002
【図２】
0004684147.tif 000003
【図３Ａ】
0004684147.tif 000004
【図３Ｂ】
0004684147.tif 000005
【図４】
0004684147.tif 000006
【図５Ａ】
0004684147.tif 000007
【図５Ｂ】
0004684147.tif 000008
【図６】
0004684147.tif 000009
【図７】
0004684147.tif 000010
【図８】
0004684147.tif 000011
【図９】
0004684147.tif 000012
【図１０】
0004684147.tif 000013
【図１１】
0004684147.tif 000014
【図１２】
0004684147.tif 000015
【図１３】
0004684147.tif 000016
【図１４】
0004684147.tif 000017
【図１５】
0004684147.tif 000018
【図１６】
0004684147.tif 000019
【図１７】
0004684147.tif 000020
【図１８】
0004684147.tif 000021
【図１９】
0004684147.tif 000022
【図２０】
0004684147.tif 000023
【図２１】
0004684147.tif 000024