(57)【特許請求の範囲】
【請求項１】
３次元ポリゴンモデルに対してテクスチャをマッピングするための画像処理プログラムであって、コンピュータに、
多数のポリゴンモデルの層からなる多層のシェルポリゴンを構成するための多層ポリゴンデータを記憶手段から読み出すシェルポリゴン読み出しステップ、
前記多層のシェルポリゴンに共通に利用される、透明度の異なる複数の領域を含むシェルテクスチャ画像を記憶手段から読み出すテクスチャ読み出しステップ、
前記シェルテクスチャ画像の各点における歪み量を示す歪みマップを読み込むステップ、および、
前記歪みマップが示す歪み量からシェルポリゴンの各層における歪み量をそれぞれ算出し、前記シェルテクスチャ画像における本来参照すべき点からずれた点の値を参照することによって、前記シェルテクスチャ画像を、シェルポリゴンの各層の位置に応じて異なる度合いで歪ませて各層のシェルポリゴンにそれぞれテクスチャマッピングして各層を配置するテクスチャマッピングステップを実行させるための画像処理プログラム。
【請求項２】
前記テクスチャマッピングステップでは、より外側の層のシェルポリゴンほど、前記シェルテクスチャ画像をより大きく歪ませる、請求項１に記載の画像処理プログラム。
【請求項３】
前記歪みマップは、前記シェルテクスチャ画像の横方向の歪み量を示す横歪みマップと、前記シェルテクスチャ画像の縦方向の歪み量を示す縦歪みマップとにより構成される、請求項１に記載の画像処理プログラム。
【請求項４】
前記画像処理プログラムは、前記多層のシェルポリゴンを配置する際のベースとなるベースポリゴンを構成するためのベースポリゴンデータを記憶手段から読み出すステップと、読み出したベースポリゴンデータに基づいてベースポリゴンを配置するステップとを前記コンピュータにさらに実行させ、
前記テクスチャマッピングステップでは、ベースポリゴンとシェルポリゴンとの間の距離に基づいて、前記歪みマップが示す歪み量からシェルポリゴンの各層における歪み量をそれぞれ算出し、前記ベースポリゴンの外側に前記多層のシェルポリゴンを配置する、請求項１に記載の画像処理プログラム。
【請求項５】
前記テクスチャマッピングステップでは、シェルポリゴンが、内側から数えて何番目に位置するかに基づいて、前記歪みマップが示す歪み量からシェルポリゴンの各層における歪み量をそれぞれ算出する、請求項１に記載の画像処理プログラム。
【請求項６】
前記テクスチャマッピングステップでは、シェルポリゴンの各層における歪み量をさらに単位時間毎に変化させる、請求項１に記載の画像処理プログラム。
【請求項７】
前記画像処理プログラムは、前記多層のシェルポリゴンを配置する際のベースとなるベースポリゴンを構成するためのベースポリゴンデータを記憶手段から読み出すステップと、読み出したベースポリゴンデータに基づいてベースポリゴンを配置するステップとを前記コンピュータにさらに実行させ、
前記テクスチャマッピングステップでは、前記ベースポリゴンの外側に前記多層のシェルポリゴンを配置する、請求項１に記載の画像処理プログラム。
【請求項８】
前記ベースポリゴン用のベーステクスチャ画像を前記ベースポリゴンにテクスチャマッピングするステップを前記コンピュータにさらに実行させる、請求項７に記載の画像処理プログラム。
【請求項９】
前記テクスチャマッピングステップでは、より外側のシェルポリゴンほど、より高い透明度で前記シェルテクスチャ画像をテクスチャマッピングする、請求項１に記載の画像処理プログラム。
【請求項１０】
前記ベースポリゴンデータに基づいて、前記ベースポリゴンの各頂点を法線ベクトル方向に所定幅だけずらした新たな頂点をそれぞれ生成し、当該生成された頂点群に基づいて前記多層ポリゴンデータを生成するステップを前記コンピュータにさらに実行させる、請求項７に記載の画像処理プログラム。
【請求項１１】
前記テクスチャマッピングステップでは、予め用意された多層ポリゴンデータに基づいて前記多層のシェルポリゴンを配置する、請求項１に記載の画像処理プログラム。
【請求項１２】
３次元ポリゴンモデルに対してテクスチャをマッピングするための画像処理装置であって、
多数のポリゴンモデルの層からなる多層のシェルポリゴンを構成するための多層ポリゴンデータを記憶手段から読み出すシェルポリゴン読み出し手段、
前記多層のシェルポリゴンに共通に利用される、透明度の異なる複数の領域を含むシェルテクスチャ画像を記憶手段から読み出すテクスチャ読み出し手段、
前記シェルテクスチャ画像の各点における歪み量を示す歪みマップを読み込む手段、および、
前記歪みマップが示す歪み量からシェルポリゴンの各層における歪み量をそれぞれ算出し、前記シェルテクスチャ画像における本来参照すべき点からずれた点の値を参照することによって、前記シェルテクスチャ画像を、シェルポリゴンの各層の位置に応じて異なる度合いで歪ませて各層のシェルポリゴンにそれぞれテクスチャマッピングして各層を配置するテクスチャマッピング手段、を備える画像処理装置。
【請求項１３】
前記テクスチャマッピング手段は、より外側の層のシェルポリゴンほど、前記シェルテクスチャ画像をより大きく歪ませる、請求項１２に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理プログラムおよび画像処理装置に関し、特に、３次元ポリゴンモデルに対してテクスチャをマッピングするための画像処理プログラムおよび画像処理装置に関する。
【背景技術】
【０００２】
従来、３次元画像処理において毛や草等の表現を擬似的に行うための手法として、毛や草等の断面を表したテクスチャ画像を多層の半透明のポリゴン（シェルポリゴン）にテクスチャマッピングする手法がある。特許文献１では、そのような手法を用いて芝生が描画されている。
【特許文献１】特開２００６−０７２５７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、多層のシェルポリゴンの各層に対してテクスチャ画像を個別に用意するのは非常に労力を要し、テクスチャ画像の編集もしにくいという問題がある。また、多層のシェルポリゴンの各層に対して同一のテクスチャ画像をテクスチャマッピングすることも考えられるが、それだけでは表現力に乏しく、毛流れや毛束感が表現できないという問題がある。
【０００４】
それゆえに本発明の目的は、３次元画像処理において、小さい労力で毛や草等を表現力豊かに表現することが可能な画像処理プログラムおよび画像処理装置を提供することである。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、本発明は以下のように構成される。なお、括弧内の参照符号および図番号は、本発明の理解を助けるために図面との対応関係の一例を示したものであって、本発明の範囲を何ら限定するものではない。
【０００６】
本発明のゲームプログラムは、３次元ポリゴンモデルに対してテクスチャをマッピングするための画像処理プログラム（３０）である。この画像処理プログラムは、コンピュータ（１０、１１ｂ）に、多数のポリゴンモデルの層からなる多層のシェルポリゴンを構成するための多層ポリゴンデータ（３３）を読み出すシェルポリゴン読み出しステップ、前記多層のシェルポリゴンに共通に利用される、透明度の異なる複数の領域を含むシェルテクスチャ画像（図９、３５）を記憶手段から読み出すテクスチャ読み出しステップ（Ｓ２５）、および、前記シェルテクスチャ画像を、シェルポリゴンの各層の位置に応じて異なる度合いで歪ませて各層のシェルポリゴンにそれぞれテクスチャマッピングして各層を配置するテクスチャマッピングステップ（Ｓ２７、Ｓ２９、Ｓ３０）を実行させる。
【０００７】
なお、前記テクスチャマッピングステップでは、より外側の層のシェルポリゴンほど、前記シェルテクスチャ画像をより大きく歪ませてもよい。
【０００８】
また、前記テクスチャマッピングステップでは、前記シェルテクスチャ画像における本来参照すべき点からずれた点の値を参照することによって、前記シェルテクスチャ画像を歪ませて各層のシェルポリゴンにそれぞれテクスチャマッピングしてもよい（図１５）。
【０００９】
また、前記画像処理プログラムは、前記シェルテクスチャ画像の各点における歪み量を示す歪みマップ（図１３、３６）を読み込むステップ（Ｓ２６）を前記コンピュータにさらに実行させてもよい。そして、前記テクスチャマッピングステップでは、前記歪みマップが示す歪み量からシェルポリゴンの各層における歪み量をそれぞれ算出し、当該算出結果に基づいて、前記シェルテクスチャ画像における参照すべき点を決定してもよい。
【００１０】
また、前記歪みマップは、前記シェルテクスチャ画像の横方向の歪み量を示す横歪みマップと、前記シェルテクスチャ画像の縦方向の歪み量を示す縦歪みマップとにより構成されてもよい（図１３）。
【００１１】
また、前記画像処理プログラムは、前記多層のシェルポリゴンを配置する際のベースとなるベースポリゴンを構成するためのベースポリゴンデータ（３１）を記憶手段から読み出すステップと、読み出したベースポリゴンデータに基づいてベースポリゴンを配置するステップ（Ｓ２３）とを前記コンピュータにさらに実行させてもよい。そして、前記テクスチャマッピングステップでは、ベースポリゴンとシェルポリゴンとの間の距離に基づいて、前記歪みマップが示す歪み量からシェルポリゴンの各層における歪み量をそれぞれ算出し、前記ベースポリゴンの外側に前記多層のシェルポリゴンを配置てもよい（図１７）。
【００１２】
また、前記テクスチャマッピングステップでは、シェルポリゴンが、内側から数えて何番目に位置するかに基づいて、前記歪みマップが示す歪み量からシェルポリゴンの各層における歪み量をそれぞれ算出してもよい。
【００１３】
また、前記テクスチャマッピングステップでは、シェルポリゴンの各層における歪み量をさらに単位時間毎に変化させてもよい。
【００１４】
また、前記画像処理プログラムは、前記多層のシェルポリゴンを配置する際のベースとなるベースポリゴンを構成するためのベースポリゴンデータ（３１）を記憶手段から読み出すステップと、読み出したベースポリゴンデータに基づいてベースポリゴンを配置するステップ（Ｓ２３）とを前記コンピュータにさらに実行させてもよい。そして、前記テクスチャマッピングステップでは、前記ベースポリゴンの外側に前記多層のシェルポリゴンを配置してもよい。
【００１５】
また、前記画像処理プログラムは、前記ベースポリゴン用のベーステクスチャ画像（３２）を前記ベースポリゴンにテクスチャマッピングするステップ（Ｓ２２）を前記コンピュータにさらに実行させてもよい。
【００１６】
また、前記テクスチャマッピングステップでは、より外側のシェルポリゴンほど、より高い透明度で前記シェルテクスチャ画像をテクスチャマッピングしてもよい（Ｓ２８、Ｓ２９）。
【００１７】
また、前記画像処理プログラムは、前記ベースポリゴンデータに基づいて、前記ベースポリゴンの各頂点を法線ベクトル方向に所定幅だけずらした新たな頂点をそれぞれ生成し、当該生成された頂点群に基づいて前記多層ポリゴンデータを生成するステップを前記コンピュータにさらに実行させてもよい。
【００１８】
また、前記テクスチャマッピングステップでは、予め用意された多層ポリゴンデータ（３３）に基づいて前記多層のシェルポリゴンを配置してもよい。
【００１９】
本発明の画像処理装置は、３次元ポリゴンモデルに対してテクスチャをマッピングするための画像処理装置（３）である。この画像処理装置は、多数のポリゴンモデルの層からなる多層のシェルポリゴンを構成するための多層ポリゴンデータ（３３）を記憶手段から読み出すシェルポリゴン読み出し手段（１０、１１ｂ）、前記多層のシェルポリゴンに共通に利用される、透明度の異なる複数の領域を含むシェルテクスチャ画像（図９、３５）を記憶手段から読み出すテクスチャ読み出し手段（１０、１１ｂ）、および、前記シェルテクスチャ画像を、シェルポリゴンの各層の位置に応じて異なる度合いで歪ませて各層のシェルポリゴンにそれぞれテクスチャマッピングして各層を配置するテクスチャマッピング手段（１０、１１ｂ）を備える。
【００２０】
なお、前記テクスチャマッピング手段は、より外側の層のシェルポリゴンほど、前記シェルテクスチャ画像をより大きく歪ませてもよい。
【００２１】
また、前記テクスチャマッピング手段は、前記シェルテクスチャ画像における本来参照すべき点からずれた点の値を参照することによって、前記シェルテクスチャ画像を歪ませて各層のシェルポリゴンにそれぞれテクスチャマッピングしてもよい（図１５）。
【００２２】
また、前記画像処理装置は、前記シェルテクスチャ画像の各点における歪み量を示す歪みマップ（図１３、３６）を読み込む手段（１０、１１ｂ）をさらに備えてもよい。そして、前記テクスチャマッピング手段は、前記歪みマップが示す歪み量からシェルポリゴンの各層における歪み量をそれぞれ算出し、当該算出結果に基づいて、前記シェルテクスチャ画像における参照すべき点を決定してもよい。
【発明の効果】
【００２３】
本発明によれば、多層のシェルポリゴンに共通に利用されるシェルテクスチャ画像を、シェルポリゴンの各層の位置に応じて異なる度合いで歪ませて各層のシェルポリゴンにそれぞれテクスチャマッピングするので、シェルポリゴンの各層について個別にシェルテクスチャ画像を用意することなしに、各層に異なるテクスチャを表示することができる。
【発明を実施するための最良の形態】
【００２４】
（ゲームシステムの全体構成）
図１を参照して、本発明の一実施形態に係るゲーム装置を含むゲームシステム１について説明する。図１は、ゲームシステム１の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図１において、ゲームシステム１は、テレビジョン受像器（以下、単に「テレビ」と記載する）２、ゲーム装置３、光ディスク４、マーカ部６、およびコントローラ７を含む。本システムは、コントローラ７を用いたゲーム操作に基づいてゲーム装置３でゲーム処理を実行するものである。
【００２５】
ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着可能に挿入される。光ディスク４には、ゲーム装置３において実行されるためのゲームプログラムが記憶されている。ゲーム装置３の前面には光ディスク４の挿入口が設けられている。ゲーム装置３は、挿入口に挿入された光ディスク４に記憶されたゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【００２６】
ゲーム装置３には、表示装置の一例であるテレビ２が接続コードを介して接続される。テレビ２は、ゲーム装置３において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ２の画面の周辺（図１では画面の上側）には、マーカ部６が設置される。マーカ部６は、その両端に２つのマーカ６Ｒおよび６Ｌを備えている。マーカ６Ｒ（マーカ６Ｌも同様）は、具体的には１以上の赤外ＬＥＤであり、テレビ２の前方に向かって赤外光を出力する。マーカ部６はゲーム装置３に接続されており、ゲーム装置３はマーカ部６が備える各赤外ＬＥＤの点灯を制御することが可能である。
【００２７】
コントローラ７は、自機に対して行われた操作の内容を示す操作データをゲーム装置３に与える入力装置である。コントローラ７とゲーム装置３とは無線通信によって接続される。本実施形態では、コントローラ７とゲーム装置３との間の無線通信には例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術が用いられる。なお、他の実施形態においてはコントローラ７とゲーム装置３とは有線で接続されてもよい。
【００２８】
（ゲーム装置３の内部構成）
次に、図２を参照して、ゲーム装置３の内部構成について説明する。図２は、ゲーム装置３の構成を示すブロック図である。ゲーム装置３は、ＣＰＵ１０、システムＬＳＩ１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５等を有する。
【００２９】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムＬＳＩの内部構成について後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置３の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ：Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ１１ｅまたは外部メインメモリ１２に読み出したデータを書き込む。
【００３０】
また、システムＬＳＩ１１には、入出力プロセッサ（Ｉ／Ｏプロセッサ）１１ａ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）１１ｂ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１１ｃ、ＶＲＡＭ１１ｄ、および内部メインメモリ１１ｅが設けられる。図示は省略するが、これらの構成要素１１ａ〜１１ｅは内部バスによって互いに接続される。
【００３１】
ＧＰＵ１１ｂは、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ１１ｄは、ＧＰＵ１１ｂがグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ１１ｂは、ＶＲＡＭ１１ｄに記憶されたデータを用いて画像データを作成する。
【００３２】
ＤＳＰ１１ｃは、オーディオプロセッサとして機能し、内部メインメモリ１１ｅや外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００３３】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、読み出した画像データをＡＶコネクタ１６を介してテレビ２に出力するとともに、読み出した音声データを、テレビ２に内蔵されるスピーカ２ａに出力する。これによって、画像がテレビ２に表示されるとともに音がスピーカ２ａから出力される。
【００３４】
入出力プロセッサ１１ａは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ１１ａは、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、およびメモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００３５】
入出力プロセッサ１１ａは、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ１１ａは、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介してネットワークに送信する。また、入出力プロセッサ１１ａは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０はゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置３と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置３を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００３６】
また、入出力プロセッサ１１ａは、コントローラ７から送信される操作データをアンテナ２３および無線コントローラモジュール１９を介して受信し、内部メインメモリ１１ｅまたは外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。
【００３７】
さらに、入出力プロセッサ１１ａには、拡張コネクタ２０およびメモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ１１ａは、拡張コネクタ２０やメモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００３８】
ゲーム装置３には、電源ボタン２４、リセットボタン２５、およびイジェクトボタン２６が設けられる。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置３の各構成要素に対して、図示しないＡＣアダプタを経て電源が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置３の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００３９】
図３および図４を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面前方から見た斜視図である。
【００４０】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００４１】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【００４２】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に４つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記４つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、４つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティック（いわゆる、ジョイスティック）を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。
【００４３】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ａ〜７２ｇは、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００４４】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置３の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００４５】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７から無線通信モジュール１８へ送信データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ７０２のうち、種別に対応するＬＥＤが点灯する。
【００４６】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図５のスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００４７】
一方、ハウジング７１下面には、凹部が形成されている。ハウジング７１下面の凹部は、プレイヤがコントローラ７の前面をマーカ６Ｌおよび６Ｒに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の後面側傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００４８】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００４９】
ここで、以下の説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するＸＹＺ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をＺ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をＺ軸正方向とする。また、コントローラ７の上下方向をＹ軸とし、ハウジング７１の下面（操作ボタン７２ｉが設けられた面）方向をＹ軸正方向とする。さらに、コントローラ７の左右方向をＸ軸とし、ハウジング７１の左側面（図３では表されずに図４で表されている側面）方向をＸ軸正方向とする。
【００５０】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。なお、図５は、コントローラ７の上筐体（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図６は、コントローラ７の下筐体（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図６に示す基板７００は、図５に示す基板７００の裏面から見た斜視図となっている。
【００５１】
図５において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図６、図７参照）に接続される。また、無線モジュール７５３（図７参照）およびアンテナ７５４によって、コントローラ７がワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子７０３が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コントローラ７の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ７の回転を良好な感度でゲーム装置３等が判定することができる。
【００５２】
一方、図６において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置３から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。
【００５３】
そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。バイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４は、基板７００等に形成された配線によってマイコン７５１と接続され、ゲーム装置３から送信された振動データに応じてその作動をオン／オフする。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００５４】
次に、図７を参照して、コントローラ７の内部構成について説明する。なお、図７は、コントローラ７の構成を示すブロック図である。
【００５５】
図７において、コントローラ７は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。
【００５６】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。
【００５７】
コントローラ７は、３軸（Ｘ、Ｙ、Ｚ軸）の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向（図３に示すＹ軸）、左右方向（図３に示すＸ軸）、および前後方向（図３に示すＺ軸）で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、Ｘ軸とＹ軸（または他の対になった軸）のそれぞれに沿った直線加速度のみを検知する２軸の加速度検出手段を使用してもよい。さらに、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、ＸＹＺ軸のいずれか１軸に沿った直線加速度のみを検知する１軸の加速度検出手段を使用してもよい。例えば、この３軸、２軸、または１軸の加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であることが好ましい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて３軸、２軸、または１軸の加速度センサ７０１が提供されてもよい。
【００５８】
加速度センサ７０１に用いられるような加速度検出手段は、加速度センサ７０１の持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、その１軸、２軸、または３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００５９】
しかしながら、加速度センサ７０１から出力される加速度の信号に対して追加の処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、静的な加速度（重力加速度）が検知されると、加速度センサ７０１からの出力を用いて、傾斜角度と検知された加速度とを用いた演算によって重力ベクトルに対する対象（コントローラ７）の傾きを判定することができる。このように、加速度センサ７０１をマイコン７５１（またはゲーム装置３に含まれるＣＰＵ１０等の他のプロセッサ）と組み合わせて用いることによって、コントローラ７の傾き、姿勢、または位置を判定することができる。同様に、加速度センサ７０１を備えるコントローラ７がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７の様々な動きおよび／または位置を算出することができる。他の実施例では、加速度センサ７０１は、信号をマイコン７５１に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ７０１が静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。加速度センサ７０１でそれぞれ検知された加速度を示すデータは通信部７５に出力される。
【００６０】
他の実施形態の例では、コントローラ７の動きを検出する動きセンサとして、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるＭＥＭＳジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ７０１と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転（または角速度）を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
【００６１】
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、２つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロスコープとの基本的な差異と同様にジャイロスコープの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
【００６２】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置３からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置３から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置３から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。
【００６３】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの３軸方向の加速度信号（Ｘ、Ｙ、およびＺ軸方向加速度データ）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、処理結果データ）を無線通信モジュール１８へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線通信モジュール１８への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、無線通信モジュール１８への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて、所定周波数の搬送波を用いて操作情報をその電波信号としてアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からのＸ、Ｙ、およびＺ軸方向加速度データ、および撮像情報演算部７４からの処理結果データがコントローラ７から送信される。そして、ゲーム装置３の無線通信モジュール１８でその電波信号を受信し、ゲーム装置３で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、および処理結果データ）を取得する。そして、ゲーム装置３のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Ｂｌｕｅｔｏｏｔｈ（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００６４】
次に、ゲーム装置３が行う画像生成処理の概要について説明する。
【００６５】
図８は、毛や草等を多層の半透明のポリゴン（シェルポリゴンと称することとする）によって表現する手法について説明するための図である。ベースポリゴンは、３次元ポリゴンモデルであり、この３次元ポリゴンモデルに生えた毛や草等を表現するために、図８のようにベースポリゴンの外側に多層（本実施形態では８層の場合を説明する）のシェルポリゴンが配置される。すなわち、ベースポリゴンは、多層のシェルポリゴンを配置する際のベースとなるポリゴンであると言える。ベースポリゴンには、３次元ポリゴンモデルの地の模様を示すテクスチャ（以下、ベーステクスチャと称す）がテクスチャマッピングされる。第１〜第８層のシェルポリゴンには、毛や草等の断面を示すテクスチャ（シェルテクスチャと称することとする）がそれぞれテクスチャマッピングされる。
【００６６】
図９は、シェルテクスチャ画像の一具体例を示している。シェルテクスチャ画像は、色を示すカラー値（ＲＧＢ値）と、透明度を示すアルファ値とで構成される。例えば、狐のしっぽ（薄茶色）を表現したい場合には、図９左側に示すように、アルファ値をたとえばまだら模様のように設定する。ここでは黒い部分が透明部分を示しており、マッピングの際は白い部分に対応するカラーのみが重ねられていくことになり、毛を構成することになる。したがって、カラー値は、ベーステクスチャと同じテクスチャを割り当てるようにしたり、何も描画されていない画像を割り当て、ベーステクスチャとブレンドするようにすれば、しっぽの毛が表現されることとなる。さらに、図９右側に示すように、別のまだら模様の画像を用意して、ベーステクスチャとブレンドするようにすれば、上述の毛となる不透明部分の中でも、テクセルごとに濃淡が発生するため、より毛の質感に近い表現を行うことができる。ここで、毛（や草）の質感は、アルファ値のパターンによってさまざまに設定可能であるが、一様なパターンでは毛にならないので、アルファ値のパターンは少なくとも値の異なる複数の領域を含む必要がある。
【００６７】
本実施形態では、第１〜第８層のシェルポリゴンに対するテクスチャマッピング処理には、共通のシェルテクスチャ画像が利用される。ただし、第１〜第８層のシェルポリゴンに対して、単に同一のシェルテクスチャ画像を同じようにテクスチャマッピングしただけでは、いわゆる直毛状態の毛や草しか表現できない。例えば、図１０に示すようなシェルテクスチャ画像を第１〜第８のシェルポリゴンに対して単純にテクスチャマッピングした場合には、図１１に示すようにベースポリゴンから毛が垂直に生えているように表示されるので、毛流れや毛束感を表現することができない。他の例として、図９に示すようなシェルテクスチャ画像を第１〜第８のシェルポリゴンに対して単純にテクスチャマッピングする場合には、図１２に示すような直毛の毛が生えた狐のしっぽしか表現できない。
【００６８】
そこで、本実施形態では、毛流れや毛束感の表現など、より多様な表現を簡単に実現するために、図１３に示すような歪みマップを使用してテクスチャ画像を歪めた上で、各層のシェルポリゴンにテクスチャマッピングする手法を採用する。ここで、歪みマップとは、シェルテクスチャ画像のどの部分をどの方向にどれだけ歪ませるかを定めたものであり、本実施形態では、シェルテクスチャ画像の横方向（図１４Ａに示すｓ軸方向）に関する歪み量を定めた横歪みマップと、シェルテクスチャ画像の縦方向（図１４Ａに示すｔ軸方向）に関する歪み量を定めた縦歪みマップとで構成される。横歪みマップおよび縦歪みマップにおける各点（テクセル）の値は、本実施形態では０〜２５５の範囲の値となっており、その点における歪み量を示している。したがって、当該横歪みマップと縦歪みマップを、たとえば画像の所定の色（例えばＲ、Ｂ、Ｇのうちのいずれか１色）とアルファ成分として扱えば、歪みマップをテクスチャ画像と同様に画像として扱う（すなわち画像編集ソフトで作成・変更したり、画面上で確認したりする）ことが可能となる。
【００６９】
以下、歪みマップの作用について具体的に説明する。
【００７０】
一例として、図１４Ａに示すシェルテクスチャ画像を図１４Ｂに示す歪みマップ（横歪みマップおよび縦歪みマップ）に基づいて歪ませる場合について説明する。図１４Ｂの例では、横歪みマップと縦歪みマップのいずれも中央に円が描かれており、円の内部のテクセルの値は６４であり、円の外部のテクセルの値は１２８である。なお、上述のように、歪みマップは画像として扱うことができ、テクスチャ画像と位置を重ねて対応させることができるため、歪みマップのそれぞれの値についてもテクセルと呼称することとする。テクセルの値から１２８を減算した結果値の絶対値は歪み量を示しており、その符号は歪み方向を示している。ここで、テクスチャ画像の歪みとは、歪みマップのテクセルに対応する元画像のテクセルからずれた位置の画素を読み出すことであって、画像の見た目としては、読み出し位置をずらした方向と逆方向に画像が移動したように見えることになる。以降、読み出し画素のずらし方向の逆方向を歪み方向と呼ぶこととする。たとえば、左上の画素を読み出す場合には、画像の歪み方向を右下とする。横歪みマップおよび縦歪みマップにおいて、テクセルの値が１２８の部分では歪み量＝０（すなわち歪み無し）となる。また、横歪みマップにおいて、テクセルの値が１２８よりも大きい部分ではずらし方向が右方向（すなわち図１４Ａに示すｓ軸の正方向）となり、すなわち歪み方向は左方向となる。そして、テクセルの値が１２８よりも小さい部分ではずらし方向が左方向（すなわち図１４Ａに示すｓ軸の負方向）となり、すなわち歪み方向が右方向となる。また、縦歪みマップにおいては、テクセルの値が１２８よりも大きい部分ではずらし方向が下方向（すなわち図１４Ａに示すｔ軸の正方向）となり、すなわち歪み方向が上方向となる。そして、テクセルの値が１２８よりも小さい部分ではずらし方向が上方向（すなわち図１４Ａに示すｔ軸の負方向）となり、すなわち歪み方向が下方向となる。その結果、図１４Ｂの歪みマップによって図１４Ａのシェルテクスチャ画像を歪ませると、図１４Ｃに示すような歪んだテクスチャ画像が得られ、この歪んだテクスチャ画像に基づいて、シェルポリゴンへのテクスチャマッピング処理が行われる。なお、ここでは説明を簡単にするために横歪みマップおよび縦歪みマップとして同じ画像を用いているが、異なる画像を用いてももちろん構わない。
【００７１】
図１５は、歪みマップによってシェルテクスチャ画像を歪める処理の詳細を示している。図１４Ｃに示すようなテクスチャ画像は、シェルポリゴンへのテクスチャマッピング処理時におけるシェルテクスチャ画像の参照点（カラー値およびアルファ値を読み出す点）を、本来の参照点（すなわち歪みマップが無い場合に参照される点）から歪みマップで定められている方向および距離だけずれた点を参照することによって実現される。
【００７２】
なお、図１４Ａ〜図１４Ｃで示した例では、歪みマップの値が非連続的に変化している（すなわち円の内部と外部でテクセルの値が大きく変化している）。一方、図１６Ａ〜図１６Ｃに示す例では、歪みマップの値が連続的に（滑らかに）変化しており、このような歪みマップを用いて図１６Ａに示すシェルテクスチャ画像を歪ませた場合は、図１６Ｃに示すように滑らかに曲りくねったテクスチャ画像が得られる。
【００７３】
本実施形態では、上記のように歪みマップを使ってシェルテクスチャ画像を歪ませてからシェルポリゴンにテクスチャマッピングするのであるが、その際、第１〜第８層のシェルポリゴンに対して、シェルテクスチャ画像を一様に歪ませただけでは、依然として図１１や図１２に示したような直毛しか表現できない。そこで、本実施形態では、ベースポリゴンからより遠いシェルポリゴンほど、シェルテクスチャ画像がより大きく歪むように、シェルテクスチャ画像の歪み量を調整しつつ、テクスチャマッピングを行う。
【００７４】
例えば、図１７に示すように、シェルポリゴンの高さ（たとえばベースポリゴンからの距離）に比例するようにシェルテクスチャ画像の歪みを調整する。具体例として、図１８に示すようなシェルテクスチャ画像（この画像では毛の断面が１つだけ描かれている）を、全てのテクセル値が２２０であるような歪みマップを用いて歪めながら、第１〜第８層のシェルポリゴンにテクスチャマッピングする場合について説明する。この場合、歪みマップで定められている歪み量は、２２０から１２８を減算した結果値の絶対値、すなわち９２となる。そこで、第８層のシェルポリゴンに対しては、シェルテクスチャ画像を９２の歪み量に対応する距離（Ｄ８）だけ歪めてテクスチャマッピングする。また、例えば第４層のシェルポリゴンに対しては、第４層の高さが第８層の高さの２分の１である場合、第８層の歪み量である９２に２分の１を乗算した結果値である４６を第４層の歪み量として、シェルテクスチャ画像を４６の歪み量に対応する距離（Ｄ４）だけ歪めてテクスチャマッピングする。他の層についても同様に、高さに応じて歪み量を決定してテクスチャマッピングする。その結果、図１８に示すように、ベースポリゴンから毛が斜めに伸びている様を表現することができる。
【００７５】
なお、図１７では、シェルポリゴンが等間隔で配置されている例を示しているが、シェルポリゴンが等間隔で配置されていない場合でも、各層の高さに比例するように各層の歪み量を計算すれば、図１８に示したのと同様の毛を表現することができる。なお、シェルポリゴンが等間隔で配置されている場合には、各層の番号は高さに比例するので、高さの代りに層番号（層の並び順を示す番号）を用いて各層の歪み量を決定することもできる。また、必要に応じて、等間隔でない場合であっても、層番号を用いて歪み量を決定するようにしてもよい。
【００７６】
なお、図１７では、シェルポリゴンの各層の歪み量が高さに比例する例を示したが、本発明は必ずしもこれに限定されない。例えば、図１９に示す曲線のように、任意の曲線にしたがって各層の歪み量を決定してもよい。そうすれば、図１８に示したような直線的な毛や草に限らず、曲がった毛や草を表現することが可能となる。より好ましくは、この曲線をユーザが自由に変更できるようにするのがよい。
【００７７】
なお、図１８の例のように均一なテクセル値を有するような歪みマップを用いる場合には、毛（または草など）の向き（毛流れ）を表現することができるが、図１３に示すように不均一なテクセル値を有するような歪みマップを利用すれば、部分に応じて毛の向きを変化させることができ、毛束感（局所的に毛が寄り集まっている様）など、より多様な表現が可能となる。なお、図１３の縦歪みマップは図面上では均一なテクセル値を有するように見えているかもしれないが、実際には横歪みマップと同様にまだら模様となっている。図２０は、図１３の歪みマップを用いて実際に作成した狐のしっぽの画像である。
【００７８】
なお、歪みマップに基づいて歪ませたシェルテクスチャ画像をシェルポリゴンにテクスチャマッピングするときの透明度は、基本的にはシェルテクスチャ画像のアルファ値に基づいて決定されるが、より自然な表現を実現するために、シェルポリゴンの高さ（ベースポリゴンからの距離）がより高くなるほど、そこにテクスチャマッピングされるシェルテクスチャ画像の透明度がより高くなるようにしてもよい（図８参照）。
【００７９】
図２１は、外部メインメモリ１２のメモリマップである。なお、外部メインメモリ１２の代わりに内部メインメモリ１１ｅを利用しても構わない。外部メインメモリ１２には、画像処理プログラム３０、ベースポリゴンデータ３１、ベーステクスチャ画像３２、シェルポリゴンデータ３３、モノクロシェルテクスチャ画像３４、シェルテクスチャ画像３５、および歪みマップ３６が格納される。
【００８０】
画像処理プログラム３０は、図２２および図２３のフローチャートに示す処理をコンピュータ（ＣＰＵ１０またはＧＰＵ１１ｂ）に実行させるためのコンピュータプログラムであり、本実施形態では、光ディスク４から外部メインメモリ１２にロードされる。ただし、画像処理プログラム３０は、光ディスク４に限らず他の任意の外部記憶媒体を通じて供給されてもよいし、有線または無線の通信回線を通じて他のコンピュータシステムより供給されてもよいし、ゲーム装置３の内部の図示しない不揮発性の記憶装置に予め記録されていてもよい。
【００８１】
ベースポリゴンデータ３１は、図８に示すベースポリゴンを構成するためのデータであって、ポリゴンの頂点座標や法線ベクトル等の情報を含んでいる。ベースポリゴンデータ３１は、典型的には光ディスク４から外部メインメモリ１２にロードされる。
【００８２】
ベーステクスチャ画像３２は、ベースポリゴンの模様を示す画像データであって、典型的には光ディスク４から外部メインメモリ１２にロードされる。
【００８３】
シェルポリゴンデータ３３は、図８に示す複数のシェルポリゴンを構成するためのデータであって、本実施形態では、ベースポリゴンデータ３１に基づいて生成される。具体的には、例えば、ベースポリゴンデータ３１に基づいて、ベースポリゴンの各頂点を法線ベクトル方向に所定幅だけずらした新たな頂点をそれぞれ生成し、生成された頂点群に基づいてシェルポリゴンを生成することができる。なお、シェルポリゴンデータ３３をベースポリゴンデータ３１に基づいて生成する代わりに、予め生成して光ディスク４に記憶されたたシェルポリゴンデータ３３を光ディスク４から外部メインメモリ１２にロードするようにしてもよい。データ構造としては、たとえばシェルポリゴンデータ３３は頂点の座標データのみとして、ポリゴンを構成する頂点やポリゴンの接続等の位相情報に関しては、ベースポリゴンデータ３１と共有するようにしてもよいし、座標情報、位相情報を全て層ごとにシェルポリゴンデータ３３として記憶しておくようにしてもよい。
【００８４】
モノクロシェルテクスチャ画像３４は、毛の断面を示すモノクロ画像データである。本実施形態では、ベースポリゴンの各点から、その点の色とほぼ同じ色の毛（または草等）が生えているような画像を簡単に生成できるように、明度のみを表すモノクロシェルテクスチャ画像３４にベーステクスチャ画像３２をブレンドすることによってシェルテクスチャ画像３５を生成する方法を採用している。ただし、このようなブレンド処理は本発明にとって必須ではなく、予めカラー情報によって構成される画像として用意されたシェルテクスチャ画像３５を光ディスク４から外部メインメモリ１２にロードするようにしてもよい。
【００８５】
シェルテクスチャ画像３５は、図８に示す複数のシェルポリゴンの模様を示す画像データであって、前述のように本実施形態では
ベーステクスチャ画像３２とモノクロシェルテクスチャ画像３４に基づいて生成されて、外部メインメモリ１２に格納される。
【００８６】
歪みマップ３６は、図１３に示したような、シェルテクスチャ画像３５の歪ませ方（歪み方向および歪み量）を示す情報である。なお、本実施形態では歪みマップ３６を用いてシェルテクスチャ画像３５を歪ませているが、本発明はこれに限らず、他の任意の手法を用いてシェルテクスチャ画像３５を歪ませても構わない。例えば、所定の関数を用いてシェルテクスチャ画像３５の各点を写像することによって、シェルテクスチャ画像３５を歪ませても構わない。また、歪みマップ３６は必ずしも静的なデータである必要はなく、時間の経過や、ユーザ入力や、ゲーム状況や、その他の任意の条件に応じて、歪みマップ３６を単位時間毎に変化させてもよい。このような処理を組み込むことにより、毛や草等の向きや質感を時間の経過等に応じて変化させることができ、例えば毛や草が風になびいたり、毛が急に逆立ったりするような動画像なども生成可能となる。
【００８７】
次に、図２２および図２３のフローチャートを参照して、画像処理プログラム３０に基づくＣＰＵ１０またはＧＰＵ１１ｂの動作の流れを説明する。なお、図２２および図２３のフローチャートの各ステップの処理は、ＣＰＵ１０とＧＰＵ１１ｂのどちらが実行しても構わず、各ステップについてＣＰＵ１０とＧＰＵ１１ｂのどちらか最適な方に実行させるようにすればよい。以下の説明では、図２２のフローチャートの各ステップの処理をＣＰＵ１０が、図２３のフローチャートの各ステップの処理をＧＰＵ１１ｂが実行するものとして説明する。
【００８８】
図２２は、画像を実際に表示する前の準備処理として行われる前処理の流れを示すフローチャートである。
【００８９】
前処理が開始されると、ステップＳ１０でＣＰＵ１０は、外部メインメモリ１２からベースポリゴンデータ３１を読み出す。
【００９０】
ステップＳ１１では、ＣＰＵ１０は、ステップＳ１０で読み出したベースポリゴンデータ３１に基づいて多層（本実施形態では８層とする）のシェルポリゴンを生成し、それをシェルポリゴンデータ３３として外部メインメモリ１２に格納する。
【００９１】
ステップＳ１２では、ＣＰＵ１０は、外部メインメモリ１２からベーステクスチャ画像３２を読み出す。
【００９２】
ステップＳ１３では、ＣＰＵ１０は、外部メインメモリ１２からモノクロシェルテクスチャ画像３４を読み出す。
【００９３】
ステップＳ１４では、ＣＰＵ１０は、ステップＳ１３で読み出したモノクロシェルテクスチャ画像３４に、ステップＳ１２で読み出したベーステクスチャ画像３２をブレンドし、そうして得られた画像をシェルテクスチャ画像３５として外部メインメモリ１２に格納する。ブレンドの方法としてはたとえば、ベーステクスチャ画像３２それぞれの画素に対して、モノクロシェルテクスチャ画像３４の対応画素の明度を積算するような演算でもよい。
【００９４】
以上のような前処理は、シェルポリゴンデータが予め光ディスク４に記憶され、それを読み出す場合や、シェルテクスチャ画像が予め光ディスク４に記憶され、ブレンドを行わずに読み出すだけであるような実施形態の場合には、省略されてもよい。
【００９５】
以上のような前処理が完了すると、ＧＰＵ１１ｂにおいて、図２３に示すフローチャートの処理が開始される。
【００９６】
図２３は、前処理によって生成されたシェルポリゴンデータ３３やシェルテクスチャ画像３５を用いて画像を実際に描画して画面等に出力するための処理（以下では便宜上、図２３に示す一連の処理を画像描画処理と称す）である。この画像描画処理は、本実施形態においては一定周期（たとえばフレーム毎に）で繰り返し実行されるものとする。なお、「フレーム」とは、画像の更新周期のことであり、典型的には６０分の１秒である。ただし、本発明はこれに限らず、静止画像を生成する目的の場合には、画像描画処理が１回だけ実行されればよい。
【００９７】
なお、図２３のフローチャートでは、動画像を生成するための処理（例えば、時間の経過に応じて、ポリゴンの位置を変化させたり、光源の位置を変化させたり、仮想カメラの位置や姿勢を変化させたりする処理）についての記載を省略しているが、もちろん、これらの処理を毎フレーム実行しても構わない。また、前述したように、歪みマップを時間の経過に応じて変化させる処理を追加しても構わない。さらには、ユーザ入力やその他の条件に応じて、シェルポリゴンの層の数や、シェルポリゴンの各層の高さなどを変化させる処理を追加しても構わない。
【００９８】
画像描画処理が開始されると、ＧＰＵ１１ｂは、まずベースポリゴンの描画から行う。ただし、ベースポリゴンを多層のシェルポリゴンのうちの１つ（すなわち最下層のシェルポリゴン）とみなし、ベースポリゴンをシェルポリゴンと同様の処理で描画して、毛を構成するポリゴンとして扱っても毛の表現は可能であるので、ベースポリゴンの描画処理をステップＳ２４以降のシェルテクスチャに関する処理と共通化してもよい。まずステップＳ２１では、ＧＰＵ１１ｂは、外部メインメモリ１２からベーステクスチャ画像３２を読み出す。
【００９９】
次に、ステップＳ２２では、ＧＰＵ１１ｂは、ステップＳ２１で読み出したベーステクスチャ画像３２をベースポリゴンにテクスチャマッピングする。
【０１００】
そして、ステップＳ２３において、ＧＰＵ１１ｂは、テクスチャマッピングされたベースポリゴンを配置し、ＶＲＡＭ１１ｄ内のフレームメモリへの描画を行う。
【０１０１】
この後のステップＳ２４〜Ｓ３１では、８層あるシェルポリゴンのそれぞれに対して、内側の層から順番にテクスチャマッピング処理が行われる。
【０１０２】
ステップＳ２４では、ＧＰＵ１１ｂは、まだテクスチャマッピング処理が行われていないシェルポリゴンの中で、最も内側のシェルポリゴンを選択する。
【０１０３】
ステップＳ２５では、ＧＰＵ１１ｂは、外部メインメモリ１２からシェルテクスチャ画像３５を読み出す。
【０１０４】
ステップＳ２６では、ＧＰＵ１１ｂは、外部メインメモリ１２から歪みマップ３６を読み出す。
【０１０５】
ステップＳ２７では、ＧＰＵ１１ｂは、現在処理対象となっているシェルポリゴンの層の高さに応じて、図１７で示したような方法により、この層の歪み量を決定する。
【０１０６】
ステップＳ２８では、ＧＰＵ１１ｂは、現在処理対象となっているシェルポリゴンの層の高さに応じて、透明度を決定する。例えば、層の高さがより高いほどより高い透明度となるように、透明度を決定する。当該透明度は、任意に設定可能であることが望ましいが、その場合、外側の層ほど高い透明度を予め設定することによって、よりリアルな表現を行うことができる。したがって、外側の層ほど高い透明度を自動的に設定するようにしてもよい。また、ここでは透明度を決定するが、透明度だけでなく、テクスチャ全体の明度をさらに決定するようにしてもよい。たとえば、実際の毛も外側ほど明るいことが想定されるので、外側の層ほど高い明度を設定するようにすることで、よりリアルな質感を表現することができる。
【０１０７】
ステップＳ２９では、ＧＰＵ１１ｂは、ステップＳ２５で読み出されたシェルテクスチャ画像３５を、ステップＳ２７で決定された歪み量とステップＳ２８で決定した透明度に応じて、現在処理対象となっているシェルポリゴンの層に対してテクスチャマッピングする。
【０１０８】
そして、ステップＳ３０において、ＧＰＵ１１ｂは、テクスチャマッピングの行われたシェルポリゴンを配置し、ＶＲＡＭ１１ｄ内のフレームメモリへの描画を行う。
【０１０９】
ステップＳ３１では、ＧＰＵ１１ｂは、全てのシェルポリゴンに対してテクスチャマッピング処理が行われたか否かを判断し、まだテクスチャマッピング処理が行われていないシェルポリゴンが存在する場合にはステップＳ２４に戻り、全てのシェルポリゴンに対してテクスチャマッピング処理が行われている場合にはステップＳ３２に進む。
【０１１０】
ステップＳ３２では、上記のステップＳ２３〜Ｓ３１の処理の結果として生成された画像（例えば、図２０に示すようなしっぽの画像）を、テレビ２等に出力する。つまり、ＶＲＡＭ１１ｄ内のフレームメモリに書き込まれている画像をＡＶ−ＩＣ１５、ＡＶコネクタ１６を介して１フレーム時間ごとに出力する。
【０１１１】
以上のステップＳ２３〜Ｓ３２の処理がフレーム毎に繰り返し実行される。
【０１１２】
以上のように、本実施形態によれば、多層のシェルポリゴンに共通に利用されるシェルテクスチャ画像３５を、シェルポリゴンの各層の位置に応じて異なる度合いで歪ませて各層のシェルポリゴンにそれぞれテクスチャマッピングするので、シェルポリゴンの各層について個別にシェルテクスチャ画像を用意することなしに、各層に異なるテクスチャを表示することができる。
【０１１３】
また、図１７や図１８に示したように、ベースポリゴンからより遠い層のシェルポリゴンほど、シェルテクスチャ画像３５をより大きく歪ませてテクスチャマッピングするので、直毛状態ではない自然な毛流れを簡単に表現することができる。
【０１１４】
また、シェルポリゴンの各層の歪み量は、歪みマップ３６から自動的に決定されるため、シェルポリゴンの各層について歪みマップを個別に用意する手間を削減することができる。
【０１１５】
また、ベースポリゴンデータ３１に基づいてシェルポリゴンが自動生成されるため、多層のシェルポリゴンに対応するシェルポリゴンデータ３３を予め用意する手間を削減することができる。
【図面の簡単な説明】
【０１１６】
【図１】本発明の一実施形態に係るゲームシステム１の外観図
【図２】ゲーム装置３の構成を示すブロック図
【図３】コントローラ７の上面後方から見た斜視図
【図４】コントローラ７を下面後方から見た斜視図
【図５】コントローラ７の上筐体を外した状態を示す斜視図
【図６】コントローラ７の下筐体を外した状態を示す斜視図
【図７】コントローラ７の構成を示すブロック図
【図８】ベースポリゴンとシェルポリゴンの位置関係を示す図
【図９】シェルテクスチャ画像の一例
【図１０】シェルテクスチャ画像の一例
【図１１】図１０のシェルテクスチャ画像をシェルポリゴンの各層に一様に適用した場合の表示例
【図１２】図９のシェルテクスチャ画像をシェルポリゴンの各層に一様に適用した場合の表示例
【図１３】歪みマップの一例
【図１４Ａ】シェルテクスチャ画像の一例
【図１４Ｂ】歪みマップの一例
【図１４Ｃ】図１４Ａのシェルテクスチャ画像を図１４Ｂの歪みマップで歪ませて得られるテクスチャ画像
【図１５】歪みマップによってシェルテクスチャ画像を歪める処理の詳細を示す図
【図１６Ａ】シェルテクスチャ画像の一例
【図１６Ｂ】歪みマップの一例
【図１６Ｃ】図１６Ａのシェルテクスチャ画像を図１６Ｂの歪みマップで歪ませて得られるテクスチャ画像
【図１７】シェルポリゴンの各層の高さと歪み量の関係を示す図
【図１８】歪みマップを用いてテクスチャマッピングした場合の表示例
【図１９】歪みマップを用いてテクスチャマッピングした場合の表示例
【図２０】歪みマップを用いて作成した画像の一例
【図２１】外部メインメモリ１２のメモリマップ
【図２２】前処理の流れを示すフローチャート
【図２３】フレーム毎の処理の流れを示すフローチャート
【符号の説明】
【０１１７】
１    ゲームシステム
２    テレビジョン受像器（テレビ）
２ａ    スピーカ
３    ゲーム装置
４    光ディスク
６    マーカ部
６Ｒ，６Ｌ    マーカ
７    コントローラ
１０    ＣＰＵ
１１    システムＬＳＩ
１１ａ    入出力プロセッサ
１１ｂ    ＧＰＵ
１１ｃ    ＤＳＰ
１１ｄ    ＶＲＡＭ
１１ｅ    内部メインメモリ
１２    外部メインメモリ
１３    ＲＯＭ／ＲＴＣ
１４    ディスクドライブ
１５    ＡＶ−ＩＣ
１６    ＡＶコネクタ
１７    フラッシュメモリ
１８    無線通信モジュール
１９    無線コントローラモジュール
２０    拡張コネクタ
２１    メモリカード用コネクタ
２２    アンテナ
２３    アンテナ
２４    電源ボタン
２５    リセットボタン
２６    イジェクトボタン
３０    画像処理プログラム
３１    ベースポリゴンデータ
３２    ベーステクスチャ画像
３３    シェルポリゴンデータ
３４    モノクロシェルテクスチャ画像
３５    シェルテクスチャ画像
３６    歪みマップ
７１    ハウジング
７２    操作部
７３    コネクタ
７４    撮像情報演算部
７５    通信部
７００    基板
７０１    加速度センサ
７０２    ＬＥＤ
７０３    水晶振動子
７０４    バイブレータ
７０５    電池
７０６    スピーカ
７０７    サウンドＩＣ
７０８    アンプ
７４１    赤外線フィルタ
７４２    レンズ
７４３    撮像素子
７４４    画像処理回路
７５１    マイコン
７５２    メモリ
７５３    無線モジュール
７５４    アンテナ
【図１】
0004964688.tif 000002
【図２】
0004964688.tif 000003
【図３】
0004964688.tif 000004
【図４】
0004964688.tif 000005
【図５】
0004964688.tif 000006
【図６】
0004964688.tif 000007
【図７】
0004964688.tif 000008
【図８】
0004964688.tif 000009
【図９】
0004964688.tif 000010
【図１０】
0004964688.tif 000011
【図１１】
0004964688.tif 000012
【図１２】
0004964688.tif 000013
【図１３】
0004964688.tif 000014
【図１４Ａ】
0004964688.tif 000015
【図１４Ｂ】
0004964688.tif 000016
【図１４Ｃ】
0004964688.tif 000017
【図１５】
0004964688.tif 000018
【図１６Ａ】
0004964688.tif 000019
【図１６Ｂ】
0004964688.tif 000020
【図１６Ｃ】
0004964688.tif 000021
【図１７】
0004964688.tif 000022
【図１８】
0004964688.tif 000023
【図１９】
0004964688.tif 000024
【図２０】
0004964688.tif 000025
【図２１】
0004964688.tif 000026
【図２２】
0004964688.tif 000027
【図２３】
0004964688.tif 000028