以下、本発明の実施の形態について、図面を参照しながら説明する。なお、図中、同一または相当部分については同一の参照符号を付してその説明を援用する。
図1は、本発明の実施の形態における描画システムの全体構成を示す図である。図1に示すように、この描画システムは、描画装置1、操作物150、及び、テレビジョンモニタ90、を含む。
描画装置1のハウジング19には、撮像ユニット13が組み込まれる。撮像ユニット13は、4つの赤外発光ダイオード15及び赤外フィルタ17を含む。赤外発光ダイオード15の発光部は、赤外フィルタ17から露出している。
描画装置1には、ACアダプタ92により、直流電源電圧が与えられる。ただし、ACアダプタ92に代えて、電池(図示せず)により、直流電源電圧を与えることもできる。
テレビジョンモニタ90には、その前面にスクリーン91が設けられる。テレビジョンモニタ90と描画装置1とは、AVケーブル93により接続される。なお、描画装置1は、例えば、図1に示すように、テレビジョンモニタ90の上面に載置される。
ユーザ94が、描画装置1の背面に設けられた電源スイッチ(図示せず)をオンにすると、スクリーン91に、描画面及びカーソルが表示される。ユーザ94は、操作物150を操作して、描画面上のカーソルを動かすと、カーソルの移動軌跡が視覚化される。
ここで、操作物150の操作とは、操作物自体を動かすこと(例えば、移動させること)を意味し、スイッチを押下したり、アナログスティックを動かしたり、等は含まない。
撮像ユニット13の赤外発光ダイオード15は、間欠的に赤外光を発光する。赤外発光ダイオード15からの赤外光は、この操作物150に取り付けられた反射シート(後述)により反射され、赤外フィルタ17の内部に設けられた撮像素子(後述)に入力される。このようにして、操作物150が間欠的に撮影される。従って、描画装置1は、ユーザ94により動かされた操作物150の間欠的な画像信号を取得できる。描画装置1は、この画像信号を解析して、描画を実行する。
本実施の形態で使用する反射シートは、例えば、再帰反射シートである。
図2は、図1の操作物150の斜視図である。図2に示すように、操作物150は、スティック152の先端に反射ボール151を固定して構成される。この反射ボール151により、赤外発光ダイオード15からの赤外光が反射される。反射ボール151の詳細を説明する。
図3(a)は、図2の反射ボール151の上面図、図3(b)は、図3(a)の矢印A方向からの反射ボール151の側面図、図3(c)は、図3(a)の矢印B方向からの反射ボール151の側面図、である。
図3(a)〜図3(c)に示すように、反射ボール151は、透明色(半透明、有色透明、及び、無色透明、を含む。)の球状外殻153の内部に球状内殻154を固定してなる。球状内殻154には、反射シート155が取り付けられる。この反射シート155が、赤外発光ダイオード15からの赤外光を反射する。
図4は、図2の反射ボール151の縦断面図である。図4に示すように、球状外殻153は、2つの半球状外殻をボス156及びビス(図示せず)により固定してなる。球状内殻154は、球状外殻153の内部に、2つの半球状内殻をボス157により固定してなる。また、反射ボール151には、スティック152が、挿入して固定される。具体的には、球状外殻153を構成する2つの半球状外殻と、球状内殻154を構成する2つの半球状内殻と、によりスティック152を挟み、2つの半球状外殻をボス156及びビスで固定するとともに、2つの半球状内殻をボス157で固定することで、スティック152を反射ボール151に取り付ける。
図5は、図1の撮像ユニット13の一例を示す図解図である。図5に示すように、この撮像ユニット13は、たとえばプラスチック成型によって形成されるユニットベース35を含み、このユニットベース35内には支持筒36が取り付けられる。支持筒36の上面には内面が逆円錐形状であるラッパ状の開口41が形成され、その開口41の下方の筒状部内部には、いずれもがたとえば透明プラスチックの成型によって形成された凹レンズ39および凸レンズ37を含む光学系が設けられ、凸レンズ37の下方において、撮像素子としてのイメージセンサ43が固着される。したがって、イメージセンサ43は、開口41からレンズ39および37を通して入射する光に応じた画像を生成できる。
イメージセンサ43は、低解像度のCMOSイメージセンサ(たとえば32ピクセル×32ピクセル:グレースケール)である。ただし、このイメージセンサ43は、画素数のもっと多いものでもよいし、CCD等の他の素子からなるものであってよい。以下では、イメージセンサ43が、32ピクセル×32ピクセルからなるものとして説明を行う。
また、ユニットベース35には、光出射方向がいずれも上方向とされた複数(実施の形態では4つ)の赤外発光ダイオード15が取り付けられる。この赤外発光ダイオード15によって、撮像ユニット13の上方に赤外光が照射される。また、ユニットベース35の上方には、赤外フィルタ(赤外光のみを透過するフィルタ)17が上記開口41を覆うように、取り付けられる。そして、赤外発光ダイオード15は後述のように、点灯/消灯(非点灯)が連続的に繰り返されるので、ストロボスコープとして機能する。ただし、「ストロボスコープ」とは、運動体を間欠的に照らす装置の総称である。したがって、上記イメージセンサ43は、その撮影範囲内で移動する物体、実施の形態では、操作物150を撮影することになる。なお、後述する図8に示すように、ストロボスコープは、主に、赤外発光ダイオード15、LED駆動回路75、及び、高速プロセッサ200、により構成される。
ここで、撮像ユニット13は、イメージセンサ43の受光面が、水平面から所定角度(例えば、90度)だけ傾くように、ハウジング19に組み込まれる。また、凹レンズ39および凸レンズ37により、イメージセンサ43の撮影範囲は、例えば、60度の範囲である。
図6は、図1の描画装置1の電気的な構成を示す図である。図6に示すように、描画装置1は、イメージセンサ43、赤外発光ダイオード15、映像信号出力端子47、音声信号出力端子49、高速プロセッサ200、ROM(read only memory)51、及び、バス53、を含む。
高速プロセッサ200には、バス53が接続される。さらに、バス53には、ROM51が接続される。従って、高速プロセッサ200は、バス53を介して、ROM51にアクセスすることができるので、ROM51に格納された描画プログラムをリードして実行でき、また、ROM51に格納された画像データ及び楽音データをリードして処理し、映像信号及び音声信号を生成して、映像信号出力端子47及び音声信号出力端子49に出力することができる。
操作物150は、赤外発光ダイオード15が発光する赤外光に照射され、その赤外光を反射シート155で反射する。この反射シート155からの反射光がイメージセンサ43によって検知され、したがって、イメージセンサ43からは反射シート155の画像信号が出力される。イメージセンサ43からのこのアナログ画像信号は高速プロセッサ200に内蔵されたA/Dコンバータ(後述)によってデジタルデータに変換される。そして、高速プロセッサ200は、このデジタルデータを解析して、その解析結果を描画処理に反映する。
図7は、図6の高速プロセッサ200のブロック図である。図7に示すように、この高速プロセッサ200は、中央演算処理装置(CPU:central processing unit)201、グラフィックプロセッサ202、サウンドプロセッサ203、DMA(direct memory access)コントローラ204、第1バス調停回路205、第2バス調停回路206、内部メモリ207、A/Dコンバータ(ADC:analog to digital converter)208、入出力制御回路209、タイマ回路210、DRAM(dynamic random access memory)リフレッシュ制御回路211、外部メモリインタフェース回路212、クロックドライバ213、PLL(phase−locked loop)回路214、低電圧検出回路215、第1バス218、及び、第2バス219、を含む。
CPU201は、メモリ(内部メモリ207、又は、ROM51)に格納されたプログラムに従い、各種演算やシステム全体の制御を行う。CPU201は、第1バス218及び第2バス219のバスマスタであり、それぞれのバスに接続された資源にアクセスが可能である。
グラフィックプロセッサ202は、第1バス218及び第2バス219のバスマスタであり、内部メモリ207、又は、ROM51に格納されたデータを基に、映像信号を生成して、映像信号出力端子47へ出力する。グラフィックプロセッサ202は、第1バス218を通じて、CPU201により制御される。また、グラフィックプロセッサ202は、CPU201に対して、割込み要求信号220を発生する機能を有する。
サウンドプロセッサ203は、第1バス218及び第2バス219のバスマスタであり、内部メモリ207、又は、ROM51に格納されたデータを基に、音声信号を生成して、音声信号出力端子49へ出力する。サウンドプロセッサ203は、第1バス218を通じて、CPU201により制御される。また、サウンドプロセッサ203は、CPU201に対して、割込み要求信号220を発生する機能を有する。
DMAコントローラ204は、ROM51から、内部メモリ207へのデータ転送を司る。また、DMAコントローラ204は、データ転送の完了を通知するために、CPU201に対する割込み要求信号220を発生する機能を有する。DMAコントローラ204は、第1バス218及び第2バス219のバスマスタである。DMAコントローラ204は、第1バス218を通じてCPU201により制御される。
内部メモリ207は、マスクROM、SRAM(static random access memory)、及び、DRAMのうち、必要なものを備える。バッテリによるSRAMのデータ保持が必要とされる場合、バッテリ217が必要となる。DRAMが搭載される場合、定期的にリフレッシュと呼ばれる記憶内容保持のための動作が必要とされる。
第1バス調停回路205は、第1バス218の各バスマスタからの第1バス使用要求信号を受け付け、調停を行い、各バスマスタへの第1バス使用許可信号を発行する。各バスマスタは、第1バス使用許可信号を受領することによって第1バス218に対するアクセスが許可される。ここで、第1バス使用要求信号及び第1バス使用許可信号は、図7では、第1バス調停信号222として示されている。
第2バス調停回路206は、第2バス219の各バスマスタからの第2バス使用要求信号を受け付け、調停を行い、各バスマスタへの第2バス使用許可信号を発行する。各バスマスタは、第2バス使用許可信号を受領することによって第2バス219に対するアクセスが許可される。ここで、第2バス使用要求信号及び第2バス使用許可信号は、図7では、第2バス調停信号223として示されている。
入出力制御回路209は、外部入出力装置や外部の半導体素子との通信等を入出力信号を介して行う。入出力信号は、第1バス218を介して、CPU201からリード/ライトされる。また、入出力制御回路209は、CPU201に対して、割込み要求信号220を発生する機能を有する。
この入出力制御回路209から、赤外発光ダイオード15を制御するLEDコントロール信号LEDCが出力される。
タイマ回路210は、設定された時間間隔に基づき、CPU201に対する割込み要求信号220を発生する機能を有する。時間間隔等の設定は、第1バス218を介してCPU201によって行われる。
ADC208は、アナログ入力信号をデジタル信号に変換する。このデジタル信号は、第1バス218を介してCPU201によってリードされる。また、ADC208は、CPU201に対して、割込み要求信号220を発生する機能を有する。
このADC208が、イメージセンサ43からのピクセルデータ(アナログ)を受けて、デジタルデータに変換する。
PLL回路214は、水晶振動子216より得られる正弦波信号を逓倍した高周波クロック信号を生成する。
クロックドライバ213は、PLL回路214より受け取った高周波クロック信号を、各ブロックへクロック信号225を供給するのに十分な信号強度へ増幅する。
低電圧検出回路215は、電源電圧Vccを監視し、電源電圧Vccが一定電圧以下のときに、PLL回路214のリセット信号226、その他のシステム全体のリセット信号227を発行する。また、内部メモリ207がSRAMで構成されており、かつ、SRAMのバッテリ217によるデータ保持が要求される場合、電源電圧Vccが一定電圧以下のときに、バッテリバックアップ制御信号224を発行する機能を有する。
外部メモリインタフェース回路212は、第2バス219を外部バス53に接続するための機能、及び、第2バス219のサイクル終了信号228を発行することにより、第2バスのバスサイクル長を制御する機能、を有する。
DRAMリフレッシュ制御回路211は、一定期間毎に第1バス218の使用権を無条件に獲得し、DRAMのリフレッシュ動作を行う。なお、DRAMリフレッシュ制御回路211は、内部メモリ207がDRAMを含む場合に設けられる。
ここで、図8〜図10を参照して、イメージセンサ43から高速プロセッサ200へピクセルデータを取り込むための構成を詳細に説明する。
図8は、図6のイメージセンサ43から高速プロセッサ200へピクセルデータを取り込む構成及びLED駆動回路を示す回路図である。図9は、図6のイメージセンサ43から高速プロセッサ200へピクセルデータを取り込む際の動作を示すタイミング図である。図10は、図9の一部を拡大して示すタイミング図である。
図8に示すように、イメージセンサ43は、ピクセルデータD(X,Y)をアナログ信号として出力するタイプのものであるため、このピクセルデータD(X,Y)は高速プロセッサ200のアナログ入力ポートに入力される。アナログ入力ポートは、この高速プロセッサ200においてADC208に接続され、したがって、高速プロセッサ200は、ADC208からデジタルデータに変換されたピクセルデータをその内部に取得する。
上述のアナログピクセルデータD(X,Y)の中点は、イメージセンサ43の基準電圧端子Vrefに与えられる基準電圧によって決定される。そのため、イメージセンサ43に関連して例えば抵抗分圧回路からなる基準電圧発生回路59が設けられ、この回路59から基準電圧端子Vrefに常に一定の大きさの基準電圧が与えられる。
イメージセンサ43を制御するための各デジタル信号は、高速プロセッサ200のI/Oポートに与えられ、またはそこから出力される。このI/Oポートは各々入力/出力の制御が可能なデジタルポートであり、この高速プロセッサ200で入出力制御回路209に接続されている。
詳しく言うと、高速プロセッサ200の出力ポートからはイメージセンサ43をリセットするためのリセット信号resetが出力され、イメージセンサ43に与えられる。また、イメージセンサ43からは、ピクセルデータストローブ信号PDSおよびフレームステータスフラグ信号FSFが出力され、それらの信号が高速プロセッサ200の入力ポートに与えられる。
ピクセルデータストローブ信号PDSは上述の各ピクセル信号D(X,Y)を読み込むための図9(b)に示すようなストローブ信号である。フレームステータスフラグ信号FSFはイメージセンサ43の状態を示すフラグ信号で、図9(a)に示すように、このイメージセンサ43の露光期間を規定する。つまり、フレームステータスフラグ信号FSFの図9(a)に示すローレベルが露光期間を示し、図9(a)に示すハイレベルが非露光期間を示す。
また、高速プロセッサ200は、イメージセンサ43の制御レジスタ(図示せず)に設定するコマンド(またはコマンド+データ)をレジスタデータとしてI/Oポートから出力するとともに、たとえばハイレベルおよびローレベルを繰り返すレジスタ設定クロックCLKを出力し、それらをイメージセンサ43に与える。
なお、赤外発光ダイオード15として、図8に示すように互いに並列接続された4つの赤外発光ダイオード15a,15b,15cおよび15dを用いる。この4つの赤外発光ダイオード15a〜15dは、上で説明したように、操作物150を照らすように、イメージセンサ43の視点方向と同一方向に赤外光を照射するようにかつイメージセンサ43を囲むように配置される。ただし、これら個別の赤外発光ダイオード15a〜15dは、特に区別する必要がある場合を除いて、単に赤外発光ダイオード15と呼ばれる。
この赤外発光ダイオード15はLED駆動回路75によって、点灯されまたは消灯(非点灯)される。LED駆動回路75は、イメージセンサ43から上述のフレームステータスフラグ信号FSFを受け、このフラグ信号FSFは、抵抗69およびコンデンサ71からなる微分回路67を通してPNPトランジスタ77のベースに与えられる。このPNPトランジスタ77にはさらにプルアップ抵抗79が接続されていて、このPNPトランジスタ77のベースは、通常は、ハイレベルにプルアップされている。そして、フレームステータス信号FSFがローレベルになると、そのローレベルが微分回路67を経てベースに入力されるため、PNPトランジスタ77は、フラグ信号FSFがローレベル期間にのみオンする。
PNPトランジスタ77のエミッタは抵抗73および65を介して接地される。そして、エミッタ抵抗73および65の接続点がNPNトランジスタ81のベースに接続される。このNPNトランジスタ81のコレクタが各赤外発光ダイオード15a〜15dのアノードに共通に接続される。NPNトランジスタ81のエミッタが別のNPNトランジスタ61のベースに直接接続される。NPNトランジスタ61のコレクタが各赤外発光ダイオード15a〜15dのカソードに共通接続され、エミッタが接地される。
このLED駆動回路75では、高速プロセッサ200のI/Oポートから出力されるLEDコントロール信号LEDCがアクティブ(ハイレベル)でありかつイメージセンサ43からのフレームステータスフラグ信号FSFがローレベルである期間にのみ赤外発光ダイオード15が点灯される。
図9(a)に示すようにフレームステータスフラグ信号FSFがローレベルになると、そのローレベル期間中(実際には微分回路67の時定数での遅れがあるが)、PNPトランジスタ77がオンする。したがって、図9(d)に示すLEDコントロール信号LEDCが高速プロセッサ200からハイレベルで出力されると、NPNトランジスタ81のベースがハイベルとなり、このトランジスタ81がオンとなる。トランジスタ81がオンするとトランジスタ61はオンとなる。したがって、電源(図8では小さい白丸で示す)から各赤外発光ダイオード15a〜15dおよびトランジスタ61を経て電流が流れ、応じて図9(e)に示すように各赤外発光ダイオード15a〜15dが点灯される。
LED駆動回路75では、このように、図9(d)のLEDコントロール信号LEDCがアクティブでありかつ図9(a)のフレームステータスフラグ信号FSFがローレベルである期間にのみ赤外発光ダイオード15が点灯されるので、イメージセンサ43の露光期間(図9(f)参照)にのみ赤外発光ダイオード15が点灯されることになる。
したがって、無駄な電力消費を抑制することができる。さらに、フレームステータスフラグ信号FSFはコンデンサ71によってカップリングされているので、万一イメージセンサ43の暴走等によりそのフラグ信号FSFがローレベルのまま停止した場合でも、一定時間後にはトランジスタ77は必ずオフされ、赤外発光ダイオード15も一定時間後には必ずオフされる。
このように、フレームステータス信号FSFの持続期間を変更することによって、イメージセンサ43の露光時間を任意にかつ自在に設定または変更することができる。
さらに、フレームステータス信号FSFおよびLEDコントロール信号LEDCの持続時間や周期を変更することによって、赤外発光ダイオード15すなわちストロボスコープの発光期間、非発光期間、発光/非発光周期などを任意にかつ自在に変更または設定できる。
先に説明したように、赤外発光ダイオード15からの赤外光によって操作物150が照射されると、操作物150からの反射光によってイメージセンサ43が露光される。応じて、イメージセンサ43から上述のピクセルデータD(X,Y)が出力される。詳しく説明すると、イメージセンサ43は、上述の図9(a)のフレームステータスフラグ信号FSFがハイレベルの期間(赤外発光ダイオード15の非点灯期間)に図9(b)に示すピクセルデータストローブPDSに同期して、図9(c)に示すようにアナログのピクセルデータD(X,Y)を出力する。
高速プロセッサ200では、そのフレームステータスフラグ信号FSFとピクセルデータストローブPDSとを監視しながら、ADC208を通じて、デジタルのピクセルデータを取得する。
ただし、ピクセルデータは、図10(c)に示すように、第0行,第1行,…第31行と行順次に出力される。ただし、後に説明するように、各行の先頭の1ピクセルはダミーデータとなる。
次に、描画装置1による描画について、具体例を挙げながら説明する。
図11は、図1の描画装置1による描画の例示図である。図11に示すように、スクリーン91には、描画面120、描画時カーソル107、色選択オブジェクト101〜103、サイズ選択オブジェクト104〜106、及び、クリアボタン113、が表示される。描画時カーソル107は、描画時において、操作物150のスクリーン91上の位置を示すものであり、操作物150の動きに連動する。ユーザ94が、操作物150を操作して、描画時カーソル107を移動させると、描画時カーソル107の移動軌跡上に、煌めく星の画像108が表示される。
描画時カーソル107は操作物150に連動するため、カーソル107の移動軌跡は、操作物150の実空間上の移動軌跡に近似したものとなる。従って、ユーザ94が操作物150により実空間上の仮想描画面に描いた線図とほぼ同形の線図上に星の画像108が表示される。
ここで、イメージセンサ43と操作物150との間の距離Lが、L<La、の場合にのみ、描画時カーソル107の移動軌跡上に星の画像108が表示される(ペンダウン状態)。ここで、定数Laは、任意の値とすることができ、例えば、経験的に定めることができる。一方、イメージセンサ43と操作物150との間の距離Lが、定数La以上の場合は、星の画像108は表示されない(ペンアップ状態)。従って、ユーザ94は、描画しないときは、操作物150を、イメージセンサ43から離す。なお、ペンアップ状態のときは、描画時カーソル107の表示態様を変えて、ユーザ94が、ペンアップ状態であることを認識できるようにする。
ここで、ペンアップ状態のときに表示されるカーソルを非描画時カーソル(図示せず)と呼ぶ。また、描画時カーソル107及び非描画時カーソルを区別して表記する必要がある場合を除き、双方を単にカーソル107と呼ぶ。また、カーソル107は、操作物150に連動するため、連動オブジェクトと呼ぶこともできる。
色選択オブジェクト101〜103は、星の画像108の色を変更するためのものである。ユーザ94が、カーソル107を、色選択オブジェクト101を含む所定範囲に移動させた場合、その後の星の画像108が例えば、青色になり、色選択オブジェクト102を含む所定範囲に移動させた場合、その後の星の画像108が例えば、赤色になり、色選択オブジェクト103を含む所定範囲に移動させた場合、その後の星の画像108が例えば、黄色になる。
サイズ選択オブジェクト104〜106は、星の画像108のサイズを変更するためのものである。ユーザ94が、カーソル107を、サイズ選択オブジェクト104を含む所定範囲に移動させた場合、その後の星の画像108が所定の小さい画像となり、サイズ選択オブジェクト105を含む所定範囲に移動させた場合、その後の星の画像108が所定の中程度の大きさの画像となり、サイズ選択オブジェクト106を含む所定範囲に移動させた場合、その後の星の画像108が所定の大きい画像となる。
ここで、カーソル107、色選択オブジェクト101〜103、及び、サイズ選択オブジェクト104〜106、は単数又は複数のスプライトにより構成されている。なお、カーソル107、色選択オブジェクト101〜103、及び、サイズ選択オブジェクト104〜106、を単にオブジェクト(オブジェクト画像)と呼ぶこともある。
クリアボタン113は、描かれた星の画像108を全て消去して、星の画像108がない当初の描画面120にするためのボタンである。ユーザ94が、カーソル107を、クリアボタン113を含む所定範囲に移動させた場合、描かれた星の画像108の全てが消去される。
なお、描画時カーソル107の移動軌跡上に、星の画像108が表示されるため、星の画像108により、絵や図形を描くことの他、文字を書いたり、数字を書いたり、記号を書いたり、すること等ができる。
図12は、スクリーン91に表示されるオブジェクトを構成するスプライトの説明図である。図12に示すように、図11の色選択オブジェクト101は、例えば、4個のスプライトSP0〜SP3により構成される。スプライトSP0〜SP3の各々は、例えば、8画素×8画素からなる。色選択オブジェクト101をスクリーン91上に配置するときは、例えば、左上の角のスプライトSP0の中心を、スクリーン91上のどの座標に配置するかが指定される。そして、指定された座標及びスプライトSP0〜SP3のサイズをもとに、各スプライトSP1〜SP3の中心を配置する座標が算出される。以上のように座標を指定することで、スクリーン91上の任意の位置にスプライトを配置できる。
次に、描画面120について説明する。まず、バックグラウンドスクリーンについて説明する。
図13は、図1のテレビジョンモニタ90のスクリーン91に表示されるバックグラウンドスクリーンの説明図である。図13に示すように、バックグラウンドスクリーン140は、例えば、32個×32個のブロック「0」〜ブロック「1023」により構成される。ブロック「0」〜ブロック「1023」の各々は、例えば、8画素×8画素からなる矩形要素である。ブロック「0」〜ブロック「1023」に対応して、配列PA[0]〜配列PA[1023]及び配列CA[0]〜配列CA[1023]が用意される。ここで、ブロック「0」〜ブロック「1023」を包括して表現するときは、「ブロックB」と表記し、配列PA[0]〜配列PA[1023]を包括して表現するときは、「配列PA」と表記し、配列CA[0]〜配列CA[1023]を包括して表現するときは、「配列CA」と表記する。
配列PAには、対応するブロックBの画素パターンを指定するデータ(画素パターンデータ)の格納位置情報が代入される。画素パターンデータは、ブロックBを構成する8画素×8画素の各画素の色情報からなる。また、配列CAには、対応するブロックBに使用するカラーパレットを指定する情報(カラーパレット情報)及びデプス値が代入される。カラーパレットは、所定数の色情報からなる。デプス値は、画素の奥行きを表す情報であり、同じ位置に、複数の画素が存在することとなる場合、最も大きなデプス値を持つ画素だけが表示されることになる。
ここで、テレビジョンモニタ90のスクリーン91のサイズは、224画素×256画素であるため、バックグラウンドスクリーン140のうち、224画素×256画素の範囲がスクリーン91に表示される。バックグラウンドスクリーン140のこの範囲が、描画面120となる。従って、配列PA及び配列CAに代入されたデータを基に、描画面120が表示される。
次に、描画装置1による描画処理の詳細を説明する。
図14は、図6のROM51に格納されたプログラム及びデータを示す概念図である。図14に示すように、ROM51には、描画プログラム300、画像データ301、及び、楽音データ304、が格納される。画像データ302は、オブジェクト画像データ302(カーソル107、色選択オブジェクト101〜103、及び、サイズ選択オブジェクト104〜106、等の画像データを含む。)及び背景画像データ303(描画面120等の画像データを含む。)を含む。なお、オブジェクト画像データ302および背景画像データ303は、画素パターンデータ等の画像生成に必要な情報からなる。楽音データ304は、楽譜データ305、及び、波形データ(音源データ)306、を含む。
高速プロセッサ200は、ROM51に格納された描画プログラム300を実行し、画像データ301及び楽音データ304を利用する。
高速プロセッサ200が実行する主な処理について説明する。
[ピクセルデータ群取得処理]CPU201は、イメージセンサ43が出力したアナログのピクセルデータを変換したデジタルのピクセルデータを取得して、配列P[X][Y]に代入する。なお、イメージセンサ43の水平方向(横方向、行方向)をX軸、垂直方向(縦方向、列方向)をY軸とする。
[差分データ算出処理]CPU201は、赤外発光ダイオード15の点灯時のピクセルデータP[X][Y]と、消灯時のピクセルデータP[X][Y]と、の差分を算出して、差分データを配列Dif[X][Y]に代入する。ここで、図面を用いて、差分を求める効果を説明する。ここで、ピクセルデータは輝度を表す。よって、差分データも輝度を表す。
図15(a)は、一般的なイメージセンサにより撮影された、特別な処理を施さない画像の例示図、図15(b)は、図15(a)の画像信号を或る閾値でレベル弁別したときの画像信号の例示図、図15(c)は、赤外フィルタ17を介したイメージセンサ43の点灯時の画像信号を或る閾値でレベル弁別したときの画像信号の例示図、図15(d)は、赤外フィルタ17を介したイメージセンサ43の消灯時の画像信号を或る閾値でレベル弁別したときの画像信号の例示図、図15(e)は、点灯時の画像信号と消灯時の画像信号との差分信号の例示図、である。
上記のように、操作物150に赤外光を照射し、赤外フィルタ17を介してイメージセンサ43に入射した反射赤外光による画像を撮影している。一般的な室内環境で一般的な光源を用いて操作物150をストロボスコープ撮影した場合には、一般的なイメージセンサ(図5のイメージセンサ43に相当する。)には、図15(a)に示すように、操作物150による画像以外に、蛍光灯光源、白熱灯光源、太陽光(窓)のような光源だけでなく、室内のすべてのものの画像がすべて写り込む。したがって、この図15(a)の画像を処理して操作物150の画像のみを抽出するのは、かなり高速のコンピュータまたはプロセサが必要である。しかしながら、安価が条件の装置ではそのような高性能コンピュータを使えない。そこで種々の処理を行って負担を軽減することが考えられる。
図15(a)の画像は、本来ならば、白黒の階調により表される画像であるが、その図示を省略している。また、図15(a)〜図15(e)では、操作物150の反射シート155が撮影されている。
図15(b)は、図15(a)の画像信号を或る閾値でレベル弁別したときの画像信号である。このようなレベル弁別処理は専用のハードウェア回路でも、ソフトウェア的にでも、実行することができるが、いずれの方法によっても、一定以下の光量のピクセルデータをカットするレベル弁別を実行すると、操作物150や光源以外の低輝度画像を除去することができる。この図15(b)の画像では操作物150および室内の光源以外の画像の処理を省略でき、したがって、コンピュータの負担を軽減できるが、それでも、光源画像を含む高輝度画像が依然として写り込んでいるので、操作物150と他の光源を分別することは難しい。
そこで、図5に示したように赤外フィルタ17を利用して、イメージセンサ43に赤外光による画像以外の画像が写らないようにした。それによって、図15(c)に示すように、赤外光を殆ど含まない蛍光灯光源の画像は除去できる。しかしながら、それでもなお太陽光や白熱灯が画像信号中に含まれてしまう。したがって、更なる負担軽減のために、赤外ストロボスコープの点灯時のピクセルデータと消灯時のピクセルデータとの差分を計算することとした。
そのため、図15(c)の点灯時の画像信号のピクセルデータと、図15(d)の消灯時の画像信号のピクセルデータとの差分を計算した。すると、図15(e)に示すように、その差分だけの画像が取得できる。この差分データによる画像は、図15(a)と対比すれば明らかなように、操作物150によって得られる画像のみを含むことになる。したがって、処理の軽減を図りながらも、操作物150の状態情報を取得できる。
ここで、状態情報とは、例えば、速さ情報、移動方向情報、移動距離情報、速度ベクトル情報、加速度情報、移動軌跡情報、面積情報、若しくは、位置情報、のいずれか、又は、それらの2以上の組み合わせ、等である。
以上のような理由で、CPU201は、赤外発光ダイオード15の点灯時のピクセルデータと、消灯時のピクセルデータと、の差分を算出して、差分データを得る。
[注目点抽出処理]CPU201は、差分データ算出処理で算出した差分データDif[X][Y]を基に、操作物150の注目点の座標を求める。この点を詳細に説明する。
図16は、図1の操作物150の注目点の座標算出の説明図である。なお、図16に示したイメージセンサ43は、32ピクセル×32ピクセルのものとする。
図16に示すように、CPU201は、X方向(水平方向、横方向、行方向)に32ピクセル分の差分データをスキャンし、そして、Y座標をインクリメントし、X方向に32ピクセル分の差分データをスキャンし、そして、Y座標をインクリメントし、というように、Y座標をインクリメントしながら、X方向に32ピクセル分の差分データをスキャンしていく。
この場合、CPU201は、各ピクセルの差分データと所定の閾値Thとを比較して、所定の閾値Thを超えるピクセルの数をカウントする。同時に、CPU201は、所定の閾値Thを超えるピクセルのうち、最大の差分データ(最大の輝度値)を持つピクセルを抽出する。
そして、CPU201は、その最大の差分データを持つピクセルの座標を基に、操作物150の注目点の座標を算出する。この点を詳しく説明する。
図17(a)は、最大差分データを持つピクセルの座標を基に、操作物150の注目点座標を算出する際のX方向スキャンの説明図、図17(b)は、最大差分データを持つピクセルの座標を基に、操作物150の注目点座標を算出する際のY方向スキャンのスタート時の説明図、図17(c)は、最大差分データを持つピクセルの座標を基に、操作物150の注目点座標を算出する際のY方向スキャンの説明図、図17(d)は、最大差分データを持つピクセルの座標を基に、操作物150の注目点座標を算出する際の結果の説明図、である。
図17(a)に示すように、CPU201は、最大差分データのピクセルの座標を中心に、X方向に、差分データのスキャンを実行して、所定の閾値Thより大きい差分データのピクセルを検出する。図17(a)の例では、X=11〜15までが、所定の閾値Thを超えたピクセルである。
次に、図17(b)に示すように、CPU201は、X=11〜15の中心を求める。すると、中心のX座標は、Xc=13である。
次に、図17(c)に示すように、図17(b)で求めたX座標(=13)を中心に、Y方向に、差分データのスキャンを実行して、所定の閾値Thより大きい差分データのピクセルを検出する。図17(c)の例では、Y=5〜10までが、所定の閾値Thを超えたピクセルである。
次に、図17(d)に示すように、CPU201は、Y=5〜10の中心を求める。すると、中心のY座標は、Yc=7である。
CPU201は、以上のようにして算出した注目点の座標Xc(=13)をPX[M]に代入し、座標Yc(=7)をPY[M]に代入する。そして、CPU201は、注目点(Xc,Yc)の移動平均(AX,AY)を算出する。さらに、CPU201は、イメージセンサ43上の注目点の平均座標(AX,AY)を、スクリーン91上の座標(xc,yc)に変換する。そして、CPU201は、座標xcを配列Ax[M]に代入し、座標ycを配列Ay[M]に代入する。CPU201は、以上のような注目点の平均座標(Ax[M],Ay[M])を求める処理を、フレームが更新されるたびに実行する。ここで、例えば、スクリーン91における座標原点は、スクリーン91の中心位置とする。
CPU201は、例えば、次式により、(n+1)フレーム分の移動平均を算出する。nは自然数(例えば、「3」)である。
AX=(PX[M]+PX[M−1]+…+PX[M−n])/(n+1) …(1)
AY=(PY[M]+PY[M−1]+…+PY[M−n])/(n+1) …(2)
式(1)及び式(2)において、「M」は自然数であり、スクリーン91に表示するフレームが更新されるたびに1つインクリメントされる。
[カーソル制御処理]CPU201は、操作物150の注目点の平均座標(Ax[M],Ay[M])を、次のフレームで表示するカーソル107の座標として登録する(内部メモリ207に格納する)。また、CPU201は、カーソル107の、画素パターンデータ格納位置情報、カラーパレット情報、及び、デプス値、等のカーソル107の画像生成に必要な情報を登録する(内部メモリ207に格納する)。
[色変更処理]CPU201は、カーソル107が、色選択オブジェクト101〜103が表示される領域のいずれかに進入した場合に、カーソル107が進入した色選択オブジェクトに対応付けられたカラーパレット情報を登録する(内部メモリ207に格納する。)。このカラーパレット情報は、星の画像108のカラーパレット情報である。なお、デフォルトとして、色選択オブジェクト101〜103のいずれかに対応付けられたカラーパレット情報が登録される。
[サイズ変更処理]CPU201は、カーソル107が、サイズ選択オブジェクト104〜106が表示される領域のいずれかに進入した場合に、カーソル107が進入したサイズ選択オブジェクトの識別番号を登録する(内部メモリ207に格納する。)。なお、デフォルトとして、サイズ選択オブジェクト104〜106のいずれかの識別番号が登録される。
図18は、サイズ選択オブジェクト104〜106の識別番号とアニメーションテーブル格納位置情報との関係図である。図18に示すように、サイズ選択オブジェクト104〜106の識別番号ID0〜ID2とアニメーションテーブル格納位置情報address0〜address2とが関連付けられている。なお、アニメーションテーブル格納位置情報は、アニメーションテーブルが格納されている領域の先頭アドレス情報である。
アニメーションテーブル格納位置情報address0(サイズ選択オブジェクト104に対応)が示すアニメーションテーブルは、小さい星の画像108をアニメーションするためのものであり、アニメーションテーブル格納位置情報address1(サイズ選択オブジェクト105に対応)が示すアニメーションテーブルは、中程度の大きさの星の画像108をアニメーションするためのものであり、アニメーションテーブル格納位置情報address2(サイズ選択オブジェクト106に対応)が示すアニメーションテーブルは、大きい星の画像108をアニメーションするためのものである。
図19は、図18のアニメーションテーブル格納位置情報により示される、星の画像108をアニメーションするためのアニメーションテーブルの例示図である。図19に示すように、アニメーションテーブルは、アニメーション画像データの格納位置情報、アニメーションを行う星の番号を時系列に配置したもの、持続フレーム数情報、後続情報、及び、ブロックBのサイズ情報、を関連付けたテーブルである。
アニメーション画像データは、複数の星の画像108を時系列に配置したデータである。なお、アニメーション画像データは、画素パターンデータである。持続フレーム数情報は、何フレーム連続して各星を表示するかを示す情報である。後続情報は、持続フレーム数情報に従って星の画像108を表示した後に、何番の星の画像108を表示するかを指示する情報である。例えば、後続情報「next」は、番号「1」の星の画像108を1フレーム(持続フレーム数)表示した後は、次の番号「2」の星の画像108を表示することを意味する。また、例えば、後続情報「top」は、番号「4」の星の画像108を1フレーム(持続フレーム数)表示した後は、先頭の番号「1」の星の画像108を表示することを意味する。
ブロックサイズ情報は、星の画像108が表示さるブロックB(図13参照)のサイズ情報である。アニメーション画像データの格納位置情報は、1番の星の画像108の画素パターンデータ格納位置情報であるため、ブロックサイズ情報を利用して、2番以降の星の画像108の画素パターンデータ格納位置情報が算出される。
[画面クリア処理]CPU201は、カーソル107がクリアボタン113が表示される領域に進入した場合、クリアフラグをオンにする。
[描画制御処理]CPU201は、操作物150の注目点の平均座標(Ax[M],Ay[M])、つまり、描画時カーソル107の表示座標をもとに、描画時カーソル107が位置するブロックB(図13参照)を検出する。そして、CPU201は、検出したブロックBの番号(図13参照)に関連付けて、サイズ変更処理で登録した識別番号を登録する。従って、描画時カーソル107が移動するたびに、識別番号が次々に登録されることになる。
また、CPU201は、描画時カーソル107の移動軌跡上に存在するブロックBごとに、対応する配列PAの画素パターンデータ格納位置情報を変更する。この場合、CPU201は、描画時カーソル107の移動軌跡上に存在するブロックBごとに登録された識別番号に関連付けられたアニメーションテーブル格納位置情報(図18参照)が示す位置に格納されたアニメーションテーブルを参照する。
上述のように、CPU201は、2番以降の星の画像108の画素パターンデータ格納位置情報を、1番の星の画像108の画素パターンデータ格納位置情報およびブロックサイズ情報をもとに算出する。
以上のように、アニメーションテーブルを参照して、フレームが更新される度に、配列PAのデータを変更することにより、煌めくような星の画像108が表示される。
加えて、CPU201は、今回の描画時カーソル107が位置するブロックBに対応する配列CAのカラーパレット情報を、色変更処理で登録したカラーパレット情報に変更する。なお、前回以前に描画時カーソル107が位置したブロックBに対応する配列CAのカラーパレット情報は維持される。
さらに、CPU201は、クリアフラグがオンになっていれば、配列PAには、描画面120を表す画素パターンデータ格納位置情報を代入し、配列CAには、描画面120を表すカラーパレット情報及びデプス値を代入する。これにより、星の画像108が全て消去される。
デフォルトとして、配列PAには、描画面120を表す画素パターンデータ格納位置情報が代入され、配列CAには、描画面120を表すカラーパレット情報及びデプス値が代入される。
[画像表示処理]CPU201は、画像生成に必要な情報を垂直ブランキング期間に、図7のグラフィックプロセッサ202に与える。すると、グラフィックプロセッサ202は、与えられた情報をもとに映像信号を生成して、映像信号出力端子47に出力する。これにより、テレビジョンモニタ90のスクリーン91に、描画面120及びカーソル107等の画像が表示される。より具体的には、次の通りである。
CPU201は、カーソル制御処理で登録した座標情報(操作物150の注目点の平均座標)をもとに、カーソル107を構成する各スプライトの表示座標を算出する。そして、CPU201は、カーソル107を構成する各スプライトの、表示座標情報、カラーパレット情報、デプス値、サイズ情報、及び、画素パターンデータ格納位置情報、をグラフィックプロセッサ202に与える。
また、CPU201は、配列PA[0]〜配列PA[1023]の先頭アドレスおよび配列CA[0]〜配列CA[1023]の先頭アドレスを、グラフィックプロセッサ202に与える。グラフィックプロセッサ408は、与えられた先頭アドレスをもとに、配列PA[0]〜配列PA[1023]の情報を読み出して、それをもとに、ブロック[0]〜ブロック[1023]の画素パターンデータ格納位置情報を読み出す。また、グラフィックプロセッサ202は、与えられた先頭アドレスをもとに、配列CA[0]〜配列CA[1023]の情報を読み出す。
また、CPU201は、色選択オブジェクト101〜103及びサイズ選択オブジェクト104〜106を構成する各スプライトの、表示座標情報、カラーパレット情報、デプス値、サイズ情報、及び、画素パターンデータ格納位置情報、をグラフィックプロセッサ202に与える。
グラフィックプロセッサ202は、CPU201から与えられた情報および読み出した情報をもとに、カーソル107、描画面120、星108、色選択オブジェクト101〜103、サイズ選択オブジェクト104〜106、及びクリアボタン113を表す映像信号を生成して、映像信号出力端子47に出力する。
[楽音再生]楽音の再生は、割込み処理により行われる。CPU201は、楽譜データポインタをインクリメントしながら、楽譜データ305を読み出して解釈する。なお、楽譜データポインタは、楽譜データ305の読み出し位置を示すポインタである。
そして、CPU201は、読み出した楽譜データ305に含まれるコマンドが、ノートオンであれば、その楽譜データ305に含まれるノートナンバが示す音の高さ(ピッチ)及び楽器指定情報が示す楽器(音色)に応じた波形データ(音源データ)306が格納されている先頭アドレスを、サウンドプロセッサ203に与える。さらに、CPU201は、読み出した楽譜データ305に含まれるコマンドが、ノートオンであれば、必要なエンベロープデータが格納されている先頭アドレスを、サウンドプロセッサ203に与える。さらに、CPU201は、読み出した楽譜データ305に含まれるコマンドが、ノートオンであれば、その楽譜データ305に含まれるノートナンバが示す音の高さ(ピッチ)に応じたピッチ制御情報、及び、その楽譜データ305に含まれるボリューム情報、をサウンドプロセッサ203に与える。
ここで、ピッチ制御情報について説明しておく。ピッチ制御情報は、波形データ306を読み出す周期を変えることによって行われるピッチ変換に用いられる。つまり、サウンドプロセッサ203は、ピッチ制御情報を一定期間毎に読み出して累算する。そして、サウンドプロセッサ203は、この累算結果を加工して、波形データ306のアドレスポインタとする。よって、ピッチ制御情報に大きな値が設定されれば、アドレスポインタのインクリメントは早く行われ、波形データ306の周波数が高くなり、ピッチ制御情報に小さな値が設定されれば、アドレスポインタのインクリメントは遅く行われ、波形データ306の周波数が低くなる。このようにして、サウンドプロセッサ203は、波形データ306のピッチ変換を行う。
さて、サウンドプロセッサ203は、与えられたピッチ制御情報に基づいて、アドレスポインタをインクリメントしながら、与えられた先頭アドレスが示す位置に格納されている波形データ306をROM51から読み出す。そして、サウンドプロセッサ203は、順次読み出される波形データ306に、エンベロープデータ及びボリューム情報を乗算して、音声信号を生成する。このようにして、楽譜データ305が指示する楽器の音色、音の高さ(ピッチ)、及び、音量、の音声信号が生成され、音声信号出力端子49に出力される。
一方、CPU201は、読み出した楽譜データ305に含まれるゲートタイムを管理している。従って、CPU201は、ゲートタイムが経過した時に、該当する楽音の発音を終了するように、サウンドプロセッサ203に指示を出す。これを受けて、サウンドプロセッサ203は、指示された楽音の発音を終了する。
以上のようにして、楽譜データ305に基づいて楽曲が再生され、テレビジョンモニタ90のスピーカ(図示せず)から発音される。
次に、図1の描画装置1の全体の処理の流れの1例を、フローチャートを用いて説明する。
図20は、図1の描画装置1の全体の処理の流れの1例を示すフローチャートである。図20に示すように、ステップS1にて、CPU201は、システムの初期設定を実行する。
ステップS2にて、CPU201は、操作物150の注目点の平均座標を算出する(状態情報算出処理)。ステップS3にて、CPU201は、操作物150の注目点の平均座標を、カーソル107の表示座標として登録する(カーソル制御処理)。
ステップS4にて、CPU201は、カーソル107の表示座標に基づいて、星の画像108の色を変更するためのカラーパレット情報を登録する(色変更処理)。ステップS5にて、CPU201は、カーソル107の表示座標に基づいて、星の画像108の大きさを変更するための識別番号を登録する(サイズ変更処理)。ステップS6にて、CPU201は、カーソル107がクリアボタン113が表示される領域に進入したときに、クリアフラグをオンにする(画面クリア処理)。
ステップS7にて(描画制御処理)、CPU201は、描画時カーソル107の移動軌跡上に存在するブロックBに対応する配列PAの画素パターンデータ格納位置情報を書き換える。また、CPU201は、今回の描画時カーソル107が位置するブロックBに対応する配列CAのカラーパレット情報を変更する。ただし、CPU201は、ステップS6でクリアフラグがオンになっていれば、全ての配列PA及び全ての配列CAを、描画面120のデータに書き換える。
ステップS8にて、CPU201は、「M」が所定値「K」より小さいかどうかを判断する。CPU201は、「M」が所定値「K」以上である場合、ステップS9に進み、「M」に「0」を代入して、ステップS10に進む。一方、CPU201は、「M」が所定値「K」より小さい場合、ステップS8からステップS10に進む。
ステップS10では、CPU201は、ビデオ同期の割込み待ちかどうかを判断する。CPU201は、テレビジョンモニタ90の表示画面を更新するための画像情報を、垂直ブランキング期間の開始後にグラフィックプロセッサ202に与える。従って、表示画面を更新するための演算処理が完了したら、ビデオ同期割込みがあるまで処理を進めないようにしている。ステップS10で「YES」であれば、即ち、ビデオ同期の割込み待ちであれば(ビデオ同期信号による割り込みがなければ)、同じステップS10に戻る。一方、ステップS10で「NO」であれば、即ち、ビデオ同期の割込み待ちでなければ(ビデオ同期信号による割り込みがあれば)、ステップS11に進む。
ステップS11にて、CPU201は、ステップS3及びステップS7の結果に基づいて、画面(図11参照)の生成に必要な画像情報を、グラフィックプロセッサ202に与える(画像表示処理)。そして、処理は、ステップS2に進む。
図21は、図20のステップS1の初期設定処理の流れの1例を示すフローチャートである。図21に示すように、ステップS20にて、CPU201は、イメージセンサ43の初期設定処理を実行する。ステップS21にて、CPU201は、各種フラグ及び各種カウンタを初期化する。ステップS22にて、CPU201は、タイマ回路210を発音のための割込み源としてセットする。なお、割込み処理により、サウンドプロセッサ203による処理が実行されて、テレビジョンモニタ90のスピーカから楽曲が出力される。
図22は、図21のステップS20のセンサ初期設定処理の流れの1例を示すフローチャートである。図22に示すように、最初のステップS30では、高速プロセッサ200は、設定データとして、コマンド“CONF”を設定する。ただし、このコマンド“CONF”は、イメージセンサ43に、高速プロセッサ200からコマンドを送信する設定モードに入ることを知らせるためのコマンドである。そして、次のステップS31にて、コマンド送信処理を実行する。
図23は、図22のステップS31のコマンド送信処理の流れの1例を示すフローチャートである。図23に示すように、最初のステップS40では、高速プロセッサ200は、設定データ(ステップS31の場合はコマンド“CONF”)をレジスタデータ(I/Oポート)に設定し、次のステップS41でレジスタ設定クロックCLK(I/Oポート)をローレベルに設定する。その後、ステップS42で規定時間待機した後、ステップS43で、レジスタ設定クロックCLKをハイレベルに設定する。そして、さらにステップS44での規定時間の待機の後、ステップS45でレジスタ設定クロックCLKを再びローレベルに設定する。
このようにして、図24に示すように、規定時間の待機を行いながら、レジスタ設定クロックCLKをローレベル,ハイレベルそしてローレベルとすることによって、コマンド(コマンドまたはコマンド+データ)の送信処理が行われる。
図22の説明に戻る。ステップS32では、ピクセルモードを設定するとともに、露光時間の設定を行う。この実施の形態の場合、イメージセンサ43は先に述べたようにたとえば32ピクセル×32ピクセルのCMOSイメージセンサであるため、設定アドレス“0”のピクセルモードレジスタに32ピクセル×32ピクセルであることを示す“0h”を設定する。次のステップS33において、高速プロセッサ200は、レジスタ設定処理を実行する。
図25は、図22のステップS33のレジスタ設定処理の流れの1例を示すフローチャートである。図25に示すように、最初のステップS50では、高速プロセッサ200は、設定データとして、コマンド“MOV”+アドレスを設定し、次のステップS51で、図23で先に説明したコマンド送信処理を実行して、それを送信する。次にステップS52において、高速プロセッサ200は、設定データとして、コマンド“LD”+データを設定し、次のステップS53でコマンド送信処理を実行して、それを送信する。そして、ステップS54で、高速プロセッサ200は、設定データとして、コマンド“SET”を設定し、次のステップS55でそれを送信する。なお、コマンド“MOV”は制御レジスタのアドレスを送信することを示すコマンドで、コマンド“LD”はデータを送信することを示すコマンドで、コマンド“SET”はデータをそのアドレスに実際に設定させるためのコマンドである。なお、この処理は、設定する制御レジスタが複数ある場合には、繰り返し実行される。
図22の説明に戻る。ステップS34では、設定アドレスを“1”(露光時間設定レジスタのローニブルのアドレスを示す)とし、最大露光時間を示す“FFh”のローニブルデータ“Fh”を設定すべきデータとして設定する。そして、ステップS35で図25のレジスタ設定処理を実行する。同様にして、ステップS36において、設定アドレスを“2”(露光時間設定レジスタのハイニブルのアドレスを示す)とし、最大露光時間を示す“FFh”のハイニブルデータ“Fh”を設定すべきデータとして設定し、ステップS37でレジスタ設定処理を実行する。
その後、ステップS38で設定終了を示しかつイメージセンサ43にデータの出力を開始させるためのコマンド“RUN”を設定し、ステップS39で送信する。このようにして、図21に示すステップS20でのセンサ初期設定処理が実行される。ただし、図22〜図25に示す具体例は、使用されるイメージセンサ43の仕様に応じて、適宜変更され得るものである。
図26は、図20のステップS2の状態情報算出処理の流れの1例を示すフローチャートである。図26に示すように、ステップS60にて、CPU201は、ADC208からデジタルのピクセルデータを取得する。このデジタルのピクセルデータは、イメージセンサ43からのアナログのピクセルデータが、ADC208により、デジタルに変換されたものである。
ステップS61にて、注目点抽出処理が実行される。具体的には、CPU201が、赤外発光ダイオード15の発光時のピクセルデータと消灯時のピクセルデータとの差分を算出して、差分データを得る。そして、CPU201が、その差分データと所定の閾値Thと比較して、所定の閾値Thを超える差分データを持つピクセルの数をカウントする。同時に、CPU201は、所定の閾値Thを超える差分データの最大値を求める。そして、CPU201は、その最大値の差分データを持つピクセルの座標を算出する。さらに、CPU201は、以上のようにして算出した座標の移動平均を求め、これをテレビジョンモニタ90のスクリーン91上の座標に変換し、操作物150の注目点の座標(Ax[M],Ay[M])、つまり、カーソル107の表示座標とする。
図27は、図26のステップS60のピクセルデータ群取得処理の流れの1例を示すフローチャートである。図27に示すように、最初のステップS70で、CPU201は、ピクセルデータ配列の要素番号としてXに「−1」、Yに「0」を設定する。本実施の形態におけるピクセルデータ配列は、X=0〜31、Y=0〜31の2次元配列であるが、前述のように各行の先頭ピクセルのデータとしてダミーデータが出力されるので、Xの初期値として「−1」が設定される。続くステップS71では、ピクセルデータの取得処理を実行する。
図28は、図27のステップS71のピクセルデータ取得処理の流れの1例を示すフローチャートである。図28に示すように、最初のステップS80で、CPU201は、イメージセンサ43からのフレームステータスフラグ信号FSFをチェックし、ステップS81でそのアップエッジ(ローレベルからハイレベルへの)が発生したかどうか判断する。そして、ステップS81でフラグ信号FSFのアップエッジを検出すると、次のステップS82において、CPU201は、ADC208に入力されてきたアナログのピクセルデータのデジタルデータへの変換の開始を指示する。その後、ステップS83でイメージセンサ43からのピクセルストローブPDSをチェックし、ステップS84でそのストローブ信号PDSのローレベルからハイレベルへのアップエッジが発生したかどうか判断する。
ステップS84で“YES”が判断されると、CPU201は、ステップS85において、X=−1かどうか、すなわち先頭ピクセルかどうか判断する。先に述べたように、各行の先頭ピクセルはダミーピクセルとして設定されているので、このステップS85で“YES”が判断されると、次のステップS87でそのときのピクセルデータを取得しないで、要素番号Xをインクリメントする。
ステップS85で“NO”が判断されると、行の第2番目以降のピクセルデータであるので、ステップS86およびS88において、そのときのピクセルデータを取得し、テンポラリレジスタ(図示せず)にそのピクセルデータを格納する。その後、図27のステップS72に進む。
図27のステップS72では、テンポラリレジスタに格納されたピクセルデータをピクセルデータ配列P[Y][X]に代入する。
続くステップS73でXをインクリメントする。Xが32に満たない場合、前述のS71からS73の処理を繰り返し実行する。Xが32の場合、すなわちピクセルデータの取得が行の終端に到達した場合には、続くステップS75でXに「−1」を設定し、ステップS76でYをインクリメントし、次の行の先頭からピクセルデータの取得処理を繰り返す。
ステップS77でYが32の場合、すなわちピクセルデータの取得がピクセルデータ配列P[Y][X]の終端に到達した場合、図26のステップS61に進む。
図29は、図26のステップS61の注目点抽出処理の流れの1例を示すフローチャートである。図29に示すように、ステップS90にて、CPU201は、イメージセンサ43からの、赤外発光ダイオード15の点灯時のピクセルデータと、赤外発光ダイオード15の消灯時のピクセルデータと、の差分を算出して、差分データを得る。ステップS91にて、CPU201は、配列Dif[X][Y]に、算出した差分データを代入する。ここで、実施の形態では、32ピクセル×32ピクセルのイメージセンサ43を用いているため、X=0〜31、Y=0〜31、である。
ステップS92にて、CPU201は、配列Dif[X][Y]の全要素をスキャンして、配列Dif[X][Y]の要素のうち、所定の閾値Thを超える要素の数をカウントする。そして、CPU201は、カウント値が所定値k以下であれば、ペンアップフラグをオンにする。一方、カウント値が所定値kを超えていればペンアップフラグをオフにする。このカウント値は、操作物150のスクリーン91上の面積に相当する。そして、この面積は、操作物150がイメージセンサ43に近づくほど大きくなり、イメージセンサ43から離れるほど小さくなる。このため、カウント値が大きいほど、操作物150がイメージセンサ43に近いことを意味し、カウント値が小さいほど、操作物150がイメージセンサ43から離れていることを意味する。よって、カウント値が所定値k以下である場合は、操作物150がイメージセンサ43から一定距離以上離れたことを意味し、その場合に、ペンアップフラグがオンにされる。なお、所定値kは、例えば、経験的に定めることができる。
また、CPU201は、配列Dif[X][Y]の全要素をスキャンしながら、所定の閾値Thを超える要素の中から、最大値を検出する。
さて、CPU201は、配列Dif[X][Y]の全要素が、所定の閾値Th以下であれば、図20のステップS8に進み、そうでなければ、ステップS94に進む(ステップS93)。
ステップS94にて、CPU201は、最大値を持つピクセルの座標を基に、操作物150の注目点の座標(Xc,Yc)を算出する。ステップS95にて、CPU201は、回数Mの値を1つインクリメントする(M=M+1)。
ステップS96にて、CPU201は、座標Xc及びYcをそれぞれ、配列PX[M]及びPY[M]に代入する。ステップS97にて、CPU201は、操作物150の注目点(Xc,Yc)の移動平均(AX[M],AY[M])を算出する。ステップS98にて、CPU201は、イメージセンサ43上の注目点の平均座標(AX[M],AY[M])を、テレビジョンモニタ90のスクリーン91上の座標(xc,yc)に変換する。
図30は、図29のステップS94の注目点座標算出処理の流れの1例を示すフローチャートである。図30に示すように、ステップS100にて、CPU201は、「m」及び「n」にそれぞれ、ステップS92で求めた最大値のX座標及びY座標を代入する。ステップS101にて、CPU201は、「m」を1つインクリメントする(m=m+1)。CPU201は、差分データDif[m][n]が、所定の閾値Thより大きい場合は、ステップS103に進み、そうでない場合は、ステップS104に進む(ステップS102)。ステップS103にて、CPU201は、「mr」にそのときの「m」を代入する。このように、ステップS101〜S103を繰り返しながら、最大値からX軸の正方向にスキャンを実行して、値が所定の閾値Thを超える一番端の差分データのX座標を求める。
ステップS104にて、CPU201は、「m」に、ステップS92で求めた最大値のX座標を代入する。ステップS105にて、CPU201は、「m」を1つデクリメントする。CPU201は、差分データDif[m][n]が、所定の閾値Thより大きい場合は、ステップS107に進み、そうでない場合は、ステップS108に進む(ステップS106)。ステップS107にて、CPU201は、「ml」にそのときの「m」を代入する。このように、ステップS105〜S107を繰り返しながら、最大値からX軸の負方向にスキャンを実行して、値が所定の閾値Thを超える一番端の差分データのX座標を求める。
ステップS108にて、CPU201は、X座標mrとX座標mlとの中心座標を算出して、それを、注目点のX座標(Xc)とする。ステップS109にて、CPU201は、「m」及び「n」にそれぞれ、ステップS108で求めた「Xc」およびステップS92で求めた最大値のY座標を代入する。ステップS110にて、CPU201は、「n」を1つインクリメントする(n=n+1)。CPU201は、差分データDif[m][n]が、所定の閾値Thより大きい場合は、ステップS112に進み、そうでない場合は、ステップS113に進む(ステップS111)。ステップS112にて、CPU201は、「nd」にそのときの「n」を代入する。このように、ステップS110〜S112を繰り返しながら、最大値からY軸の正方向にスキャンを実行して、値が所定の閾値Thを超える一番端の差分データのY座標を求める。
ステップS113にて、CPU201は、「n」に、ステップS92で求めた最大値のY座標を代入する。ステップS114にて、CPU201は、「n」を1つデクリメントする。CPU201は、差分データDif[m][n]が、所定の閾値Thより大きい場合は、ステップS116に進み、そうでない場合は、ステップS117に進む(ステップS115)。ステップS116にて、CPU201は、「nu」にそのときの「n」を代入する。このように、ステップS114〜S116を繰り返しながら、最大値からY軸の負方向にスキャンを実行して、値が所定の閾値Thを超える一番端の差分データのY座標を求める。
ステップS117にて、CPU201は、Y座標ndとY座標nuとの中心座標を算出して、それを、注目点のY座標(Yc)とする。以上のようにして、操作物150の注目点の座標(Xc,Yc)が算出される。
図31は、図20のステップS4の色変更処理の流れの1例を示すフローチャートである。図31に示すように、ステップS120にて、CPU201は、カーソル107(操作物150の注目点)の位置をチェックする。カーソル107が、色選択オブジェクト101〜103のいずれかの領域に存在する場合は、ステップS122に進み、そうでない場合は、図20のステップS5に進む(ステップS121)。
ステップS122にて、CPU201は、カーソル107が存在する色選択オブジェクトに対応付けられたカラーパレット情報を登録する。
図32は、図20のステップS5のサイズ変更処理の流れの1例を示すフローチャートである。図32に示すように、ステップS130にて、CPU201は、カーソル107(操作物150の注目点)の位置をチェックする。カーソル107が、サイズ選択オブジェクト104〜106のいずれかの領域に存在する場合は、ステップS132に進み、そうでない場合は、図20のステップS6に進む(ステップS131)。
ステップS132にて、CPU201は、カーソル107が存在するサイズ選択オブジェクトの識別番号を登録する。
図33は、図20のステップS7の描画制御処理の流れの1例を示すフローチャートである。図33に示すように、ステップS140にて、CPU201は、クリアフラグをチェックして、オンであれば、ステップS147に進み、オフであれば、ステップS141に進む。ステップS147にて、CPU201は、全てのブロックBに対応する配列PA及びCAの値を、星の画像108が表示されていない当初の描画面120のものに変更する。ステップS148にて、CPU201は、クリアフラグをオフにする。
一方、ステップS141にて、CPU201は、ペンアップフラグをチェックして、オフであれば、ステップS142へ進む。ステップS142にて、CPU201は、描画時カーソル107(操作物150の注目点)が位置するブロックB(図13参照)を検出する。
ステップS143にて、CPU201は、今回検出したブロックBに関連付けて識別番号(図32のステップS132参照)を登録する。
ステップS144にて、CPU201は、登録されている識別番号に関連付けられたアニメーションテーブル格納位置情報(図18参照)が示すアニメーションテーブル(図19参照)を参照して、該当するブロックBに対応する配列PAの値を変更する。
そして、CPU201は、カーソル107の移動軌跡上の全てのブロックBに対応する配列PAの値を変更した場合は、ステップS146に進み、そうでない場合は、ステップS144に進む(ステップS145)。
ステップS146にて、CPU201は、ステップS142で今回検出したブロックBに対応する配列CAのカラーパレット情報を、色変更処理で登録したカラーパレット情報に変更する。
さて、上記では、イメージセンサ43と操作物150との間の距離Lが、L<La、の場合にペンダウン状態とし、L≧La、の場合にペンアップ状態とした。つまり、操作物の面積に相当するカウント値(図29のステップS92参照)が、所定値kを超えている場合は、ペンダウン状態とし、所定値k以下の場合は、ペンアップ状態とした。ただし、これは一例であり、例えば、次のようにして、ペンアップとペンダウンを判断することもできる。
イメージセンサ43と操作物150との間の距離Lが、L≧Ll、の場合にペンアップ状態とする。一旦ペンアップ状態になったら、距離Lが、L<Ls、にならないとペンダウン状態にならない。ここで、Ls<Ll、である。そして、一旦ペンダウン状態になったら、距離Lが、L<Llまで、ペンダウン状態が維持される。これらのことを言い換えると次の通りである。
操作物150の面積に相当するカウント値(図29のステップS92参照)が、所定値ks以下の場合に、ペンアップ状態とする。一旦ペンアップ状態になったら、カウント値が、所定値klを超えないと、ペンダウン状態にならない。ここで、ks<kl、である。そして、一旦ペンダウン状態になったら、カウント値が、所定値ks以上になるまで、ペンダウン状態が維持される。
次に、本実施の形態の変形例を説明する。図1の全体構成図、図2〜図4の操作物150、図5の撮像ユニット13、図6〜図10の電気的構成、図12のスプライト、図13のバックグラウンドスクリーン140、図14のプログラム及びデータ、並びに、図15〜図17の注目点抽出、については、実施の形態とその変形例とで共通している。また、図20〜図32の処理についても、実施の形態とその変形例とで共通している。以下では、上記の実施の形態との相違点を中心に説明する。
図34は、本実施の形態の変形例によるによる描画の例示図である。図34に示すように、この変形例においては、ユーザ94が、操作物150を操作して、描画時カーソル107を移動させると、描画時カーソル107の移動軌跡上に線109が表示される。
描画時カーソル107は操作物150に連動するため、描画時カーソル107の移動軌跡は、操作物150の実空間上の移動軌跡に近似したものとなる。従って、ユーザ94が操作物150により実空間上の仮想描画面に描いた線図とほぼ同形の線図を描画面120に描くことができる。なお、ペンアップ及びペンダウンについては、実施の形態と同様である。
サイズ選択オブジェクト114〜116は、線109の幅を変更するためのものである。ユーザ94が、カーソル107を、サイズ選択オブジェクト114を含む所定範囲に移動させた場合、線109が所定の小さい幅となり、サイズ選択オブジェクト115を含む所定範囲に移動させた場合、線109の幅が所定の中程度の幅となり、サイズ選択オブジェクト116を含む所定範囲に移動させた場合、線109の幅が所定の大きい幅となる。
さて、変形例においても、CPU201は、カーソル107が、サイズ選択オブジェクト114〜116が表示される領域のいずれかに進入した場合に、カーソル107が進入したサイズ選択オブジェクトの識別番号を登録する(内部メモリ207に格納する。)。なお、デフォルトとして、サイズ選択オブジェクト104〜106のいずれかの識別番号が登録される。
図35は、変形例における図20のステップS7の描画制御処理の流れの1例を示すフローチャートである。図35に示すように、ステップS160にて、CPU201は、クリアフラグをチェックして、オンであれば、ステップS165に進み、オフであれば、ステップS161に進む。ステップS165にて、CPU201は、全てのブロックBに対応する配列PA及びCAの値を、線109が表示されていない当初の描画面120のものに変更する。ステップS166にて、CPU201は、クリアフラグをオフにする。
一方、ステップS161にて、CPU201は、ペンアップフラグをチェックして、オフであれば、ステップS162へ進む。ステップS162にて、CPU201は、描画時カーソル107(操作物150の注目点)の今回の位置(Ax[M],Ay[M])と、前回の位置(Ax[M−1],Ay[M−1])と、の間で補間計算を行う。
ステップS163にて、CPU201は、ステップS162での補間計算の結果およびサイズ変更処理で登録した識別番号をもとに、該当するブロックBの画素パターンデータを変更する。つまり、CPU201は、カーソル107の今回の位置(Ax[M],Ay[M])と、前回の位置(Ax[M−1],Ay[M−1])と、を結ぶ線109が描画されるように、該当するブロックBの画素パターンデータを変更する。この場合、CPU201は、サイズ変更処理で登録した識別番号に応じた線幅の線109が描画されるように、該当するブロックBの画素パターンデータを変更する。
ステップS164にて、CPU201は、全てのブロックBに対応する配列CAのカラーパレット情報を、色変更処理で登録したカラーパレット情報に変更する。これにより、以前に描画された線109の色も変更される。
さて、以上のように本実施の形態およびその変形例では、操作物150に間欠的に赤外光を照射して、これを撮影することにより、操作物150の状態情報を求めることができる。このため、操作物150の状態情報を求めるために、操作物150に電源により駆動する回路を内蔵する必要がない。このように簡素な構成の操作物150を空中で操作することにより、カーソル107(連動オブジェクト)を操作して、カーソル107の移動軌跡に応じた画像をテレビジョンモニタ90に表示できる(図11及び図34参照)。つまり、カーソル107は操作物150の動きに連動するので、間接的には、操作物150の移動軌跡に応じた画像をテレビジョンモニタ90に表示できる。また、操作物150に電源により駆動する回路を内蔵する必要がないため、操作物150の操作性及び信頼性の向上を図ることができ、かつ、コストの低減を図ることができる。
また、本実施の形態によれば、カーソル107の移動軌跡が、複数の星の画像108により表現される。加えて、星の画像108はアニメーションされる(図11参照)。このように、カーソル107の移動軌跡を装飾的に表現できる。
また、本実施の形態の変形例によれば、カーソル107の移動軌跡が、線により表現される。このように、ユーザ94は、空中で操作物150を操作するだけで、任意の線を引くことができる。
また、本実施の形態およびその変形例では、操作物150の面積情報が、所定値kを上回ったとき、つまり、操作物150からイメージセンサ43までの距離が一定値Laを下回ったときに、描画処理が実行される(ペンダウン状態)。一方、操作物150の面積情報が、所定値k以下になったとき、つまり、操作物150からイメージセンサ43までの距離が一定値La以上になったときは、描画処理は実行されない(ペンアップ状態)。このように、ユーザ94は、操作物150を、イメージセンサ43に近づけたり、あるいは、遠ざけたりするだけで、描画/非描画をコントロールできる。つまり、ユーザ94は、通常のペンで描画を行うが如く直感的な操作により、描画/非描画をコントロールできる。
また、本実施の形態およびその変形例では、次のようにして、ペンアップおよびペンダウンをコントロールできる。つまり、操作物150の面積情報が、所定値ks以下になって、ペンアップ状態に一旦なった場合は、所定値ksではなく、所定値ksより大きい所定値klを超えるまで描画処理が実行されない(ペンダウン状態にならない)。つまり、所定値ksで一旦ペンアップ状態になった後は、所定値ksに相当する境界Llよりもイメージセンサ43に近い所定値klに相当する境界Lsまで、操作物150をイメージセンサ43に近づけないとペンダウン状態にならない。このように、ペンアップ状態とペンダウン状態とが一つの境界で仕切られていないので、境界付近での誤動作を極力防止できる。つまり、ペンアップ状態とペンダウン状態とが一つの境界で仕切られている場合において、ユーザ94がその境界付近で操作物150を操作すると、描画と非描画とが交互にちらちら繰り返されることが発生しうる。
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能であり、例えば、以下のような変形も可能である。
(1)上記では、操作物150を一本とした。しかし、複数の操作物を用意して、複数人での描画を可能とすることもできる。
(2)上記では、操作物として、スティック152および反射ボール151からなる操作物150を採用したが、反射体を具備するのもであれば、操作物の形態はこれに限定されない。
(3)実施の形態では、図17(a)〜図17(d)に示すようにして、操作物150の注目点の座標を算出したが、所定の閾値Thを超える最大輝度値を持つピクセルの座標を、スクリーン91上の座標に変換して、これを注目点の座標とすることもできる。
(4)上記では、カーソル107の移動軌跡上に、星108や線109を表示したが、これらの画像に限定されるものではなく、任意の画像を移動軌跡上に表示できる。
(5)上記では、星108や線109の色やサイズを変更可能としたが、カーソル107の移動軌跡上に表示する画像を変更可能とすることもできる。
(6)上記では、クリアボタン113により、描画された全ての星108および線109を消去したが、消去用のカーソルを用意して、描画された一部の星108および線109を消去するようにすることもできる。
(7)上記では、CPU201は、操作物150の注目点の座標(つまり位置情報)や面積を算出した。これらは、操作物150の状態情報の一例であり、CPU201は、イメージセンサ43からの画像信号を基に、他の状態情報を算出することもでき、算出した状態情報を基に様々な処理を行うことができる。
(8)図6の高速プロセッサ200として、任意の種類のプロセッサを使用できるが、本件出願人が既に特許出願している高速プロセッサを用いることが好ましい。この高速プロセッサは、例えば、特開平10−307790号公報およびこれに対応するアメリカ特許第6,070,205号に詳細に開示されている。
1…描画装置、13…撮像ユニット、15…赤外発光ダイオード、17…赤外フィルタ、19…ハウジング、35…ユニットベース、36…支持筒、37…凸レンズ、39…凹レンズ、41…開口部、43…イメージセンサ、47…映像信号出力端子、49…音声信号出力端子、51…ROM、53…バス、59…基準電圧発生回路、61,81…NPNトランジスタ、67…微分回路、71…コンデンサ、75…LED駆動回路、77…PNPトランジスタ、65,69,73,79…抵抗素子、90…テレビジョンモニタ、91…スクリーン、92…ACアダプタ、93…AVケーブル、94…ユーザ、101〜103…色選択オブジェクト、104〜106,114〜116…サイズ選択オブジェクト、107…カーソル(連動オブジェクト)、108…星の画像、109…線、113…クリアボタン、120…描画面、140…バックグラウンドスクリーン、150…操作物、151…反射ボール、152…スティック、153…球状外殻、154…球状内殻、155…反射シート、156,157…ボス、200…高速プロセッサ、201…CPU、202…グラフィックプロセッサ、203…サウンドプロセッサ、204…DMAコントローラ、205…第1バス調停回路、206…第2バス調停回路、207…内部メモリ、208…ADC(A/Dコンバータ)、209…入出力制御回路、210…タイマ回路、211…DRAMリフレッシュ制御回路、212…外部メモリインタフェース回路、213…クロックドライバ、214…PLL回路、215…低電圧検出回路、216…水晶振動子、217…バッテリ、218…第1バス、219…第2バス、300…描画プログラム、301…画像データ、302…オブジェクト画像データ、303…背景画像データ、304…楽音データ、305…楽譜データ、306…波形データ。