以下、本実施形態の一例に係る情報処理システムについて説明する。本実施形態における情報処理システム1の一例は、本体装置(情報処理装置;本実施例ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とによって構成される。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能であり、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用でき、また、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(図2参照)。また、情報処理システム1は、本体装置2に画像を表示する態様での利用と、テレビ等の他の表示装置(例えば、据置型モニタ)に画像を表示させる態様での利用が可能である。前者の態様において、情報処理システム1は、携帯型装置(例えば、携帯ゲーム機)として利用することができる。また、後者の態様において、情報処理システム1は、据置型装置(例えば、据置型ゲーム機)として利用することができる。
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態を示す図である。図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、情報処理システム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。図1および図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。左コントローラ3は、本体装置2の左側面(図1に示すx軸正方向側の側面)に装着することができ、本体装置2の左側面に沿って図1に示すy軸方向にスライドさせることによって本体装置2に着脱可能となっている。また、右コントローラ4は、本体装置2の右側面(図1に示すx軸負方向側の側面)に装着することができ、本体装置2の右側面に沿って図1に示すy軸方向にスライドさせることによって本体装置2に着脱可能となっている。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。なお、本実施例において、1人のユーザが操作する「操作装置」は、1つのコントローラ(例えば、左コントローラ3および右コントローラ4の一方)でも複数のコントローラ(例えば、左コントローラ3および右コントローラ4の両方、またはさらに他のコントローラを含んでもよい)でもよく、当該「操作装置」は、1以上のコントローラによって構成可能となる。以下、本体装置2と左コントローラ3および右コントローラ4との具体的な構成の一例について説明する。
図3は、本体装置2の一例を示す六面図である。図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施例において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。本実施例においては、ハウジング11は、横長の形状であるものとする。つまり、本実施例においては、ハウジング11の主面の長手方向(すなわち、図1に示すx軸方向)を横方向(左右方向とも言う)と呼び、当該主面の短手方向(すなわち、図1に示すy軸方向)を縦方向(上下方向とも言う)と呼び、主面に垂直な方向(すなわち、図1に示すz軸方向)を奥行方向(前後方向とも言う)と呼ぶこととする。本体装置2は、本体装置2が横長となる向きで利用されることが可能である。また、本体装置2が縦長となる向きで利用されることも可能である。その場合には、ハウジング11を縦長の形状であるものと見なしてもよい。
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が取得または生成した画像(静止画であってもよいし、動画であってもよい)を表示する。本実施例においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施例においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、図6に示すスピーカ88)を備えている。図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
図3に示すように、本体装置2は、ハウジング11の左側面において左レール部材15を備える。左レール部材15は、左コントローラ3を本体装置2に着脱可能に装着するための部材である。左レール部材15は、ハウジング11の左側面において、上下方向に沿って延びるように設けられる。左レール部材15は、左コントローラ3のスライダ(すなわち、図4に示すスライダ40)と係合可能な形状を有しており、左レール部材15とスライダ40とによってスライド機構が形成される。このスライド機構によって、左コントローラ3を本体装置2に対してスライド可能かつ着脱可能に装着することができる。
また、本体装置2は、左側端子17を備える。左側端子17は、本体装置2が左コントローラ3と有線通信を行うための端子である。左側端子17は、左コントローラ3が本体装置2に装着された場合に、左コントローラ3の端子(図4に示す端子42)と接触する位置に設けられる。左側端子17の具体的な位置は任意である。本実施例においては、図3に示すように、左側端子17は、左レール部材15の底面に設けられる。また、本実施例においては、左側端子17は、左レール部材15の底面における下側の端部付近に設けられ、左レール部材15の一部によって外部に露出しない位置に配置されている。
図3に示すように、ハウジング11の右側面には、左側面に設けられる構成と同様の構成が設けられる。すなわち、本体装置2は、ハウジング11の右側面において右レール部材19を備える。右レール部材19は、ハウジング11の右側面において、上下方向に沿って延びるように設けられる。右レール部材19は、右コントローラ4のスライダ(すなわち、図5に示すスライダ62)と係合可能な形状を有しており、右レール部材19とスライダ62とによってスライド機構が形成される。このスライド機構によって、右コントローラ4を本体装置2に対してスライド可能かつ着脱可能に装着することができる。
また、本体装置2は右側端子21を備える。右側端子21は、本体装置2が右コントローラ4と有線通信を行うための端子である。右側端子21は、右コントローラ4が本体装置2に装着された場合に、右コントローラ4の端子(図5に示す端子64)と接触する位置に設けられる。右側端子21の具体的な位置は任意である。本実施例においては、図3に示すように、右側端子21は、右レール部材19の底面に設けられる。また、本実施例においては、右側端子21は、右レール部材19の底面における下側の端部付近に設けられ、右レール部材19の一部によって外部に露出しない位置に配置されている。
図3に示すように、本体装置2は、第1スロット23を備える。第1スロット23は、ハウジング11の上側面に設けられる。第1スロット23は、第1の種類の記憶媒体を装着可能な形状を有する。第1の種類の記憶媒体は、例えば、情報処理システム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。第1の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。図3に示すように、電源ボタン28は、ハウジング11の上側面に設けられる。電源ボタン28は、本体装置2の電源のオン/オフを切り替えるためのボタンである。
本体装置2は、音声入出力端子(具体的には、イヤホンジャック)25を備える。すなわち、本体装置2は、音声入出力端子25にマイクやイヤホンを装着することができる。図3に示すように、音声入出力端子25は、ハウジング11の上側面に設けられる。
本体装置2は、音量ボタン26aおよび26bを備える。図3に示すように、音量ボタン26aおよび26bは、ハウジング11の上側面に設けられる。音量ボタン26aおよび26bは、本体装置2によって出力される音量を調整する指示を行うためのボタンである。すなわち、音量ボタン26aは、音量を下げる指示を行うためのボタンであり、音量ボタン26bは、音量を上げる指示を行うためのボタンである。
また、ハウジング11には、排気孔11cが形成される。図3に示すように、排気孔11cは、ハウジング11の上側面に形成される。排気孔11cは、ハウジング11の内部で発生した熱をハウジング11の外部へ排気する(換言すれば、放出する)ために形成される。すなわち、排気孔11cは、排熱孔であるとも言える。
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。図3に示すように、下側端子27は、ハウジング11の下側面に設けられる。本体装置2がクレードルに装着された場合、下側端子27は、クレードルの端子に接続される。本実施例において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。クレードルは、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で本体装置2のみを載置することが可能である。また、さらに他の例として、クレードルは、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置を載置することも可能である。そして、クレードルは、本体装置2とは別体の外部表示装置の一例である据置型モニタ(例えば、据置型テレビ)と通信可能である(有線通信であってもよいし、無線通信であってもよい)。上記一体型装置または本体装置2単体をクレードルに載置した場合、情報処理システム1は、本体装置2が取得または生成した画像を据置型モニタに表示することができる。また、本実施例においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
また、本体装置2は、第2スロット24を備える。本実施例においては、第2スロット24は、ハウジング11の下側面に設けられる。ただし、他の実施例においては、第2スロット24は、第1スロット23とは同じ面に設けられてもよい。第2スロット24は、第1の種類とは異なる第2の種類の記憶媒体を装着可能な形状を有する。第2の種類の記憶媒体は、例えば、汎用の記憶媒体であってもよい。例えば、第2の種類の記憶媒体は、SDカードであってもよい。第2の種類の記憶媒体は、例えば、第1の種類の記憶媒体と同様、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。
また、ハウジング11には、吸気孔11dが形成される。図3に示すように、吸気孔11dは、ハウジング11の下側面に形成される。吸気孔11dは、ハウジング11の外部の空気をハウジング11の内部へ吸気する(換言すれば、導入する)ために形成される。本実施例においては、排気孔11cが形成される面の反対側の面に吸気孔11dが形成されるので、ハウジング11内部の放熱を効率良く行うことができる。
以上に説明した、ハウジング11に設けられる各構成要素(具体的には、ボタン、スロット、端子等)の形状、数、および設置位置は、任意である。例えば、他の実施例においては、電源ボタン28および各スロット23および24のうちのいくつかは、ハウジング11の他の側面あるいは背面に設けられてもよい。また、他の実施例においては、本体装置2は、上記各構成要素のうちいくつかを備えていない構成であってもよい。
図4は、左コントローラ3の一例を示す六面図である。図4に示すように、左コントローラ3は、ハウジング31を備える。本実施例において、ハウジング31は、略板状である。また、ハウジング31の主面(換言すれば、表側の面、すなわち、図1に示すz軸負方向側の面)は、大略的には矩形形状である。また、本実施例においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、図1に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。なお、ハウジング31の形状は任意であり、他の実施例においては、ハウジング31は略板状でなくてもよい。また、ハウジング31は、矩形形状でなくてもよく、例えば半円状の形状等であってもよい。また、ハウジング31は、縦長の形状でなくてもよい。
ハウジング31の上下方向の長さは、本体装置2のハウジング11の上下方向の長さとほぼ同じである。また、ハウジング31の厚さ(すなわち、前後方向の長さ、換言すれば、図1に示すz軸方向の長さ)は、本体装置2のハウジング11の厚さとほぼ同じである。したがって、左コントローラ3が本体装置2に装着された場合(図1参照)には、ユーザは、本体装置2と左コントローラ3とを一体の装置のような感覚で把持することができる。
また、図4に示すように、ハウジング31の主面は、左側の角部分が、右側の角部分よりも丸みを帯びた形状になっている。すなわち、ハウジング31の上側面と左側面との接続部分、および、ハウジング31の下側面と左側面との接続部分は、その上側面と右側面との接続部分、および、その下側面と右側面との接続部分に比べて、丸くなっている(換言すれば、面取りにおけるRが大きい)。したがって、左コントローラ3が本体装置2に装着された場合(図1参照)には、一体型装置の左側が丸みを帯びた形状となるので、ユーザにとって持ちやすい形状となる。
左コントローラ3は、アナログスティック32を備える。図4に示すように、アナログスティック32が、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部の一例である。アナログスティック32は、ハウジング31の主面に平行な全方向(すなわち、上下左右および斜め方向を含む、360°の方向)に傾倒可能なスティック部材を有する。ユーザは、スティック部材を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、方向入力部は、十字キーまたはスライドスティック等であってもよい。また、本実施例においては、スティック部材を(ハウジング31に垂直な方向に)押下する入力が可能である。すなわち、アナログスティック32は、スティック部材の傾倒方向および傾倒量に応じた方向および大きさの入力と、スティック部材に対する押下入力とを行うことが可能な入力部である。
左コントローラ3は、4つの操作ボタン33〜36(具体的には、右方向ボタン33、下方向ボタン34、上方向ボタン35、および、左方向ボタン36)を備える。図4に示すように、これら4つの操作ボタン33〜36は、ハウジング31の主面においてアナログスティック32の下側に設けられる。なお、本実施例においては、左コントローラ3の主面に設けられる操作ボタンを4つとするが、操作ボタンの数は任意である。これらの操作ボタン33〜36は、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。なお、本実施例においては、各操作ボタン33〜36は方向入力を行うために用いられてもよいことから、各操作ボタン33〜36を、右方向ボタン33、下方向ボタン34、上方向ボタン35、および、左方向ボタン36と呼んでいる。ただし、各操作ボタン33〜36は、方向入力以外の指示を行うために用いられてもよい。
また、左コントローラ3は録画ボタン37を備える。図4に示すように、録画ボタン37は、ハウジング31の主面に設けられ、より具体的には、主面における右下領域に設けられる。録画ボタン37は、本体装置2のディスプレイ12に表示される画像を保存する指示を行うためのボタンである。例えば、ディスプレイ12にゲーム画像が表示されている場合において、ユーザは、録画ボタン37を押下することによって、押下された時点で表示されているゲーム画像を、例えば本体装置2の記憶部に保存することができる。
また、左コントローラ3は−(マイナス)ボタン47を備える。図4に示すように、−ボタン47は、ハウジング31の主面に設けられ、より具体的には、主面における右上領域に設けられる。−ボタン47は、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。−ボタン47は、例えば、ゲームアプリケーションにおいてセレクトボタン(例えば、選択項目の切り替えに用いられるボタン)として用いられる。
左コントローラ3の主面に設けられる各操作部(具体的には、アナログスティック32および上記各ボタン33〜37、47)は、左コントローラ3が本体装置2に装着される場合、一体型装置を把持するユーザの例えば左手の親指によって操作される。また、左コントローラ3が本体装置2から外された状態において両手で横向きに把持されて使用される場合、上記各操作部は、左コントローラ3を把持するユーザの例えば左右の手の親指で操作される。具体的には、この場合、アナログスティック32はユーザの左手の親指で操作され、各操作ボタン33〜36はユーザの右手の親指で操作される。
左コントローラ3は、第1Lボタン38を備える。また、左コントローラ3は、ZLボタン39を備える。これらの操作ボタン38および39は、上記操作ボタン33〜36と同様、本体装置2で実行される各種プログラムに応じた指示を行うために用いられる。図4に示すように、第1Lボタン38は、ハウジング31の側面のうちの左上部分に設けられる。また、ZLボタン39は、ハウジング31の側面から裏面にかけての左上部分(厳密には、ハウジング31を表側から見たときの左上部分)に設けられる。つまり、ZLボタン39は、第1Lボタン38の後側(図1に示すz軸正方向側)に設けられる。本実施例においては、ハウジング31の左上部分が丸みを帯びた形状であるので、第1Lボタン38およびZLボタン39は、ハウジング31の当該左上部分の丸みに応じた丸みを帯びた形状を有する。左コントローラ3が本体装置2に装着される場合、第1Lボタン38およびZLボタン39は、一体型装置における左上部分に配置されることになる。
左コントローラ3は、上述のスライダ40を備えている。図4に示すように、スライダ40は、ハウジング31の右側面において、上下方向に延びるように設けられる。スライダ40は、本体装置2の左レール部材15(より具体的には、左レール部材15の溝)と係合可能な形状を有している。したがって、左レール部材15に係合したスライダ40は、スライド方向(換言すれば左レール部材15が延びる方向)に垂直な向きに関しては固定されて外れないようになっている。
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。端子42は、左コントローラ3が本体装置2に装着された場合に、本体装置2の左側端子17(図3)と接触する位置に設けられる。端子42の具体的な位置は任意である。本実施例においては、図4に示すように、端子42は、スライダ40の装着面によって外部に露出しない位置に設けられる。また、本実施例においては、端子42は、スライダ40の装着面における下側の端部付近に設けられる。
また、左コントローラ3は、第2Lボタン43および第2Rボタン44を備える。これらのボタン43および44は、他の操作ボタン33〜36と同様、本体装置2で実行される各種プログラムに応じた指示を行うために用いられる。図4に示すように、第2Lボタン43および第2Rボタン44は、スライダ40の装着面に設けられる。第2Lボタン43は、スライダ40の装着面において、上下方向(図1に示すy軸方向)に関する中央よりも上側に設けられる。第2Rボタン44は、スライダ40の装着面において、上下方向に関する中央よりも下側に設けられる。第2Lボタン43および第2Rボタン44は、左コントローラ3が本体装置2に装着されている状態では押下することができない位置に配置されている。つまり、第2Lボタン43および第2Rボタン44は、左コントローラ3を本体装置2から外した場合において用いられるボタンである。第2Lボタン43および第2Rボタン44は、例えば、本体装置2から外された左コントローラ3を把持するユーザの左右の手の人差し指または中指で操作される。
左コントローラ3は、ペアリングボタン46を備える。本実施例において、ペアリングボタン46は、左コントローラ3と本体装置2との無線通信に関する設定(ペアリングとも言う)処理を指示するため、および、左コントローラ3のリセット処理を指示するために用いられる。なお、他の実施例においては、ペアリングボタン46は、上記設定処理およびリセット処理のいずれか一方の機能のみを有するものであってもよい。例えば、ペアリングボタン46に対して短押し操作が行われた場合(具体的には、ペアリングボタン46が所定時間よりも短い時間だけ押下された場合)、左コントローラ3は、上記設定処理を実行する。また、ペアリングボタン46に対して長押し操作が行われた場合(具体的には、ペアリングボタン46が上記所定時間以上押し続けられた場合)、左コントローラ3は、リセット処理を実行する。本実施例においては、ペアリングボタン46は、図4に示すように、スライダ40の装着面に設けられる。このように、ペアリングボタン46は、左コントローラ3が本体装置2に装着されている状態では見えない位置に配置されている。つまり、ペアリングボタン46は、左コントローラ3を本体装置2から外した場合において用いられる。
なお、本実施例において、スライダ40の装着面に設けられるボタン(具体的には、第2Lボタン43、第2Rボタン44、およびペアリングボタン46)は、当該装着面に対して突出しないように設けられる。すなわち、上記ボタンの上面(換言すれば押下面)は、スライダ40の装着面と同じ面に配置されるか、あるいは、装着面よりも凹んだ位置に配置される。これによれば、スライダ40が本体装置2の左レール部材15に装着された状態において、スライダ40を左レール部材15に対してスムーズにスライドさせることができる。
図5は、右コントローラ4の一例を示す六面図である。図5に示すように、右コントローラ4は、ハウジング51を備える。本実施例において、ハウジング51は、略板状である。また、ハウジング51の主面(換言すれば、表側の面、すなわち、図1に示すz軸負方向側の面)は、大略的には矩形形状である。また、本実施例においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
右コントローラ4のハウジング51は、左コントローラ3のハウジング31と同様、その上下方向の長さは、本体装置2のハウジング11の上下方向の長さとほぼ同じであり、その厚さは、本体装置2のハウジング11の厚さとほぼ同じである。したがって、右コントローラ4が本体装置2に装着された場合(図1参照)には、ユーザは、本体装置2と右コントローラ4とを一体の装置のような感覚で把持することができる。
また、図5に示すように、ハウジング51の主面は、右側の角部分が、左側の角部分よりも丸みを帯びた形状になっている。すなわち、ハウジング51の上側面と右側面との接続部分、および、ハウジング51の下側面と右側面との接続部分は、その上側面と左側面との接続部分、および、その下側面と左側面との接続部分に比べて、丸くなっている(換言すれば、面取りにおけるRが大きい)。したがって、右コントローラ4が本体装置2に装着された場合(図1参照)には、一体型装置の右側が丸みを帯びた形状となるので、ユーザにとって持ちやすい形状となる。
右コントローラ4は、左コントローラ3と同様、方向入力部としてアナログスティック52を備える。本実施例においては、アナログスティック52は、左コントローラ3のアナログスティック32と同じ構成である。また、右コントローラ4は、左コントローラ3と同様、4つの操作ボタン53〜56(具体的には、Aボタン53、Bボタン54、Xボタン55、および、Yボタン56)を備える。本実施例においては、これら4つの操作ボタン53〜56は、左コントローラ3の4つの操作ボタン33〜36と同じ機構である。図5に示すように、これらアナログスティック52および各操作ボタン53〜56は、ハウジング51の主面に設けられる。なお、本実施例においては、右コントローラ4の主面に設けられる操作ボタンを4つとするが、操作ボタンの数は任意である。
ここで、本実施例においては、右コントローラ4における2種類の操作部(アナログスティックおよび操作ボタン)の位置関係は、左コントローラ3におけるこれら2種類の操作部の位置関係とは反対になっている。すなわち、右コントローラ4においては、アナログスティック52は各操作ボタン53〜56の上方に配置されるのに対して、左コントローラ3においては、アナログスティック32は各操作ボタン33〜36の下方に配置される。このような配置によって、左コントローラ3および右コントローラ4を本体装置2から外して使用する場合に似たような操作感覚で使用することができる。
また、右コントローラ4は、+(プラス)ボタン57を備える。図5に示すように、+ボタン57は、ハウジング51の主面に設けられ、より具体的には、主面の左上領域に設けられる。+ボタン57は、他の操作ボタン53〜56と同様、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。+ボタン57は、例えば、ゲームアプリケーションにおいてスタートボタン(例えば、ゲーム開始の指示に用いられるボタン)として用いられる。
右コントローラ4は、ホームボタン58を備える。図5に示すように、ホームボタン58は、ハウジング51の主面に設けられ、より具体的には、主面の左下領域に設けられる。ホームボタン58は、本体装置2のディスプレイ12に所定のメニュー画面を表示させるためのボタンである。メニュー画面は、例えば、本体装置2において実行可能な1以上のアプリケーションのうちからユーザが指定したアプリケーションを起動することが可能な画面である。メニュー画面は、例えば、本体装置2の起動時に表示されてもよい。本実施例においては、本体装置2においてアプリケーションが実行されている状態(すなわち、当該アプリケーションの画像がディスプレイ12に表示されている状態)において、ホームボタン58が押下されると、所定の操作画面がディスプレイ12に表示されてもよい(このとき、操作画面に代えてメニュー画面が表示されてもよい)。なお、操作画面は、例えば、アプリケーションを終了してメニュー画面をディスプレイ12に表示させる指示、および、アプリケーションを再開する指示等を行うことが可能な画面である。
右コントローラ4の主面に設けられる各操作部(具体的には、アナログスティック52および上記各ボタン53〜58)は、右コントローラ4が本体装置2に装着される場合、一体型装置を把持するユーザの例えば右手の親指によって操作される。また、右コントローラ4が本体装置2から外された状態において両手で横向きに把持されて使用される場合、上記各操作部は、右コントローラ4を把持するユーザの例えば左右の手の親指で操作される。具体的には、この場合、アナログスティック52はユーザの左手の親指で操作され、各操作ボタン53〜56はユーザの右手の親指で操作される。
右コントローラ4は、第1Rボタン60を備える。また、右コントローラ4は、ZRボタン61を備える。図5に示すように、第1Rボタン60は、ハウジング51の側面のうちの右上部分に設けられる。また、ZRボタン61は、ハウジング51の側面から裏面にかけての右上部分(厳密には、ハウジング51を表側から見たときの右上部分)に設けられる。つまり、ZRボタン61は、第1Rボタン60の後側(図1に示すz軸正方向側)に設けられる。本実施例においては、ハウジング51の右上部分が丸みを帯びた形状であるので、第1Rボタン60およびZRボタン61は、ハウジング51の当該右上部分の丸みに応じた丸みを帯びた形状を有する。右コントローラ4が本体装置2に装着される場合、第1Rボタン60およびZRボタン61は、一体型装置における右上部分に配置されることになる。
右コントローラ4は、左コントローラ3と同様のスライダ機構を備えている。すなわち、右コントローラ4は、上述のスライダ62を備えている。図5に示すように、スライダ62は、ハウジング51の左側面において、上下方向に延びるように設けられる。スライダ62は、本体装置2の右レール部材19(より具体的には、右レール部材19の溝)と係合可能な形状を有している。したがって、右レール部材19に係合したスライダ62は、スライド方向(換言すれば右レール部材19が延びる方向)に垂直な向きに関しては固定されて外れないようになっている。
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。端子64は、右コントローラ4が本体装置2に装着された場合に、本体装置2の右側端子21(図3)と接触する位置に設けられる。端子64の具体的な位置は任意である。本実施例においては、図5に示すように、端子64は、スライダ62の装着面によって外部に露出しない位置に設けられる。本実施例においては、端子64は、スライダ62の装着面における下側の端部付近に設けられる。
また、右コントローラ4は、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。これらのボタン65および66は、他の操作ボタン53〜56と同様、本体装置2で実行される各種プログラムに応じた指示を行うために用いられる。図5に示すように、第2Lボタン65および第2Rボタン66は、スライダ62の装着面に設けられる。第2Lボタン65は、スライダ62の装着面において、上下方向(図1に示すy軸方向)に関する中央よりも下側に設けられる。第2Rボタン66は、スライダ62の装着面において、上下方向に関する中央よりも上側に設けられる。第2Lボタン65および第2Rボタン66は、左コントローラ3の第2Lボタン43および第2Rボタン44と同様、右コントローラ4が本体装置2に装着されている状態では押下することができない位置に配置されており、右コントローラ4を本体装置2から外した場合において用いられるボタンである。第2Lボタン65および第2Rボタン66は、例えば、本体装置2から外された右コントローラ4を把持するユーザの左右の手の人差し指または中指で操作される。
右コントローラ4は、ペアリングボタン69を備える。ペアリングボタン69は、左コントローラ3のペアリングボタン46と同様、右コントローラ4と本体装置2との無線通信に関する設定(ペアリングとも言う)処理を指示するため、および、右コントローラ4のリセット処理を指示するために用いられる。上記設定処理およびリセット処理については、左コントローラ3におけるこれらの処理と同様であるので、詳細な説明を省略する。また、本実施例においては、ペアリングボタン69は、図5に示すように、スライダ62の装着面に設けられる。つまり、ペアリングボタン69は、左コントローラ3のペアリングボタン46と同様の理由で、右コントローラ4が本体装置2に装着されている状態では見えない位置に配置されている。
また、右コントローラ4においても左コントローラ3と同様、スライダ62の装着面に設けられるボタン(具体的には、第2Lボタン65、第2Rボタン66、およびペアリングボタン69)は、当該装着面に対して突出しないように設けられる。これによって、スライダ62が本体装置2の右レール部材19に装着された状態において、スライダ62を右レール部材19に対してスムーズにスライドさせることができる。
また、ハウジング51の下側面には、窓部68が設けられる。詳細は後述するが、右コントローラ4は、ハウジング51の内部に配置される赤外撮像部123および赤外発光部124を備えている。赤外撮像部123は、右コントローラ4の下方向(図5に示すy軸負方向)を撮像方向として、窓部68を介して右コントローラ4の周囲を撮像する。赤外発光部124は、右コントローラ4の下方向(図5に示すy軸負方向)を中心とする所定範囲を照射範囲として、赤外撮像部123が撮像する撮像対象に窓部68を介して赤外光を照射する。なお、図5の例では、赤外発光部124の赤外光照射範囲を大きくするために、照射方向が異なる複数の赤外発光部124が設けられている。窓部68は、赤外撮像部123のカメラのレンズや赤外発光部124の発光体等を保護するためのものであり、当該カメラが検知する波長の光や当該発光体が照射する光を透過する材質(例えば、透明な材質)で構成される。なお、窓部68は、ハウジング51に形成された孔であってもよい。なお、本実施例においては、カメラが検知する光(本実施例においては、赤外光)以外の波長の光の透過を抑制するフィルタ部材を赤外撮像部123自身が有する。ただし、他の実施例においては、窓部68がフィルタの機能を有していてもよい。
また、詳細は後述するが、右コントローラ4は、NFC通信部122を備える。NFC通信部122は、NFC(Near Field Communication)の規格に基づく近距離無線通信を行う。NFC通信部122は、近距離無線通信に用いられるアンテナ122aと、アンテナ122aから送出すべき信号(電波)を生成する回路(例えばNFCチップ)とを有する。例えば、アンテナ122aは、上記近距離無線通信の際にターゲットとなる他の無線通信装置(例えばNFCタグ)がハウジング51の主面の下方領域と近接または接する位置に配置された場合に、当該無線通信装置と上記近距離無線通信が可能となるハウジング51の内部の位置に設けられる。なお、近距離無線通信は、NFCの規格に基づくものに限らず、任意の近接通信(非接触通信とも言う)であってもよい。近接通信には、例えば、一方の装置からの電波によって(例えば電磁誘導によって)他方の装置に起電力を発生させる通信方式が含まれる。
なお、上記左コントローラ3および右コントローラ4において、ハウジング31または51に設けられる各構成要素(具体的には、スライダ、スティック、およびボタン等)の形状、数、および、設置位置は任意である。例えば、他の実施例においては、左コントローラ3および右コントローラ4は、アナログスティックとは別の種類の方向入力部を備えていてもよい。また、スライダ40または62は、本体装置2に設けられるレール部材15または19の位置に応じた位置に配置されてよく、例えば、ハウジング31または51の主面または裏面に配置されてもよい。また、他の実施例においては、左コントローラ3および右コントローラ4は、上記各構成要素のうちいくつかを備えていない構成であってもよい。
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、図3に示す構成の他、図6に示す各構成要素81〜98を備える。これらの構成要素81〜98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
本体装置2は、CPU(Central Processing Unit)81を備える。CPU81は、本体装置2において実行される各種の情報処理を実行する情報処理部である。CPU81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、各スロット23および24に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、CPU81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
本体装置2は、第1スロットインターフェース(以下、「I/F」と略記する。)91を備える。また、本体装置2は、第2スロットI/F92を備える。第1スロットI/F91および第2スロットI/F92は、CPU81に接続される。第1スロットI/F91は、第1スロット23に接続され、第1スロット23に装着された第1の種類の記憶媒体(例えば、SDカード)に対するデータの読み出しおよび書き込みを、CPU81の指示に応じて行う。第2スロットI/F92は、第2スロット24に接続され、第2スロット24に装着された第2の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、CPU81の指示に応じて行う。
CPU81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、CPU81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施例においては、ネットワーク通信部82は、第1の通信態様としてWi−Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、CPU81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施例においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
CPU81は、上述の左側端子17、右側端子21、および、下側端子27に接続される。CPU81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、CPU81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、CPU81は、クレードルと通信を行う場合、下側端子27を介してクレードルへデータを送信する。このように、本実施例においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードルに装着された場合、本体装置2は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、ユーザは、複数の左コントローラ3および複数の右コントローラ4を用いて本体装置2に対する入力を行うことができる。
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とCPU81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、CPU81へ出力する。
また、ディスプレイ12は、CPU81に接続される。CPU81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、CPU81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。すなわち、コーデック回路87は、CPU81から音声データを受け取った場合、当該音声データに対してD/A変換を行って得られる音声信号をスピーカ88または音声入出力端子25へ出力する。これによって、スピーカ88あるいは音声入出力端子25に接続された音声出力部(例えば、イヤホン)から音が出力される。また、コーデック回路87は、音声入出力端子25から音声信号を受け取った場合、音声信号に対してA/D変換を行い、所定の形式の音声データをCPU81へ出力する。また、音量ボタン26は、CPU81に接続される。CPU81は、音量ボタン26に対する入力に基づいて、スピーカ88または上記音声出力部から出力される音量を制御する。
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびCPU81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、CPU81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。また、電力制御部97は、電源ボタン28に接続される。電力制御部97は、電源ボタン28に対する入力に基づいて、上記各部への電力供給を制御する。すなわち、電力制御部97は、電源ボタン28に対して電源をオフする操作が行われた場合、上記各部の全部または一部への電力供給を停止し、電源ボタン28に対して電源をオンする操作が行われた場合、電力制御部97は、上記各部の全部または一部への電力供給を開始する。また、電力制御部97は、電源ボタン28に対する入力を示す情報(具体的には、電源ボタン28が押下されているか否かを示す情報)をCPU81へ出力する。
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
また、本体装置2は、本体装置2内部の熱を放熱するための冷却ファン96を備える。冷却ファン96が動作することによって、ハウジング11の外部の空気が吸気孔11dから導入されるとともに、ハウジング11内部の空気が排気孔11cから放出されることで、ハウジング11内部の熱が放出される。冷却ファン96は、CPU81に接続され、冷却ファン96の動作はCPU81によって制御される。また、本体装置2は、本体装置2内の温度を検出する温度センサ95を備える。温度センサ95は、CPU81に接続され、温度センサ95の検出結果がCPU81へ出力される。CPU81は、温度センサ95の検出結果に基づいて、冷却ファン96の動作を制御する。
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、図6で示しているため図7では省略している。
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。図7に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施例においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
左コントローラ3は、各ボタン103(具体的には、ボタン33〜39、43、44、および46)を備える。また、左コントローラ3は、アナログスティック(図7では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
左コントローラ3は、加速度センサ104を備える。本実施例においては、加速度センサ104は、所定の3軸(例えば、図4に示すxyz軸)方向に沿った直線加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。また、左コントローラ3は、角速度センサ105を備える。本実施例においては、角速度センサ105は、所定の3軸(例えば、図4に示すxyz軸)回りの角速度を検出する。なお、角速度センサ105は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。加速度センサ104および角速度センサ105は、それぞれ通信制御部101に接続される。そして、加速度センサ104および角速度センサ105の検出結果は、適宜のタイミングで繰り返し通信制御部101へ出力される。
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、または、センサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
左コントローラ3は、振動によってユーザに通知を行うための振動子107を備える。本実施例においては、振動子107は、本体装置2からの指令によって制御される。すなわち、通信制御部101は、本体装置2からの上記指令を受け取ると、当該指令に従って振動子107を駆動させる。ここで、左コントローラ3は、増幅器106を備える。通信制御部101は、上記指令を受け取ると、指令に応じた制御信号を増幅器106へ出力する。増幅器106は、通信制御部101からの制御信号を増幅して、振動子107を駆動させるための駆動信号を生成して振動子107へ与える。これによって振動子107が動作する。
左コントローラ3は、電力供給部108を備える。本実施例において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。電力制御回路は、バッテリから上記各部への電力供給を制御する。また、バッテリは、端子42に接続される。本実施例においては、左コントローラ3が本体装置2に装着される場合、所定の条件下で、バッテリは、端子42を介して本体装置2からの給電によって充電される。
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部(具体的には、各ボタン113、アナログスティック52、加速度センサ114、および、角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
また、右コントローラ4は、振動子117および増幅器116を備える。振動子117および増幅器116は、左コントローラ3の振動子107および増幅器106と同様に動作する。すなわち、通信制御部111は、本体装置2からの指令に従って、増幅器116を用いて振動子117を動作させる。
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。すなわち、電力供給部118は、バッテリから給電を受ける各部への電力供給を制御する。また、右コントローラ4が本体装置2に装着される場合、所定の条件下で、バッテリは、端子64を介して本体装置2からの給電によって充電される。
右コントローラ4は、NFCの規格に基づく近距離無線通信を行うNFC通信部122を備える。NFC通信部122は、いわゆるNFCリーダ・ライタの機能を有する。ここで、本明細書において近距離無線通信とは、一方の装置(ここでは、右コントローラ4)からの電波によって(例えば電磁誘導によって)他方の装置(ここでは、アンテナ122aと近接する装置)に起電力を発生させる通信方式が含まれる。他方の装置は、発生した起電力によって動作することが可能であり、電源を有していてもよいし有していなくてもよい。NFC通信部122は、右コントローラ4(アンテナ122a)と通信対象とが接近した場合(典型的には、両者の距離が十数センチ以下となった場合)に当該通信対象との間で通信可能となる。通信対象は、NFC通信部122との間で近距離無線通信が可能な任意の装置であり、例えばNFCタグやNFCタグの機能を有する記憶媒体である。ただし、通信対象は、NFCのカードエミュレーション機能を有する他の装置であってもよい。
また、右コントローラ4は、赤外撮像部123を備える。赤外撮像部123は、右コントローラ4の周囲を撮像する赤外線カメラを有する。本実施例においては、赤外撮像部123は、ユーザの身体の一部(例えば、ユーザの顔や口)を撮像するために用いられる。本体装置2および/または右コントローラ4は、撮像されたユーザの情報(例えば、ユーザが撮像された撮像画像における少なくとも一部の領域全体を分割した複数のブロックの輝度に関連する情報等)を算出し、当該情報に基づいて、ユーザの変化を判別する。また、赤外撮像部123は、環境光によって撮像を行ってもよいが、本実施例においては、赤外線を照射する赤外発光部124を有する。赤外発光部124は、例えば、赤外線カメラが画像を撮像するタイミングと同期して、赤外線を照射する。そして、赤外発光部124によって照射された赤外線が撮像対象(すなわち、ユーザ)によって反射され、当該反射された赤外線が赤外線カメラによって受光されることで、赤外線の画像が取得される。これによって、より鮮明な赤外線画像を得ることができる。なお、赤外撮像部123と赤外発光部124とは、それぞれ別のデバイスとして右コントローラ4内に設けられてもよいし、同じパッケージ内に設けられた単一のデバイスとして右コントローラ4内に設けられてもよい。また、本実施例においては、赤外線カメラを有する赤外撮像部123が用いられるが、なお、他の実施例においては、撮像手段として、赤外線カメラに代えて可視光カメラ(可視光イメージセンサを用いたカメラ)が用いられてもよい。
右コントローラ4は、処理部121を備える。処理部121は、通信制御部111に接続されるとともに、NFC通信部122に接続される。処理部121は、本体装置2からの指令に応じて、NFC通信部122に対する管理処理を実行する。例えば、処理部121は、本体装置2からの指令に応じてNFC通信部122の動作を制御する。また、処理部121は、NFC通信部122の起動を制御したり、通信対象(例えば、NFCタグ)に対するNFC通信部122の動作(具体的には、読み出しおよび書き込み等)を制御したりする。また、処理部121は、通信制御部111を介して通信対象に送信されるべき情報を本体装置2から受信してNFC通信部122へ渡したり、通信対象から受信された情報をNFC通信部122から取得して通信制御部111を介して本体装置2へ送信したりする。
また、処理部121は、CPUやメモリ等を含み、右コントローラ4に備えられた図示しない記憶装置(例えば、不揮発性メモリやハードディスク等)に記憶された所定のプログラム(例えば、画像処理や各種演算を行うためのアプリケーションプログラム)に基づいて、本体装置2からの指令に応じて赤外撮像部123に対する管理処理を実行する。例えば、処理部121は、赤外撮像部123に撮像動作を行わせたり、撮像結果に基づく情報(撮像画像の情報、あるいは、当該情報から算出される情報等)を取得および/または算出して通信制御部111を介して本体装置2へ送信したりする。また、処理部121は、本体装置2からの指令に応じて赤外発光部124に対する管理処理を実行する。例えば、処理部121は、本体装置2からの指令に応じて赤外発光部124の発光を制御する。なお、処理部121が処理を行う際に用いるメモリは、処理部121内に設けられてもいいし、メモリ112であってもよい。
次に、図8を参照して、ユーザが右コントローラ4を操作してゲームをプレイする様子の一例を示す図である。図8に示すように、本ゲーム例では、ユーザが右コントローラ4を食べるように取り扱って、早食いを競うゲームの画像が本体装置2(ディスプレイ12)に表示される。そして、右コントローラ4を操作するユーザは、右コントローラ4の後端(すなわち、赤外撮像部123が設けられている端部)に向けて口を何度も開閉することによって、食べ物を早食いするゲーム(早食いゲーム)をプレイすることができる。
例えば、上記早食いゲームを開始するにあたって、早食いゲームを開始する準備をするための操作指示「コントローラを口に近づけて構えましょう」が本体装置2に表示されるとともに、本体装置2から当該操作指示を示す音声が出力される。これに応じて、ユーザは、把持している右コントローラ4の後端面(図5におけるy軸負方向の端面であり、赤外撮像部123および赤外発光部124が配置されている窓部68が設けられている面)をユーザ自身の口に向けて近づける(すなわち、赤外撮像部123の撮像方向がユーザ自身の口に向いて近づいた状態)ことによって、早食いゲームを開始するための準備が整う。具体的には、本実施例では、赤外撮像部123が撮像した撮像画像等が複数の条件を満たしていることを判定する口付近判定処理において肯定判定された場合に、早食いゲームを開始するための準備が整ったと判定される。
次に、上記早食いゲームを開始する旨を報知するための操作指示が本体装置2に表示されるとともに、本体装置2から当該操作指示を示す音声が出力される。これに応じて、把持している右コントローラ4をユーザ自身の口に向けた状態でユーザが口を開閉することによって、食べる速さを競うゲームが行われる。具体的には、本実施例では、ユーザが開いた口を閉じるタイミングで食べ物を一口食べたと判定され、当該食べたと判定された操作に応じて食べ物が食べ進められる。そして、ユーザが所定時間内に食べ物を食べた量に基づいて、早食いゲームの結果が判定される。
例えば、図8に示すように、上記早食いゲームにおいて食べ物が食べられている状況が本体装置2に表示されるとともに、ユーザが食べている音が本体装置2から出力され、ユーザが食べていることに合わせた振動が右コントローラ4に与えられる。図8に示した一例では、ホットドッグを4本半食べたことを示すホットドッグ画像が本体装置2に表示されており、ユーザが口を開閉させる毎にホットドッグ画像の量が増えていくことによって、上記早食いゲームにおいて食べ物が食べられた量が表示される。なお、本実施例では、赤外撮像部123が撮像した撮像画像が複数の条件を満たしていることを判定する口開閉判定処理において肯定判定された場合に、上記早食いゲームにおいてユーザが口を開けた、または口を閉じたことが判定される。
次に、図9および図10を参照して、上記早食いゲームにおける口開閉判定方法についての詳細を説明する。なお、図9は、ユーザが口を閉じている状態を示す撮像画像の一例およびユーザが口を開いている状態を示す撮像画像の一例を示す図である。図10は、ユーザが口を閉じている状態を示す撮像画像における輝度の一例およびユーザが口を開いている状態を示す撮像画像における輝度の一例を示す図である。
図9に示すように、赤外撮像部123の撮像方向がユーザ自身の口に向いた状態で右コントローラ4の後端面をユーザの口に近づけた場合、赤外撮像部123は、ユーザの顔を被写体として撮像可能となる。また、上記状態では、赤外発光部124は、ユーザの顔に赤外光を照射可能である。したがって、赤外発光部124によってユーザの顔に照射された赤外光がユーザの顔で反射し、当該反射赤外光が赤外撮像部123によって撮像される。ここで、赤外撮像部123の撮像方向がユーザの口に向いているため、赤外撮像部123が撮像する撮像画像の中央部付近に被写体であるユーザの口付近が撮像される。例えば、図9の上段図に示すように、ユーザが口を閉じた状態で赤外撮像部123によって撮像された場合、その撮像画像の中央部付近に閉じた口が撮像されたユーザの顔画像が得られることになる。また、図9の下段図に示すように、ユーザが口を開いた状態で赤外撮像部123によって撮像された場合、その撮像画像の中央部付近に開いた口が撮像されたユーザの顔画像が得られることになる。そして、ユーザが口を開閉した場合、ユーザが口を開いた撮像画像とユーザが口を閉じた撮像画像とが交互に得られることになる。
赤外撮像部123が撮像する撮像画像は、赤外光を撮像したものとなる。例えば、図10に示すように、赤外撮像部123が撮像した撮像画像では、撮像された赤外光の輝度が相対的に高い領域(図10において白色領域で示す部分)と、撮像された赤外光の輝度が相対的に低い領域(図10において格子網掛領域で示す部分と右下がり射線領域で示す部分)とが生じる。ここで、赤外撮像部123が撮像する撮像画像は、赤外発光部124によって照射されてユーザの顔で反射した反射赤外光が主に撮像されるため、ユーザの顔を示す撮像領域(図10において白色領域で示す部分)の反射赤外光の輝度が高くなり、ユーザの顔の周辺空間を示す撮像領域(図10において格子網掛領域で示す部分)の反射赤外光の輝度が非常に低くなる。このように、赤外撮像部123が撮像する撮像画像における反射赤外光の輝度を分析することによって、ユーザの顔部分とユーザの顔以外の部分との区別が可能となる。
また、被写体であるユーザが口を開いた場合、赤外発光部124によってユーザの顔に照射された赤外光が口内では口内以外に対して遠い位置で反射する。したがって、赤外撮像部123が撮像する撮像画像において、ユーザが開いている口の口内で反射した赤外光が撮像される領域(図10の下段図において右下がり射線領域で示す部分)の輝度は、当該口内以外のユーザの顔で反射した赤外光が撮像される領域の輝度より低くなる。一方、図10の上段図に示すように、ユーザが口を閉じている場合、赤外撮像部123が撮像する撮像画像において、上述した口内反射によって反射赤外光の輝度が低下することは生じない。また、上述したように、赤外撮像部123の撮像方向がユーザの口に向いているため、赤外撮像部123が撮像する撮像画像の中央部付近にユーザの口付近が撮像されていることを想定することができる。したがって、赤外撮像部123が撮像する撮像画像の中央部付近における反射赤外光の輝度に注目することによって、撮像されているユーザが口を開けているのか口を閉じているのか区別することが可能となる。
本実施例では、赤外撮像部123が撮像する撮像画像をマトリクス状の複数のブロック(小領域)に分割し、当該ブロック毎の情報に基づいて、口開閉判定および口付近判定が行われる。例えば、図10に示した撮像画像では、縦6個(第1行〜第6行)×横8個(第A列〜第H列)の合計48個のブロックに分割される例が示されている。そして、上記ユーザの口の開閉を判定する口開閉判定では、赤外撮像部123が撮像した撮像画像が複数の条件を全て満たしている場合に、ユーザの口の開閉状態が判定される。
上記口開閉判定の第1の条件は、撮像画像における角に配置されている4つのブロックの輝度(例えば、ブロック内の平均輝度)がそれぞれ所定の閾値より高いか否かが判定される。例えば、撮像画像における角に配置されている4つのブロック(図10に示す第1行第A列ブロック、第1行第H列ブロック、第6行第A列ブロック、第6行第H列ブロック)のうち、2つ以上のブロックの輝度が所定の閾値より高い場合に上記第1の条件による判定が否定判定され、それ以外の場合に上記第1の条件による判定が肯定判定される。撮像画像における角に配置されている4つのブロックのうち、3つ以上のブロックにおける輝度が上記閾値より低い場合、当該ブロックにおいて撮像されている反射赤外光が少なく、赤外光を反射する被写体が撮像画像における角部分に存在しないと考えられるため、赤外撮像部123が丸い形状の被写体(例えば、ユーザの顔)を撮像していると推測することができる。
上記口開閉判定の第2の条件は、撮像画像全体の輝度重心座標が当該撮像画像の中央付近の所定範囲内であるか否かが判定される。そして、撮像画像全体の輝度重心座標が上記所定範囲内にある場合に上記第2の条件による判定が肯定判定され、撮像画像全体の輝度重心座標が上記所定範囲外にある場合に上記第2の条件による判定が否定判定される。赤外撮像部123の撮像方向をユーザの口に向けるとともに、右コントローラ4の後端部をユーザの顔に向けて真っ直ぐ把持している場合、輝度重心座標が撮像画像の中央付近となるため、上記第2の条件を用いた判定によってユーザが右コントローラ4を把持している推測を判断することができる。
上記口開閉判定の第3の条件は、撮像画像全体の輝度重心座標の変化量(例えば、前回の処理で算出された輝度重心座標との距離)が所定の閾値以下であるか否かが判定される。そして、撮像画像全体の輝度重心座標の変化量が上記閾値以下にある場合に上記第3の条件による判定が肯定判定され、撮像画像全体の輝度重心座標の変化量が上記閾値より大きい場合に上記第3の条件による判定が否定判定される。ここで、ユーザの口の開閉によって撮像画像の輝度が変化する場合、当該輝度の変化が撮像画像の中央部付近で生じるため、当該撮像画像全体の輝度重心座標の変化量自体は小さいものとなることが考えられる。このように、撮像画像全体の輝度重心座標の変化量を判定することによって、ユーザの口の開閉によって撮像画像の輝度が変化しているか否かを推測することができる。
上記口開閉判定の第4の条件は、撮像画像における中央に配置されているブロックの輝度変化(例えば、ブロック内の平均輝度の変化)が所定の閾値より高いか否かが判定される。例えば、撮像画像における中央に配置されている4つのブロック(図10に示す第3行第D列ブロック、第3行第E列ブロック、第4行第D列ブロック、第4行第E列ブロック)の平均輝度変化が所定の閾値以上の場合に上記第4の条件による判定が肯定判定され、平均輝度変化が所定の閾値未満の場合に上記第4の条件による判定が否定判定される。ここで、ユーザの口の開閉によって撮像画像の輝度が変化する場合、当該輝度の変化が撮像画像の中央部付近で生じるため、撮像画像における中央に配置されているブロックの輝度変化は大きいものとなることが考えられる。このように、撮像画像における中央に配置されているブロックの輝度変化を判定することによって、ユーザの口の開閉によって撮像画像の輝度が変化しているか否かを推測することができる。
上記口開閉判定では、上記第1の条件〜上記第4の条件が全て肯定判定された場合に、撮像画像全体の平均輝度の変化に基づいて、ユーザの口の開閉が判定される。例えば、撮像画像全体の平均輝度(全ブロックの平均輝度)の変化が増加傾向にある場合(例えば、直前の複数回(例えば、連続する過去3回)算出された平均輝度の何れに対しても高い場合)、撮像されているユーザが口を閉じる動作(口閉じ動作)をしている判定する。また、撮像画像全体の平均輝度の変化が減少傾向にある場合(例えば、連続する過去3回)算出された平均輝度の何れに対しても低い場合)、撮像されているユーザが口を開く動作(口開き動作)をしている判定する。
なお、撮像画像全体の平均輝度の変化が増加傾向にあるか減少傾向あるかを判定する方法については、他の方法でもよい。例えば、連続する過去4回以上において算出された平均輝度と現時点の平均輝度との比較に基づいて、上記増加傾向にあるか上記減少傾向あるかを判定してもよい。また、所定回数連続して平均輝度が増加している場合に上記増加傾向にあると判定し、所定回数連続して平均輝度が減少している場合に上記減少傾向にあると判定してもよい。また、前回算出された平均輝度との変化量に基づいて、当該変化量が所定量以上ある場合、または所定回数連続して当該変化量が所定量以上ある場合に、上記増加傾向にあるか上記減少傾向あるかを判定してもよい。なお、上述した連続する過去複数回における平均輝度の算出結果は、上記第1の条件〜上記第4の条件の何れかが否定判定されることによって途切れるものであってもよいし、当該否定判定された処理機会を除いた算出機会を対象として累積されるものであってもよい。
本実施例では、上記口開閉判定に先立って、ユーザが右コントローラ4を口に向けて静止させて、ユーザ自身の口付近を撮像しているか否かを判定する口付近判定が行われる。そして、上記口付近判定が肯定判定されたことを条件として、上述した口開閉判定が行われる。口付近判定においても、赤外撮像部123が撮像した撮像画像が複数の条件を全て満たしているか否かが判定され、当該複数の条件を全て満たしている場合にユーザが右コントローラ4を口に向けて静止させて、ユーザ自身の口付近を撮像していると判定されるが、上記口開閉判定より厳しい条件が加えられている。
上記口付近判定の第1の条件は、上記口開閉判定の第1の条件と同じであり、撮像画像における角に配置されている4つのブロックの輝度(例えば、ブロック内の平均輝度)がそれぞれ所定の閾値より高いか否かが判定される。例えば、撮像画像における角に配置されている4つのブロック(図10に示す第1行第A列ブロック、第1行第H列ブロック、第6行第A列ブロック、第6行第H列ブロック)のうち、2つ以上のブロックの輝度が所定の閾値より高い場合に上記第1の条件による判定が否定判定され、それ以外の場合に上記第1の条件による判定が肯定判定される。
上記口付近判定の第2の条件は、撮像画像全体の輝度重心座標が当該撮像画像の中央付近の所定範囲内であるか否かが判定されるが、上記口開閉判定の第2の条件で用いられる所定範囲より相対的に小さな範囲が用いられる。そして、撮像画像全体の輝度重心座標が上記所定範囲内にある場合に上記第2の条件による判定が肯定判定され、撮像画像全体の輝度重心座標が上記所定範囲外にある場合に上記第2の条件による判定が否定判定される。
上記口付近判定の第3の条件は、撮像画像全体の輝度重心座標の変化量(例えば、前回の処理で算出された輝度重心座標との距離)が所定の閾値以下であるか否かが判定されるが、上記口開閉判定の第3の条件で用いられる所定の閾値より相対的に小さな値が用いられる。そして、撮像画像全体の輝度重心座標の変化量が上記閾値以下にある場合に上記第3の条件による判定が肯定判定され、撮像画像全体の輝度重心座標の変化量が上記閾値より大きい場合に上記第3の条件による判定が否定判定される。
上記口付近判定の第4の条件は、撮像画像全体の平均輝度が所定の範囲内にあるか否かが判定される。そして、撮像画像全体の平均輝度が所定の範囲内にある場合に上記第4の条件による判定が肯定判定され、撮像画像全体の平均輝度が所定の範囲外にある場合に上記第4の条件による判定が否定判定される。ここで、ユーザが右コントローラ4を顔に近付け過ぎている場合、赤外撮像部123が撮像する反射赤外光が多くなり、撮像画像全体の平均輝度が増加する。一方、ユーザが右コントローラ4を顔から離し過ぎている場合、赤外撮像部123が撮像する反射赤外光が少なくなり、撮像画像全体の平均輝度が減少する。上記口付近判定の第4の条件では、このような右コントローラ4とユーザの顔との距離が近すぎるまたは遠すぎる状態を検出するために行われており、当該距離が適切な範囲にある場合に肯定判定されるように上記所定の範囲が設定される。
上記口付近判定の第5の条件は、右コントローラ4が静止しているか否かが判定される。例えば、上記口付近判定の第5の条件による判定では、右コントローラ4に設けられている角速度センサ115によって検出される角速度が用いられ、所定時間において当該角速度の変化量が所定の範囲内にある場合に右コントローラ4が静止しているとして肯定判定され、所定時間において当該角速度の変化量が所定の範囲外に逸脱した場合に右コントローラ4が静止していないとして否定判定される。
上記口付近判定では、上記第1の条件〜上記第5の条件が全て肯定判定された場合に、ユーザが右コントローラ4を口に向けて静止させて、ユーザ自身の口付近を撮像していると判定され、上記早食いゲームを開始することが許可される。そして、上記早食いゲーム開始後は、上記口開閉判定に基づいて、食べ物を食べたか否かが逐次判定される。このように、上記早食いゲーム開始前に対してゲーム開始後の判定条件をラフにすることによって、ゲーム開始前の不正な操作を防止しながら、ゲーム開始後に誤判定によるゲームの中断が多発するような状態を避けることができる。
なお、上述した実施例では、赤外撮像部123が撮像する撮像画像をマトリクス状の複数のブロックに分割し、当該ブロック毎の情報に基づいて、口開閉判定および口付近判定が行われているが、当該撮像画像を他の形状の小領域に分割してもよい。例えば、上記複数のブロックは、矩形(長方形、正方形)でもいいし、菱形でもいいし、他の多角形でもよい。また、赤外撮像部123が撮像する撮像画像をクロス格子状の複数の小領域(矩形または菱形)に分割してもよい。さらに、赤外撮像部123が撮像する撮像画像をサイズおよび/または形状の異なる複数の小領域に分割してもよく、一例として、当該撮像画像の外縁付近に位置する小領域を相対的に大きく設定し、当該撮像画像の中央付近に位置する小領域を相対的に小さく設定することが考えられる。
また、上記口開閉判定および上記口付近判定を行う対象とする画像は、赤外撮像部123が撮像した撮像画像全体でもいいし、当該撮像画像から情報を算出する撮像画像の一部領域(後述する解析ウインドウ)であってもよい。本実施例においては、赤外撮像部123が撮像した撮像画像における少なくとも一部の領域に所定の座標軸(例えば、横方向をX軸、縦方向をY軸とする座標軸)を設定するとともに、当該座標軸が設定された画像を所定のブロック(例えば、8×6の48ブロック)に分割して、上記口開閉判定および上記口付近判定が行われる。
次に、本体装置2が上記口開閉判定および上記口付近判定を行うために、右コントローラ4が本体装置2に送信する撮像画像に関する情報(撮像対象に関する情報)について説明する。例えば、右コントローラ4は、複数のモード(モーメントモード、クラスタリングモード等)によって、赤外撮像部123が撮像した撮像画像に撮像されている撮像対象に関する情報を算出して本体装置2に送信することが可能である。なお、図11は、クラスタリングモードにおいて算出する撮像対象に関する情報の一例を説明するための図である。
モーメントモードでは、上述したように、赤外撮像部123が撮像した撮像画像を複数のブロックに分割し、ブロック毎の平均輝度や重心位置を算出する。例えば、赤外撮像部123が撮像した撮像画像全体または当該撮像画像から情報を算出する撮像画像の一部領域(後述する解析ウインドウ)に所定の座標軸(例えば、横方向をX軸、縦方向をY軸とする座標軸)を設定するとともに、当該座標軸が設定された画像を所定のブロック(例えば、8×6の48ブロック)に分割する。そして、各ブロックにおいて所定の閾値以上の輝度を有する画素を処理対象として、各ブロックの輝度の総和、各ブロックの横方向の一次モーメント、および各ブロックの縦方向の一次モーメントが算出され、これらの算出結果が撮像対象の情報として算出される。例えば、各ブロックの輝度の総和は、各ブロック内の画素が有する輝度を全画素について合計した値であり、当該総和を当該ブロックの画素数で除算することによって当該ブロックの平均輝度が得られるパラメータである。そして、各ブロックの平均輝度を全ブロック分総和した値をブロック数で除算することによって、全体(処理対象としている撮像画像全体や撮像画像の一部領域)の平均輝度を得ることができる。また、各ブロックの横方向の一次モーメントは、各ブロック内の画素が有する輝度に当該画素のX軸方向位置を乗算した値を全画素について合計した値であり、当該ブロックの横方向の一次モーメントを当該ブロックの輝度の総和で除算することによって当該ブロックにおける輝度の横方向重心位置が得られるパラメータである。そして、各ブロックにおける輝度の横方向重心位置を全ブロック分総和した値をブロック数で除算することによって、全体(処理対象としている撮像画像全体や撮像画像の一部領域)輝度の横方向重心位置を得ることができる。また、各ブロックの縦方向の一次モーメントは、各ブロック内の画素が有する輝度に当該画素のY軸方向位置を乗算した値を全画素について合計した値であり、当該ブロックの縦方向の一次モーメントを当該ブロックの輝度の総和で除算することによって当該ブロックにおける輝度の縦方向重心位置が得られるパラメータである。そして、各ブロックにおける輝度の縦方向重心位置を全ブロック分総和した値をブロック数で除算することによって、全体(処理対象としている撮像画像全体や撮像画像の一部領域)輝度の縦方向重心位置を得ることができる。
図11において、クラスタリングモードでは、赤外撮像部123が撮像した撮像画像の中から高輝度画素の塊(クラスタ)を検出し、当該撮像画像における当該クラスタの位置やサイズを算出する。例えば、図11に示すように、赤外撮像部123が撮像した撮像画像全体または当該撮像画像から情報を算出する撮像画像の一部領域(後述する解析ウインドウ)に対して、所定の座標軸(例えば、横方向をX軸、縦方向をY軸とする座標軸)を設定する。そして、上記座標軸が設定された画像から、所定の閾値以上の輝度を有する画素が隣接している画素群を抽出し、当該画素群が所定の範囲内のサイズであればクラスタであると判定する。例えば、ユーザの顔が撮像された撮像画像の場合、赤外発光部124から照射された赤外光をより多く反射するユーザの顔が高輝度画素として抽出されるため、ユーザの顔が撮像されている画像がクラスタとして判定されることになる。そして、上記クラスタリングモードでは、このように抽出されたクラスタの総数が算出されるとともに、各クラスタの平均輝度、面積(画素数)、重心座標、および外接長方形が算出され、これらの算出結果が撮像対象の情報として算出される。
なお、モーメントモードおよび/またはクラスタリングモードにおいて算出された撮像対象の情報は、右コントローラ4内で算出されて本体装置2へ送信される。したがって、赤外撮像部123が撮像した撮像画像そのものを示すデータを送信する場合と比較すると、本体装置2へ送信するデータ量を削減することができるとともに、本体装置2側における処理負荷も低減することができる。また、撮像対象の情報のデータ量が小さいため、右コントローラ4から送信する他の操作データに含ませて当該撮像対象の情報を本体装置2へ送信することも可能であり、右コントローラ4と本体装置2との間の通信処理自体も簡素に構成することができる。
なお、上記クラスタリングモードにおいて、各クラスタの位置(重心座標や外接長方形の位置)を算出する際、撮像画像において設定された基準位置を基準として算出してもよい。一例として、上記基準位置は、撮像画像に撮像されている所定の被撮像物の位置に設定してもよい。そして、赤外撮像部123の撮像画像を解析する際に、当該撮像画像に対してパターンマッチングを用いた画像処理等を行うことによって、当該撮像画像内から基準の被撮像物が撮像されている位置を算出する。このような基準の被撮像物の撮像位置を基準として各クラスタの位置を算出することによって、各クラスタの位置、向き、形状等を精度よく検出することができる。また、撮像画像内に撮像されている基準の被撮像物と他の撮像対象との位置関係や基準の被撮像物が撮像されている形状を用いることによって、撮像対象の種類を特定することが容易になる。
次に、図12および図13を参照して、本実施例において右コントローラ4で実行される具体的な処理の一例について説明する。図12は、右コントローラ4のメモリ(例えば、処理部121に含まれるメモリ)において設定されるデータ領域の一例を示す図である。なお、上記右コントローラ4のメモリには、図12に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。また、後述する右コントローラ4で実行される情報算出処理では、モーメントモードによって撮像対象の情報を算出する例を用いる。
右コントローラ4のメモリのプログラム記憶領域には、処理部121で実行される各種プログラムPsが記憶される。本実施例においては、各種プログラムPsは、上述した撮像画像の撮像結果に基づく情報を取得して算出するための情報算出プログラムや算出した情報を本体装置2へ送信するためのプログラム等が記憶される。なお、各種プログラムPsは、右コントローラ4内に予め記憶されていてもよいし、本体装置2に着脱可能な記憶媒体(例えば、第1スロット23に装着された第1の種類の記憶媒体、第2スロット24に装着された第2の種類の記憶媒体)から取得されて右コントローラ4のメモリに記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されて右コントローラ4のメモリに記憶されてもよい。処理部121は、右コントローラ4のメモリに記憶された各種プログラムPsを実行する。
また、右コントローラ4のメモリのデータ記憶領域には、処理部121において実行される処理において用いられる各種のデータが記憶される。本実施例においては、右コントローラ4のメモリには、撮像画像データDsa、解析ウインドウデータDsb、およびブロックデータDsc等が記憶される。
撮像画像データDsaは、赤外撮像部123が撮像した撮像画像を示すデータである。本実施例では、処理部121の指示に基づいた周期で赤外撮像部123が撮像処理を行っており、当該撮像された撮像画像を用いて撮像画像データDsaが適宜更新される。なお、撮像画像データDsaの更新周期は、後述する処理部123において実行される処理および/またはCPU81において実行される処理の周期毎に更新されてもよいし、上記撮像画像が撮像される周期毎に更新されてもよい。
解析ウインドウデータDsbは、撮像画像データDsaに格納されている撮像画像のうち、撮像結果に基づく情報を算出するために解析する範囲(解析ウインドウ)の画像を示すデータである。
ブロックデータDscは、上記解析ウインドウを分割することによって設定されたブロック毎の輝度に関する情報を示すデータである。ブロックデータDscは、上記ブロック毎に輝度総和データDsc1、横方向モーメントデータDsc2、および縦方向モーメントデータDsc3等を含んでいる。輝度総和データDsc1は、ブロック内の画素がそれぞれ有する輝度を全画素について合計した値を示すデータである。横方向モーメントデータDsc2は、ブロック内の画素がそれぞれ有する輝度に当該画素の横方向座標値(X軸方向位置)を乗算した値(横方向の一次モーメント)を全画素について合計した値を示すデータである。縦方向モーメントデータDsc3は、ブロック内の画素がそれぞれ有する輝度に当該画素の縦方向座標値(Y軸方向位置)を乗算した値(縦方向の一次モーメント)を全画素について合計した値を示すデータである。
次に、本実施例における撮像画像の撮像結果に基づく情報を算出する処理(以下、単に情報算出処理と記載する)の詳細な一例を説明する。図13は、処理部121のCPUで実行される情報算出処理の一例を示すフローチャートである。本実施例においては、図13に示す一連の処理は、処理部121のCPUが各種プログラムPsに含まれる情報算出プログラム等を実行することによって行われる。また、図13に示す情報算出処理が開始されるタイミングは任意である。
なお、図13に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施例では、上記フローチャートの各ステップの処理を処理部121のCPUが実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、処理部121のCPU以外のプロセッサや専用回路が実行するようにしてもよい。また、右コントローラ4において実行される処理の一部は、右コントローラ4と通信可能な他の情報処理装置(例えば、本体装置2や本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち、図13に示す各処理は、右コントローラ4を含む複数の情報処理装置が協働することによって実行されてもよい。
図13において、処理部121のCPUは、情報算出処理における初期設定を行い(ステップS141)、次のステップに処理を進める。例えば、上記初期設定において、処理部121のCPUは、以下に説明する処理を行うためのパラメータを初期化する。また、上記初期設定において、処理部121のCPUは、撮像画像のうち、撮像結果に基づく情報を算出するために解析する範囲(解析ウインドウ)を初期設定する。また、上記初期設定において、処理部121のCPUは、上記解析ウインドウに所定の座標軸(例えば、横方向をX軸、縦方向をY軸とする座標軸)を設定するとともに、当該座標軸が設定された画像を所定のブロック(例えば、8×6の48ブロック)に分割して設定する。なお、解析ウインドウの範囲は、本体装置2からの指示に基づいて設定されてもよいし、予め定められていてもよい。また、解析ウインドウの範囲は複数設定されてもよく、この場合、時系列的に順次異なる解析ウインドウ毎に撮像結果に基づく情報が算出されることになる。
次に、処理部121のCPUは、赤外撮像部123が撮像した撮像画像を取得し(ステップS142)、次のステップに処理を進める。例えば、処理部121のCPUは、赤外撮像部123から撮像画像を取得して撮像画像データDsaを更新する。
次に、処理部121のCPUは、解析ウインドウを設定し(ステップS143)、次のステップに処理を進める。例えば、処理部121のCPUは、上記初期設定されている解析ウインドウの範囲に基づいて、撮像画像データDsaに格納されている撮像画像から解析ウインドウ内の画像を切り出し、当該切り出した画像を用いて解析ウインドウデータDsbを更新する。
次に、処理部121のCPUは、上記解析ウインドウ内の画像を分割することによって複数のブロックを設定し(ステップS144)、次のステップに処理を進める。例えば、処理部121のCPUは、解析ウインドウデータDsbに格納されている画像に対して、所定の座標軸(例えば、横方向をX軸、縦方向をY軸とする座標軸)を設定するとともに、当該座標軸が設定された画像を所定のブロック(例えば、8×6の48ブロック)に分割する。
次に、処理部121のCPUは、上記ステップS144において設定されたブロックから、以降の処理において処理対象とするブロックを選出し(ステップS145)、次のステップに処理を進める。例えば、処理部121のCPUは、上記ステップS144において設定されたブロックに対して、左上のブロック(図10に示す第1行第A列のブロック)から右下のブロック(図10に示す第6行第H列のブロック)の順で処理対象とするブロックを選出する。
次に、処理部121のCPUは、上記ステップS145において選出された処理対象のブロックにおいて、輝度の総和を算出し(ステップS146)、次のステップに処理を進める。例えば、処理部121のCPUは、処理対象のブロック内の画素が有する輝度を全画素について合計することによって輝度の総和を算出し、当該総和を示す値を用いて処理対象のブロックに対応する輝度総和データDsc1を更新する。
次に、処理部121のCPUは、上記ステップS145において選出された処理対象のブロックにおいて、横方向モーメントを算出し(ステップS147)、次のステップに処理を進める。例えば、処理部121のCPUは、処理対象のブロック内の画素が有する輝度に当該画素のX軸方向位置を乗算した値を全画素について合計することによって横方向の一次モーメントを算出し、当該モーメントを示す値を用いて処理対象のブロックに対応する横方向モーメントデータDsc2を更新する。
次に、処理部121のCPUは、上記ステップS145において選出された処理対象のブロックにおいて、縦方向モーメントを算出し(ステップS148)、次のステップに処理を進める。例えば、処理部121のCPUは、処理対象のブロック内の画素が有する輝度に当該画素のY軸方向位置を乗算した値を全画素について合計することによって縦方向の一次モーメントを算出し、当該モーメントを示す値を用いて処理対象のブロックに対応する縦方向モーメントデータDsc3を更新する。
次に、処理部121のCPUは、上記解析ウインドウ内の画像内に、上記ステップS145〜ステップS148の処理が行われていないブロックが残っているか否かを判定する(ステップS149)。そして、処理部121のCPUは、未処理のブロックが残っている場合、上記ステップS145に戻って処理を繰り返す。一方、処理部121のCPUは、未処理のブロックが残っていない場合、ステップS150に処理を進める。
ステップS150において、処理部121のCPUは、撮像画像の撮像結果に基づく情報を示すデータを本体装置2へ送信する処理を行い、次のステップに処理を進める。例えば、処理部121のCPUは、ブロックデータDscを用いて、本体装置2へ送信するためのデータを生成し、通信制御部111へ当該データを出力する。これによって、通信制御部111は、他の操作データ(ボタン操作データ、加速度データ、角速度データ等)とともに撮像画像の撮像結果に基づく情報を操作データとして生成し、当該操作データを所定の送信周期毎に本体装置2へ送信する。
次に、処理部121のCPUは、情報算出処理を終了するか否かを判定する(ステップS151)。上記ステップS151において情報算出処理を終了する条件としては、例えば、本体装置2から情報算出処理を終了する指示を受領したことや、ユーザが情報算出処理を終了する操作を行ったこと等がある。処理部121のCPUは、情報算出処理を終了しない場合に上記ステップS142に戻って処理を繰り返し、情報算出処理を終了する場合に当該フローチャートによる処理を終了する。以降、ステップS142〜ステップS151の一連の処理は、ステップS151で情報算出処理を終了すると判定されるまで繰り返し実行される。
なお、上述した情報算出処理では、各ブロックの輝度の総和、各ブロックの横方向の一次モーメント、および各ブロックの縦方向の一次モーメントが撮像対象の情報として算出される例を用いたが、他の態様の情報を撮像情報の情報として算出して、右コントローラ4から本体装置2へ送信してもよい。本実施例では、各ブロックの輝度の総和が送信されるため、本体装置2側において各ブロックの輝度の総和を全ブロックにおいて合計して全画素数で除算することによって、分割された複数のブロック全てによって構成される領域全体の平均輝度を得ることができる。他の実施例では、分割された複数のブロックの少なくとも一部の輝度と、当該分割された複数のブロック全てによって構成される領域全体の輝度とが、少なくとも算出可能な情報を右コントローラ4から本体装置2へ送信すればよい。例えば、上記分割された複数のブロック全てによって構成される領域全体における平均輝度や輝度の総和が算出されて、右コントローラ4から本体装置2へ送信されてもよいし、各ブロックの平均輝度が算出されて、右コントローラ4から本体装置2へ送信されてもよい。また、上述した情報算出処理では、各ブロックの横方向の一次モーメント、および各ブロックの縦方向の一次モーメントが算出されて右コントローラ4から本体装置2へ送信されているが、各ブロックにおける輝度の重心座標を得ることが可能な情報であれば、他の態様の情報が右コントローラ4から本体装置2へ送信されてもよい。例えば、各ブロックにおける輝度の重心座標そのものが算出されて、右コントローラ4から本体装置2へ送信されてもよい。他の例として、上記分割された複数のブロック全てによって構成される領域全体における輝度の重心座標が算出されて、右コントローラ4から本体装置2へ送信されてもよい。
次に、図14〜図17を参照して、本実施例において本体装置2で実行される具体的な処理の一例について説明する。図14は、本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図14に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。また、後述する本体装置2で実行される情報処理では、モーメントモードによって算出された撮像対象の情報を取得する例を用いる。
DRAM85のプログラム記憶領域には、本体装置2で実行される各種プログラムPaが記憶される。本実施例においては、各種プログラムPaは、上述した左コントローラ3および/または右コントローラ4との間で無線通信するための通信プログラムや、左コントローラ3および/または右コントローラ4から取得したデータに基づいた情報処理(例えば、ゲーム処理)を行うためのアプリケーションプログラム等が記憶される。なお、各種プログラムPaは、フラッシュメモリ84に予め記憶されていてもよいし、本体装置2に着脱可能な記憶媒体(例えば、第1スロット23に装着された第1の種類の記憶媒体、第2スロット24に装着された第2の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。CPU81は、DRAM85に記憶された各種プログラムPaを実行する。
また、DRAM85のデータ記憶領域には、本体装置2において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施例においては、DRAM85には、操作データDa、ブロック輝度データDb、平均輝度データDc、中心輝度データDd、輝度重心座標データDe、口開きフラグデータDf、姿勢変化データDg、オブジェクトデータDh、および画像データDi等が記憶される。
操作データDaは、右コントローラ4からそれぞれ適宜取得した操作データである。上述したように、右コントローラ4から送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報、または、センサによる検出結果)と、赤外撮像部123の撮像画像の撮像結果に基づく情報が含まれている。本実施例では、無線通信によって右コントローラ4から所定周期で操作データが送信されており、当該受信した操作データを用いて操作データDaが適宜更新される。なお、操作データDaの更新周期は、後述する本体装置2で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。操作データDaは、ボタン操作データDa1、ブロックデータDa2、および角速度データDa3等を含んでいる。ボタン操作データDa1は、右コントローラ4の各ボタンやアナログスティックからの入力に関する情報を示すデータである。ブロックデータDa2は、右コントローラ4の処理部121において算出されたブロック毎の情報を示すデータである。角速度データDa3は、右コントローラ4の角速度センサ115によって検出された右コントローラ4に生じている角速度に関する情報を示すデータである。例えば、角速度データDa3は、右コントローラ4に生じているxyz軸周りの角速度を示すデータ等を含んでいる。
ブロック輝度データDbは、各ブロックの平均輝度を示すデータである。平均輝度データDcは、ブロック全体の平均輝度を示すデータである。中心輝度データDdは、ブロック全体において中央付近に配置されたブロックにおける平均輝度を示すデータである。輝度重心座標データDeは、ブロック全体の輝度重心座標を示すデータである。
口開きフラグデータDfは、撮像されているユーザが口を開く動作をしていると判定された場合にオンに設定され、口を閉じる動作をしていると判定された場合にオフに設定される口開きフラグを示すデータである。
姿勢変化データDgは、実空間における右コントローラ4の姿勢変化量を示すデータである。例えば、姿勢変化データDgは、右コントローラ4のxyz軸方向周りに対する姿勢変化を示すデータ等を含んでいる。
オブジェクトデータDhは、表示装置(例えば、ディスプレイ12)に表示される仮想オブジェクトに関するデータ(例えば、仮想オブジェクトの種類、量等を示すデータ)である。画像データDiは、ゲームの際に表示装置に画像(例えば、仮想オブジェクトの画像、他のオブジェクトの画像、背景画像等)を表示するためのデータである。
次に、本実施例における情報処理(例えば、ゲーム処理)の詳細な一例を説明する。図15は、本体装置2で実行される情報処理の一例を示すフローチャートである。図16は、図15におけるステップS167で実行される口開閉判定処理の詳細な一例を示すサブルーチンである。図17は、図15におけるステップS164で実行される口付近判定処理の詳細な一例を示すサブルーチンである。なお、本実施例においては、図15〜図17に示す一連の処理は、CPU81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(例えば、ゲームプログラム)を実行することによって行われる。また、図15〜図17に示す情報処理が開始されるタイミングは任意である。
なお、図15〜図17に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施例では、上記フローチャートの各ステップの処理をCPU81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、CPU81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち、図15〜図17に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図15において、CPU81は、ゲーム処理における初期設定を行い(ステップS161)、次のステップに処理を進める。例えば、上記初期設定では、CPU81は、以下に説明する処理を行うためのパラメータを初期化する。また、上記初期設定において、CPU81は、赤外撮像部123の撮像画像のうち、撮像結果に基づく情報を算出するために解析する範囲(解析ウインドウ)および複数のブロックを初期設定して、右コントローラ4へ当該設定内容を指示してもよい。
次に、CPU81は、ゲームを開始する際に右コントローラ4を構える初期姿勢をユーザに指示し(ステップS162)、次のステップに処理を進める。例えば、CPU81は、早食いゲームを開始する準備をするための操作指示「コントローラを口に近づけて構えましょう」を本体装置2のディスプレイ12に表示する表示制御処理を行うとともに、本体装置2のスピーカ88から当該操作指示を示す音声を出力する音声出力制御処理を行う。
次に、CPU81は、右コントローラ4から操作データを取得して操作データDaを更新し(ステップS163)、次のステップに処理を進める。例えば、CPU81は、右コントローラ4から取得した操作データに応じて、ボタン操作データDa1、ブロックデータDa2、および角速度データDa3等を更新する。
次に、CPU81は、ユーザが右コントローラ4を口に向けて静止させて、ユーザ自身の口付近を撮像しているか否かを判定する口付近判定処理を行って(ステップS164)、次のステップに処理を進める。なお、上記ステップS164で行う口付近判定処理の詳細な説明については、後述する。
次に、CPU81は、ユーザが上記初期姿勢で右コントローラ4を操作しているか否かを判定する(ステップS164)。例えば、CPU81は、上記ステップS164における口付近判定処理において初期姿勢OKが設定された場合、上記ステップS164において肯定判定する。そして、CPU81は、ユーザが上記初期姿勢で右コントローラ4を操作していると判定された場合、ステップS166に処理を進める。一方、CPU81は、ユーザが上記初期姿勢で右コントローラ4を操作していないと判定された場合、ステップS162に戻って処理を繰り返す。
ステップS166において、CPU81は、右コントローラ4から操作データを取得して操作データDaを更新し、次のステップに処理を進める。なお、上記ステップS166の処理は、上述したステップS163の処理と同様であるため、詳細な説明を省略する。
次に、CPU81は、ユーザが口を開く動作をしているか、口を閉じる動作をしているかを判定する口開閉判定処理を行って(ステップS167)、次のステップに処理を進める。以下、図16を参照して、上記ステップS167で行う口開閉判定処理について説明する。
図16において、CPU81は、口開閉判定処理において用いる一時変数nが0であるか否かを判定する(ステップS181)。そして、CPU81は、一時変数nが0である場合、ステップS182に処理を進める。一方、CPU81は、一時変数nが0でない場合、現在の一時変数nから1を減算して新たな一時変数nに更新し(ステップS196)、当該サブルーチンによる処理を終了する。
ステップS182において、CPU81は、各ブロックの平均輝度を算出し、次のステップに処理を進める。例えば、CPU81は、ブロックデータDa2が示す各ブロックの輝度の総和を用いて、当該総和をブロックの画素数で除算することによって各ブロックの平均輝度を算出し、当該各ブロックの平均輝度を示す今回算出したデータを前回算出したデータに追加してブロック輝度データDbを更新する。
次に、CPU81は、口開閉判定処理を行うための角条件を満たしているか否かを判定する(ステップS183)。上記ステップS183で行う判定は、上述した口開閉判定の第1の条件に相当するものである。すなわち、CPU81は、上記ステップS182で算出された各ブロックの平均輝度のうち、処理対象画像の角に配置されている4つのブロック(例えば、図10に示す第1行第A列ブロック、第1行第H列ブロック、第6行第A列ブロック、第6行第H列ブロック)それぞれの平均輝度が所定の閾値より高いか否かを判定し、2つ以上のブロックの平均輝度が当該閾値より高い場合、上記ステップS183において否定判定する。そして、CPU81は、口開閉判定処理を行うための角条件を満たしている場合、ステップS184に処理を進める。一方、CPU81は、口開閉判定処理を行うための角条件を満たしていない場合、当該サブルーチンによる処理を終了する。
ステップS184において、CPU81は、口開閉判定処理を行うための中央条件を満たしているか否かを判定する。上記ステップS184で行う判定は、上述した口開閉判定の第4の条件に相当するものである。すなわち、CPU81は、上記ステップS182で算出された各ブロックの平均輝度のうち、処理対象画像の中央付近に配置されている4つのブロック(例えば、図10に示す第3行第D列ブロック、第3行第E列ブロック、第4行第D列ブロック、第4行第E列ブロック)全体の平均輝度を算出し、当該中央付近のブロック全体の平均輝度を示す今回算出したデータを前回算出したデータに追加して中心輝度データDdを更新する。次に、CPU81は、前回算出された中央付近のブロック全体の平均輝度に対する平均輝度の変化量を算出して、当該変化量が所定の閾値より高いか否かを判定し、当該閾値より高い場合に上記ステップS184において肯定判定する。そして、CPU81は、口開閉判定処理を行うための中央条件を満たしている場合、ステップS185に処理を進める。一方、CPU81は、口開閉判定処理を行うための中央条件を満たしていない場合、当該サブルーチンによる処理を終了する。
ステップS185において、CPU81は、処理対象画像全体(ブロック全体)の輝度重心座標を算出し、次のステップに処理を進める。例えば、CPU81は、ブロックデータDa2が示す各ブロックの横方向モーメントを当該ブロックの輝度の総和でそれぞれ除算することによって各ブロックにおける輝度の横方向重心位置を算出する。そして、CPU81は、各ブロックにおける輝度の横方向重心位置を全ブロック分総和した値をブロック数で除算することによって、処理対象画像全体(ブロック全体)の輝度の横方向重心位置を算出する。また、CPU81は、ブロックデータDa2が示す各ブロックの縦方向モーメントを当該ブロックの輝度の総和でそれぞれ除算することによって各ブロックにおける輝度の縦方向重心位置を算出する。そして、CPU81は、各ブロックにおける輝度の縦方向重心位置を全ブロック分総和した値をブロック数で除算することによって、処理対象画像全体(ブロック全体)の輝度の縦方向重心位置を算出する。そして、CPU81は、処理対象画像全体(ブロック全体)の輝度の横方向重心位置および縦方向重心位置を示す今回算出したデータを前回算出したデータに追加して輝度重心座標データDeを更新する。
次に、CPU81は、輝度重心座標が第1中央範囲内にあるか否かを判定する(ステップS186)。上記ステップS186で行う判定は、上述した口開閉判定の第2の条件に相当するものである。例えば、CPU81は、上記ステップS185で算出された処理対象画像全体(ブロック全体)の輝度重心座標が当該処理対象画像全体(ブロック全体)の中央付近に設定された第1中央範囲内(例えば、中央付近に配置されている4つのブロック(例えば、図10に示す第3行第D列ブロック、第3行第E列ブロック、第4行第D列ブロック、第4行第E列ブロック)内)にある場合、上記ステップS186において肯定判定する。そして、CPU81は、輝度重心座標が第1中央範囲内にある場合、ステップS187に処理を進める。一方、CPU81は、輝度重心座標が第1中央範囲内にない場合、当該サブルーチンによる処理を終了する。
ステップS187において、CPU81は、輝度重心変化量を算出し、次のステップに処理を進める。例えば、CPU81は、輝度重心座標データDeを参照して前回算出された輝度重心座標と今回算出された輝度重心座標との距離を、輝度重心変化量として算出する。
次に、CPU81は、上記ステップS187で算出された輝度重心変化量が第1値以下であるか否かを判定する(ステップS188)。上記ステップS188で行う判定は、上述した口開閉判定の第3の条件に相当するものである。そして、CPU81は、上記ステップS187で算出された輝度重心変化量が第1値以下である場合、上記第3の条件を満たしているとしてステップS189に処理を進める。一方、CPU81は、上記ステップS187で算出された輝度重心変化量が第1値より大きい場合、上記第3の条件を満たしていないとして当該サブルーチンによる処理を終了する。
ステップS189において、CPU81は、処理対象画像全体(ブロック全体)の平均輝度を算出し、次のステップに処理を進める。例えば、CPU81は、上記ステップS182で算出した各ブロックの平均輝度を全ブロック分総和した値をブロック数で除算することによって処理対象画像全体(ブロック全体)の平均輝度を算出し、処理対象画像全体(ブロック全体)の平均輝度を示す今回算出したデータを前回算出したデータに追加して平均輝度データDcを更新する。
次に、CPU81は、口開きフラグデータDfを参照して、口開きフラグがオンに設定されているか否かを判定する(ステップS190)。そして、CPU81は、口開きフラグがオフに設定されている場合、ステップS191に処理を進める。一方、CPU81は、口開きフラグがオンに設定されている場合、ステップS193に処理を進める。
ステップS191において、CPU81は、処理対象画像全体(ブロック全体)の平均輝度が下降傾向にあるか否かを判定する。例えば、CPU81は、平均輝度データDcを参照して、今回算出された平均輝度と直前の連続する3回において算出された過去の平均輝度とを取得し、今回算出された平均輝度が当該過去の平均輝度の何れに対しても低い場合、処理対象画像全体(ブロック全体)の平均輝度が下降傾向にあると判定する。そして、CPU81は、処理対象画像全体(ブロック全体)の平均輝度が下降傾向にある場合、撮像されているユーザが口を開く動作をしていると判定して、口開きフラグをオンに設定して口開きフラグデータDfを更新し(ステップS192)、当該サブルーチンによる処理を終了する。一方、CPU81は、処理対象画像全体(ブロック全体)の平均輝度が下降傾向にない場合、そのまま当該サブルーチンによる処理を終了する。
一方、ステップS193において、CPU81は、処理対象画像全体(ブロック全体)の平均輝度が上昇傾向にあるか否かを判定する。例えば、CPU81は、平均輝度データDcを参照して、今回算出された平均輝度と直前の連続する3回において算出された過去の平均輝度とを取得し、今回算出された平均輝度が当該過去の平均輝度の何れに対しても高い場合、処理対象画像全体(ブロック全体)の平均輝度が上昇傾向にあると判定する。そして、CPU81は、処理対象画像全体(ブロック全体)の平均輝度が上昇傾向にある場合、撮像されているユーザが口を閉じる動作をしていると判定して、口開きフラグをオフに設定して口開きフラグデータDfを更新し(ステップS194)、ステップS195に処理を進める。一方、CPU81は、処理対象画像全体(ブロック全体)の平均輝度が上昇傾向にない場合、そのまま当該サブルーチンによる処理を終了する。
ステップS195において、CPU81は、口開閉判定処理において用いる一時変数nを所定の自然数(例えば、5)に設定して、当該サブルーチンによる処理を終了する。ここで、上記ステップS181の処理により、一時変数nが0とならない限り上記ステップS182〜ステップS195における口開閉判定処理が行われることがなく、上記ステップS195において設定される自然数に応じて口開閉判定処理がスキップされる回数(時間)が設定されることになる。そして、一時変数nは、口開きフラグがオンからオフに変更された時点、すなわちユーザが口を閉じる動作を開始した時点で0より大きな数に設定されるため、ユーザが口を閉じる動作を開始した後の所定時間においては口開閉判定処理(具体的には、ユーザが口を開く動作を開始したことを判定する処理)が行われないことになる。
図15に戻り、CPU81は、上記ステップS167における口開閉判定処理の後、撮像されているユーザが口を閉じる動作を開始したか否かを判定する(ステップS168)。例えば、CPU81は、直前の口開閉判定処理において口開きフラグがオンからオフに変更された場合、すなわち上記ステップS194が実行されている場合、撮像されているユーザが口を閉じる動作を開始したと判定する。そして、CPU81は、撮像されているユーザが口を閉じる動作を開始した場合、ステップS169に処理を進める。一方、CPU81は、撮像されているユーザが口を閉じる動作を開始していない場合、ステップS171に処理を進める。
ステップS169において、CPU81は、表示装置(例えば、ディスプレイ12)に表示する仮想オブジェクトに関する設定を更新し、次のステップに処理を進める。例えば、CPU81は、表示装置に表示される仮想オブジェクトの数や量を所定量増やし、増量後の設定値を用いてオブジェクトデータDhを更新する。
次に、CPU81は、ユーザが食べる音や食べる振動を生成する処理を行い(ステップS170)、ステップS171に処理を進める。例えば、CPU81は、ユーザが食べる音として想定される音声を本体装置2のスピーカ88から出力する音声出力制御を行う。また、CPU81は、ユーザが食べる振動として想定される振動を右コントローラ4の振動子117から出力する振動出力制御を行うための送信データを、コントローラ通信部83を介して、右コントローラ4へ送信する。
ステップS171において、CPU81は、表示装置に仮想オブジェクトが配置された画像を表示する処理を行い、次のステップに処理を進める。例えば、CPU81は、オブジェクトデータDhに基づいてユーザによって食べられた仮想オブジェクトの数や量を設定し、当該設定に基づいて仮想オブジェクトが配置された仮想世界画像を生成する。そして、CPU81は、生成された仮想世界画像を表示装置(例えば、本体装置11のディスプレイ12)に表示する処理を行う。
次に、CPU81は、ゲームを終了するか否かを判定する(ステップS172)。上記ステップS172においてゲームを終了する条件としては、例えば、上記ゲームを終了する条件が満たされたことや、ユーザがゲームを終了する操作を行ったこと等がある。CPU81は、ゲームを終了しない場合に上記ステップS166に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。以降、ステップS166〜ステップS172の一連の処理は、ステップS172でゲームを終了すると判定されるまで繰り返し実行される。
次に、図17を参照して、上記ステップS164で行う口付近判定処理について説明する。図15のフローチャートから明らかなように、上記ステップS164で行う口付近判定処理は、上記ステップS167で行う口開閉判定処理に先だって行われる処理であり、当該口付近判定処理において初期姿勢がOKであると判定されるまで上記口開閉判定処理が行われないものとなっている。
図17において、CPU81は、各ブロックの平均輝度を算出し(ステップS201)、次のステップに処理を進める。なお、上記ステップS201の処理は、上述したステップS182の処理と同様であるため、ここでは詳細な説明を省略する。
次に、CPU81は、口付近判定処理を行うための角条件を満たしているか否かを判定する(ステップS202)。そして、CPU81は、口付近処理を行うための角条件を満たしている場合、ステップS203に処理を進める。一方、CPU81は、口付近判定処理を行うための角条件を満たしていない場合、当該サブルーチンによる処理を終了する。なお、上記ステップS202の処理は、上述した口付近判定の第1の条件に相当するものであるが、上述したステップS183の処理と同様であるため、ここでは詳細な説明を省略する。
ステップS203において、CPU81は、処理対象画像全体(ブロック全体)の輝度重心座標を算出し、次のステップに処理を進める。なお、上記ステップS203の処理は、上述したステップS185の処理と同様であるため、ここでは詳細な説明を省略する。
次に、CPU81は、輝度重心座標が第2中央範囲内にあるか否かを判定する(ステップS204)。上記ステップS204で行う判定は、上述した口付近判定の第2の条件に相当するものである。例えば、CPU81は、上記ステップS203で算出された処理対象画像全体(ブロック全体)の輝度重心座標が当該処理対象画像全体(ブロック全体)の中央付近に設定された第2中央範囲内にある場合、上記ステップS204において肯定判定する。ここで、上記第2中央範囲は、上述したステップS186で用いた第1中央範囲内に含まれ、かつ、当該第1中央範囲より小さな範囲に設定することが好ましく、これによって口付近判定の第2の条件が口開閉判定における第2の条件より厳しい条件となる。そして、CPU81は、輝度重心座標が第2中央範囲内にある場合、ステップS205に処理を進める。一方、CPU81は、輝度重心座標が第2中央範囲内にない場合、当該サブルーチンによる処理を終了する。
ステップS205において、CPU81は、輝度重心変化量を算出し、次のステップに処理を進める。なお、上記ステップS205の処理は、上述したステップS187の処理と同様であるため、ここでは詳細な説明を省略する。
次に、CPU81は、上記ステップS205で算出された輝度重心変化量が第2値以下であるか否かを判定する(ステップS206)。上記ステップS206で行う判定は、上述した口付近判定の第3の条件に相当するものである。ここで、上記第2値は、上述したステップS188で用いた第1値より小さな値に設定することが好ましく、これによって口付近判定の第3の条件が口開閉判定の第3の条件より厳しい条件となる。そして、CPU81は、上記ステップS205で算出された輝度重心変化量が第2値以下である場合、ステップS207に処理を進める。一方、CPU81は、上記ステップS205で算出された輝度重心変化量が第2値より大きい場合、当該サブルーチンによる処理を終了する。
ステップS207において、CPU81は、処理対象画像全体(ブロック全体)の平均輝度を算出し、次のステップに処理を進める。なお、上記ステップS207の処理は、上述したステップS189の処理と同様であるため、ここでは詳細な説明を省略する。
次に、CPU81は、上記ステップS207で算出された処理対象画像全体(ブロック全体)の平均輝度が所定範囲内にあるか否かを判定する(ステップS208)。ここで、上記ステップS208で行う判定は、上述した口付近判定の第4の条件に相当するものであり、上記口開閉判定では判定条件として設定されていないものである。すなわち、上記ステップS207で用いる所定範囲は、ユーザが右コントローラ4を顔に近付け過ぎている場合や顔から離し過ぎている場合に否定判定するための閾値であり、ユーザが右コントローラ4を顔に適切な距離で近づけている場合に想定される平均輝度の範囲に設定される。そして、CPU81は、上記ステップS207で算出された処理対象画像全体(ブロック全体)の平均輝度が所定範囲内にある場合、ステップS209に処理を進める。一方、CPU81は、上記ステップS207で算出された処理対象画像全体(ブロック全体)の平均輝度が所定範囲内にない場合、当該サブルーチンによる処理を終了する。
ステップS209において、CPU81は、右コントローラ4の姿勢変化を算出し、次のステップに処理を進める。例えば、CPU81は、右コントローラ4に生じている角速度を示すデータを角速度データDa3から取得し、右コントローラ4のxyz軸周りの姿勢変化を算出して、姿勢変化データDgを更新する。なお、上記ステップS209において算出する姿勢変化の値は、前回の処理において得られた右コントローラ4の角速度センサ115から出力された値から今回の処理において得られた右コントローラ4の角速度センサ115から出力された値の変化量でもよい。また、上記ステップS209において算出する姿勢変化の値は、今回の処理において得られた右コントローラ4に生じている角速度の値でもよい。
次に、CPU81は、右コントローラ4の姿勢が安定しているか否かを判定する(ステップS210)。ここで、上記ステップS210で行う判定は、上述した口付近判定の第5の条件に相当するものであり、上記口開閉判定では判定条件として設定されていないものである。例えば、CPU81は、上記ステップS209において算出された右コントローラ4の姿勢変化が所定の範囲内である場合、右コントローラ4の姿勢が安定していると判定する。そして、CPU81は、右コントローラ4の姿勢が安定している場合、ステップS211に処理を進める。一方、CPU81は、右コントローラ4の姿勢が安定していない場合、当該サブルーチンによる処理を終了する。
ステップS211において、CPU81は、上記ステップS162において指示している初期姿勢でユーザが右コントローラ4を操作しているとして初期姿勢OKに設定し、当該サブルーチンによる処理を終了する。
このように、本実施例においては、ユーザが口を開閉することによる操作内容は、赤外撮像部123によって撮像された撮像画像に基づいて検出される。ここで、ユーザの口の開閉は、ユーザの顔における一部分のみ開閉して当該開閉した部位の撮像部からの距離が変化する状況となるが、このような物体の凹凸形状変化の検出が本体装置2および右コントローラ4、すなわち情報処理システムのみによって行うことも可能であるため、簡易なシステム構成で実現することができる。また、本実施例における情報処理システムは、他の被写体の凹凸変化、すなわち他の被写体の一部分だけ赤外撮像部123からの距離が変化していることを判定してもよい。本実施例では、赤外撮像部123の撮像方向に対する被写体の形状および/または赤外撮像部123の撮像方向への被写体の位置を、赤外光反射を利用した撮像画像を用いて判定する、今までにない物体形状判定や物体位置判定を実現することができる。
なお、上述した実施例では、撮像画像によってユーザが口を開閉する変化、すなわち被写体の凹凸変化を判定する例を用いたが、赤外撮像部123の撮像方向に対する他の被写体の形状および/または赤外撮像部123の撮像方向への他の被写体の位置を撮像画像によって判定することもできる。一例として、右コントローラ4の赤外撮像部123に向かってその一部が突き出る物体や赤外撮像部123に対してその一部が後退する物体や一部分が開閉する物体等の形状および/または位置を、赤外光反射を利用した撮像画像を用いて判定することができる。他の例として、凹凸形状を有する物体を赤外撮像部123によって撮像した場合、当該物体の凹凸形状を模様として認識するのではなく、当該凹凸形状の深さを含めた物体の形状を、赤外光反射を利用した撮像画像を用いて判定することができる。
また、上述した実施例では、本体装置2と当該本体装置2から外された右コントローラ4とを用いて、被写体の凹凸変化を判定する例を用いたが、単一装置によって当該判定を行ってもかまわない。例えば、本実施例における情報処理システム1でも本体装置2に右コントローラ4を取り付けた状態で赤外撮像部123によってユーザの顔を撮像して、当該ユーザの口の開閉を判定することが可能であり、当該判定に基づいたゲーム処理を行うことも可能である。
また、上述した実施例において、右コントローラ4から本体装置2へ送信する撮像画像に基づいたデータは、赤外撮像部123が撮像した撮像画像そのものを示すデータでもよい。この場合、右コントローラ4から本体装置2へ送信されるデータ量が増加することが考えられるが、本体装置2側において、上記撮像画像に関する様々な解析処理を行うことが可能となる。
また、上述した実施例において、右コントローラ4の動きや姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて右コントローラ4の動きや姿勢を検出してもよい。例えば、右コントローラ4の姿勢を、当該右コントローラ4に生じる角速度のみで算出しているが、当該右コントローラ4に生じる角速度と加速度とを組み合わせて算出してもよいし、当該右コントローラ4に生じる加速度のみで姿勢を算出してもかまわない。右コントローラ4に生じる加速度のみ検出する場合であっても、右コントローラ4に生じる重力加速度が生じている方向を算出可能であり、当該重力加速度を基準としたxyz軸方向を逐次算出すれば上述した実施例と同様の処理が可能であることは言うまでもない。また、上述した実施例では、右コントローラ4を用いた操作に応じたゲーム画像を本体装置2のディスプレイ12に表示しているが、クレードルを介して据置型モニタに表示してもよい。
また、本体装置2と左コントローラ3および右コントローラ4とは、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。
また、上述した説明では情報処理(ゲーム処理)を本体装置2でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、本体装置2がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理(ゲーム処理)は、少なくとも1つの情報処理装置により構成される情報処理システム1に含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、本体装置2のCPU81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、本体装置2が備える専用回路によって上記処理の一部または全部が行われてもよい。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じて本体装置2や右コントローラ4に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。