(57)【要約】【課題】仮想的なオブジェクトの動きを振動によって感じさせることが可能な情報処理システムを提供する。【解決手段】運動演算部は姿勢・動き算出部によって算出されたコントローラの姿勢および／または動きに基づいて仮想オブジェクトの運動を演算する。波形生成部は、仮想オブジェクトが他のオブジェクトと接触している又は接触するときの仮想オブジェクトの運動状態に応じて振動波形を生成する。波形出力部は、波形生成部によって生成された複数の振動波形を合成し、当該合成した合成波形を示す信号をコントローラの振動子に出力する。【選択図】図８
2018106598.tif 000002
【特許請求の範囲】
【請求項１】
操作部と、
入力された振動波形を示す信号に応じた振動をする振動部と、
仮想オブジェクトの仮想的な運動を逐次演算し、前記操作部に対する操作に応じて当該仮想オブジェクトの運動に変化を加える運動演算部と、
前記運動演算部による演算に基づいて、前記仮想オブジェクトが他のオブジェクトに接触しているとき又は接触するときの前記仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成する波形生成部と、
前記波形生成部によって第１の振動波形を示す信号が生成されるときに前記波形生成部によって第２の振動波形を示す信号が生成される場合、前記第１の振動波形と前記第２の振動波形とを合成した合成波形を示す信号を前記振動部に出力する波形出力部と、を備える、情報処理システム。
【請求項２】
前記操作部の姿勢及び／又は動きを算出する姿勢・動き算出部をさらに備え、
前記運動演算部は、前記操作部の姿勢及び／又は動きに基づいて、前記仮想オブジェクトの運動に変化を加える、請求項１に記載の情報処理システム。
【請求項３】
前記操作部は、慣性センサを含み、
前記姿勢・動き算出部は、前記慣性センサからのデータに基づいて、前記操作部の姿勢及び／又は動きを算出する、請求項２に記載の情報処理システム。
【請求項４】
前記波形生成部は、前記仮想オブジェクトが前記他のオブジェクトと接触している状態で移動しているときの当該仮想オブジェクトの移動に応じた振動波形を示す信号を生成する、請求項１から３のいずれかに記載の情報処理システム。
【請求項５】
前記波形生成部は、前記仮想オブジェクトの移動速度が大きいほど、振幅の大きな振動波形を示す信号を生成する、請求項４に記載の情報処理システム。
【請求項６】
前記波形生成部は、前記仮想オブジェクトが前記他のオブジェクトと衝突した場合、当該衝突に応じた振動波形を示す信号を生成する、請求項１から５のいずれかに記載の情報処理システム。
【請求項７】
前記波形生成部は、前記仮想オブジェクトが前記他のオブジェクトと衝突した場合、当該仮想オブジェクトの衝突に応じた振動波形を示す信号を生成し、
前記波形出力部は、前記仮想オブジェクトの移動に応じた振動波形と、前記仮想オブジェクトの衝突に応じた振動波形とを合成した合成波形を示す信号を出力する、請求項４又は５に記載の情報処理システム。
【請求項８】
前記仮想オブジェクトは、仮想容器オブジェクトと、当該仮想容器オブジェクトに内包される少なくとも１つの内容物オブジェクトとを含み、
前記運動演算部は、前記仮想容器オブジェクトの姿勢及び／又は動きに変化を加えることで前記内容物オブジェクトの運動に変化を加える、請求項１から７のいずれかに記載の情報処理システム。
【請求項９】
前記内容物オブジェクトは複数の球体オブジェクトであり、
前記波形生成部は、前記複数の球体オブジェクトが前記仮想容器オブジェクト内を転がる場合に各球体オブジェクトの転がりに応じた振動波形を示す信号を生成し、前記複数の球体オブジェクトが衝突した場合に、各球体オブジェクトの衝突に応じた振動波形を示す信号を生成する、請求項８に記載の情報処理システム。
【請求項１０】
前記内容物オブジェクトは直方体オブジェクトであり、
前記波形生成部は、前記直方体オブジェクトが前記仮想容器オブジェクトに衝突した場合に、当該衝突に応じた振動波形を示す信号を生成する、請求項８に記載の情報処理システム。
【請求項１１】
前記内容物オブジェクトは仮想的な点または粒子であり、
前記波形生成部は、前記内容物オブジェクトが前記仮想容器オブジェクト内を移動する場合、当該移動に応じた振動波形を示す信号を生成する、請求項８に記載の情報処理システム。
【請求項１２】
前記波形出力部は、所定数を上限に複数の振動波形を合成し、当該合成した合成波形を示す信号を前記振動部に出力する、請求項１から１１のいずれかに記載の情報処理システム。
【請求項１３】
前記情報処理システムは、情報処理装置と操作装置を含み、
前記操作部および前記振動部は、前記操作装置に設けられ、
前記運動演算部、前記波形生成部、および前記波形出力部は、前記情報処理装置に設けられ、
前記情報処理装置は、前記操作装置との通信により、前記操作部からの入力を受信し、前記波形出力部からの出力を前記操作装置に送信する、請求項１から１２のいずれかに記載の情報処理システム。
【請求項１４】
前記波形出力部から出力される信号は、単位時間毎の波形の振幅または振幅の差分と、周波数または周波数の差分とを含む、請求項１３に記載の情報処理システム。
【請求項１５】
前記波形生成部は、前記信号として振動の振幅及び／又は周波数を示すデータを生成し、前記仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成しているときに前記仮想オブジェクトの運動状態が変化した場合、前記振幅及び／又は周波数を変化させる、請求項１から１４のいずれかに記載の情報処理システム。
【請求項１６】
前記運動演算部は、前記仮想オブジェクトの運動を示す数値を算出し、
前記振動波形を示す振動パターンデータが複数あり、
前記波形生成部は、前記数値に応じて複数の振動パターンデータの中からいずれかを選択し、選択した振動パターンデータに基づいて、前記振動波形を示す信号を生成する、請求項１から１５のいずれかに記載の情報処理システム。
【請求項１７】
前記波形生成部は、前記信号として振動の振幅及び／又は周波数を示すデータを生成し、前記数値に応じて、前記振幅及び／又は周波数を変化させる、請求項１６に記載の情報処理システム。
【請求項１８】
入力された振動波形を示す信号に応じた振動をする振動部を振動させる情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、前記コンピュータに、
仮想オブジェクトの仮想的な運動を逐次演算し、操作部に対する操作に応じて当該仮想オブジェクトの運動に変化を加える運動演算ステップと、
前記運動演算ステップにおける演算に基づいて、前記仮想オブジェクトが他のオブジェクトに接触しているとき又は接触するときの前記仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成する波形生成ステップと、
前記波形生成ステップにおいて第１の振動波形を示す信号が生成されるときに前記波形生成ステップにおいて第２の振動波形を示す信号が生成される場合、前記第１の振動波形と前記第２の振動波形とを合成した合成波形を示す信号を前記振動部に出力する波形出力ステップと、を実行させる、情報処理プログラム。
【請求項１９】
前記コンピュータに、前記操作部の姿勢及び／又は動きを算出する姿勢・動き算出ステップをさらに実行させ、
前記運動演算ステップは、前記操作部の姿勢及び／又は動きに基づいて、前記仮想オブジェクトの運動に変化を加える、請求項１８に記載の情報処理プログラム。
【請求項２０】
前記波形生成ステップは、前記仮想オブジェクトが前記他のオブジェクトと接触している状態で移動しているときの当該仮想オブジェクトの移動に応じた振動波形を示す信号を生成する、請求項１８又は１９に記載の情報処理プログラム。
【請求項２１】
前記波形生成ステップは、前記仮想オブジェクトの移動速度が大きいほど、振幅の大きな振動波形を示す信号を生成する、請求項２０に記載の情報処理プログラム。
【請求項２２】
前記波形生成ステップは、前記仮想オブジェクトが前記他のオブジェクトと衝突した場合、当該衝突に応じた振動波形を示す信号を生成する、請求項１８から２１のいずれかに記載の情報処理プログラム。
【請求項２３】
前記波形生成ステップは、前記仮想オブジェクトが前記他のオブジェクトと衝突した場合、当該仮想オブジェクトの衝突に応じた振動波形を示す信号を生成し、
前記波形出力ステップは、前記仮想オブジェクトの移動に応じた振動波形と、前記仮想オブジェクトの衝突に応じた振動波形とを合成した合成波形を示す信号を出力する、請求項２０又は２１に記載の情報処理プログラム。
【請求項２４】
前記仮想オブジェクトは、仮想容器オブジェクトと、当該仮想容器オブジェクトに内包される少なくとも１つの内容物オブジェクトとを含み、
前記運動演算ステップは、前記仮想容器オブジェクトの姿勢及び／又は動きに変化を加えることで前記内容物オブジェクトの運動に変化を加える、請求項１８から２３のいずれかに記載の情報処理プログラム。
【請求項２５】
入力された振動波形を示す信号に応じた振動をする振動部を振動させる情報処理装置であって、
仮想オブジェクトの仮想的な運動を逐次演算し、操作部に対する操作に応じて当該仮想オブジェクトの運動に変化を加える運動演算部と、
前記運動演算部による演算に基づいて、前記仮想オブジェクトが他のオブジェクトに接触しているとき又は接触するときの前記仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成する波形生成部と、
前記波形生成部によって第１の振動波形を示す信号が生成されるときに前記波形生成部によって第２の振動波形を示す信号が生成される場合、前記第１の振動波形と前記第２の振動波形とを合成した合成波形を示す信号を前記振動部に出力する波形出力部と、を備える、情報処理装置。
【請求項２６】
前記操作部の姿勢及び／又は動きを算出する姿勢・動き算出部をさらに備え、
前記運動演算部は、前記操作部の姿勢及び／又は動きに基づいて、前記仮想オブジェクトの運動に変化を加える、請求項２５に記載の情報処理装置。
【請求項２７】
前記波形生成部は、前記仮想オブジェクトが前記他のオブジェクトと接触している状態で移動しているときの当該仮想オブジェクトの移動に応じた振動波形を示す信号を生成する、請求項２５又は２６に記載の情報処理装置。
【請求項２８】
入力された振動波形を示す信号に応じた振動をする振動部を振動させる情報処理方法であって、
仮想オブジェクトの仮想的な運動を逐次演算し、操作部に対する操作に応じて当該仮想オブジェクトの運動に変化を加える運動演算ステップと、
前記運動演算ステップにおける演算に基づいて、前記仮想オブジェクトが他のオブジェクトに接触しているとき又は接触するときの前記仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成する波形生成ステップと、
前記波形生成ステップにおいて第１の振動波形を示す信号が生成されるときに前記波形生成ステップにおいて第２の振動波形を示す信号が生成される場合、前記第１の振動波形と前記第２の振動波形とを合成した合成波形を示す信号を前記振動部に出力する波形出力ステップと、を含む、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理プログラム、情報処理装置、および、情報処理方法に関する。
【背景技術】
【０００２】
従来より、入力装置を用いて画面上の位置を指示し、所定の場所が指示された場合に入力装置を振動させるものがある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−３４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来技術では指示された位置によって振動するか振動しないかだけであり、仮想的なオブジェクトの動きを振動によって感じさせるものではなかった。
【０００５】
それ故、本発明の目的は、仮想的なオブジェクトの動きを振動によって感じさせることが可能な情報処理システムを提供することである。
【課題を解決するための手段】
【０００６】
上記の課題を解決すべく、本発明は、以下の構成を採用した。
【０００７】
本発明の一例は、操作部と、振動部と、運動演算部と、波形生成部と、波形出力部と、を備える情報処理システムである。振動部は、入力された振動波形を示す信号に応じた振動をする。運動演算部は、仮想オブジェクトの仮想的な運動を逐次演算し、前記操作部に対する操作に応じて当該仮想オブジェクトの運動に変化を加える。波形生成部は、前記運動演算部による演算に基づいて、前記仮想オブジェクトが他のオブジェクトに接触しているとき又は接触するときの前記仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成する。波形出力部は、前記波形生成部によって第１の振動波形を示す信号が生成されるときに前記波形生成部によって第２の振動波形を示す信号が生成される場合、前記第１の振動波形と前記第２の振動波形とを合成した合成波形を示す信号を前記振動部に出力する。
【０００８】
ここで、「仮想オブジェクトの運動状態」とは、仮想オブジェクトの速度、加速度、回転等の運動の状態を含む。また、「仮想オブジェクトが他のオブジェクトに接触しているときの前記仮想オブジェクトの運動状態」とは、仮想オブジェクトが他のオブジェクトと接触している状態を維持しているときの当該仮想オブジェクトの運動状態（速度、加速度、回転等）を意味する。また、「仮想オブジェクトが他のオブジェクトに接触するときの前記仮想オブジェクトの運動状態」とは、仮想オブジェクトが他のオブジェクトと接触する際の（接触する瞬間の）当該仮想オブジェクトの運動状態（速度、加速度、回転等）を意味する。
【０００９】
また、「振動波形を示す信号」は、例えば、振動波形の振幅及び周波数であってもよい。また、「振動波形を示す信号」は、振動波形自体であってもよいし、振動波形を示す振動パターンデータを指定する信号であってもよい。
【００１０】
また、「第１振動波形と第２振動波形とを合成する」とは、例えば、２つの振動波形の振幅を合計すること、２つの振動波形の周波数の平均（重み付きの平均であってもよいし重み無しの平均であってもよい）をとることであってもよい。また、「第１振動波形と第２振動波形とを合成する」とは、例えば波の重ね合わせの原理にしたがって第１振動波形と第２振動波形とを重ね合わせることであってもよい。
【００１１】
上記によれば、仮想オブジェクトと他のオブジェクトの接触によって発生する複数の振動を合成することができ、オブジェクトの運動によって生じる様々な振動をリアルに再現することができる。
【００１２】
また、前記操作部の姿勢及び／又は動きを算出する姿勢・動き算出部をさらに備えてもよい。前記運動演算部は、前記操作部の姿勢及び／又は動きに基づいて、前記仮想オブジェクトの運動に変化を加える。
【００１３】
上記によれば、操作部の姿勢及び／又は姿勢に基づいて仮想オブジェクトを運動させることができる。
【００１４】
また、前記操作部は、慣性センサを含んでもよい。前記姿勢・動き算出部は、前記慣性センサからのデータに基づいて、前記操作部の姿勢及び／又は動きを算出してもよい。
【００１５】
上記によれば、慣性センサによって操作部の姿勢及び／又は動きを算出することができる。
【００１６】
また、前記波形生成部は、前記仮想オブジェクトが前記他のオブジェクトと接触している状態で移動しているときの当該仮想オブジェクトの移動に応じた振動波形を示す信号を生成してもよい。
【００１７】
上記によれば、例えば、仮想オブジェクトが他のオブジェクト上を転がっているときに仮想オブジェクトの転がりに応じた振動を発生させることができる。
【００１８】
また、前記波形生成部は、前記仮想オブジェクトが前記他のオブジェクトと衝突した場合、当該衝突に応じた振動波形を示す信号を生成してもよい。
【００１９】
上記によれば、仮想オブジェクトが他のオブジェクトと衝突する場合に衝突に応じた振動を発生させることができる。
【００２０】
また、前記波形生成部は、前記仮想オブジェクトの速度が大きいほど、振幅の大きな振動波形を示す信号を生成してもよい。
【００２１】
上記によれば、例えば、仮想オブジェクトが他のオブジェクトと接触している状態で移動している場合、仮想オブジェクトの移動速度が大きいほど、振動部を大きく振動させることができる。また、例えば、仮想オブジェクトが衝突する場合、衝突時の速度が大きいほど、振動部を大きく振動させることができる。
【００２２】
また、前記波形生成部は、前記仮想オブジェクトが前記他のオブジェクトと衝突した場合、当該仮想オブジェクトの衝突に応じた振動波形を示す信号を生成してもよい。前記波形出力部は、前記仮想オブジェクトの移動に応じた振動波形と、前記仮想オブジェクトの衝突に応じた振動波形とを合成した合成波形を示す信号を出力してもよい。
【００２３】
上記によれば、仮想オブジェクトの移動に応じた振動と仮想オブジェクトの衝突に応じた振動を合成することができ、リアルな振動を再現することができる。
【００２４】
また、前記仮想オブジェクトは、仮想容器オブジェクトと、当該仮想容器オブジェクトに内包される少なくとも１つの内容物オブジェクトとを含んでもよい。前記運動演算部は、前記仮想容器オブジェクトの姿勢及び／又は動きに変化を加えることで前記内容物オブジェクトの運動に変化を加えてもよい。
【００２５】
上記によれば、仮想容器オブジェクト内で内容物オブジェクトを運動させることができ、内容物オブジェクトの仮想容器オブジェクト内での運動によって発生する振動を再現することができる。
【００２６】
また、前記内容物オブジェクトは複数の球体オブジェクトであってもよい。前記波形生成部は、前記複数の球体オブジェクトが前記仮想容器オブジェクト内を転がる場合に各球体オブジェクトの転がりに応じた振動波形を示す信号を生成し、前記複数の球体オブジェクトが衝突した場合に、各球体オブジェクトの衝突に応じた振動波形を示す信号を生成してもよい。
【００２７】
上記によれば、複数の球体オブジェクトを仮想容器オブジェクト内で運動させ、各球体オブジェクトの転がりに応じた振動と各球体オブジェクトの衝突に応じた振動とを合成することができ、複数の球体が容器内で運動するときの振動を再現することができる。
【００２８】
また、前記内容物オブジェクトは直方体オブジェクトであってもよい。前記波形生成部は、前記直方体オブジェクトが前記仮想容器オブジェクトに衝突した場合に、当該衝突に応じた振動波形を示す信号を生成してもよい。
【００２９】
上記によれば、直方体が容器内で運動するときの振動を再現することができる。
【００３０】
また、前記内容物オブジェクトは仮想的な点または粒子であってもよい。前記波形生成部は、前記内容物オブジェクトが前記仮想容器オブジェクト内を移動する場合、当該移動に応じた振動波形を示す信号を生成してもよい。
【００３１】
上記によれば、仮想的な点または粒子の仮想容器内での運動に応じて振動を発生させることができる。
【００３２】
また、前記波形出力部は、所定数を上限に複数の振動波形を合成し、当該合成した合成波形を示す信号を前記振動部に出力してもよい。
【００３３】
上記によれば、合成する振動波形の数に上限を設けることができる。
【００３４】
また、前記情報処理システムは、情報処理装置と操作装置を含んでもよい。前記操作部および前記振動部は、前記操作装置に設けられてもよい。前記運動演算部、前記波形生成部、および前記波形出力部は、前記情報処理装置に設けられてもよい。前記情報処理装置は、前記操作装置との通信により、前記操作部からの入力を受信し、前記波形出力部からの出力を前記操作装置に送信してもよい。
【００３５】
上記によれば、振動部を備える操作装置に対する操作に応じて、情報処理装置が仮想オブジェクトの運動を演算し、情報処理装置における演算の結果によって、操作装置を振動させることができる。
【００３６】
また、前記波形出力部から出力される信号は、単位時間毎の波形の振幅または振幅の差分と、周波数または周波数の差分とを含んでもよい。
【００３７】
上記によれば、単位時間毎に、振幅又は振幅の差分と、周波数又は周波数の差分とを、情報処理装置から操作装置に送信することができる。
【００３８】
また、前記波形生成部は、前記信号として振動の振幅及び／又は周波数を示すデータを生成し、前記仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成しているときに前記仮想オブジェクトの運動状態が変化した場合、前記振幅及び／又は周波数を変化させてもよい。
【００３９】
上記によれば、例えば、振動部が振動しているときに操作部に対する操作に応じて振動部の振動の振幅及び／又は周波数を変化させることができ、操作部に対する操作をリアルタイムに反映することができる。
【００４０】
また、前記運動演算部は、前記仮想オブジェクトの運動を示す数値を算出してもよい。前記振動波形を示す振動パターンデータが複数あってもよい。前記波形生成部は、前記数値に応じて複数の振動パターンデータの中からいずれかを選択し、選択した振動パターンデータに基づいて、前記振動波形を示す信号を生成してもよい。
【００４１】
上記によれば、仮想オブジェクトの運動を示す数値（例えば仮想オブジェクトの速度）の大きさに応じて複数の振動パターンデータの中から何れかを選択することができ、例えば、仮想オブジェクトの速度に応じて振動波形を変えることができる。
【００４２】
また、前記波形生成部は、前記信号として振動の振幅及び／又は周波数を示すデータを生成し、前記数値に応じて、前記振幅及び／又は周波数を変化させてもよい。
【００４３】
上記によれば、仮想オブジェクトの運動を示す数値（例えば仮想オブジェクトの速度）に応じて、振幅及び／又は周波数を変化させることができる。
【００４４】
また、他の形態は、入力された振動波形を示す信号に応じた振動をする振動部を振動させる情報処理装置のコンピュータにおいて実行される情報処理プログラムであってもよい。情報処理プログラムは、前記コンピュータに、仮想オブジェクトの仮想的な運動を逐次演算し、操作部に対する操作に応じて当該仮想オブジェクトの運動に変化を加える運動演算ステップと、前記運動演算ステップにおける演算に基づいて、前記仮想オブジェクトが他のオブジェクトに接触しているとき又は接触するときの前記仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成する波形生成ステップと、前記波形生成ステップにおいて第１の振動波形を示す信号が生成されるときに前記波形生成ステップにおいて第２の振動波形を示す信号が生成される場合、前記第１の振動波形と前記第２の振動波形とを合成した合成波形を示す信号を前記振動部に出力する波形出力ステップと、を実行させる。
【００４５】
また、他の形態は、上記情報処理プログラムを実行する情報処理装置であってもよい。また、他の形態は、上記情報処理装置や情報処理システムにおいて行われる情報処理方法であってもよい。
【発明の効果】
【００４６】
本発明によれば、仮想オブジェクトの仮想的な運動を振動によって感じさせることができる。
【図面の簡単な説明】
【００４７】
【図１】本体装置２に左コントローラ３および右コントローラ４を装着した状態を示す図
【図２】本体装置２から左コントローラ３および右コントローラ４をそれぞれ外した状態の一例を示す図
【図３】本体装置２の一例を示す六面図
【図４】左コントローラ３の一例を示す六面図
【図５】右コントローラ４の一例を示す六面図
【図６】本体装置２の内部構成の一例を示すブロック図
【図７】本体装置２と左コントローラ３および右コントローラ４との内部構成の一例を示すブロック図
【図８】本実施形態の情報処理システム１における振動制御の機能ブロック図の一例
【図９】２つの振動波形が同時に生成されるときの２つの振動波形の合成を概念的に示す図
【図１０】１の振動波形に基づく振動が行われているときに別の振動波形に基づく信号が生成されるときの２つの振動波形の合成を概念的に示す図
【図１１Ａ】仮想オブジェクトの運動とその運動に応じた振動の一例について説明するための図
【図１１Ｂ】仮想オブジェクトの運動とその運動に応じた振動の一例について説明するための図
【図１２】第１のゲームが行われる様子を示す図
【図１３】第１のゲームにおける仮想オブジェクトと仮想容器の一例を示す図
【図１４Ａ】左コントローラ３を現実空間で傾けたときに球オブジェクト７０が運動する様子を示す図
【図１４Ｂ】左コントローラ３を現実空間で傾けたときに球オブジェクト７０が運動する様子を示す図
【図１４Ｃ】左コントローラ３を現実空間で傾けたときに球オブジェクト７０が運動する様子を示す図
【図１５】第２のゲームが行われる様子を示す図
【図１６】第２のゲームにおける仮想オブジェクトと仮想容器の一例を示す図
【図１７Ａ】左コントローラ３が現実空間で水平方向に振られた場合にダイスオブジェクト７１ａ、７１ｂが運動する様子を示す図
【図１７Ｂ】左コントローラ３が現実空間で水平方向に振られた場合にダイスオブジェクト７１ａ、７１ｂが運動する様子を示す図
【図１８】第３のゲームにおける仮想オブジェクトと仮想容器の一例を示す図
【図１９Ａ】左コントローラ３の姿勢を変化させた場合の代表点７２の運動およびそれに応じた振動を概念的に示す図
【図１９Ｂ】左コントローラ３の姿勢を変化させた場合の代表点７２の運動およびそれに応じた振動を概念的に示す図
【図１９Ｃ】左コントローラ３が振られたときに左コントローラ３が振動する様子を概念的に示す図
【図２０】第３のゲームにおける代表点の運動に基づく振動の振動パターンデータの一例を示す図
【図２１】第３のゲームにおける加速度値に基づく振動の振動パターンデータの一例を示す図
【図２２】コントローラから出力されるデータの一例を示す図
【図２３】コントローラに入力されるデータの一例を示す図
【図２４】第１のゲームまたは第２のゲームが行われる場合の本体装置２において行われる処理の詳細を示すフローチャート
【図２５】図２４のステップＳ８の波形出力処理の詳細を示すフローチャート
【図２６】第３のゲームが行われる場合の本体装置２において行われる処理の詳細を示すフローチャート
【発明を実施するための形態】
【００４８】
以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム１の一例は、本体装置（情報処理装置；本実施形態ではゲーム装置本体として機能する）２と左コントローラ３および右コントローラ４とを含む。本体装置２は、左コントローラ３および右コントローラ４がそれぞれ着脱可能である。つまり、左コントローラ３および右コントローラ４をそれぞれ本体装置２に装着して一体化された装置として利用できる。また、本体装置２と左コントローラ３および右コントローラ４とを別体として利用することもできる（図２参照）。以下では、まず本実施形態のゲームシステムのハードウェア構成について説明し、その後に本実施形態のゲームシステムの制御について説明する。
【００４９】
（本体装置、左コントローラ、右コントローラの説明）
図１は、本体装置２に左コントローラ３および右コントローラ４を装着した状態を示す図である。図１に示すように、左コントローラ３および右コントローラ４は、それぞれ本体装置２に装着されて一体化されている。本体装置２は、ゲームシステム１における各種の処理（例えば、ゲーム処理）を実行する装置である。本体装置２は、ディスプレイ１２を備える。左コントローラ３および右コントローラ４は、ユーザが入力を行うための操作部を備える装置である。
【００５０】
図２は、本体装置２から左コントローラ３および右コントローラ４をそれぞれ外した状態の一例を示す図である。図１および図２に示すように、左コントローラ３および右コントローラ４は、本体装置２に着脱可能である。なお、以下において、左コントローラ３および右コントローラ４の総称として「コントローラ」と記載することがある。
【００５１】
図３は、本体装置２の一例を示す六面図である。図３に示すように、本体装置２は、略板状のハウジング１１を備える。本実施形態において、ハウジング１１の主面（換言すれば、表側の面、すなわち、ディスプレイ１２が設けられる面）は、大略的には矩形形状である。
【００５２】
なお、ハウジング１１の形状および大きさは、任意である。一例として、ハウジング１１は、携帯可能な大きさであってよい。また、本体装置２単体または本体装置２に左コントローラ３および右コントローラ４が装着された一体型装置は、携帯型装置となってもよい。また、本体装置２または一体型装置が手持ち型の装置となってもよい。また、本体装置２または一体型装置が可搬型装置となってもよい。
【００５３】
図３に示すように、本体装置２は、ハウジング１１の主面に設けられるディスプレイ１２を備える。ディスプレイ１２は、本体装置２が生成した画像を表示する。本実施形態においては、ディスプレイ１２は、液晶表示装置（ＬＣＤ）とする。ただし、ディスプレイ１２は任意の種類の表示装置であってよい。
【００５４】
また、本体装置２は、ディスプレイ１２の画面上にタッチパネル１３を備える。本実施形態においては、タッチパネル１３は、マルチタッチ入力が可能な方式（例えば、静電容量方式）のものである。ただし、タッチパネル１３は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式（例えば、抵抗膜方式）のものであってもよい。
【００５５】
本体装置２は、ハウジング１１の内部においてスピーカ（すなわち、図６に示すスピーカ８８）を備えている。図３に示すように、ハウジング１１の主面には、スピーカ孔１１ａおよび１１ｂが形成される。そして、スピーカ８８の出力音は、これらのスピーカ孔１１ａおよび１１ｂからそれぞれ出力される。
【００５６】
また、本体装置２は、本体装置２が左コントローラ３と有線通信を行うための端子である左側端子１７と、本体装置２が右コントローラ４と有線通信を行うための右側端子２１を備える。
【００５７】
図３に示すように、本体装置２は、第１スロット２３を備える。第１スロット２３は、ハウジング１１の上側面に設けられる。第１スロット２３は、第１の種類の記憶媒体を装着可能な形状を有する。第１の種類の記憶媒体は、例えば、ゲームシステム１およびそれと同種の情報処理装置に専用の記憶媒体（例えば、専用メモリカード）である。第１の種類の記憶媒体は、例えば、本体装置２で利用されるデータ（例えば、アプリケーションのセーブデータ等）、および／または、本体装置２で実行されるプログラム（例えば、アプリケーションのプログラム等）を記憶するために用いられる。また、本体装置２は、電源ボタン２８を備える。
【００５８】
本体装置２は、下側端子２７を備える。下側端子２７は、本体装置２がクレードルと通信を行うための端子である。本実施形態において、下側端子２７は、ＵＳＢコネクタ（より具体的には、メス側コネクタ）である。上記一体型装置または本体装置２単体をクレードルに載置した場合、ゲームシステム１は、本体装置２が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置２単体を充電する機能を有する。また、クレードルは、ハブ装置（具体的には、ＵＳＢハブ）の機能を有する。
【００５９】
図４は、左コントローラ３の一例を示す六面図である。図４に示すように、左コントローラ３は、ハウジング３１を備える。本実施形態においては、ハウジング３１は、縦長の形状、すなわち、上下方向（すなわち、図１に示すｙ軸方向）に長い形状である。左コントローラ３は、本体装置２から外された状態において、縦長となる向きで把持されることも可能である。ハウジング３１は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ３は、横長となる向きで把持されることも可能である。左コントローラ３が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【００６０】
左コントローラ３は、アナログスティック３２を備える。図４に示すように、アナログスティック３２が、ハウジング３１の主面に設けられる。アナログスティック３２は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック３２を傾倒することによって傾倒方向に応じた方向の入力（および、傾倒した角度に応じた大きさの入力）が可能である。なお、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック押下する入力が可能である。
【００６１】
左コントローラ３は、各種操作ボタンを備える。まず、左コントローラ３は、ハウジング３１の主面上に４つの操作ボタン３３〜３６（具体的には、右方向ボタン３３、下方向ボタン３４、上方向ボタン３５、および、左方向ボタン３６）を備える。さらに、録画ボタン３７、−（マイナス）ボタン４７を備える。左コントローラ３は、ハウジング３１の側面の左上に第１Ｌボタン３８およびＺＬボタン３９を備える。また、左コントローラ３は、ハウジング３１の側面の、本体装置２に装着される際に装着される側の面に第２Ｌボタン４３および第２Ｒボタン４４を備える。これらの操作ボタンは、本体装置２で実行される各種プログラム（例えば、ＯＳプログラムやアプリケーションプログラム）に応じた指示を行うために用いられる。
【００６２】
また、左コントローラ３は、左コントローラ３が本体装置２と有線通信を行うための端子４２を備える。
【００６３】
図５は、右コントローラ４の一例を示す六面図である。図５に示すように、右コントローラ４は、ハウジング５１を備える。本実施形態においては、ハウジング５１は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ４は、本体装置２から外された状態において、縦長となる向きで把持されることも可能である。ハウジング５１は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ４は、横長となる向きで把持されることも可能である。右コントローラ４が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【００６４】
右コントローラ４は、左コントローラ３と同様、方向入力部としてアナログスティック５２を備える。本実施形態においては、アナログスティック５２は、左コントローラ３のアナログスティック３２と同じ構成である。また、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ４は、左コントローラ３と同様、ハウジング５１の主面上に４つの操作ボタン５３〜５６（具体的には、Ａボタン５３、Ｂボタン５４、Ｘボタン５５、および、Ｙボタン５６）を備える。さらに、＋（プラス）ボタン５７、ホームボタン５８を備える。また、右コントローラ４は、右コントローラ４は、ハウジング５１の側面の右上に第１Ｒボタン６０およびＺＲボタン６１を備える。また、左コントローラ３と同様、第２Ｌボタン６５および第２Ｒボタン６６を備える。
【００６５】
また、右コントローラ４は、右コントローラ４が本体装置２と有線通信を行うための端子６４を備える。
【００６６】
図６は、本体装置２の内部構成の一例を示すブロック図である。本体装置２は、図３に示す構成の他、図６に示す各構成要素８１〜９８を備える。これらの構成要素８１〜９８のいくつかは、電子部品として電子回路基板上に実装されてハウジング１１内に収納されてもよい。
【００６７】
本体装置２は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）８１を備える。ＣＰＵ８１は、本体装置２において実行される各種の情報処理を実行する情報処理部であって、厳密にはＣＰＵ機能、ＧＰＵ機能等の複数の機能を含むＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ）である。ＣＰＵ８１は、記憶部（具体的には、フラッシュメモリ８４等の内部記憶媒体、あるいは、各スロット２３および２４に装着される外部記憶媒体等）に記憶される情報処理プログラム（例えば、ゲームプログラム）を実行することによって、各種の情報処理を実行する。
【００６８】
本体装置２は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ８４およびＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）８５を備える。フラッシュメモリ８４およびＤＲＡＭ８５は、ＣＰＵ８１に接続される。フラッシュメモリ８４は、主に、本体装置２に保存される各種のデータ（プログラムであってもよい）を記憶するために用いられるメモリである。ＤＲＡＭ８５は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【００６９】
本体装置２は、スロットインターフェース（以下、「Ｉ／Ｆ」と略記する。）９１を備える。スロットＩ／Ｆ９１は、ＣＰＵ８１に接続される。スロットＩ／Ｆ９１は、第１スロット２３に接続され、第１スロット２３に装着された第１の種類の記憶媒体（例えば、専用メモリカード）に対するデータの読み出しおよび書き込みを、ＣＰＵ８１の指示に応じて行う。
【００７０】
ＣＰＵ８１は、フラッシュメモリ８４およびＤＲＡＭ８５、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【００７１】
本体装置２は、ネットワーク通信部８２を備える。ネットワーク通信部８２は、ＣＰＵ８１に接続される。ネットワーク通信部８２は、ネットワークを介して外部の装置と通信（具体的には、無線通信）を行う。本実施形態においては、ネットワーク通信部８２は、第１の通信態様としてＷｉ−Ｆｉの規格に準拠した方式により、無線ＬＡＮに接続して外部装置と通信を行う。また、ネットワーク通信部８２は、第２の通信態様として所定の通信方式（例えば、独自プロトコルによる通信や、赤外線通信）により、同種の他の本体装置２との間で無線通信を行う。なお、上記第２の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置２との間で無線通信可能であり、複数の本体装置２の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【００７２】
本体装置２は、コントローラ通信部８３を備える。コントローラ通信部８３は、ＣＰＵ８１に接続される。コントローラ通信部８３は、左コントローラ３および／または右コントローラ４と無線通信を行う。本体装置２と左コントローラ３および右コントローラ４との通信方式は任意であるが、本実施形態においては、コントローラ通信部８３は、左コントローラ３との間および右コントローラ４との間で、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従った通信を行う。
【００７３】
ＣＰＵ８１は、上述の左側端子１７、右側端子２１、および、下側端子２７に接続される。ＣＰＵ８１は、左コントローラ３と有線通信を行う場合、左側端子１７を介して左コントローラ３へデータを送信するとともに、左側端子１７を介して左コントローラ３から操作データを受信する。また、ＣＰＵ８１は、右コントローラ４と有線通信を行う場合、右側端子２１を介して右コントローラ４へデータを送信するとともに、右側端子２１を介して右コントローラ４から操作データを受信する。また、ＣＰＵ８１は、クレードルと通信を行う場合、下側端子２７を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置２は、左コントローラ３および右コントローラ４との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ３および右コントローラ４が本体装置２に装着された一体型装置または本体装置２単体がクレードルに装着された場合、本体装置２は、クレードルを介してデータ（例えば、画像データや音声データ）を据置型モニタ等に出力することができる。
【００７４】
ここで、本体装置２は、複数の左コントローラ３と同時に（換言すれば、並行して）通信を行うことができる。また、本体装置２は、複数の右コントローラ４と同時に（換言すれば、並行して）通信を行うことができる。したがって、ユーザは、複数の左コントローラ３および複数の右コントローラ４を用いて本体装置２に対する入力を行うことができる。
【００７５】
本体装置２は、タッチパネル１３の制御を行う回路であるタッチパネルコントローラ８６を備える。タッチパネルコントローラ８６は、タッチパネル１３とＣＰＵ８１との間に接続される。タッチパネルコントローラ８６は、タッチパネル１３からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、ＣＰＵ８１へ出力する。
【００７６】
また、ディスプレイ１２は、ＣＰＵ８１に接続される。ＣＰＵ８１は、（例えば、上記の情報処理の実行によって）生成した画像および／または外部から取得した画像をディスプレイ１２に表示する。
【００７７】
本体装置２は、コーデック回路８７およびスピーカ（具体的には、左スピーカおよび右スピーカ）８８を備える。コーデック回路８７は、スピーカ８８および音声入出力端子２５に接続されるとともに、ＣＰＵ８１に接続される。コーデック回路８７は、スピーカ８８および音声入出力端子２５に対する音声データの入出力を制御する回路である。
【００７８】
また、本体装置２は、加速度センサ８９を備える。本実施形態においては、加速度センサ８９は、所定の３軸（例えば、図１に示すｘｙｚ軸）方向に沿った加速度の大きさを検出する。なお、加速度センサ８９は、１軸方向あるいは２軸方向の加速度を検出するものであってもよい。
【００７９】
また、本体装置２は、角速度センサ９０を備える。本実施形態においては、角速度センサ９０は、所定の３軸（例えば、図１に示すｘｙｚ軸）回りの角速度を検出する。なお、角速度センサ９０は、１軸回りあるいは２軸回りの角速度を検出するものであってもよい。
【００８０】
上記の加速度センサ８９および角速度センサ９０は、ＣＰＵ８１に接続され、加速度センサ８９および角速度センサ９０の検出結果は、ＣＰＵ８１へ出力される。ＣＰＵ８１は、上記の加速度センサ８９および角速度センサ９０の検出結果に基づいて、本体装置２の動きおよび／または姿勢に関する情報を算出することが可能である。
【００８１】
本体装置２は、電力制御部９７およびバッテリ９８を備える。電力制御部９７は、バッテリ９８およびＣＰＵ８１に接続される。また、図示しないが、電力制御部９７は、本体装置２の各部（具体的には、バッテリ９８の電力の給電を受ける各部、左側端子１７、および右側端子２１）に接続される。電力制御部９７は、ＣＰＵ８１からの指令に基づいて、バッテリ９８から上記各部への電力供給を制御する。
【００８２】
また、バッテリ９８は、下側端子２７に接続される。外部の充電装置（例えば、クレードル）が下側端子２７に接続され、下側端子２７を介して本体装置２に電力が供給される場合、供給された電力がバッテリ９８に充電される。
【００８３】
図７は、本体装置２と左コントローラ３および右コントローラ４との内部構成の一例を示すブロック図である。なお、本体装置２に関する内部構成の詳細については、図６で示しているため図７では省略している。
【００８４】
左コントローラ３は、本体装置２との間で通信を行う通信制御部１０１を備える。図７に示すように、通信制御部１０１は、端子４２を含む各構成要素に接続される。本実施形態においては、通信制御部１０１は、端子４２を介した有線通信と、端子４２を介さない無線通信との両方で本体装置２と通信を行うことが可能である。通信制御部１０１は、左コントローラ３が本体装置２に対して行う通信方法を制御する。すなわち、左コントローラ３が本体装置２に装着されている場合、通信制御部１０１は、端子４２を介して本体装置２と通信を行う。また、左コントローラ３が本体装置２から外されている場合、通信制御部１０１は、本体装置２（具体的には、コントローラ通信部８３）との間で無線通信を行う。コントローラ通信部８３と通信制御部１０１との間の無線通信は、例えばＢｌｕｅｔｏｏｔｈ（登録商標）の規格に従って行われる。
【００８５】
また、左コントローラ３は、例えばフラッシュメモリ等のメモリ１０２を備える。通信制御部１０１は、例えばマイコン（マイクロプロセッサとも言う）で構成され、メモリ１０２に記憶されるファームウェアを実行することによって各種の処理を実行する。
【００８６】
左コントローラ３は、各ボタン１０３（具体的には、ボタン３３〜３９、４３、４４、４６、４７）を備える。また、左コントローラ３は、アナログスティック（図７では「スティック」と記載する）３２を備える。各ボタン１０３およびアナログスティック３２は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部１０１へ出力する。
【００８７】
左コントローラ３は、慣性センサを備える。具体的には、加速度センサ１０４を備える。また、角速度センサ１０５を備える。本実施形態においては、加速度センサ１０４は、所定の３軸（例えば、図４に示すｘｙｚ軸）方向に沿った加速度の大きさを検出する。なお、加速度センサ１０４は、１軸方向あるいは２軸方向の加速度を検出するものであってもよい。本実施形態においては、角速度センサ１０５は、所定の３軸（例えば、図４に示すｘｙｚ軸）回りの角速度を検出する。なお、角速度センサ１０５は、１軸回りあるいは２軸回りの角速度を検出するものであってもよい。加速度センサ１０４および角速度センサ１０５は、それぞれ通信制御部１０１に接続される。そして、加速度センサ１０４および角速度センサ１０５の検出結果は、適宜のタイミングで繰り返し通信制御部１０１へ出力される。
【００８８】
通信制御部１０１は、各入力部（具体的には、各ボタン１０３、アナログスティック３２、各センサ１０４および１０５）から、入力に関する情報（具体的には、操作に関する情報、または、センサによる検出結果）を取得する。通信制御部１０１は、取得した情報（または取得した情報に所定の加工を行った情報）を含む操作データを本体装置２へ送信する。なお、操作データは、所定時間に１回の割合で繰り返し送信される。なお、入力に関する情報が本体装置２へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【００８９】
上記操作データが本体装置２へ送信されることによって、本体装置２は、左コントローラ３に対して行われた入力を得ることができる。すなわち、本体装置２は、各ボタン１０３およびアナログスティック３２に対する操作を、操作データに基づいて判別することができる。また、本体装置２は、左コントローラ３の動きおよび／または姿勢に関する情報を、操作データ（具体的には、加速度センサ１０４および角速度センサ１０５の検出結果）に基づいて算出することができる。
【００９０】
左コントローラ３は、振動によってユーザに通知を行うための振動子１０７を備える。本実施形態においては、振動子１０７は、本体装置２からの指令によって制御される。すなわち、通信制御部１０１は、本体装置２からの上記指令を受け取ると、当該指令に従って振動子１０７を駆動させる。ここで、左コントローラ３は、コーデック部１０６を備える。通信制御部１０１は、上記指令を受け取ると、指令に応じた制御信号をコーデック部１０６へ出力する。コーデック部１０６は、通信制御部１０１からの制御信号から振動子１０７を駆動させるための駆動信号を生成して振動子１０７へ与える。これによって振動子１０７が動作する。
【００９１】
振動子１０７は、より具体的にはリニア振動モータである。リニア振動モータは、回転運動をする通常のモータと異なり、入力される電圧に応じて所定方向に駆動されるため、入力される電圧の波形に応じた振幅、周波数で振動をさせることができる。本実施形態において、本体装置２から左コントローラ３に送信される振動制御信号は、単位時間ごとに周波数と振幅とを表すデジタル信号であってよい。別の実施形態においては、波形そのものを示す情報を送信するようにしてもよいが、振幅と周波数だけを送信することで通信データ量を削減することができる。また、さらにデータ量を削減するため、そのときの振幅と周波数の数値に替えて、前回の値からの差分だけを送信するようにしてもよい。この場合、コーデック部１０６は、通信制御部１０１から取得される振幅と周波数の値を示すデジタル信号をアナログの電圧の波形に変換し、当該波形に合わせて電圧を入力することで振動子１０７を駆動させる。したがって、本体装置２は、単位時間ごとに送信する振幅および周波数を変えることによって、そのときに振動子１０７を振動させる振幅と周波数を制御することができる。なお、本体装置２から左コントローラ３に送信される振幅と周波数は、１つに限らず、２つ以上送信するようにしてもよい。その場合、コーデック部１０６は、受信された複数の振幅と周波数それぞれが示す波形を合成することで、振動子１０７を制御する電圧の波形を生成することができる。
【００９２】
左コントローラ３は、電力供給部１０８を備える。本実施形態において、電力供給部１０８は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ３の各部（具体的には、バッテリの電力の給電を受ける各部）に接続される。
【００９３】
図７に示すように、右コントローラ４は、本体装置２との間で通信を行う通信制御部１１１を備える。また、右コントローラ４は、通信制御部１１１に接続されるメモリ１１２を備える。通信制御部１１１は、端子６４を含む各構成要素に接続される。通信制御部１１１およびメモリ１１２は、左コントローラ３の通信制御部１０１およびメモリ１０２と同様の機能を有する。したがって、通信制御部１１１は、端子６４を介した有線通信と、端子６４を介さない無線通信（具体的には、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従った通信）との両方で本体装置２と通信を行うことが可能であり、右コントローラ４が本体装置２に対して行う通信方法を制御する。
【００９４】
右コントローラ４は、左コントローラ３の各入力部と同様の各入力部を備える。具体的には、各ボタン１１３、アナログスティック５２、慣性センサ（加速度センサ１１４および角速度センサ１１５）を備える。これらの各入力部については、左コントローラ３の各入力部と同様の機能を有し、同様に動作する。
【００９５】
また、右コントローラ４は、振動子１１７およびコーデック部１１６を備える。振動子１１７およびコーデック部１１６は、左コントローラ３の振動子１０７およびコーデック部１０６と同様に動作する。すなわち、通信制御部１１１は、本体装置２からの指令に従って、コーデック部１１６を用いて振動子１１７を動作させる。
【００９６】
右コントローラ４は、電力供給部１１８を備える。電力供給部１１８は、左コントローラ３の電力供給部１０８と同様の機能を有し、同様に動作する。
【００９７】
（本実施形態のゲームにおける振動制御の概要）
次に、上述した本体装置２およびコントローラを用いて行われるゲームについて説明する。本実施形態では、ゲームの実行中に、左右のコントローラ３，４に設けられた振動子１０７，１１７が振動する。以下、本実施形態の振動制御について説明する。
【００９８】
図８は、本実施形態の情報処理システム１における振動制御の機能ブロック図の一例である。
【００９９】
図８に示されるように、本体装置２は、姿勢・動き算出部１２０と、運動演算部１２１と、波形生成部１２２と、波形出力部１２３とを備える。これら各部１２０〜１２３は、本体装置２のＣＰＵ８１が所定のゲームプログラム（例えばスロット２３に装着された記憶媒体又はフラッシュメモリ８４に記憶されたゲームプログラム）を実行することによって実現される。また、上述のように、左コントローラ３は慣性センサ（具体的には、加速度センサ１０４および角速度センサ１０５）を備え、右コントローラ４は慣性センサ（具体的には、加速度センサ１１４および角速度センサ１１５）を備える。
【０１００】
姿勢・動き算出部１２０は、コントローラ（３，４）の慣性センサからのデータに基づいて、コントローラの姿勢および動きを算出する。具体的には、姿勢・動き算出部１２０は、左コントローラ３の角速度センサ１０５からのデータに基づいて左コントローラ３の姿勢（傾き）を算出する。また、姿勢・動き算出部１２０は、左コントローラ３の加速度センサ１０４からのデータに基づいて左コントローラ３の動き（振られているか否か、振られているときの振り強さ）を算出する。同様に、姿勢・動き算出部１２０は、右コントローラ４の姿勢（傾き）および動きを算出する。
【０１０１】
運動演算部１２１は、仮想オブジェクトの運動を演算する。運動演算部１２１は、姿勢・動き算出部１２０によって算出されたコントローラの姿勢および／または動きに基づいて、仮想オブジェクトに対する運動シミュレーションを行い、仮想オブジェクトの運動（位置、速度、加速度、回転等）を計算する。運動演算部１２１は、例えば、仮想オブジェクトの質量、仮想オブジェクトの大きさ、仮想オブジェクトにかかる力（重力、慣性力、仮想オブジェクトに加えられた重力以外の力等）、仮想オブジェクトと他のオブジェクトとの間の摩擦等を考慮して、仮想オブジェクトの運動シミュレーションを行う。本実施形態では、運動演算部１２１は、仮想オブジェクトが仮想容器（仮想容器オブジェクト）内を運動するものとして、当該仮想容器内における仮想オブジェクトの運動を計算する。仮想容器内に複数の仮想オブジェクトが存在する場合、運動演算部１２１は、仮想オブジェクト毎に運動を計算する。
【０１０２】
波形生成部１２２は、運動演算部１２１による仮想オブジェクトの運動の演算結果に基づいて、仮想オブジェクトが他のオブジェクトに接触している又は接触するときの当該仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成する。具体的には、本体装置２には、振動波形を示す振動パターンデータが予め記憶されており、波形生成部１２２は、振動パターンデータに基づいて、振動波形を示す信号を生成する。
【０１０３】
ここで、「仮想オブジェクトが他のオブジェクトに接触しているときの当該仮想オブジェクトの運動状態」とは、仮想オブジェクトが他のオブジェクトの少なくとも一部と接触している状態を維持しているときの仮想オブジェクトの運動の状態（速度、加速度、回転等）である。また、「仮想オブジェクトが他のオブジェクトに接触するときの当該仮想オブジェクトの運動状態」とは、仮想オブジェクトが他のオブジェクトの少なくとも一部と接触する際の（接触する瞬間の）仮想オブジェクトの運動の状態（速度、加速度、回転等）である。
【０１０４】
波形生成部１２２は、上記仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成する。例えば、仮想オブジェクトが仮想容器の底面を転がる場合、波形生成部１２２は、仮想オブジェクトの転がりに応じた振動波形を示す信号を生成する。また、仮想オブジェクトが仮想容器の面に衝突する場合、波形生成部１２２は、仮想オブジェクトの衝突に応じた振動波形を示す信号を生成する。仮想オブジェクトが複数存在する場合、波形生成部１２２は、各仮想オブジェクトの運動状態に応じた振動波形を示す信号を生成する。このため、波形生成部１２２は、ある仮想オブジェクトの運動状態に応じた振動波形を示す信号と、別の仮想オブジェクトの運動状態に応じた振動波形（２つの波形は同じ形状であってもよいし異なっていてもよい）とを同時に生成する場合もある。また、仮想オブジェクトが１つの場合でも、波形生成部１２２は、１つの仮想オブジェクトの運動状態に応じた振動波形を示す信号を同時に２つ以上生成する場合もある。
【０１０５】
波形出力部１２３は、波形生成部１２２によって生成された振動波形を示す信号をコントローラに出力する。これに応じて、コントローラ内の振動子１０７，１１７は振動する。波形生成部１２２によって複数の振動波形を示す信号が生成される場合、波形出力部１２３は、複数の振動波形を合成し、当該合成した合成波形を示す信号をコントローラに出力する。例えば、波形生成部１２２によって第１の振動波形を示す信号が生成されるときに波形生成部１２２によって第２の振動波形を示す信号が生成される場合、波形出力部１２３は、第１の振動波形と第２の振動波形とを合成し、合成波形を示す信号をコントローラに出力する。なお、波形生成部１２２によって同時に３つ以上の振動波形が生成される場合、これら３つ以上の振動波形を合成し、合成波形を示す信号をコントローラに出力する。なお、波形出力部１２３が合成する振動波形の数には上限があってもよい。例えば、波形出力部１２３は、最大で４つの振動波形を合成可能であってもよい。
【０１０６】
波形出力部１２３から１の振動波形を示す信号、又は、複数の振動波形を合成した合成波形を示す信号が出力されると、その信号に基づいてコントローラの振動子が振動する。コントローラの振動子は、周波数および振幅を指定することにより、指定された周波数および振幅で振動するように構成されている。波形出力部１２３は、振動の周波数と振幅とを含む信号を出力する。波形出力部１２３は、上記信号を所定の時間間隔（例えば、５ｍ秒毎）で出力する。コントローラの振動子は、当該信号に含まれる周波数および振幅で振動する。所定の時間間隔で波形出力部１２３から上記信号が出力されることにより、振動子は、１つの振動波形に合う振動、又は、複数の振動波形を合成した合成波形に合う振動をする。
【０１０７】
なお、図８に示される姿勢・動き算出部１２０、運動演算部１２１、波形生成部１２２、波形出力部１２３、慣性センサ、および振動子は、本体装置２およびコントローラの何れに配置されてもよい。例えば、波形生成部１２２および波形出力部１２３が、コントローラに設けられてもよい。この場合、振動波形を示す振動パターンデータは、コントローラに予め記憶されてもよい。そして、本体装置２は、運動演算部１２１の演算結果に応じて振動波形を示す信号（振動パターンデータを指定する信号）を出力し、コントローラは、受信した信号に対応する振動パターンデータを読み取って振動子を振動させてもよい。また、姿勢・動き算出部１２０、運動演算部１２１、波形生成部１２２、波形出力部１２３、慣性センサ、および振動子の全てが、本体装置２に設けられてもよいし、コントローラに設けられてもよい。
【０１０８】
ここで複数の振動波形の合成について説明する。図９は、２つの振動波形が同時に生成されるときの２つの振動波形の合成を概念的に示す図である。
【０１０９】
図９に示されるように、波形生成部１２２は、仮想オブジェクトの運動状態に応じて、例えば振動波形１を生成する。この振動波形１による振動は、第１所定時間行われる。また、波形生成部１２２は、仮想オブジェクトの運動状態に応じて、例えば振動波形２を生成する。この振動波形２による振動は、上記第１所定時間と異なる又は同じ第２所定時間行われる。例えば、波形生成部１２２は、時刻ｔ１のタイミングで振動波形１を生成し、同時に振動波形２を生成する場合がある。この場合、波形出力部１２３は、２つの振動波形１および振動波形２を合成した合成波形を示す信号を出力する。この合成波形を示す信号に基づいて、コントローラ内の振動子１０７，１１７が振動する。
【０１１０】
具体的には、波形出力部１２３は、例えば５ｍ秒毎に振動波形を示す信号（周波数および振幅）をコントローラに出力する。振動子１０７，１１７は、波形出力部１２３からの信号に応じた周波数および振幅で振動する。これにより、振動子１０７，１１７は、合成波形に合う振動をする。
【０１１１】
なお、複数の振動波形は必ずしも同時に生成されなくてもよい。図１０は、１の振動波形に基づく振動が行われているときに別の振動波形に基づく信号が生成されるときの２つの振動波形の合成を概念的に示す図である。
【０１１２】
図１０に示されるように、波形生成部１２２は、例えば時刻ｔ１のタイミングで振動波形１を生成し、この振動波形１を示す信号が、波形出力部１２３によってコントローラに出力される。次に、波形生成部１２２は、時刻ｔ１から所定時間経過後の時刻ｔ２のタイミングで振動波形２を生成する。時刻ｔ２においては、振動波形１に基づく振動が継続して行われている。この場合、波形出力部１２３は、振動波形１と振動波形２とを合成し、当該合成波形を示す信号をコントローラの振動子に出力する。これにより、時刻ｔ１から時刻ｔ２の間は、１つの振動波形１に基づく振動が行われ、時刻ｔ２以降は２つの振動波形１および２を合成した合成波形に基づく振動が行われる。
【０１１３】
このように波形出力部１２３は、第１の振動波形を示す信号を出力しているときに、別の第２の振動波形を示す信号が生成された場合、これらの振動波形を合成した合成波形を示す信号を出力する。これにより、振動子１０７，１１７は、第１の振動波形に基づく振動をしているときでも、別の第２の振動波形が発生した場合に、途中で振動波形を変化させる。
【０１１４】
次に、仮想オブジェクトの運動とその運動に応じた振動について説明する。図１１Ａおよび図１１Ｂは、仮想オブジェクトの運動とその運動に応じた振動の一例について説明するための図である。
【０１１５】
図１１Ａに示されるように、例えば球形の仮想オブジェクトが仮想の平面上を転がる場合、すなわち、仮想オブジェクトが平面に接触したまま移動する場合、その仮想オブジェクトの転がりに応じた振動波形が生成される。例えば、仮想オブジェクトが平面上を転がる場合には、比較的小さな振幅を有する振動波形が生成される。仮想オブジェクトが平面上を転がっている間、転がりに応じた振動波形が継続的に生成される。
【０１１６】
また、図１１Ｂに示されるように、仮想オブジェクトが仮想の壁（側面）に衝突する場合、すなわち、仮想オブジェクトが壁に接触する場合、その仮想オブジェクトの衝突に応じた振動波形が生成される。例えば、仮想オブジェクトが他のオブジェクトと衝突する場合には、比較的大きな振幅を有する振動波形が生成される。仮想オブジェクトが衝突する場合、衝突の瞬間から所定期間だけ衝突に応じた振動波形が生成される。
【０１１７】
本実施形態では、仮想オブジェクトの運動状態に応じた振動波形が予め用意されている。仮想オブジェクトに対する運動シミュレーションの結果に基づいて、仮想オブジェクトの運動状態に応じた振動波形が選択され、選択された振動波形を示す信号が生成される。なお、図１１Ａおよび図１１Ｂに示す仮想オブジェクトの運動状態に応じた振動波形は単なる例示であり、他の振動波形が用意されてもよい。例えば、仮想オブジェクトの速度、回転、種類や形状、重さや硬さ、表面の状態等に応じて、異なる振動波形が用意されてもよい。例えば、仮想オブジェクトの速度が大きい場合には速度が小さい場合と比べて振動の周波数が高くてもよい。また、仮想オブジェクトが重い場合には軽い場合と比べて振動の周波数が低くてもよい。また、仮想オブジェクトの表面が滑らかな場合（凹凸が無い場合）は、表面が滑らかでない場合（凹凸がある場合）よりも、振動の周波数が低く、かつ、振幅が小さくてもよい。また、仮想オブジェクトと接触する他のオブジェクト（平面や壁、或いは別の仮想オブジェクト等）の形状や硬さ、表面の状態等に応じて、異なる振動波形が用意されてもよい。
【０１１８】
（ゲームの具体例）
次に、上述した振動制御を用いたゲームの具体例について説明する。以下では、第１のゲームから第３のゲームの３つのゲームについて説明する。
【０１１９】
（第１のゲーム）
図１２は、第１のゲームが行われる様子を示す図である。第１のゲームは、２人のプレイヤによって行われるゲームであり、１人のプレイヤが左コントローラ３を把持し、別のプレイヤが右コントローラ４を把持してゲームを行う。図１２に示されるように、本体装置２の画面には、ゲーム画像が表示される。第１のゲームは、コントローラを直方体の箱と見立てて、仮想的に直方体の箱の中にある球の数を当てるゲームである。球は上記仮想オブジェクトであり、直方体の箱は、上記仮想容器である。本体装置２は、仮想オブジェクトとしての球オブジェクトの運動シミュレーションを行い、球オブジェクトの運動シミュレーションの結果に応じて、コントローラ３，４を振動させる。各プレイヤは、コントローラを把持して、コントローラを傾けたり振ったりすることによりコントローラを振動させ、その振動に基づいて箱の中の球の数を推測する。
【０１２０】
図１３は、第１のゲームにおける仮想オブジェクトと仮想容器の一例を示す図である。図１３に示されるように、第１のゲームでは、仮想空間に仮想容器（７３、７４）が定義され、仮想容器の中に複数の球オブジェクト７０（例えば７０ａ〜７０ｃ）が内包される。仮想容器７３は左コントローラ３に対応し、仮想容器７３内には複数の球オブジェクト７０が配置される。また、仮想容器７４は右コントローラ４に対応し、仮想容器７４内には複数の球オブジェクト７０が配置される。仮想容器内の球オブジェクト７０の数は、ゲームの開始時にランダムに決定される。左コントローラ３に対応する仮想容器７３内の球オブジェクトの数と、右コントローラ４に対応する仮想容器７４内の球オブジェクトの数とは一致する。
【０１２１】
図１３のＸＹＺ座標系は仮想空間に固定の座標系であり、ＸｂＹｂＺｂ座標系は仮想容器に固定の座標系である。
【０１２２】
具体的には、ＸＹＺ座標系におけるＹ軸は、仮想空間の高さ方向の軸であり、Ｘ軸は仮想空間の横方向の軸であり、Ｚ軸は仮想空間の奥行き方向の軸である。仮想空間のＹ軸負方向には、常に仮想の重力がかかるものとする。
【０１２３】
また、仮想容器の横方向をＸｂ軸方向、奥行き方向をＺｂ軸方向、高さ方向をＹｂ軸方向とする。仮想容器は、横方向に長い直方体であり、底面（Ｘｂ軸およびＺｂ軸に平行な平面）、および、側面（Ｙｂ軸に平行な平面）を有する。
【０１２４】
仮想容器の姿勢は、コントローラの現実空間における姿勢と連動する。例えば、左コントローラ３の長手方向（図１２のｙ軸方向）は、左コントローラ３に対応する仮想容器７３のＸｂ軸負方向と一致し、左コントローラ３の厚さ方向（図１２のｚ軸方向）は、仮想容器７３のＹｂ軸負方向と一致し、左コントローラ３の幅方向（図１２のｘ軸方向）は、仮想容器７３のＺｂ軸負方向と一致する。右コントローラ４に対応する仮想容器７４についても同様であり、右コントローラ４に対応する仮想容器７４の姿勢は、右コントローラ４の現実空間における姿勢と連動する。
【０１２５】
以下、左コントローラ３を例にとって左コントローラ３を傾けたときの仮想容器７３および球オブジェクト７０の運動について説明する。図１４Ａ〜図１４Ｃは、左コントローラ３を現実空間で傾けたときに球オブジェクト７０が運動する様子を示す図である。
【０１２６】
図１４Ａに示されるように、左コントローラ３を例えばｘ軸まわりに回転させた場合、左コントローラ３に対応する仮想容器７３もＺｂ軸まわりに回転し、仮想容器７３の底面が図１４Ａの左右方向に対して傾く。仮想空間に固定のＹ軸負方向には仮想の重力がかかるため、仮想容器７３内の球オブジェクト７０ａ〜７０ｃには、仮想容器７３の底面に沿った方向（図１４の右方向）に力がかかる。この力によって、球オブジェクト７０ａ〜７０ｃは、Ｘｂ軸方向に転がる。
【０１２７】
具体的には、球オブジェクト７０ａ〜７０ｃに対して運動シミュレーションが行われ、球オブジェクト７０ａ〜７０ｃの位置、速度、加速度、回転等が計算される。球オブジェクト７０ａ〜７０ｃが仮想容器７３の底面を転がっている間、左コントローラ３が振動する。より具体的には、上述したように、球の転がりに応じた振動波形を示す信号が球オブジェクト７０ａ〜７０ｃ毎に生成される。そして、各球オブジェクト７０ａ〜７０ｃの転がりに応じた振動波形が合成される。すなわち、球オブジェクト７０ａの転がりに応じた振動波形と、球オブジェクト７０ｂの転がりに応じた振動波形と、球オブジェクト７０ｃの転がりに応じた振動波形とが合成される。そして、これら３つの振動波形を合成した合成波形に応じた信号が本体装置２から左コントローラ３に出力され、左コントローラ３の振動子１０７が振動することにより、左コントローラ３が振動する。この本体装置２から出力される信号には、振動の周波数と振幅とが含まれる。振動子１０７は、入力された信号に含まれる周波数および振幅で振動する。
【０１２８】
図１４Ｂに示されるように、球オブジェクト７０ａ〜７０ｃが仮想容器７３内を転がり始めてから所定時間が経過すると、右端の球オブジェクト７０ａが仮想容器７３の側面（ＹｂＺｂ平面に平行な面）に衝突する。この球オブジェクト７０ａの衝突に応じて、衝突に応じた振動波形を示す信号が生成され、左コントローラ３の振動子１０７が振動する。具体的には、球オブジェクト７０ａが仮想容器７３の側面に衝突する時点では、球オブジェクト７０ｂおよび７０ｃは仮想容器７３の底面を転がっているため、球オブジェクト７０ａの衝突に応じた振動波形と、球オブジェクト７０ｂの転がりに応じた振動波形と、球オブジェクト７０ｃの転がりに応じた振動波形とが合成される。そして、合成された合成波形に応じた信号が左コントローラ３に出力され、左コントローラ３の振動子１０７が振動する。球オブジェクト７０ａが衝突する際には、他の球オブジェクトが転がる際の振動波形とは異なる振動波形が生成され、かつ、球オブジェクト７０ａが衝突する際の振動の振幅は、他の球オブジェクトが転がる際の振動の振幅よりも大きい。このため、プレイヤは、球オブジェクト７０ａが仮想容器７３の側面に衝突したことを認識することができる。
【０１２９】
さらに時間が経過すると、図１４Ｃに示されるように、球オブジェクト７０ｂが右端の球オブジェクト７０ａに衝突する。この衝突による衝撃が右端の球オブジェクト７０ａを介して仮想容器７３の側面に伝わり、球オブジェクト７０ｂの衝突に応じた振動波形が生成される。これにより、球オブジェクト７０ｂの衝突に応じた振動が発生する。
【０１３０】
本実施形態における第１のゲームでは、球オブジェクト７０の運動状態に応じた振動波形を示す振動パターンデータが用意されている。具体的には、球オブジェクト７０の転がりに応じた振動波形を示す振動パターンデータ（転がり用振動パターンデータ）と、球オブジェクト７０の衝突に応じた振動波形を示す振動パターンデータ（衝突用振動パターンデータ）とが予め用意されている。各球オブジェクト７０に対する運動シミュレーションの結果に基づいて、各球オブジェクト７０がどのような運動状態か（すなわち、球オブジェクト７０が転がっている状態か、球オブジェクト７０が他のオブジェクトと衝突している状態か）が判定され、その判定結果に応じた振動パターンデータが選択される。
【０１３１】
複数の振動パターンデータのうちの何れかが選択された場合、振動の振幅が調整される。例えば、球オブジェクト７０が仮想容器内を転がる場合、その転がる速度に応じて、振幅が調整される。例えば、転がる速度が大きいほど、振幅が大きくなる。例えば、転がり用振動パターンデータが示す振動波形に、転がる速度に応じた係数がかけられてもよい。転がり用振動パターンデータに基づいて振動子が振動しているときに球オブジェクト７０の速度が変化した場合、振幅が変化する。例えば、振動パターンデータに基づいて振動子が振動しているときに、コントローラに対する操作に応じて球オブジェクト７０の転がる速度が変化した場合、振幅が変化してもよい。このように、コントローラに対して行われた操作が、球オブジェクト７０の運動にリアルタイムに反映され、振動がリアルタイムで変化する。
【０１３２】
また、球オブジェクト７０が衝突する場合も同様に、衝突時の球オブジェクト７０の運動状態に応じて、振幅が調整される。例えば衝突時の球オブジェクト７０の速度が大きいほど、振幅が大きくなる。例えば、衝突用振動パターンデータが示す振動波形に、衝突時の速度に応じた係数がかけられてもよい。
【０１３３】
なお、球オブジェクト７０と仮想容器の側面とが衝突する場合に限らず、球オブジェクト７０と仮想容器の底面との衝突に応じた振動が発生してもよい。また、仮想容器に上面（底面と平行な面：仮想容器の蓋）が設けられ、仮想オブジェクト７０と仮想容器の上面との衝突に応じた振動が発生してもよい。また、上記では、球オブジェクト７０同士が衝突しても球オブジェクト７０同士の衝突によって振動は発生せず、球オブジェクト７０同士の振動が仮想容器に伝わることによって振動が発生するものとしたが、球オブジェクト７０同士の衝突により振動が発生してもよい。この場合、球オブジェクト７０同士の衝突の振動波形と、球オブジェクト７０と仮想容器の面との衝突の振動波形とが同じであってもよいし、異なってもよい。
【０１３４】
また、上記では、振動パターンデータが２つ用意されるものとしたが、振動パターンデータは３つ以上用意されてもよい。例えば、球オブジェクト同士が衝突するときの振動パターンデータと、球オブジェクトと仮想容器の側面とが衝突するときの振動パターンデータとが別に用意されてもよい。また、球オブジェクトが転がる速度に応じて、異なる振動パターンデータが用意されてもよい。また、球の大きさや重さによって振幅の異なる振動パターンデータが用意されてもよい。
【０１３５】
また、球オブジェクト７０の速度に応じて、振幅に加えて又は代えて、振動の周波数が調整されてもよい。例えば、球オブジェクト７０の速度が大きいほど、周波数が高くなるように調整されてもよいし、周波数が低くなるように調整されてもよい。例えば、複数の振動パターンデータのうちの何れかが選択された場合、選択された振動パターンデータに基づく周波数が、球オブジェクト７０の速度に応じて調整されてもよい。また、周波数の異なる複数の振動パターンデータが予め用意され、球オブジェクト７０の速度に応じて、複数の振動パターンデータの中から何れかが選択されてもよい。また、ある振動パターンデータに基づいて振動子が振動しているときに、例えば球オブジェクト７０の速度が変化した場合、その速度に応じて振動の周波数が変化されてもよい。
【０１３６】
このように、プレイヤは左コントローラ３を左右に傾けることによって、仮想容器７３を傾け、球オブジェクト７０を仮想容器７３内で運動させる。プレイヤは、球オブジェクト７０の運動（転がり、衝突）に応じた振動を感じることで、仮想容器７３内に何個の球オブジェクト７０が存在するかを推測する。
【０１３７】
右コントローラ４についても同様である。右コントローラ４に対応する仮想容器７４が仮想空間において定義され、仮想容器７４内に１又は複数の球オブジェクト７０が内包される。プレイヤが右コントローラ４を左右に傾けることによって、仮想容器７４を傾け、球オブジェクト７０を仮想容器７３内で運動させる。そして、プレイヤは、球オブジェクト７０の運動に応じた振動によって仮想容器７３内に何個の球オブジェクト７０が存在するかを推測する。そして、各プレイヤは、球オブジェクトが何個入っているかを答え、正解したプレイヤが勝利となる。なお、別の例では、第１のゲームは２人で対戦するものでなく、１人で仮想的な球の数を当てるゲームであってもよい。
【０１３８】
（第２のゲーム）
次に、第２のゲームについて説明する。図１５は、第２のゲームが行われる様子を示す図である。第２のゲームも２人のプレイヤによって行われ、１人のプレイヤが左コントローラ３を把持し、別のプレイヤが右コントローラ４を把持してゲームを行う。第２のゲームは、コントローラをダイスカップと見立てて、ダイスカップの中にある２つのダイスを振ってダイスの目の合計の大きさを競うゲームである。ダイスは上記仮想オブジェクトの一例であり、ダイスカップは、上記仮想容器の一例である。本体装置２は、仮想オブジェクトとしてのダイスオブジェクトの運動シミュレーションを行い、ダイスオブジェクトの運動シミュレーションの結果に応じて、コントローラ３，４を振動させる。なお、別の例においては、１人でプレイするゲームにおいてダイスを振る演出に同様の振動をさせるようにしてもよい。
【０１３９】
図１６は、第２のゲームにおける仮想オブジェクトと仮想容器の一例を示す図である。図１６に示されるように、第２のゲームでは、仮想空間に仮想容器７５、７６（ダイスカップ）が定義され、仮想容器の中に２つのダイスオブジェクト７１（７１ａ、７１ｂ）が内包される。左コントローラ３に対応する仮想容器７５およびダイスオブジェクト７１ａ，７１ｂが定義され、右コントローラ４に対応する仮想容器７６およびダイスオブジェクト７１ａ，７１ｂが定義される。本実施形態では、仮想容器７５，７６は直方体であるものとするが、例えばカップ状であってもよい。また、ダイスオブジェクト７１は立方体であるものとする。
【０１４０】
第２のゲームにおいても第１のゲームと同様に、仮想容器７５，７６に固定のＸｂＹｂＺｂ座標系がそれぞれ定義される。仮想容器７５の姿勢は左コントローラ３の現実空間における姿勢と連動し、仮想容器７６の姿勢は右コントローラ４の現実空間における姿勢と連動する。
【０１４１】
以下、左コントローラ３を例にとって左コントローラ３を水平方向に振ったり、水平方向に傾けたりするときの仮想容器７５およびダイスオブジェクト７１ａ、７１ｂの運動について説明する。図１７Ａおよび図１７Ｂは、左コントローラ３が現実空間で水平方向に振られた場合にダイスオブジェクト７１ａ、７１ｂが運動する様子を示す図である。
【０１４２】
図１７Ａに示されるように、左コントローラ３が水平方向（ｘ軸方向またはｙ軸方向）に振られた場合、左コントローラ３に対応する仮想容器７５も水平方向に移動する。なお、左コントローラ３が振られたか否かは、左コントローラ３に設けられた加速度センサ１０４が検出する加速度の値によって判定することができる。仮想容器７５が水平方向に移動すると、仮想容器７５内のダイスオブジェクト７１ａ、７１ｂが仮想容器７５内を転がる。また、左コントローラ３を水平方向に傾けた場合、仮想容器７５も水平方向に傾く。仮想空間に固定のＹ軸負方向には仮想の重力がかかるため、仮想容器７５内のダイスオブジェクト７１ａ、７１ｂには、仮想容器７５の底面に沿った方向（図１７Ａの左右方向）に力がかかる。この力によって、ダイスオブジェクト７１ａ、７１ｂは、Ｘｂ軸方向に転がる。
【０１４３】
具体的には、ダイスオブジェクト７１ａ、７１ｂのそれぞれに対して運動シミュレーションが行われ、ダイスオブジェクト７１ａ、７１ｂの位置、速度、加速度、回転等が計算される。ダイスオブジェクト７１ａ、７１ｂが仮想容器７５の底面を転がっている間、左コントローラ３が振動する。より具体的には、ダイスオブジェクトの転がりに応じた振動波形を示す信号がダイスオブジェクト７１ａ、７１ｂ毎に生成される。そして、各ダイスオブジェクト７１ａ、７１ｂの転がりに応じた振動波形が合成される。すなわち、ダイスオブジェクト７１ａの転がりに応じた振動波形と、ダイスオブジェクト７１ｂの転がりに応じた振動波形とが合成される。合成された合成波形に応じた信号が本体装置２から左コントローラ３に出力され、左コントローラ３の振動子１０７が振動することにより、左コントローラ３が振動する。
【０１４４】
図１７Ｂに示されるように、ダイスオブジェクト７１ａ、７１ｂが仮想容器７５内を例えば左方向に転がると、ダイスオブジェクト７１ａが仮想容器７５の側面（ＹｂＺｂ平面に平行な面）に衝突する。このダイスオブジェクト７１ａの衝突に応じて、衝突に応じた振動波形を示す信号が生成され、左コントローラ３の振動子１０７が振動する。
【０１４５】
各ダイスオブジェクト７１ａ、７１ｂが仮想容器７５内を転がる毎に、転がりに応じた振動波形が生成される。また、各ダイスオブジェクト７１ａ、７１ｂが仮想容器７５の側面に衝突する毎に、衝突に応じた振動波形が生成される。そして、それぞれの振動波形が合成される。合成された合成波形を示す信号が、左コントローラ３に出力され、左コントローラ３の振動子１０７が振動することにより、左コントローラ３が振動する。これにより、プレイヤは、現実のダイスカップを実際に振ったときのような振動を感じることができる。
【０１４６】
ダイスオブジェクト７１が仮想容器７５内を転がる場合と、仮想容器７５の側面に衝突する場合とで、異なる振動波形が生成される。すなわち、ダイスオブジェクト７１が仮想容器７５内を転がる場合の振動パターンデータと、ダイスオブジェクト７１が仮想容器７５の側面に衝突する場合の振動パターンデータとが別々に用意される。なお、ダイスオブジェクト７１が仮想容器７５内を転がる場合と、仮想容器７５の側面に衝突する場合とで、同じ振動波形が生成されてもよい。すなわち、ダイスオブジェクト７１が仮想容器７５内を転がる場合の振動パターンデータと、ダイスオブジェクト７１が仮想容器７５の側面に衝突する場合の振動パターンデータとが同じであってもよい。また、ダイスオブジェクト７１の運動状態に応じた振動波形を示す振動パターンデータが３つ以上用意されてもよい。例えば、ダイスオブジェクト７１同士が衝突する場合の振動パターンデータと、ダイスオブジェクト７１が仮想容器７５の面に衝突する場合の振動パターンデータとが別々に用意されてもよい。また、ダイスオブジェクト７１が仮想容器７５の底面を滑る（ダイスオブジェクト７１が面上を回転せずに移動する）ときの振動パターンデータが別に用意されてもよい。また、ダイスオブジェクト７１が仮想容器７５の底面を転がるときの振動パターンデータと、ダイスオブジェクト７１が中に浮いた状態から仮想容器７５の底面に衝突するときの振動パターンデータとが別々に用意されてもよい。
【０１４７】
また、第１のゲームと同様に、第２のゲームにおいても、ダイスオブジェクト７１の運動状態に応じて振動の振幅が調整されてもよい。例えば、ダイスオブジェクト７１が仮想容器内を転がる場合、その転がる速度に応じて、振幅が調整されてもよい。例えば、転がる速度が大きいほど、振幅が大きくてもよい。また、ダイスオブジェクト７１が仮想容器の側面に衝突する場合に、衝突時の速度に応じて、振幅が調整されてもよい。例えば、衝突時の速度が大きいほど、振幅が大きくてもよい。
【０１４８】
また、ダイスオブジェクト７１が転がる速度に応じて、振幅に加えて又は代えて、周波数が調整されてもよい。例えば、ダイスオブジェクト７１の速度が大きいほど、周波数が高くなるように調整されてもよいし、周波数が低くなるように調整されてもよい。また、ダイスオブジェクト７１の回転も考慮し、回転速度が大きいほど、周波数が高く（又は低く）なるように調整されてもよい。
【０１４９】
（第３のゲーム）
次に、第３のゲームについて説明する。第３のゲームでは、プレイヤがコントローラをシェイカーに見立ててコントローラを傾けたり振ったりする。シェイカーの例としては、マラカス等がある。コントローラが傾けられたり振られたりすることに応じて振動および音声が出力される。以下では、プレイヤが左コントローラ３を用いて第３のゲームを行うものとして説明する。なお、右コントローラ４が用いられた場合も同様である。
【０１５０】
図１８は、第３のゲームにおける仮想オブジェクトと仮想容器の一例を示す図である。実際のマラカス等のシェイカーは、容器と容器内の砂とで構成されるが、本実施形態では、シェイカーを振ったり傾けたりしたときの振動をシミュレートするために、シェイカーの容器を仮想容器７７で表し、シェイカーの容器内の砂を１つの代表点で表すものとする。
【０１５１】
図１８に示されるように、仮想空間に仮想容器７７が定義され、仮想容器７７に代表点７２が内包される。仮想容器７７は、例えば直方体である。代表点７２は、例えば大きさを持たない点又は粒子である。第１のゲームおよび第２のゲームと同様に、ＸＹＺ座標系は仮想空間に固定の座標系であり、ＸｂＹｂＺｂ座標系は仮想容器７７に固定の座標系である。
【０１５２】
現実空間において左コントローラ３の姿勢を変化させると、仮想空間において仮想容器７７の姿勢も変化する。仮想容器７７の姿勢の変化に応じて、代表点７２が移動し、代表点７２の移動に応じて左コントローラ３が振動する。また、現実空間において左コントローラ３が振られると、左コントローラ３が振動する。
【０１５３】
図１９Ａおよび図１９Ｂは、左コントローラ３の姿勢を変化させた場合の代表点７２の運動およびそれに応じた振動を概念的に示す図である。図１９Ｃは、左コントローラ３が振られたときに左コントローラ３が振動する様子を概念的に示す図である。
【０１５４】
図１９Ａに示されるように、左コントローラ３を例えばｘ軸まわりに回転させた場合、仮想容器７７もＺｂ軸まわりに回転し、仮想容器７７の底面が図１９Ａの左右方向に対して傾く。仮想空間に固定のＹ軸負方向には仮想の重力がかかるため、仮想容器７７内の代表点７２には、仮想容器７７の底面に沿った方向（図１９Ａの右方向）に力がかかる。この力によって、代表点７２はＸｂ軸方向に移動する。具体的には、代表点７２に対して運動シミュレーションが行われ、代表点７２の位置、速度、加速度等が計算される。
【０１５５】
代表点７２が仮想容器７７の底面を移動している間、左コントローラ３が振動する（図１９Ａ）。具体的には、代表点７２の移動に応じた振動波形を示す信号が生成され、その信号が本体装置２から左コントローラ３に出力されて、左コントローラ３の振動子１０７が振動する。第３のゲームでは、代表点７２の移動に応じた振動波形を示す振動パターンデータが複数用意されている。また、代表点７２が仮想容器７７の底面を移動している間、シェイカーを傾けたときにシェイカー内の砂が移動するような音声がスピーカから出力される。
【０１５６】
また、代表点７２が仮想容器７７内を移動して仮想容器７７の側面に衝突すると、その衝突に応じて左コントローラ３が振動する（図１９Ｂ）。具体的には、代表点７２の衝突に応じた振動波形を示す信号が生成され、その信号が左コントローラ３に出力されて、左コントローラ３の振動子１０７が振動する。代表点７２の衝突に応じた振動波形は、代表点７２の移動に応じた振動波形とは異なる。第３のゲームでは、代表点７２の衝突に応じた振動波形を示す振動パターンデータが複数用意されている。また、代表点７２が仮想容器７７の側面に衝突すると、砂がシェイカーの容器の内面に衝突したような音声がスピーカから出力される。
【０１５７】
ここでは、代表点７２が仮想容器７７の底面を移動することによる振動（図１９Ａ）、及び、代表点７２が衝突することによる振動（図１９Ｂ）を総称して「代表点の運動に基づく振動」ということがある。
【０１５８】
一方、プレイヤが左コントローラ３を強く振った場合、その振りの強さに応じて左コントローラ３が振動する（図１９Ｃ）。具体的には、左コントローラ３が振られると、左コントローラ３の加速度センサ１０４が加速度を検出する。加速度センサ１０４が検出した加速度値が所定の閾値を超えている場合、コントローラの振りに応じた振動波形を示す信号が生成されて左コントローラ３に出力され、左コントローラ３の振動子１０７が振動する。左コントローラ３の振りに応じた振動波形は、代表点７２の移動に応じた振動波形、および、代表点７２の衝突に応じた振動波形とは異なる。また、左コントローラ３の振りに応じた振動の振幅は、代表点７２の移動および衝突に応じた振動の振幅よりも大きい。また、本実施形態では、コントローラの振りに応じた振動波形を示す振動パターンデータが複数用意されている。なお、左コントローラ３を振った場合、その振りの強さに応じた音量の音声（プレイヤがシェイカーを振ったときの音声）がスピーカから出力される。
【０１５９】
ここでは、加速度値が所定の閾値を超えている場合に行われるコントローラの振りに応じた振動を「加速度値に基づく振動」ということがある。
【０１６０】
このように、第３のゲームでは、コントローラの姿勢に基づいて代表点７２に対する運動シミュレーションが行われ、その運動シミュレーションの結果、代表点７２の運動に基づく振動（図１９Ａの移動に応じた振動、図１９Ｂの衝突に応じた振動）が行われる。また、コントローラが強く振られた場合には、加速度値に基づく振動（図１９Ｃ）が行われる。
【０１６１】
図２０は、第３のゲームにおける代表点の運動に基づく振動の振動パターンデータの一例を示す図である。図２１は、第３のゲームにおける加速度値に基づく振動の振動パターンデータの一例を示す図である。
【０１６２】
図２０に示されるように、代表点７２が移動しているときの振動パターンデータとして、振動パターンＰ１〜Ｐ３が本体装置２に予め記憶されている。代表点７２が移動しているときは、振動パターンＰ１〜Ｐ３のうちの何れかがランダムに選択される。振動パターンＰ１〜Ｐ３は、実際のシェイカーが傾けられたときにシェイカー内の砂が移動する（流れる）ことによって発生する振動に類似した振動をコントローラの振動子に行わせる振動パターンであり、それぞれ異なる振動波形を示す振動パターンである。
【０１６３】
具体的には、代表点７２が仮想容器７７の底面を移動開始する際に、振動パターンＰ１〜Ｐ３のうちの何れかがランダムに選択される。振動パターンＰ１〜Ｐ３のうちの何れかが選択された場合、その選択された振動パターンに応じた振動波形を示す信号が生成される。これにより、代表点７２の移動（砂の移動）に応じた振動が行われる。このとき、振動の振幅が調整される。例えば、代表点７２の移動速度が大きいほど、振幅が大きくなる。なお、代表点７２の移動速度に応じて周波数が調整されてもよい。例えば、代表点７２の速度が大きいほど、周波数が高く（又は低く）なるように調整されてもよい。
【０１６４】
ここで、代表点７２が仮想容器７７の底面を移動している間、選択された振動パターンに基づく振動が繰り返し行われる。すなわち、代表点７２が移動開始してから停止するまでの間、同じ振動パターンデータに基づく振動が行われる。代表点７２が移動しているときに代表点７２の速度が変化すると、その速度の変化に応じて振幅が変化する。例えば、速度が大きくなると、振幅が大きくなる。そして、例えば、代表点７２が仮想容器７７の側面に衝突することによって停止すると、振動パターンＰ１〜Ｐ３のうちの何れかに基づく振動が終了する。代表点７２が再び仮想容器７７の底面を移動開始すると、振動パターンＰ１〜Ｐ３のうちの何れかがランダムに選択され、選択された振動パターンに基づいて振動が行われる。
【０１６５】
また、代表点７２が衝突する場合、振動パターンＰ４〜Ｐ１２のうちの何れかが選択される。振動パターンＰ４〜Ｐ１２は、実際のシェイカーが傾けられたときにシェイカー内の砂がシェイカーの容器の内面に衝突することによって発生する振動に類似した振動をコントローラの振動子に行わせる振動パターンであり、それぞれ異なる振動波形を示す振動パターンである。具体的には、振動パターンＰ４〜Ｐ１２は、衝突時の代表点の速度の大きさに応じて、３つに分類される。衝突時の代表点７２の速度が大きい場合、「大」に分類される振動パターンＰ４〜Ｐ６のうちの何れかがランダムに選択される。また、衝突時の代表点７２の速度が中くらいの場合、「中」に分類される振動パターンＰ７〜Ｐ９のうちの何れかがランダムに選択される。また、衝突時の代表点７２の速度が小さい場合、「小」に分類される振動パターンＰ１０〜Ｐ１２のうちの何れかがランダムに選択される。
【０１６６】
図２０に示される振動パターンＰ４〜Ｐ１２のうちの何れかが選択された場合、その選択された振動パターンに応じた振動波形を示す信号が生成される。これにより、代表点７２の衝突（砂の衝突）に応じた振動が行われる。このとき、振動の振幅が調整される。例えば、衝突時の代表点７２の速度が大きいほど、振幅が大きくなる。なお、衝突時の代表点７２の速度に応じて周波数が調整されてもよい。例えば、衝突時の代表点７２の速度が大きいほど、周波数が高く（又は低く）なるように調整されてもよい。
【０１６７】
また、図２１に示されるように、加速度値に基づく振動の振動パターンとして、振動パターンＰ１３〜Ｐ２１が本体装置２に予め記憶されている。振動パターンＰ１３〜Ｐ２１は、実際のシェイカーが振られたときに発生する振動に類似した振動をコントローラの振動子に行わせる振動パターンであり、それぞれ異なる振動波形を示す振動パターンである。具体的には、振動パターンＰ１３〜Ｐ２１は、加速度値の大きさに応じて、３つに分類される。加速度値が大きい場合、「大」に分類される振動パターンＰ１３〜Ｐ１５のうちの何れかがランダムに選択される。また、加速度値が中くらいの場合、「中」に分類される振動パターンＰ１６〜Ｐ１８のうちの何れかがランダムに選択される。また、加速度値が小さい場合、「小」に分類される振動パターンＰ１９〜Ｐ２１のうちの何れかがランダムに選択される。
【０１６８】
図２１に示される振動パターンＰ１３〜Ｐ２１のうちの何れかが選択された場合、その選択された振動パターンに応じた振動波形を示す信号が生成される。これにより、加速度値に応じた振動（コントローラの振りに応じた振動）が行われる。このとき、振動の振幅が調整される。例えば、加速度値が大きいほど、振幅が大きくなる。なお、加速度値に応じて周波数が調整されてもよい。例えば、加速度値が大きいほど、周波数が高く（又は低く）なるように調整されてもよい。
【０１６９】
コントローラが振られると、コントローラの姿勢が変化するとともに、コントローラの加速度センサが比較的大きな加速度値を検出する。このため、プレイヤがコントローラを振ると、代表点７２の運動に基づく振動と、加速度値に基づく振動とが同時に行われる。具体的には、代表点７２の運動に基づく振動の振動波形と、加速度値に基づく振動の振動波形とが合成され、当該合成された合成波形を示す信号がコントローラに出力される。
【０１７０】
ここで、振動パターンＰ１３〜Ｐ２１に基づく振動の振幅は、振動パターンＰ１〜Ｐ１２に基づく振動の振幅よりも大きい。このため、プレイヤがコントローラを振る場合、代表点７２の運動に基づく振動の振動波形と加速度値に基づく振動の振動波形とが合成されるものの、プレイヤは加速度値に基づく振動（すなわち、コントローラの振りに応じた振動）をより感じ易い。また、加速度値に基づく振動が発生するときには、代表点７２の運動に基づく振動が発生するときよりも、大きな音声（シェイカーを振ったときの音声）が出力される。
【０１７１】
なお、第３のゲームでは、コントローラが継続的に振られているときと、コントローラが振り始められたときとで、異なる振動パターンが用意されてもよい。例えば、コントローラが継続的に振られているときの加速度値に基づく振動の振動パターンとしては、図２１に示される振動パターンが用いられる。一方、コントローラが振り始められたとき、すなわち、加速度値が所定の閾値を超えていない状態から、加速度値が所定の閾値を超えたとき、図２１とは異なる振動パターンが用いられる。
【０１７２】
以上のように、コントローラの振動子は、入力された振動波形を示す信号に応じた振動をする。具体的には、入力される信号には周波数と振幅とが含まれ、振動子は、入力された周波数および振幅で振動する。本実施形態では、仮想オブジェクト（７０、７１、７２）が他のオブジェクト（仮想容器７３〜７７）と接触し、仮想オブジェクトと他のオブジェクトとが接触している又は接触するときの仮想オブジェクトの運動状態に応じて振動パターンデータが選択される。選択された振動パターンデータに基づく振動波形を示す信号が生成され、当該信号が本体装置２からコントローラに出力される。当該信号に基づいて、コントローラの振動子が振動する。同時に複数の振動波形が生成される場合、複数の振動波形が合成され、当該合成された合成波形を示す信号が出力され、振動子が振動する。
【０１７３】
複数の振動波形が合成されるため、例えば複数の仮想オブジェクトが運動する場合、より強く（より大きく）振動子が振動する。これにより、プレイヤに複数の仮想オブジェクトの運動を振動により感じさせることができる。プレイヤに仮想オブジェクトの様々な動きを感じさせることができ、よりリアルな振動を体験させることができる。
【０１７４】
（振動制御の詳細）
次に、上述した振動制御を行うための本体装置２において行われる処理の詳細について説明する。まず、コントローラから出力されるデータおよびコントローラに入力されるデータについて説明する。
【０１７５】
図２２は、コントローラから出力されるデータの一例を示す図である。図２３は、コントローラに入力されるデータの一例を示す図である。上述したゲームが行われている間、図２２に示すデータが、所定の時間間隔（例えば、５ｍ秒毎）で左コントローラ３および右コントローラ４から本体装置２に出力される。また、上述したゲームが行われている間、図２３に示すデータが、所定の時間間隔（例えば、５ｍ秒毎）で本体装置２から左コントローラ３および右コントローラ４に入力される。
【０１７６】
図２２に示されるように、コントローラから出力されるデータには、加速度データＤ３０１と角速度データＤ３０２とが含まれる。加速度データＤ３０１は、コントローラの加速度センサ（１０４、１１４）が検出した各軸方向の加速度を示すデータである。また、角速度データＤ３０２は、コントローラの角速度センサ（１０５、１１５）が検出した各軸回りの角速度を示すデータである。
【０１７７】
また、図２３に示されるように、コントローラに入力されるデータには、周波数データＤ４０１と、振幅データＤ４０２とが含まれる。周波数データＤ４０１は、コントローラの振動子（１０７、１１７）を振動させるときの周波数を指定するためのデータである。振幅データＤ４０２は、コントローラの振動子を振動させるときの振幅を指定するためのデータである。
【０１７８】
（本体装置の処理の詳細）
次に、本体装置２において行われる処理の詳細について説明する。図２４は、第１のゲームまたは第２のゲームが行われる場合の本体装置２において行われる処理の詳細を示すフローチャートである。図２４に示す処理は、本体装置２のＣＰＵ８１が所定のゲームプログラムを実行することにより行われる。なお、本体装置２は、図２４に示す処理を所定の時間間隔（例えば、５ｍ秒毎）で実行する。
【０１７９】
図２４に示されるように、本体装置２は、各コントローラから図２２に示すデータを取得する（ステップＳ１）。次に、本体装置２は、ステップＳ１で各コントローラから取得したデータに基づいて、各コントローラの姿勢および動きを算出する（ステップＳ２）。具体的には、本体装置２は、加速度データＤ３０１及び／又は角速度データＤ３０２に基づいて、各コントローラの姿勢および動きを算出する。
【０１８０】
次に、本体装置２は、ステップＳ２で算出した各コントローラの姿勢および動きに基づいて、仮想オブジェクトの運動を演算する（ステップＳ３）。例えば、第１のゲームが行われている場合、本体装置２は、各コントローラに対応する仮想容器７３、７４を定義するとともに、各仮想容器７３，７４内に１又は複数の球オブジェクト７０を配置する。本体装置２は、各コントローラの姿勢に応じて仮想容器７３，７４の姿勢を変化させ、各仮想容器７３，７４内の各球オブジェクト７０に対する運動シミュレーションを行う。これにより、各仮想容器７３，７４内の各球オブジェクト７０の位置、速度、加速度、回転等が算出される。また、第２のゲームが行われている場合、本体装置２は、各仮想容器７５，７６内の各ダイスオブジェクト７１に対する運動シミュレーションを行うことにより、各仮想容器７５，７６内の各ダイスオブジェクト７１の位置、速度、加速度、回転等を算出する。
【０１８１】
本体装置２は、ステップＳ３の処理の結果に基づいて、仮想オブジェクトが移動しているか否かを判定する（ステップＳ４）。本体装置２は、複数の仮想オブジェクトのそれぞれについてステップＳ４の判定を行う。例えば、第１のゲームが行われている場合、本体装置２は、仮想容器７３内の複数の球オブジェクト７０毎に、球オブジェクト７０が仮想容器７３の底面を転がっているか否かを判定する。本体装置２は、仮想容器７４内の複数の球オブジェクト７０に対しても同様の判定を行う。また、例えば、第２のゲームが行われている場合、本体装置２は、仮想容器７５内の複数のダイスオブジェクト７１毎に、ダイスオブジェクト７１が仮想容器７５内を転がっているか否かを判定する。本体装置２は、仮想容器７６内の複数のダイスオブジェクト７１に対しても同様の判定を行う。
【０１８２】
仮想オブジェクトが移動していると判定した場合（ステップＳ４：ＹＥＳ）、本体装置２は、仮想オブジェクトの移動に応じた振動波形を示す信号を生成する（ステップＳ５）。本体装置２は、複数の仮想オブジェクトが移動している場合、移動している仮想オブジェクト毎に振動波形を示す信号を生成する。
【０１８３】
具体的には、本体装置２は、ステップＳ５の処理を所定の時間間隔（５ｍ秒）で実行し、予め記憶された振動波形を示す振動パターンデータを時間経過に応じて順次読み取り、振動パターンデータに基づく振動を順次再生する。より具体的には、本体装置２は、振動パターンデータに基づいて、振動波形を示す信号を生成する。この振動波形を示す信号は、振動の周波数と振幅を含む。この信号が例えば５ｍ秒毎にコントローラに出力されて振動子に入力される。コントローラの振動子は、本体装置２からの信号を受信して、その信号において指定された周波数および振幅で振動する。すなわち、５ｍ秒毎に振動子の振動の周波数および振幅が変化する。これにより、コントローラの振動子は、振動パターンデータによって示される振動波形に合うように振動する。
【０１８４】
例えば、第１のゲームが行われている場合、本体装置２は、ステップＳ５において、仮想容器の底面を転がっている球オブジェクト７０毎に、転がりに応じた振動波形を示す信号を生成する。具体的には、本体装置２は、予め記憶された球オブジェクト７０の転がりに応じた振動波形を示す振動パターンデータをメモリから読み取り、当該振動パターンデータに基づいて振動波形を示す信号を生成する。また、第２のゲームが行われている場合、本体装置２は、仮想容器の底面を転がっているダイスオブジェクト７１毎に、転がりに応じた振動波形を示す信号を生成する。具体的には、本体装置２は、予め記憶されたダイスオブジェクト７１の転がりに応じた振動波形を示す振動パターンデータをメモリから読み取り、当該振動パターンデータに基づいて振動波形を示す信号を生成する。
【０１８５】
ステップＳ５を実行した場合、又は、ステップＳ４でＮＯと判定した場合、本体装置２は、仮想オブジェクトが衝突したか否かを判定する（ステップＳ６）。本体装置２は、複数の仮想オブジェクトのそれぞれについてステップＳ６の判定を行う。例えば、第１のゲームが行われている場合、本体装置２は、仮想容器７３内の複数の球オブジェクト７０毎に、球オブジェクト７０が仮想容器７３の側面に衝突したか否かを判定する。本体装置２は、仮想容器７４内の複数の球オブジェクト７０に対しても同様の判定を行う。また、例えば、第２のゲームが行われている場合、本体装置２は、仮想容器７５内の複数のダイスオブジェクト７１毎に、ダイスオブジェクト７１が仮想容器７５の側面に衝突したか否かを判定する。本体装置２は、仮想容器７６内の複数のダイスオブジェクト７１に対しても同様の判定を行う。
【０１８６】
仮想オブジェクトが衝突したと判定した場合（ステップＳ６：ＹＥＳ）、本体装置２は、仮想オブジェクトの衝突に応じた振動波形を示す信号を生成する（ステップＳ７）。本体装置２は、複数の仮想オブジェクトが仮想容器の側面に衝突した場合、仮想容器の側面に衝突した仮想オブジェクト毎に、振動波形を示す信号（周波数および振幅）を生成する。例えば、第１のゲームが行われている場合、本体装置２は、仮想容器の側面に衝突した球オブジェクト７０毎に、衝突に応じた振動波形を示す信号を生成する。具体的には、ステップＳ５と同様に、本体装置２は、予め記憶された球オブジェクト７０の衝突に応じた振動波形を示す振動パターンデータをメモリから読み取り、当該振動パターンデータに基づいて振動波形を示す信号を生成する。また、第２のゲームが行われている場合、本体装置２は、仮想容器の側面に衝突したダイスオブジェクト７１毎に、衝突に応じた振動波形を示す信号を生成する。具体的には、本体装置２は、予め記憶されたダイスオブジェクト７１の衝突に応じた振動波形を示す振動パターンデータをメモリから読み取り、当該振動パターンデータに基づいて振動波形を示す信号を生成する。
【０１８７】
ステップＳ７を実行した場合、又は、ステップＳ６でＮＯと判定した場合、本体装置２は、波形出力処理を行う（ステップＳ８）。以下、波形出力処理の詳細について説明する。
【０１８８】
図２５は、図２４のステップＳ８の波形出力処理の詳細を示すフローチャートである。
【０１８９】
本体装置２は、２つ以上の振動波形を示す信号を同時に出力するか否かを判定する（ステップＳ１１）。上述のように、例えば第１のゲームでは仮想容器内に球オブジェクト７０が複数存在する場合があり、複数の球オブジェクト７０が同時に転がることによって、ステップＳ５において複数の振動波形に応じた信号が生成される場合がある。また、第２のゲームでは仮想容器内に２つのダイスオブジェクト７１が存在するため、ステップＳ５において複数の振動波形に応じた信号が生成される場合がある。また、ステップＳ５において１又は複数の振動波形に応じた信号が生成されるとともに、ステップＳ７においても１又は複数の振動波形に応じた信号が生成される場合もある。このように、２以上の振動波形を示す信号が同時に出力される場合がある。また、仮に１つの仮想オブジェクトしか存在しない場合であっても、例えば、今回の処理ループより前に、ステップＳ４においてＹＥＳと判定されたことによって、ステップＳ５において振動パターンデータに基づく振動の再生が開始され、その振動の再生が終了していないときに、今回の処理ループにおいてステップＳ６においてＹＥＳと判定された場合、ステップＳ７において別の振動パターンデータに基づく振動の再生が開始される。このような場合でも、２つ以上の振動波形を示す信号が同時に出力される。
【０１９０】
２つ以上の振動波形を示す信号を同時に出力すると判定した場合（ステップＳ１１：ＹＥＳ）、本体装置２は、複数の振動波形を合成する（ステップＳ１２）。具体的には、本体装置２は、今回の処理ループにおいて生成した各振動波形を示す信号（周波数および振幅）について、次のような計算を行う。まず、本体装置２は、各振動波形の振幅の合計を、合成波形の振幅Ｗａとして算出する。次に、本体装置２は、各振動波形の周波数と振幅をかけた値を合計する。そして、その合計を合成波形の振幅Ｗａで除した値を、合成波形の周波数Ｗｆとして算出する。
【０１９１】
例えば、波形１（周波数＝Ｗｆ１、振幅＝Ｗａ１）と波形２（周波数＝Ｗｆ２、振幅Ｗａ２）とを合成する場合、本体装置２は以下の計算を行う。
合成波形の振幅Ｗａ＝Ｗａ１＋Ｗａ２
合成波形の周波数Ｗｆ＝（Ｗｆ１・Ｗａ１＋Ｗｆ２・Ｗａ２）／Ｗａ
【０１９２】
このように、本体装置２は、複数の振動波形の振幅の和を合成波形の振幅Ｗａとして算出する。また、本体装置２は、複数の振動波形の周波数について重みを付けた平均を算出することにより、合成波形の周波数Ｗｆを算出する。
【０１９３】
次に、本体装置２は、ステップＳ１２において算出した合成波形を示す信号をコントローラに出力する（ステップＳ１３）。具体的には、本体装置２は、合成波形の周波数Ｗｆを図２３に示す周波数データＤ４０１とし、合成波形の振幅Ｗａを振幅データＤ４０２として、これらのデータをコントローラに出力する。
【０１９４】
一方、２つ以上の振動波形を示す信号を同時に出力しないと判定した場合（ステップＳ１１：ＮＯ）、本体装置２は、１つの振動波形を示す信号を出力するか否かを判定する（ステップＳ１４）。１つの振動波形を示す信号を出力すると判定した場合（ステップＳ１４：ＹＥＳ）、本体装置２は、１つの振動波形を示す信号をコントローラに出力する（ステップＳ１５）。具体的には、本体装置２は、ステップＳ５又はステップＳ７によって生成された１つの振動波形の周波数を周波数データＤ４０１とし、当該振動波形の振幅を振幅データＤ４０２として、コントローラに出力する。
【０１９５】
ステップＳ１３の処理を行った場合、ステップＳ１５の処理を行った場合、又は、ステップＳ１４でＮＯと判定した場合、本体装置２は図２６に示す処理を終了する。
【０１９６】
（第３のゲームの処理の詳細）
次に、第３のゲームが行われる場合の本体装置２において行われる処理の詳細について説明する。図２６は、第３のゲームが行われる場合の本体装置２において行われる処理の詳細を示すフローチャートである。図２６において、図２４と同様の処理については同様のステップ番号を付して説明を省略する。なお、本体装置２は、図２６に示す処理を所定の時間間隔（例えば、５ｍ秒毎）で実行する。
【０１９７】
図２６に示されるように、本体装置２は、ステップＳ４でＹＥＳと判定した場合、代表点７２の移動に応じた振動波形を生成する（ステップＳ２１）。ここでは、本体装置２は、図２０に示す振動パターンＰ１〜Ｐ３の中から何れかの振動パターンデータをランダムに選択し、選択した振動パターンデータに基づいて、代表点７２の移動に応じた振動波形を示す信号（周波数および振幅）を生成する。このとき、振幅が代表点７２の速度に応じて調整される。具体的には、本体装置２は、選択した振動パターンデータに基づく振動波形の振幅に、代表点７２の速度に応じた値をかける。
【０１９８】
また、本体装置２は、ステップＳ６でＹＥＳと判定した場合、代表点７２の衝突に応じた振動波形を生成する（ステップＳ２２）。ここでは、本体装置２は、代表点７２の衝突時の速度に応じて、図２０に示す振動パターンＰ４〜Ｐ１２の中から何れかの振動パターンデータを選択する。具体的には、本体装置２は、代表点７２の衝突時の速度が「大」か、「中」か、「小」かを判定する。そして、本体装置２は、代表点７２の速度に応じて、３つの振動パターンデータの中から何れか１つの振動パターンデータをランダムに選択し、選択した振動パターンデータに基づいて、代表点７２の衝突に応じた振動波形を示す信号（周波数および振幅）を生成する。このとき、振幅が代表点７２の速度に応じて調整される。具体的には、本体装置２は、選択した振動パターンデータに基づく振動波形の振幅に、衝突時の代表点７２の速度に応じた値をかける。
【０１９９】
ステップＳ２２の処理を行った場合、又は、ステップＳ６においてＮＯと判定した場合、本体装置２は、コントローラの加速度センサが検出した加速度値が所定の閾値以上か否かを判定する（ステップＳ２３）。具体的には、本体装置は、各コントローラから出力された３軸方向の加速度値によって示される加速度ベクトルの大きさを算出し、加速度ベクトルの大きさが所定の閾値以上か否かを判定する。
【０２００】
加速度値が所定の閾値以上と判定した場合（ステップＳ２３：ＹＥＳ）、本体装置２は、加速度値に応じた振動波形を生成する（ステップＳ２４）。ここでは、本体装置２は、加速度値に応じて、図２１に示す振動パターンＰ１３〜Ｐ２１の中から何れかの振動パターンデータを選択する。具体的には、本体装置２は、加速度値が「大」か、「中」か、「小」かを判定する。そして、本体装置２は、加速度値に応じて、３つの振動パターンデータの中から何れか１つの振動パターンデータをランダムに選択し、選択した振動パターンデータに基づいて、加速度値に応じた振動波形を示す信号（周波数および振幅）を生成する。このとき、振幅が加速度値に応じて調整される。具体的には、本体装置２は、選択した振動パターンデータに基づく振動波形の振幅に、加速度値に応じた値をかける。
【０２０１】
以上のように、図２４又は図２６の処理が所定の時間間隔で繰り返し行われることにより、複数の振動波形を合成した合成波形または１つの振動波形に合うように、各コントローラの振動子を振動させることができる。
【０２０２】
なお、上記処理は単なる例示であり、例えば各ステップの順番を入れ替えたり、他のステップが加えられたり、上記ステップの一部が省略されたりしてもよい。
【０２０３】
また、上述した実施形態に以下に示す種々の変形が行われてもよい。
【０２０４】
例えば、上記実施形態では、合成波の周波数については各波形の周波数に重みを付けて平均をとり、合成波の振幅については各波形の振幅を足し合わせることにより複数の波形を合成したが、複数の波形を重ね合わせることにより複数の波形を合成してもよい。すなわち、波の重ね合わせの原理にしたがって複数の波形が合成されてもよい。この場合、複数の波形は互いに干渉（強めあったり、打ち消しあったり）する。
【０２０５】
また、上記実施形態では、振動波形を示す信号として周波数および振幅が本体装置２から各コントローラに出力されるものとした。振動波形を示す信号は、例えば、高周波帯の信号（周波数および振幅）と、低周波帯の信号（周波数および振幅）とに分けて出力されてもよい。例えば、各コントローラの振動子１０７，１１７は、第１の方向に第１の共振周波数（例えば、３２０Ｈｚ）で振動し、第２の方向に第２の共振周波数（例えば、１６０Ｈｚ）で振動するリニア振動モータ（リニア振動アクチュエータとも言う）であってもよい。このような振動子は、第１の共振周波数を含む第１の周波数帯（高周波帯）で振動することが可能であるとともに、第２の共振周波数を含む第２の周波数帯（低周波帯）で振動することが可能である。振動子は、第１の共振周波数で第１の方向に大きく振動しやすく、かつ、第２の共振周波数で第２の方向に大きく振動しやすい。また、振動子は、高周波帯の振動と低周波帯の振動とを合成した合成波により第１の方向と第２の方向の間の方向に振動することができ、低周波帯から高周波帯までの周波数にて振動するこができる。このような振動子がコントローラに設けられる場合において、本体装置２は、高周波帯の信号と、低周波帯の信号とコントローラに出力してもよい。例えば、本体装置２は、高周波帯の信号と低周波帯の信号とを含む１つのパケットをコントローラに送信してもよいし、これらの信号を別のパケットに含めてコントローラに送信してもよい。振動子は、受信した高周波帯の信号と、低周波帯の信号とに基づいて、振動する。また、コントローラは、２つのリニア振動モータ（第１の共振周波数を有する第１の振動モータ、および、第２の共振周波数を有する第２の振動モータ）を備え、本体装置２は、高周波帯の信号と、低周波帯の信号とを当該コントローラに出力してもよい。この場合、コントローラは、受信した高周波帯の信号に基づいて第１の振動モータを振動させ、受信した低周波帯の信号に基づいて第２の振動モータを振動させる。
【０２０６】
また、上記実施形態では、所定の時間間隔（例えば５ｍ秒毎）で振動波形を示す信号として周波数および振幅が本体装置２から各コントローラに出力されるものとしたが、他の実施形態では、所定の時間間隔で周波数の差分および振幅の差分がコントローラに出力されてもよい。すなわち、前回の処理ループにおいて出力された周波数の差分が今回の処理ループにおいてコントローラに出力され、前回の処理ループにおいて出力された振幅の差分が今回の処理ループにおいてコントローラに出力されてもよい。
【０２０７】
また、上記実施形態では、所定の時間間隔（例えば５ｍ秒毎）で振動波形を示す信号として周波数および振幅が本体装置２から各コントローラに出力されるものとしたが、他の実施形態では、振動波形を示す信号として振動波形自体がコントローラに出力されてもよい。例えば、本体装置２に振動波形を示す振動パターンデータが記憶され、この振動パターンデータ自体が本体装置２からコントローラに出力されてもよい。また、他の実施形態では、コントローラに複数の振動パターンデータが記憶され、振動波形を示す信号として、どの振動パターンデータに基づく振動を行うかの情報が本体装置２からコントローラに出力されてもよい。各コントローラは、この信号を本体装置２から受信すると、信号に応じた振動パターンデータを選択し、当該振動パターンデータに基づいて振動子を振動させてもよい。
【０２０８】
すなわち、本実施形態では、振動波形を示す信号は、上記周波数および振動であってもよいし、周波数の差分および振動の差分であってもよいし、振動波形自体（すなわち、振動波形を示す振動パターンデータ）であってもよい。また、振動波形を示す信号は、振動パターンデータ（言い換えると振動パターンを記憶したファイル）を指定する信号であってもよい。
【０２０９】
また、上述したゲームは単なる一例であり、他のゲームが行われてもよい。例えば、球形の球オブジェクトや立方体のダイスオブジェクトに限らず、他の任意の仮想オブジェクトを用いたゲームが行われてもよい。仮想オブジェクトの形状は球形、立方体等に限らず、任意の形状でもよい。また、仮想オブジェクトが仮想容器に内包されて、仮想容器内で運動する場合に限らず、仮想オブジェクトが仮想空間を任意に運動してもよい。
【０２１０】
また、上記では２人または１人で行うゲームを想定したが、３人以上で上記ゲームまたは他の任意のゲームが行われてもよい。
【０２１１】
また、上記では左右のコントローラ３，４を本体装置２から外してゲームを行うものとしたが、他の実施形態では、左右のコントローラ３，４を本体装置２に装着した状態で上記ゲーム（又は他のゲーム）が行われてもよい。
【０２１２】
また、上記では慣性センサからのデータに基づいてコントローラの姿勢を検出するものとしたが、他の方法によりコントローラの姿勢を検出してもよい。例えば、カメラを用いてコントローラを撮像し、撮像画像に基づいてコントローラの姿勢を検出してもよい。
【０２１３】
また、上記ではコントローラの姿勢を変化させることにより仮想オブジェクトを運動させるものとした。他の実施形態では、例えば、コントローラのボタンや方向入力部に対する操作に基づいて仮想オブジェクトを運動させてもよい。また、タッチパネルに対する操作に基づいて仮想オブジェクトを運動させてもよい。すなわち、操作部に対する操作（操作部自体を傾けたり振ったりする操作、ボタンや方向入力部、タッチパネル等に対する操作）に基づいて、仮想オブジェクトを運動させてもよい。
【０２１４】
また、上記実施形態では、操作部に対する操作（操作部自体を傾けたり振ったりする操作、ボタンや方向入力部、タッチパネル等に対する操作）に応じて仮想容器の姿勢を変化させることで仮想オブジェクトを運動させた。他の実施形態では、操作部に対する操作に応じて、仮想オブジェクト自体を直接運動させてもよい。例えば、コントローラに対する操作に応じて、仮想オブジェクトに仮想的な力が加わって仮想オブジェクトが運動するようにしてもよい。
【０２１５】
また、上記実施形態では、ゲームが行われ、ゲームにおいて仮想オブジェクトの運動が計算され、仮想オブジェクトの運動に応じて振動を発生させた。他の実施形態では、ゲームに限らず、任意の仮想オブジェクトの運動に応じて振動を発生させてもよい。
【０２１６】
上記ハードウェア構成は単なる一例であり、例えば、コントローラと本体装置２とが一体となった装置であってもよい。
【０２１７】
以上、本発明について説明したが、上記説明は本発明の例示に過ぎず、種々の改良や変形が加えられてもよい。
【符号の説明】
【０２１８】
１  情報処理システム
２  本体装置
３  左コントローラ
４  右コントローラ
７０、７１  仮想オブジェクト
７２  代表点
７３、７４、７５、７６、７７  仮想容器
８１  ＣＰＵ
１０４、１１４  加速度センサ
１０５、１１５  角速度センサ
１０７、１１７  振動子
１２０  姿勢・動き算出部
１２１  運動演算部
１２２  波形生成部
１２３  波形出力部
【図１】
2018106598.tif 000003
【図２】
2018106598.tif 000004
【図３】
2018106598.tif 000005
【図４】
2018106598.tif 000006
【図５】
2018106598.tif 000007
【図６】
2018106598.tif 000008
【図７】
2018106598.tif 000009
【図８】
2018106598.tif 000010
【図９】
2018106598.tif 000011
【図１０】
2018106598.tif 000012
【図１１Ａ】
2018106598.tif 000013
【図１１Ｂ】
2018106598.tif 000014
【図１２】
2018106598.tif 000015
【図１３】
2018106598.tif 000016
【図１４Ａ】
2018106598.tif 000017
【図１４Ｂ】
2018106598.tif 000018
【図１４Ｃ】
2018106598.tif 000019
【図１５】
2018106598.tif 000020
【図１６】
2018106598.tif 000021
【図１７Ａ】
2018106598.tif 000022
【図１７Ｂ】
2018106598.tif 000023
【図１８】
2018106598.tif 000024
【図１９Ａ】
2018106598.tif 000025
【図１９Ｂ】
2018106598.tif 000026
【図１９Ｃ】
2018106598.tif 000027
【図２０】
2018106598.tif 000028
【図２１】
2018106598.tif 000029
【図２２】
2018106598.tif 000030
【図２３】
2018106598.tif 000031
【図２４】
2018106598.tif 000032
【図２５】
2018106598.tif 000033
【図２６】
2018106598.tif 000034