(57)【要約】【課題】  バネを用いたモデルの変形処理を少ない処理負担で行うことが可能な画像処理プログラムおよび画像処理装置を提供する。【解決手段】  関連付けられた２頂点の間には、直交座標系における座標軸方向を向く仮想の力であって、当該２頂点の間の当該座標軸方向に関する距離に応じて大きさが変化する仮想の力を当該２頂点に与える仮想バネが座標軸方向毎に設定される。ゲーム装置は、形状モデルの各頂点の位置関係が基準状態から変化した場合、２頂点の間の距離の基準状態からの差分を座標成分毎に分けて算出する。次に、各仮想バネによる仮想の力の大きさを差分に基づいて算出し、さらに、同じ頂点に与えられる仮想の力について向きが平行な力同士を加算することによって、仮想バネから各頂点が受ける仮想の力を座標成分毎に分けて算出する。【選択図】  図４
2006059028.tif 000002
【特許請求の範囲】
【請求項１】
直交座標系における形状モデルの形状を変化させて表示装置の画面に表示する処理をコンピュータに実行させる画像処理プログラムであって、
形状モデルを構成する各頂点は、少なくとも１つの他の頂点と関連付けられており、
関連付けられた２頂点の間には、前記直交座標系における座標軸方向を向く仮想の力であって、当該２頂点の間の当該座標軸方向に関する距離に応じて大きさが変化する仮想の力を当該２頂点に与える仮想バネが座標軸方向毎に設定され、
形状モデルの各頂点の位置関係が基準状態から変化した場合、前記２頂点の間の距離の基準状態からの差分を座標成分毎に分けて算出する差分算出ステップと、
各仮想バネによる仮想の力の大きさを前記差分に基づいて算出するバネ力算出ステップと、
同じ頂点に与えられる仮想の力について向きが平行な力同士を加算することによって、仮想バネから各頂点が受ける仮想の力を座標成分毎に分けて算出する頂点力算出ステップと、
各頂点を移動させるべき位置を、前記頂点力算出ステップにおいて算出された座標成分毎の仮想の力に基づいて座標成分毎に決定する位置決定ステップと、
前記決定された位置に各頂点を移動した形状モデルを画面に表示する表示制御ステップとを前記コンピュータに実行させる、画像処理プログラム。
【請求項２】
形状モデルのうちの少なくとも１つの頂点をコントロール点として指定するコントロール点指定ステップと、
前記コントロール点を移動させるコントロール点移動ステップとを前記コンピュータにさらに実行させ、
前記差分算出ステップは、前記コントロール点の移動によって生じる前記差分を算出する、請求項１に記載の画像処理プログラム。
【請求項３】
前記コントロール点指定ステップにおいて前記コントロール点が指定されると、前記コントロール点と前記コントロール点以外の各頂点との間に新たな関連付けを行うコントロール点関連付ステップを前記コンピュータにさらに実行させる、請求項２に記載の画像処理プログラム。
【請求項４】
前記コントロール点関連付ステップは、前記コントロール点移動ステップにおける前記コントロール点の移動が完了するまで、または、前記コントロール点の移動に起因する形状モデルの変形が停止するまでの間のみ前記新たな関連付けを行う、請求項３に記載の画像処理プログラム。
【請求項５】
前記入力装置の入力面上にユーザによって描かれた軌跡を座標点として時系列で検出する入力検出ステップと、
前記検出された各座標点の少なくとも一部の座標点を各頂点とする形状モデルを作成するモデル作成ステップとを前記コンピュータにさらに実行させる、請求項１に記載の画像処理プログラム。
【請求項６】
前記入力検出ステップは、ユーザによって連続して入力された座標点を１まとまりの座標点群として検出し、
前記モデル作成ステップは、前記入力検出ステップにおいて検出された座標点群からその少なくとも一部を選出した各頂点と、当該各頂点を時系列順に結ぶ線分とによって構成される形状モデルを作成し、
前記モデル作成ステップによって作成された形状モデルに含まれる２頂点のうち、線分によって結ばれる２頂点に関連付けを行う頂点関連付ステップを前記コンピュータにさらに実行させる、請求項５に記載の画像処理プログラム。
【請求項７】
形状モデルは、複数の頂点と頂点間を接続する線分とによって構成され、
所定の頂点から線分を辿ることによって到達不可能な頂点が１つの形状モデルの内に存在する場合、当該所定の頂点から線分を辿ることによって到達可能な頂点と到達不可能な頂点との間に関連付けを行う頂点関連付ステップを前記コンピュータにさらに実行させる、請求項１に記載の画像処理プログラム。
【請求項８】
前記バネ力算出ステップは、前記差分に比例する大きさの力と、頂点の速度に比例する大きさの力とに基づいて仮想バネによる仮想の力を算出する、請求項１に記載の画像処理プログラム。
【請求項９】
形状モデルが基準状態である場合における前記２頂点の間の距離を前記直交座標系の座標成分毎に分けて算出する基準距離算出ステップと、
その時点における前記２頂点の間の距離を座標成分毎に分けて算出する移動後距離算出ステップとを前記コンピュータにさらに実行させ、
前記差分算出ステップは、前記基準距離算出ステップにおいて算出された距離と前記移動後距離算出ステップにおいて算出された距離とに基づいて前記差分を算出する、請求項１に記載の画像処理プログラム。
【請求項１０】
直交座標系における形状モデルの形状を変化させて表示装置の画面に表示する処理であって、
形状モデルを構成する各頂点は、少なくとも１つの他の頂点と関連付けられており、
関連付けられた２頂点の間には、前記直交座標系における座標軸方向を向く仮想の力であって、当該２頂点の間の当該座標軸方向に関する距離に応じて大きさが変化する仮想の力を当該２頂点に与える仮想バネが座標軸方向毎に設定され、
形状モデルの各頂点の位置関係が基準状態から変化した場合、前記２頂点の間の距離の基準状態からの差分を座標成分毎に分けて算出する差分算出手段と、
各仮想バネによる仮想の力の大きさを前記差分に基づいて算出するバネ力算出手段と、
同じ頂点に与えられる仮想の力について向きが平行な力同士を加算することによって、仮想バネから各頂点が受ける仮想の力を座標成分毎に分けて算出する頂点力算出手段と、
各頂点を移動させるべき位置を、前記頂点力算出手段によって算出された座標成分毎の仮想の力に基づいて座標成分毎に決定する位置決定手段と、
前記決定された位置に各頂点を移動した形状モデルを画面に表示する表示制御手段とを備える、画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理プログラムおよび画像処理装置に関し、より特定的には、図形や文字等の線画を構成する頂点間を仮想バネによって関連付けて、この線画が変形する様子を表示する画像処理プログラムおよび画像処理装置に関する。
【背景技術】
【０００２】
従来の画像処理においては、図形や文字等を表すモデルが自然に変形する様子を表現するために、モデルの頂点間にバネを設定することが行われている。
【０００３】
例えば、特許文献１には、モデルの頂点間にバネを設定するとともに、初期位置と移動先の位置との間にバネを設定する画像処理装置が記載されている。当該画像処理装置は、上記２種類のバネを用いることによって、モデルの１点を移動させた場合においてモデルが変形する様子を自然に表現することができる。
【０００４】
また、特許文献２に記載の画像処理方法では、画像データをメッシュ状に区分することによって当該メッシュの頂点間にバネを設定している。さらに、この画像処理方法では、バネとバネとのなす角に回転バネを設定している。この画像処理方法によれば、画像が変形する様子を自然に表現することができる。
【特許文献１】特開平９−７３５４９号公報
【特許文献２】特開平１０−６９５４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記特許文献１および２のような、バネを用いた従来の画像処理方法では、モデルの頂点間を直接接続するようにバネを設定している（図３１Ａおよび図３１Ｂ）。従って、モデルを変形させる画像処理において、２点間の距離を算出する計算が必須となるので、平方根計算や２乗計算といった処理の重い計算処理が行われることになる。さらに、特許文献２では、頂点間を結ぶバネの他に回転バネが設定される（図３１Ｂ）ので、マトリックス計算が必要となる。従って、特許文献２ではさらに計算処理が重くなってしまう。以上のように、従来の画像処理方法では、モデルを変形させる画像処理のための負担がゲーム装置にとって大きいという問題があった。処理能力の低い携帯ゲーム機や携帯電話ではこの問題は特に重要である。
【０００６】
それ故、本発明の目的は、バネを用いたモデルの変形処理を少ない処理負担で行うことが可能な画像処理プログラムおよび画像処理装置を提供することである。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００８】
第１の発明は、直交座標系における形状モデル（３１，６１）の形状を変化させて表示装置（第１ＬＣＤ１１）の画面に表示する処理をコンピュータ（ＣＰＵコア２１等）に実行させる画像処理プログラムである。画像処理プログラムは、差分算出ステップ（Ｓ１０２，Ｓ１１２）と、バネ力算出ステップ（Ｓ１０３，Ｓ１０４，Ｓ１１３）と、頂点力算出ステップ（Ｓ１１４）と、位置決定ステップ（Ｓ９２）と、表示制御ステップ（Ｓ８６）とをコンピュータに実行させる。ここで、形状モデルを構成する各頂点（Ｐ１〜Ｐ７）は、少なくとも１つの他の頂点と関連付けられている（第１関連付リスト、第２関連付リスト）。また、関連付けられた２頂点の間には、直交座標系における座標軸方向（ｘ軸方向、ｙ軸方向）を向く仮想の力であって、当該２頂点の間の当該座標軸方向に関する距離に応じて大きさが変化する仮想の力を当該２頂点に与える仮想バネ（３４〜３９，４１〜４６，５５〜５７）が座標軸方向毎に設定される。差分算出ステップでは、形状モデルの各頂点の位置関係が基準状態から変化した場合、２頂点の間の距離の基準状態からの差分（Ｄ，Ｄｃ）を座標成分毎に分けて算出する。バネ力算出ステップでは、各仮想バネによる仮想の力の大きさを差分に基づいて算出する。頂点力算出ステップでは、同じ頂点に与えられる仮想の力について向きが平行な力同士を加算することによって、仮想バネから各頂点が受ける仮想の力（Ｆｘ，Ｆｙ）を座標成分毎に分けて算出する。位置決定ステップでは、各頂点を移動させるべき位置を、頂点力算出ステップにおいて算出された座標成分毎の仮想の力に基づいて座標成分毎に決定する。表示制御ステップでは、決定された位置に各頂点を移動した形状モデルを画面に表示する。
【０００９】
また、第２の発明においては、コントロール点指定ステップ（Ｓ１４）と、コントロール点移動ステップ（Ｓ８３）とをコンピュータにさらに実行させてもよい。コントロール点指定ステップでは、形状モデルのうちの少なくとも１つの頂点をコントロール点として指定する。コントロール点移動ステップでは、コントロール点を移動させる。このとき、差分算出ステップは、コントロール点の移動によって生じる差分を算出する。
【００１０】
また、第３の発明においては、コントロール点関連付ステップ（Ｓ１５）をコンピュータにさらに実行させてもよい。コントロール点関連付ステップでは、コントロール点指定ステップにおいてコントロール点が指定されると、コントロール点とコントロール点以外の各頂点との間に新たな関連付け（第２関連付リスト）を行う。
【００１１】
また、第４の発明においては、コントロール点関連付ステップは、コントロール点移動ステップにおけるコントロール点の移動が完了するまで、または、コントロール点の移動に起因する形状モデルの変形が停止するまでの間のみ新たな関連付けを行ってもよい。
【００１２】
また、第５の発明においては、入力検出ステップ（Ｓ１０）と、モデル作成ステップ（Ｓ１１）とをコンピュータにさらに実行させてもよい。入力検出ステップでは、入力装置の入力面上にユーザによって描かれた軌跡を座標点として時系列で検出する。モデル作成ステップでは、検出された各座標点の少なくとも一部の座標点を各頂点とする形状モデルを作成する。
【００１３】
また、第６の発明においては、入力検出ステップは、ユーザによって連続して入力された座標点を１まとまりの座標点群として検出してもよい。このとき、モデル作成ステップは、入力検出ステップにおいて検出された座標点群からその少なくとも一部を選出した各頂点と、当該各頂点を時系列順に結ぶ線分とによって構成される形状モデルを作成する。画像処理プログラムは、頂点関連付ステップ（Ｓ１２）をコンピュータにさらに実行させてもよい。頂点関連付ステップでは、モデル作成ステップによって作成された形状モデルに含まれる２頂点のうち、線分によって結ばれる２頂点に関連付けを行う（第１関連リスト）。
【００１４】
また、第７の発明においては、形状モデルは、複数の頂点と頂点間を接続する線分とによって構成されてもよい。このとき、画像処理プログラムは、頂点関連付ステップ（Ｓ１２）をコンピュータにさらに実行させてもよい。頂点関連付ステップでは、所定の頂点から線分を辿ることによって到達不可能な頂点が１つの形状モデルの内に存在する場合、当該所定の頂点から線分を辿ることによって到達可能な頂点と到達不可能な頂点との間に関連付けを行う。
【００１５】
また、第８の発明においては、バネ力算出ステップは、差分に比例する大きさの力（仮想バネの「バネの力」）と、頂点の速度に比例する大きさの力（仮想バネに働く減衰力）とに基づいて仮想バネによる仮想の力を算出してもよい。
【００１６】
また、第９の発明においては、画像処理プログラムは、基準距離算出ステップ（Ｓ５２）と、移動後距離算出ステップ（Ｓ１０１，Ｓ１１１）とをコンピュータにさらに実行させてもよい。基準距離算出ステップでは、形状モデルが基準状態である場合における２頂点の間の距離（ΔＸ，ΔＸｃ）を直交座標系の座標成分毎に分けて算出する。移動後距離算出ステップでは、その時点における２頂点の間の距離（ΔＸ’，ΔＸｃ’）を座標成分毎に分けて算出する。このとき、差分算出ステップは、基準距離算出ステップにおいて算出された距離と移動後距離算出ステップにおいて算出された距離とに基づいて差分（Ｄ，Ｄｃ）を算出する。
【００１７】
また、本発明は、上記画像処理プログラムを実行する画像処理装置（ゲーム装置１）の形態で提供されてもよい。
【発明の効果】
【００１８】
第１の発明によれば、関連付けられた１組の頂点の間には、直交座標系の座標軸方向を向く互いに独立した複数の仮想バネが設定される。これによって、仮想バネによる仮想の力や頂点の移動先の位置を座標方向毎に別々に行うことができる。従って、第１の発明によれば、２頂点間の距離を算出する計算が不要であるので、計算処理が重い２乗計算や平方根計算を行う必要がなく、仮想バネを用いたモデルの変形処理を少ない処理負担で行うことが可能となる。
【００１９】
また、第２の発明によれば、コントロール点の移動を制御することによって形状モデルの移動を容易に制御することができる。
【００２０】
また、第３の発明によれば、コントロール点とそれ以外の頂点との間に仮想のバネが設定されるので、コントロール点からの接続数（コントロール点とその頂点とを接続する線分の数、換言すれば、コントロール点からその頂点に到達するまでに通る線分の数）が多い頂点であっても、コントロール点の移動に対する応答を速くすることができる。すなわち、形状モデルの変形の追従性を向上することができる。
【００２１】
また、第４の発明によれば、コントロール点と各頂点との間に一時的に仮想バネを設定することができるので、予め多くの仮想バネを頂点間に設定する必要がない。つまり、仮想バネを効率良く設定することによって、必要最小限の仮想バネを用いて形状モデルの変形の追従性を向上することができる。
【００２２】
また、第５の発明によれば、ユーザによって入力された図形や文字等を、あたかも弾性体のごとく変形させることができる。
【００２３】
また、第６の発明によれば、ユーザによる入力に基づいて形状モデルの形状を決定するとともに、頂点間の関連付けを決定することができる。すなわち、形状モデルの頂点をどの頂点と関連付けるかを、ユーザによる入力に基づいて決定することができる。また、ユーザによる入力軌跡は一筆書き可能な形状であるので、形状モデルの各頂点は、少なくとも１つの他の頂点と確実に関連付けられることとなる。従って、頂点間の関連付けを容易にかつ正確に行うことができる。
【００２４】
また、第７の発明によれば、一体的に構成されていない複数の部分を有する形状モデルであっても、各部分を一体的に変形させることができる。
【００２５】
また、第８の発明によれば、仮想バネをより現実に近い形でシミュレートすることができる。
【００２６】
また、第９の発明によれば、仮想バネの伸びを容易に算出することができる。また、２頂点間の距離を座標成分毎に算出することができるので、コンピュータの処理負担を軽減することができる。
【発明を実施するための最良の形態】
【００２７】
以下、本実施形態に係る画像処理装置および画像処理プログラムについて説明する。なお、本実施形態では、画像処理装置の一例として２つの表示装器を備えるゲーム装置を例に挙げて説明するが、本発明に係る画像処理装置は、画像処理プログラムを実行可能な装置であればどのような装置であっても構わない。例えば、画像処理装置は、単一の表示器を備えるゲーム装置や、据え置き型のパーソナルコンピュータであってもよいし、ＰＤＡ等の携帯端末であってもよい。
【００２８】
図１は、本発明の一実施形態に係る画像処理装置の一例である携帯型のゲーム装置の外観図である。図１において、本実施形態のゲーム装置１は、２つの液晶表示器（以下、「ＬＣＤ」という）１１および１２を所定の配置位置となるように、ハウジングに収納して構成される。具体的には、第１ＬＣＤ１１および第２ＬＣＤ１２を互いに上下に配置して収納する場合は、ハウジングが下部ハウジング１８ａおよび上部ハウジング１８ｂから構成される。上部ハウジング１８ｂは、下部ハウジング１８ａの上辺の一部で回動自在に支持される。上部ハウジング１８ｂは、第２ＬＣＤ１２の平面形状よりも少し大きな平面形状を有し、一方主面から第２ＬＣＤ１２の表示画面を露出するように開口部が形成される。下部ハウジング１８ａは、横方向の略中央部に第１ＬＣＤ１１の表示画面を露出する開口部が形成される。下部ハウジング１８ａの平面形状は、上部ハウジング１８ｂよりも横長に選ばれる。下部ハウジング１８ａには、第１ＬＣＤ１１を挟むいずれか一方にスピーカ１５の音抜き孔が形成されるとともに、第１ＬＣＤ１１を挟む左右に操作スイッチ部１４が装着される。
【００２９】
操作スイッチ部１４は、第１ＬＣＤ１１の右横における下部ハウジング１８ａの一方主面に装着される動作スイッチ１４ａおよび１４ｂと、第１ＬＣＤ１１の左横における下部ハウジング１８ａの一方主面に装着される方向指示スイッチ１４ｃ、スタートスイッチ１４ｄ、およびセレクトスイッチ１４ｅとを含む。動作スイッチ１４ａおよび１４ｂは、例えばアクションゲームにおいてはジャンプ、パンチ、武器を動かす等の指示、ロールプレイングゲーム（ＲＰＧ）やシミュレーションＲＰＧにおいてはアイテムの取得、武器またはコマンドの選択決定等の指示入力に使用される。方向指示スイッチ１４ｃは、プレイヤ（ユーザ）によって操作可能なプレイヤオブジェクト（またはプレイヤキャラクタ）の移動方向を指示したり、カーソルの移動方向を指示したりする等のゲーム画面における方向指示に用いられる。また、必要に応じて、動作スイッチをさらに追加したり、下部ハウジング１８ａにおける操作スイッチ１４の装着領域の上部面（上部側面）の左右に側面スイッチ１４ｆおよび１４ｇを設けたりしても構わない。
【００３０】
また、第１ＬＣＤ１１の上面には、タッチパネル１３（図１における破線領域）が装着される。タッチパネル１３は、例えば、抵抗膜方式、光学式（赤外線方式）、静電容量結合式のいずれの種類でもよく、その上面（入力面）をスタイラス１６（または指でも可）で押圧操作、移動操作、または撫でる操作をしたとき、スタイラス１６の座標位置を検出して座標データを出力するものである。
【００３１】
上部ハウジング１８ｂの側面近傍には、必要に応じてタッチパネル１３を操作するスタイラス１６を収納するための収納孔（図１における二点破線領域）が形成される。この収納孔には、スタイラス１６が収納される。下部ハウジング１８ａの側面の一部には、本実施形態に係る図形識別プログラムを含むゲームプログラムを記憶したメモリ（例えば、ＲＯＭ）を内蔵したカートリッジ１７を着脱自在に装着するためのカートリッジ挿入部（図１における一点破線領域）が形成される。カートリッジ１７は、ゲームプログラムを記憶する情報記憶媒体であり、例えば、ＲＯＭまたはフラッシュメモリのような不揮発性半導体メモリが用いられる。カートリッジ挿入部の内部には、カートリッジ１７と電気的に接続するためのコネクタ（図２参照）が内蔵される。さらに、下部ハウジング１８ａ（または上部ハウジング１８ｂでも可）には、ＣＰＵ等の各種電子部品を実装した電子回路基板が収納される。なお、ゲームプログラムを記憶する情報記憶媒体としては、上記不揮発性半導体メモリに限らず、ＣＤ−ＲＯＭ、ＤＶＤ、あるいはそれらに類する光学式ディスク状記憶媒体でもよい。
【００３２】
次に、図２を参照して、ゲーム装置１の内部構成について説明する。なお、図２は、ゲーム装置１の内部構成を示すブロック図である。
【００３３】
図２において、下部ハウジング１８ａに収納される電子回路基板には、コンピュータとして機能するＣＰＵコア２１等が実装される。ＣＰＵコア２１には、所定のバスを介して、カートリッジ１７と接続するためのコネクタ２８が接続されるととともに、入出力インターフェース（Ｉ／Ｆ）回路２７、第１のグラフィック処理ユニット（第１ＧＰＵ）２４、第２のグラフィック処理ユニット（第２ＧＰＵ）２６、およびワーキングＲＡＭ（ＷＲＡＭ）２２が接続される。
【００３４】
コネクタ２８には、カートリッジ１７が着脱自在に接続される。カートリッジ１７は、上述したようにゲームプログラムを格納するための記憶媒体である。具体的には、カートリッジ１７は、ゲームプログラムを記憶するＲＯＭ１７１とバックアップデータを書き換え可能に記憶するＲＡＭ１７２とを搭載する。カートリッジ１７のＲＯＭ１７１に記憶されたゲームプログラムは、ＷＲＡＭ２２にロードされ、当該ＷＲＡＭ２２にロードされたゲームプログラムがＣＰＵコア２１によって実行される。ＣＰＵコア２１がゲームプログラムを実行して得ることができる一時的なデータや画像を生成するためのデータがＷＲＡＭ２２に記憶される。
【００３５】
Ｉ／Ｆ回路２７には、タッチパネル１３、操作スイッチ部１４、およびスピーカ１５が接続される。スピーカ１５は、上述した音抜き孔の内側位置に配置される。
【００３６】
第１ＧＰＵ２４には、第１ビデオＲＡＭ（以下「ＶＲＡＭ」）２３が接続され、第２ＧＰＵ２６には、第２のビデオＲＡＭ（以下「ＶＲＡＭ」）２５が接続される。第１ＧＰＵ２４は、ＣＰＵコア２１からの指示に応じて、ＷＲＡＭ２２に記憶される画像を生成するためのデータに基づいて第１ゲーム画像を生成する。生成された第１ゲーム画像は、第１ＧＰＵ２４によって第１ＶＲＡＭ２３に描画される。第２ＧＰＵ２６は、ＣＰＵコア２１からの指示に応じて、ＷＲＡＭ２２に記憶される画像を生成するためのデータに基づいて第２ゲーム画像を生成する。生成された第２ゲーム画像は、第２ＧＰＵ２６によって第２ＶＲＡＭ２５に描画される。
【００３７】
第１ＶＲＡＭ２３は第１ＬＣＤ１１に接続され、第２ＶＲＡＭ２５は第２ＬＣＤ１２に接続される。第１ＧＰＵ２４は、ＣＰＵコア２１からの指示に応じて第１ＶＲＡＭ２３に描画された第１ゲーム画像を第１ＬＣＤ１１に出力する。そして、第１ＬＣＤ１１は、第１ＧＰＵ２４から出力された第１ゲーム画像を表示する。第２ＧＰＵ２６は、ＣＰＵコア２１からの指示に応じて第２ＶＲＡＭ２５に描画された第２ゲーム画像を第２ＬＣＤ１２に出力する。そして、第２ＬＣＤ１２は、第２ＧＰＵ２６から出力された第２ゲーム画像を表示する。
【００３８】
以下、カートリッジ１７に格納された画像処理プログラムによってゲーム装置１において実行されるゲーム処理について説明する。なお、本実施形態では、本発明に係る画像処理プログラムがゲームプログラムとしてゲーム装置によって実行される場合を例として説明する。また、本実施形態においては、タッチパネル１３によって表示画面が覆われる第１ＬＣＤ１１のみを表示装置として用いる。従って、ゲーム装置１は、第２ＬＣＤ１２を有しない構成であってもよい。
【００３９】
以下、本実施形態に係る画像処理プログラムによって実行される画像処理について説明する。この画像処理は、仮想領域（２次元または３次元）内に構築された形状モデルが弾性体のごとく変形する様子を表示する処理である。形状モデルは、ゲーム中に画像として画面に表示されるものであればどのようなものでもよく、例えば、ゲーム中に登場するゲームキャラクタを表すための形状モデルであってもよいし、ゲームのオープニング画面で表示されるゲームタイトルを表すための形状モデルであってもよい。なお、以下では、２次元の仮想平面内に配置された２次元の形状モデルを変形する場合を例として説明する。
【００４０】
まず、図３Ａ〜図３Ｄを参照して、形状モデルが変形する様子を説明する。図３Ａ〜図３Ｄは、形状モデルが表示された第１ＬＣＤ１１の画面の一例を示す図である。形状モデルは、複数の頂点によって構成される。図３Ａ〜図３Ｄでは、第１ＬＣＤ１１の画面３２に表示されている形状モデル３１は４つの頂点からなる折れ線である。なお、詳細は後述するが、本実施形態においては形状モデル３１はプレイヤの入力によって作成される。形状モデル３１の全ての頂点は、少なくとも１つの他の頂点と関連付けられて定義される。関連付けられた頂点間には、仮想バネが設定される（図４および図７参照）。仮想バネとは、当該頂点間の距離に応じて大きさが変化する仮想の力を発生させるように当該頂点間において仮想的に設定されたバネである。実際の処理においては、仮想バネは、形状モデルの形状に基づいて予め定められた基準距離（形状モデルが基準状態にあるときの頂点間の距離）と頂点間の距離との差（バネの伸縮量に相当）を入力とし、当該頂点に働く仮想の力（バネの伸縮による力に相当）を出力とするバネ関数として設定される。この仮想バネによって、形状モデルをあたかも弾性体のごとく変形させることができる。つまり、形状モデルの各頂点は仮想バネによって接続されているので、仮想バネの弾性のために頂点間の距離は可変であり、形状モデルは変形することができるのである。なお、図３に示す形状モデル３１では、線分によって結ばれる頂点が互いに関連付けられている。
【００４１】
図３Ａは、形状モデル３１が変形される前の状態を示す図である。本実施形態では、図３Ａに示す状態のように、形状モデル３１の変形が行われていない状態を基準状態と呼ぶ。ここで、本実施形態では、形状モデルは、プレイヤの操作によって変形される。具体的には、プレイヤは、形状モデルの任意の頂点を指定し、指定した頂点を移動させる操作を行うことで、形状モデルを変形させることができる。なお、頂点の指定は、所望の頂点が表示されている近傍の位置をプレイヤがスタイラス等で指定することによって行われる。指定された頂点は、プレイヤによるドラッグ操作（スタイラスがタッチパネルに接触した状態で接触位置を移動させる操作）によって移動することが可能である。なお、以下に説明する図３Ａ〜図３Ｄでは、図３Ａに示す状態において形状モデル３１の左端の頂点がプレイヤの操作によって指定される場合を考える。また、以下では、プレイヤによって指定される頂点をコントロール点と呼ぶ。コントロール点は、形状モデルの変形の基準となる頂点である。
【００４２】
図３Ｂおよび図３Ｃは、形状モデルが変形されている状態を示す図である。なお、図３Ｂ〜図３Ｄに示す点線は、前の状態（前の図に示す状態）の形状モデル３１およびスタイラスを示す。図３Ｂに示すように、プレイヤがコントロール点である頂点を左側へ移動させると、コントロール点以外の頂点は上記仮想バネから受ける仮想の力によって移動する。図３Ｂに示す状態のように、コントロール点の移動が開始した直後の状態においては、形状モデル３１は、コントロール点である頂点が移動した方向へ伸びるように変形する。
【００４３】
図３Ｃは、図３Ｂに示す状態から時間が経過し、コントロール点をさらに左側へ移動させた状態を示す図である。この状態においても図３Ｂと同様、コントロール点以外の頂点は左側へ移動している。図３Ｃにおいては、形状モデル３１は、図３Ｂに示す場合よりもさらに伸びて変形している。図３Ｄは、コントロール点の移動が停止した後の状態を示す図である。図３Ｄに示すように、コントロール点である頂点の移動が停止すると、伸びるように変形していた形状モデルが縮むように変形し始める。その後、形状モデル３１は元の形状に戻って静止する。本実施形態におけるゲーム装置１は、以上の図３Ａ〜図３Ｄに示したような変形動作を形状モデルが行う様子を表現するものである。
【００４４】
次に、図４を参照して、本実施形態において形状モデルに設定される仮想バネについて説明する。図４は、形状モデルの関連付けられた頂点間に設定される仮想バネを示す図である。図４に示すように、形状モデル３１の関連付けられた頂点間には、仮想バネ３４〜３９が設定される。ここで、１組の関連付けられた２頂点間には、形状モデルが配置される直交座標系の座標軸（ｘ軸およびｙ軸とする）の各方向に関する２つのバネが設定される。１つはｘ軸方向に関する仮想バネ（ｘ方向仮想バネ）であり、もう１つはｙ軸方向に関する仮想バネ（ｙ方向仮想バネ）である。図４においては、頂点Ｐ１と頂点Ｐ２との間にｘ方向仮想バネ３４が設定され、頂点Ｐ２と頂点Ｐ３との間にｘ方向仮想バネ３６が設定され、頂点Ｐ３と頂点Ｐ４との間にｘ方向仮想バネ３８が設定される。また、頂点Ｐ１と頂点Ｐ２との間にｙ方向仮想バネ３５が設定され、頂点Ｐ２と頂点Ｐ３との間にｙ方向仮想バネ３７が設定され、頂点Ｐ３と頂点Ｐ４との間にｙ方向仮想バネ３９が設定される。
【００４５】
ｘ方向仮想バネは、それが設定される２頂点間のｘ軸方向に関する距離に応じて仮想の力を発生する仮想バネである。ｘ方向仮想バネによって発生する仮想の力の向きは、ｘ軸方向である。一方、ｙ方向仮想バネは、それが設定される２頂点間のｙ軸方向に関する距離に応じて仮想の力を発生する仮想バネである。ｙ方向仮想バネによって発生する仮想の力の向きは、ｙ軸方向である。また、ｘ方向仮想バネとｙ方向仮想バネとは互いに独立である。すなわち、ｘ方向仮想バネにより生じる仮想の力は、当該ｘ方向仮想バネが設定される２頂点間のｙ軸方向に関する距離とは無関係であり、ｙ方向仮想バネにより生じる仮想の力は、当該ｙ方向仮想バネが設定される２頂点間のｘ軸方向に関する長さとは無関係である。
【００４６】
図４に示したように、本実施形態においては、１組の頂点の間に、直交座標系の座標軸方向を向く互いに独立した２つの仮想バネが設定される。従って、ｘ軸方向に関する仮想バネの力の計算と、ｙ軸方向に関する仮想バネの力の計算とを別々に行うことができる。つまり、本実施形態においては、２頂点間の距離を算出する計算が不要であるので、計算処理が重い２乗計算を行う必要がない。それ故、仮想バネを用いた計算が簡易になり、ゲーム装置１の処理負担が軽減される。
【００４７】
また、本実施形態においては、ｘ軸方向に関するバネの伸びと、ｙ軸方向に関するバネの伸びとは独立して処理される。例えば図３Ａ〜図３Ｄに示す形状モデル３１において頂点Ｐ１がｘ軸に平行な方向に移動された場合、ｘ方向仮想バネは伸縮するが、ｙ方向仮想バネは伸縮しない。その結果、形状モデル３１のｘ軸方向に関する長さは伸縮するが、ｙ軸方向に関する長さは変化しない。そのため、本実施形態においては、形状モデルが図３Ａ〜図３Ｄに示すような、１本の線状の形状である場合でも、元の形状をある程度保ったままで形状モデルを伸縮変形させることができる（図３Ａ〜図３Ｄ参照）。
【００４８】
一方、従来のように頂点間を直接接続する仮想バネを設定する方法では、形状モデルが元の形状を保つことができない場合がある。図５は、従来の方法において形状モデルの頂点を移動させた場合における形状モデルの変形の様子を示す図である。図５に示す形状モデル３１’の頂点Ｐ１を図３Ａと同様、ｘ軸方向に移動させた場合、従来のように頂点間を直接接続するように仮想バネを設定する方法では、頂点Ｐ２〜Ｐ４は、ｙ軸方向にも移動してしまう。その結果、形状モデル３１’がｙ軸方向にひしゃげた形状となってしまい、元の形状が著しく変化してしまうおそれがある。そのため、従来の方法では、例えばＰ１とＰ３との間やＰ２とＰ４との間にさらに仮想バネを設定しなければならなかった。これに対して、本実施形態においては、１組の頂点間に互いに独立した２つの仮想バネを設定することによって、図５に示すような極端な変形を防止することができる。
【００４９】
なお、図４における各頂点間の関連付けは、形状モデルに対して予め固定的に行われるものである。従って、図４に示した仮想バネは、形状モデルに対して予め固定的に設定される。つまり、図４に示した仮想バネは、形状モデルに常に設定されており、形状モデルの状態等によって設定されたりされなかったりするものではない。以下では、図４に示した仮想バネのように、予め固定的に関連付けが行われた各２頂点間に設定される仮想バネを第１仮想バネと呼ぶ。
【００５０】
次に、図４に示した形状モデルを第１仮想バネを用いて変形させる処理について説明する。図６は、図４に示した形状モデルが変形する様子をフレーム時間毎に示す図である。図６においては、形状モデルの頂点Ｐ１がコントロール点に指定され、頂点Ｐ１が移動されることによって形状モデルが変形する様子を説明する。図６に示す第１フレームは、形状モデルが変形する直前のフレームである。プレイヤは、この第１フレームから第２フレームまでの間に、頂点Ｐ１をコントロール点に指定し、直交座標系のｘ軸方向に平行な方向に位置Ｐａまで頂点Ｐ１を移動するものとする（図６に示す点線矢印参照）。
【００５１】
コントロール点の移動が行われた場合、ゲーム装置１は、各フレームを表示する間の処理において、（１）コントロール点の位置決定処理、（２）各仮想バネに生じる力の計算処理、（３）各頂点が受ける力の計算処理、（４）各頂点の位置決定処理という処理を順に行う。（１）コントロール点の位置決定処理は、プレイヤによって入力された位置に従ってコントロール点の位置を決定する処理である。（２）各仮想バネに生じる力の計算処理は、仮想バネの伸び（その時点における仮想バネの長さと基準状態における当該仮想バネの長さとの差分）に基づいて、仮想バネが頂点に与える力を計算する処理である。（３）各頂点が受ける力の計算処理は、（２）の処理で計算された各仮想バネによる力に基づいて、各頂点が各仮想バネから受ける力を計算する処理である。（４）各頂点の位置決定処理は、（３）の処理で計算された各頂点が受ける力に基づいて、各頂点の新たな位置を決定する処理である。以下の第２フレーム以降においては、上記（１）〜（４）の処理が各フレーム間で行われる。
【００５２】
第２フレームにおける各頂点の位置を決定する処理において、ゲーム装置１は、まず、プレイヤによる入力位置を検出することによってコントロール点の位置を決定する（上記（１）の処理）。図６の例では、プレイヤによって頂点Ｐ１が位置Ｐａまで移動させる操作が行われるので、プレイヤによる入力位置として位置Ｐａが検出され、コントロール点の位置は位置Ｐａに決定される。つまり、頂点Ｐ１の位置は位置Ｐａに決定される。
【００５３】
次に、ゲーム装置１は、各仮想バネに生じる力を、その時点における各頂点の位置に基づいて決定する（上記（２）の処理）。ここで、その時点における各頂点の位置とは、コントロール点については第２フレームにおいて検出された位置であり、その他の頂点については前のフレームで決定された位置である。つまり、頂点Ｐ１については、新たに検出された位置（位置Ｐａ）が現在の位置として用いられるが、その他の頂点Ｐ２〜Ｐ４については、第１フレームで決定（表示）された位置が現在の位置として用いられる。従って、第２フレームにおいては、頂点Ｐ１が前のフレームから移動しているので、頂点Ｐ１と頂点Ｐ２との間の仮想バネには仮想の力が生じるものとして処理される。しかし、頂点Ｐ２と頂点Ｐ３との間の仮想バネ、および、頂点Ｐ３と頂点Ｐ４との間の仮想バネには、仮想の力が生じないものとして処理される。
【００５４】
さらに、ゲーム装置１は、仮想バネに生じた力に基づいて各頂点が仮想バネから受ける力を算出し（上記（３）の処理）、算出した力に基づいてコントロール点以外の各頂点の位置を決定する（上記（４）の処理）。第２フレームにおいては、頂点Ｐ１と頂点Ｐ２との間の仮想バネの影響によって頂点Ｐ２が移動される。一方、頂点Ｐ２と頂点Ｐ３との間の仮想バネ、および、頂点Ｐ３と頂点Ｐ４との間の仮想バネには仮想の力が働かないので、頂点Ｐ３および頂点Ｐ４は移動しない。
【００５５】
第３フレームにおける各頂点の位置を決定する処理においても、ゲーム装置１は、第２フレームにおける各頂点の位置を決定する処理と同様の処理を行う。なお、第２フレームから第３フレームまでの間においては、プレイヤによるコントロール点の移動は行われないものとする。従って、コントロール点（頂点Ｐ１）の位置は、位置Ｐａのままである。また、頂点Ｐ２〜Ｐ４の位置は、その時点における各頂点の位置（すなわち、頂点Ｐ１は位置Ｐａ、頂点Ｐ２〜Ｐ４は第２フレームにおける位置）に基づいて決定される。第２フレームでは頂点Ｐ１およびＰ２が元の位置から移動しているので、第３フレームの各頂点の位置を決定する処理においては、頂点Ｐ１と頂点Ｐ２との間の仮想バネ、および、頂点Ｐ２と頂点Ｐ３との間の仮想バネには仮想の力が働くものとして処理される。従って、頂点Ｐ３の移動が開始され、頂点Ｐ２およびＰ３が移動される。ただし、第２フレームにおいては頂点Ｐ３およびＰ４が移動していないので、第３フレームにおいて頂点Ｐ３と頂点Ｐ４との間の仮想バネには仮想の力が働かないものとして処理される結果、頂点Ｐ４は移動しない。
【００５６】
第４フレームにおける各頂点の位置を決定する処理においても、ゲーム装置１は、第２および第３フレームにおける各頂点の位置を決定する処理と同様の処理を行う。第４フレームにおいては、前の第３フレームにおいて頂点Ｐ３が移動しているので、頂点Ｐ３と頂点Ｐ４との間の仮想バネには仮想の力が働くものとして処理される。従って、第４フレームにおいて頂点Ｐ４の移動が開始される。
【００５７】
以上の図６に示したように、図４に示した仮想バネを設定した形状モデルにおいては、コントロール点からの接続数が大きくなるほど、移動が開始されるフレームが遅くなることがわかる。なお、接続数とは、コントロール点とその頂点とを接続する線分の数、換言すれば、コントロール点からその頂点に到達するまでに通る線分の数を意味するものとする。従って、コントロール点が移動されても、コントロール点からの接続数が大きい頂点においては、コントロール点の移動による影響がなかなか現れないことになる。つまり、プレイヤがコントロール点の移動操作を行っても、コントロール点から遠い位置ではなかなか変形・移動が行われないのである。以上に説明した、コントロール点からの接続数が大きい頂点における追従性の悪さは、形状モデルの頂点数が増えて形状モデルが複雑になるほど、顕著になる。
【００５８】
そこで、本実施形態においては、上記第１仮想バネの他に、プレイヤによって指定される頂点に応じて可変的に設定される仮想バネ（第２仮想バネ）が用いられる。図７は、形状モデルに設定される第２仮想バネを示す図である。なお、図７においては、頂点Ｐ１がコントロール点であるとする。図７に示すように、第２仮想バネ４１〜４６は、コントロール点である頂点Ｐ１と形状モデルの他の頂点（頂点Ｐ２〜Ｐ４）との間に設定される。
【００５９】
なお、第２仮想バネも第１仮想バネと同様、第２仮想バネが設定される２頂点間には、直交座標系の座標軸（ｘ軸およびｙ軸とする）の各方向に関する２つの仮想バネが設定される。すなわち、ｘ軸方向に関する仮想バネ４１，４３，および４５と、ｙ軸方向に関する仮想バネ４２，４４，および４６とが設定される。第２仮想バネについても第１仮想バネと同様、１組の頂点間に互いに独立した２つの仮想バネを設定することによって、仮想バネを用いた計算処理を簡易にし、コンピュータの処理負担を軽減することができる。
【００６０】
図７に示したように、本実施形態においては、第１仮想バネに加えて第２仮想バネが設定される。この第２仮想バネは、コントロール点となる頂点の位置に応じて設定される頂点間が変化する、可変的に設定される仮想バネである。従って、本実施形態では、形状モデルの頂点間に対して、予め定められた固定的な関連付けが行われるとともに、コントロール点に応じて可変的に関連付けが行われる。
【００６１】
このような第２仮想バネを設定することによって、コントロール点からの接続数が大きい頂点であっても、コントロール点が移動されたフレーム（図６に示す例で言えば第２フレーム）から移動が開始されることになる。つまり、コントロール点の移動が開始された直後に、コントロール点の移動による影響が形状モデルの全体に伝わり、コントロール点からの接続数が大きい頂点の追従性を向上することができる。
【００６２】
以下、本実施形態に係る画像処理プログラムによって実行される処理の詳細について説明する。まず、当該処理を実行する際にゲーム装置１において用いられる変数およびデータについて説明する。図８は、ゲーム装置１における処理において用いられる変数を説明するための図である。図８においては、４つの頂点Ｐ１〜Ｐ４から構成される形状モデルを例にとって説明する。また、図面の煩雑化を避けるため、頂点Ｐ３に関する変数のみを記載する。図８に示されるように、当該処理においては、以下の変数が用いられる。なお、以下において、ｉは１〜ｎの整数である（ｎは形状モデルの頂点数）。
頂点Ｐ（ｉ）の位置のｘ座標値：Ｘ（ｉ）
頂点Ｐ（ｉ）の位置のｙ座標値：Ｙ（ｉ）
頂点Ｐ（ｉ＋１）と頂点Ｐ（ｉ）とのｘ軸方向に関する距離：ΔＸ（ｉ）
頂点Ｐ（ｉ＋１）と頂点Ｐ（ｉ）とのｙ軸方向に関する距離：ΔＹ（ｉ）
コントロール点と頂点Ｐ（ｉ）とのｘ軸方向に関する距離：ΔＸｃ（ｉ）
コントロール点と頂点Ｐ（ｉ）とのｙ軸方向に関する距離：ΔＹｃ（ｉ）
頂点Ｐ（ｉ）が受ける仮想の力のｘ座標成分：Ｆｘ（ｉ）
頂点Ｐ（ｉ）が受ける仮想の力のｙ座標成分：Ｆｙ（ｉ）
頂点Ｐ（ｉ）の速度のｘ座標成分：Ｖｘ（ｉ）
頂点Ｐ（ｉ）の速度のｙ座標成分：Ｖｙ（ｉ）
【００６３】
以下、本実施形態に係るゲーム装置１において実行される処理の流れを説明する。図９は、ゲーム装置１において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置１の電源が投入されると、ゲーム装置１のＣＰＵコア２１は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、ＷＲＡＭ２２等の各ユニットが初期化される。そして、カートリッジ１７に格納されたプログラムがＷＲＡＭ２２に読み込まれ、ＣＰＵコア２１によって当該プログラムの実行が開始される。図９に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【００６４】
図９では、まず、ステップ１０（図では「ステップ」を単に「Ｓ」と略す。）およびステップ１１において、変形の対象となる形状モデルが作成される。上述したように、本実施形態においては、形状モデルはプレイヤの操作によって作成される。具体的には、プレイヤがタッチパネル１３上に描いた軌跡に応じた形状の形状モデルが作成される。
【００６５】
ステップ１０においては、入力検出処理が行われる。入力検出処理は、プレイヤによってタッチパネル１３上に描かれた軌跡の入力を検出する処理である。以下、入力検出処理を図１０〜図１３を用いて説明する。
【００６６】
まず、入力検出処理の概要を図１０〜図１２を用いて説明する。図１０は、プレイヤによってタッチパネル１３上に描かれた軌跡の一例を示す図である。ここでは、プレイヤが図１０に示すような波形の図形５１をタッチパネル１３に対して入力した場合を例として説明する。図１１は、図１０に示す入力に対してゲーム装置１が読み取った入力座標を示す図である。入力検出処理においては、例えば図１０に示すような図形５１がプレイヤによって入力された場合、図１１に示す各入力点Ｔｐ１〜Ｔｐ９の座標（入力座標）がゲーム装置１によって検出される。ゲーム装置１によって検出された入力座標は、入力座標リストとしてＷＲＡＭ２２に記憶される。図１２は、入力座標リストの一例を示す図である。入力座標リストは、プレイヤによってタッチパネル１３上に入力された軌跡を表すデータである。図１２に示すように、入力座標リストには、プレイヤによってタッチパネル１３に対して入力された位置を示す入力座標が格納される。なお、当該入力座標は、Ｔｐ１，Ｔｐ２，…，Ｔｐｍ（ｍは１以上の整数）のように、プレイヤの入力順に格納される。また、ｉ番目に入力された頂点Ｔｐ（ｉ）の入力座標は、Ｘｔ（ｉ）と表される。入力検出処理は、タッチパネル１３からの入力座標に基づいて図１２に示すような入力座標リストを作成する処理である。
【００６７】
図１３は、図９に示す入力検出処理の詳細な処理の流れを示すフローチャートである。入力検出処理においては、まず、ステップ２０において、上記入力座標リストの内容がクリア（初期化）される。続くステップ２１において、タッチパネル１３に対する入力があったか否かが判定される。本実施形態では、所定時間間隔毎にプレイヤによるタッチパネル１３への入力位置が検出される。すなわち、ステップ２１が所定時間間隔で実行される。
【００６８】
ステップ２１における判定において、タッチパネル１３に対する入力がないと判定された場合、ステップ２１の処理が再度行われる。すなわち、タッチパネル１３に対する入力があるまでステップ２１の処理が所定時間間隔で行われる。一方、ステップ２１における判定において、タッチパネル１３に対する入力があったと判定された場合、ステップ２２の処理が行われる。すなわち、ステップ２２においては、ステップ２１で検出された入力座標がＷＲＡＭ２２内の入力座標リストに仮登録される。当該入力座標は、入力座標リストに格納される入力座標がプレイヤの入力順となるように、既に入力座標リストに格納されている入力座標の後に追加される。ここで、仮登録と呼んでいるのは、ステップ２１で検出された入力座標は、入力検出処理中における後述する処理によって入力座標リストから削除される可能性があるからである。
【００６９】
ステップ２２の次のステップ２３において、本登録された入力座標が入力座標リストに格納されているか否かが判定される。具体的には、ステップ２１で検出された入力座標の前に、入力座標リストに既に格納されている入力座標（本登録された入力座標）があるか否かが判定される。ステップ２３の判定において、本登録された入力座標が入力座標リストに格納されていない場合、ステップ２４の処理が行われる。すなわち、ステップ２４において、ステップ２１で検出された入力座標が入力座標リストに本登録される。なお、「本登録する」とは、以降の入力検出処理によって入力座標を削除しないという意味である。ステップ２４の後、ステップ２９の処理が行われる。
【００７０】
一方、ステップ２３の判定において、本登録された入力座標が入力座標リストに格納されている場合、ステップ２５の処理が行われる。すなわち、ステップ２５の処理において、仮登録中の入力座標（ステップ２１で検出された入力座標）と、直前に本登録された入力座標との距離が算出される。続くステップ２６において、ステップ２５で算出した距離が予め定められた所定距離以上であるか否かが判定される。ステップ２６の判定において、ステップ２５で算出した距離が予め定められた所定距離以上であると判定された場合、ステップ２７の処理が行われる。すなわち、ステップ２７において、ステップ２１で検出された入力座標が入力座標リストに本登録される。ステップ２７の後、ステップ２９の処理が行われる。一方、ステップ２６の判定において、ステップ２５で算出した距離が予め定められた所定距離以上でない（すなわち、所定距離よりも小さい）と判定された場合、ステップ２８の処理が行われる。すなわち、ステップ２８においては、ステップ２１で検出された入力座標が入力座標リストから削除される。ステップ２８の後、ステップ２９の処理が行われる。
【００７１】
以上のように、本実施形態においては、タッチパネル１３への入力が行われている際において、前回検出された入力位置と今回検出された入力位置との距離が所定距離よりも小さければ、今回検出された入力位置は削除される（ステップ２８）。従って、プレイヤによる入力軌跡を示す入力座標リストから不要なデータを削除することができるので、入力座標リストのデータ量を低減することができる。
【００７２】
ステップ２９においては、入力座標リストに格納されている各入力座標の位置を結んだ線画が第１ＬＣＤ１１に表示される。ステップ２９によって、プレイヤは、タッチパネル１３上に自身が入力した軌跡を目で確認することができる。続くステップ３０において、入力の受け付けを終了するか否かが判定される。ステップ３０の判定は、例えば、入力の受け付けを終了する旨の指示がプレイヤによって行われたか否か、あるいは、入力座標が最初に検出されてから所定時間が経過したか否か等によって判定することができる。ステップ３０の判定において、入力の受け付けを終了しないと判定された場合、ステップ２１の処理に戻る。以降、入力の受け付けを終了するまでステップ２１〜２９の処理が繰り返される。一方、ステップ３０の判定において、入力の受け付けを終了すると判定された場合、ＣＰＵコア２１は図１３に示す入力検出処理を終了する。以上の入力検出処理によって、入力座標リストが作成される。
【００７３】
図９の説明に戻り、ステップ１０の次のステップ１１において、モデル作成処理が行われる。モデル作成処理は、入力座標リストにより示される各座標点の少なくとも一部の座標点を頂点とするような形状モデルを作成する処理である。なお、ステップ１０で作成された入力座標リストの全ての入力座標の位置を頂点として形状モデルを作成してもよいが、入力座標リストに格納されている入力座標の数（形状モデルの頂点数）が多い場合には、後で行われる形状モデルを変形するための処理の処理量が大きくなってしまう。そこで、本実施形態では、モデル作成処理において、入力座標リストに格納されている入力座標のうちのいくつかを間引くことによって、入力座標リストにより示される軌跡の形状を簡易にする。
【００７４】
図１４は、図９に示すモデル作成処理の詳細な処理の流れを示すフローチャートである。モデル作成処理においては、まず、ステップ４０において、ＷＲＡＭ２２に記憶される頂点リストの内容がクリアされる。頂点リストは、形状モデルの各頂点の位置を示すデータである。つまり、頂点リストは、形状モデルの形状を示す。図１５は、頂点リストの一例を示す図である。頂点リストには、形状モデルの頂点の位置を示す座標が頂点毎に格納される。具体的には、頂点Ｐ（ｉ）に対して、当該頂点の位置のｘ座標値Ｘ（ｉ）およびｙ座標値Ｙ（ｉ）が格納される。なお、図１５に示す左側の列の「Ｃ」は、コントロール点を示すフラグである。図１５に示す頂点リストは、コントロール点は頂点Ｐ１であることを示す。ステップ４０においては、当該フラグも含め頂点リストの内容が全て消去される。
【００７５】
ステップ４０の次のステップ４１において、ステップ１０で作成された入力座標リストに格納されている入力座標のうちの連続する３つの入力座標が選出される。ここで選出されるのは、その時点の入力座標リストにおいて最初から３番目までに格納されている３つの入力座標である。続くステップ４２において、ステップ４１で選出された３つの入力座標を入力順に結んだ２つの線分のなす角度Θが算出される。続くステップ４３において、ステップ４２で算出されたΘが、次の式（１）を満たすか否かが判定される。
（１８０−ａ）≦Θ≦（１８０＋ａ）…（１）
ここで、ａは、予め定められた所定のしきい値である（ａは０以上）。ステップ４３は、上記２つの線分がほぼ直線と見なすことができるか否かを判定するための処理である。すなわち、ステップ４２で算出されたΘが上式（１）を満たす場合、当該２つの線分はほぼ直線と見なすことができ、逆に、ステップ４２で算出されたΘが上式（１）を満たさない場合、当該２つの線分はほぼ直線と見なすことはできない。
【００７６】
ステップ４３の判定において、ステップ４２で算出されたΘが上式（１）を満たすと判定された場合、ステップ４４の処理が行われる。すなわち、ステップ４４において、ステップ４１で選出された３つの入力座標のうちの中間の入力座標が入力座標リストから削除される。ステップ４４は、上記２つの線分をほぼ直線と見なし、１本と線分として取り扱うための処理である。ステップ４４の後、ステップ４７の処理が行われる。一方、ステップ４３の判定において、ステップ４２で算出されたΘが上式（１）を満たすと判定された場合、ステップ４５およびステップ４６の処理が行われる。すなわち、ステップ４５において、ステップ４１で選出された３つの入力座標のうちの最初の入力座標がＷＲＡＭ２２に記憶されている頂点リストに登録される。当該入力座標は、頂点リストに格納される座標がプレイヤの入力順となるように、既に頂点リストに格納されている座標の後に追加される。さらにステップ４６において、ステップ４５で頂点リストに登録した入力座標が入力座標リストから削除される。１つの入力座標を頂点リストに２度登録することを防止するためである。ステップ４６の後、ステップ４７の処理が行われる。
【００７７】
ステップ４７においては、ＣＰＵコア２１は、入力座標リストに格納されている全ての入力座標について処理が終了したか否かを判定する。具体的には、当該全ての入力座標がステップ４１で選出されたことがあるか否かを判定する。ステップ４７の判定において、全ての入力座標について処理が終了していないと判定された場合、ステップ４１の処理が行われる。以降、全ての入力座標について処理が終了するまで、ステップ４１〜４７の処理が繰り返される。一方、ステップ４７の判定において、全ての入力座標について処理が終了していないと判定された場合、ステップ４８の処理が行われる。すなわち、ステップ４８の判定において、頂点リストに座標が登録されている各頂点と当該各頂点を順に結んだ線分とで構成される形状モデルが第１ＬＣＤ１１に表示される。ステップ４８の後、ＣＰＵコア２１はモデル作成処理を終了する。
【００７８】
以上のモデル作成処理によって、入力座標リストの入力座標により示される点から形状モデルの頂点とすべき点が抽出される。例えば、図１１に示される各点から頂点が抽出されることによって、図８に示される形状モデルが作成される。すなわち、形状モデルの形状を示す頂点リスト（図１５）がＷＲＡＭ２２に記憶される。なお、他の実施の形態においては、ステップ４７とステップ４８との間において、その時点で入力座標リストに残っている全ての入力座標を頂点リストに登録するようにしてもよい。図１４に示す処理では、入力座標リストの最後および最後から２番目の入力座標が頂点リストに登録されないからである。
【００７９】
再び図９の説明に戻り、ステップ１１の次のステップ１２において、頂点関連付処理が行われる。頂点関連付処理とは、頂点リストにより示される形状モデルの頂点を他の頂点と関連付ける処理である。なお、本実施形態において、２頂点の関連付けは、関連付けが行われる２頂点を後述する関連付リストに格納することによって行われる。頂点関連付処理は、上記第１仮想バネを設定する２頂点の組を第１関連付リスト（図１７）に格納することによって第１関連付リストを作成する処理である。なお、本実施形態では、各頂点は、頂点リストに格納された順番に関して前後の頂点に関連付けられる。
【００８０】
図１６は、図９に示す頂点関連付処理の詳細な処理の流れを示すフローチャートである。頂点関連付処理においては、まず、ステップ５０において、ＷＲＡＭ２２に記憶される第１関連付リストの内容がクリアされる。第１関連付リストは、第１仮想バネが設定される各頂点間およびその基準距離を示すデータである。図１７は、第１関連付リストの一例を示す図である。第１関連付リストには、第１仮想バネが設定される２頂点の組（図１７に示すリストの左側の２列）と、その２頂点間のｘ軸方向に関する距離（図１７に示すリストの右から２列目）およびｙ軸方向に関する距離（図１７に示すリストの右端の列）とが組毎に格納される。また、頂点Ｐ（ｉ＋１）と頂点Ｐ（ｉ）とのｘ軸方向に関する距離はΔＸ（ｉ）で表され、頂点Ｐ（ｉ＋１）と頂点Ｐ（ｉ）とのｙ軸方向に関する距離はΔＹ（ｉ）で表される。
【００８１】
ステップ５１において、前述のステップ１１で作成された頂点リスト（図１５参照）から連続する２つの頂点が選出される。ステップ５１では、第１仮想バネが設定される２頂点の組であって、ステップ５１でまだ選出されていない組が選出される。続くステップ５２において、ステップ５１で選出した２頂点について、当該２頂点間の距離が座標成分毎に分けて算出される。具体的には、ステップ５１で選出された２頂点を頂点Ｐ（ｉ）および頂点Ｐ（ｉ＋１）とすると、当該２頂点間の距離のｘ座標成分ΔＸ（ｉ）およびｙ座標成分ΔＹ（ｉ）は、次の式（２）によって算出される。
ΔＸ（ｉ）＝Ｘ（ｉ）−Ｘ（ｉ＋１）
ΔＹ（ｉ）＝Ｙ（ｉ）−Ｙ（ｉ＋１）…（２）
ここで、Ｘ（ｉ）、Ｘ（ｉ＋１）、Ｙ（ｉ）、およびＹ（ｉ＋１）は、頂点リストを参照することによって得ることができる。なお、ステップ５２で算出される距離（ΔＸ（ｉ），ΔＹ（ｉ））は、形状モデルが基準状態にある場合の当該２頂点間の距離、すなわち、基準距離である。さらに、ステップ５３において、ＣＰＵコア２１は、ステップ５２で算出された基準距離（ΔＸ（ｉ），ΔＹ（ｉ））を第１関連付リスト（図１７）に登録する。
【００８２】
ステップ５３の次のステップ５４において、第１仮想バネが設定される２頂点の全ての組について基準距離を算出したか否かが判定される。基準距離を算出していない組がある場合、処理はステップ５１に戻り、全ての組について基準距離を算出するまでステップ５１〜５３の処理が繰り返される。一方、全ての組について基準距離を算出した場合、ＣＰＵコア２１は、頂点関連付処理を終了する。この頂点関連付処理によって、第１関連付リスト（図１７）が作成される。
【００８３】
再び図９の説明に戻り、上記ステップ１０および１１の処理によって形状モデルが作成され、ステップ１２の処理によって形状モデルの頂点間の関連付けが行われる。これらのステップ１０〜１２の完了によって、形状モデルの変形を行うための準備処理が完了したこととなる。なお、他の実施形態においては、ステップ１０および１１の処理を省略し、予め用意された形状モデルを用いて以降のステップ１３〜１７を行うようにしてもよい。さらに、ステップ１０〜１２の処理を省略し、予め関連付けが行われた形状モデルを用いて以降のステップ１３〜１７を行うようにしてもよい。以降のステップ１３〜１７は、プレイヤが指定したコントロール点を基準として形状モデルが変形する様子を表現するための処理である。
【００８４】
ステップ１２の次のステップ１３においては、タッチパネル１３への入力があったか否かが判定される。ここでの入力は、プレイヤがコントロール点を指定するための入力である。ステップ１３の判定において、タッチパネル１３に対する入力がないと判定された場合、ステップ１３の処理が再度行われる。すなわち、タッチパネル１３に対する入力があるまでステップ１３の処理が所定時間間隔で行われる。一方、ステップ１３における判定において、タッチパネル１３に対する入力があったと判定された場合、ステップ１４の処理が行われる。すなわち、ステップ１４においては、コントロール点設定処理が行われる。コントロール点設定処理は、プレイヤによる指定に基づいてコントロール点を設定する処理である。
【００８５】
図１８は、図９に示すコントロール点設定処理の詳細な処理の流れを示すフローチャートである。コントロール点設定処理においては、まず、ステップ６０において、プレイヤによって指定された座標が検出される。ここで検出される座標は、直前のステップ１３で入力された座標である。続くステップ６１において、ステップ６０で検出された座標と、前述のステップ１１で作成された頂点リスト（図１５）に格納されている各頂点の座標との距離が頂点毎に算出される。続くステップ６２において、ステップ６１で算出した距離が最も小さい頂点がコントロール点に設定される。具体的には、頂点リストにおける当該頂点にフラグ（図１５に示す「Ｃ」）が設定される。以上のステップ６０〜６２の完了によってＣＰＵコア２１はコントロール点設定処理を終了する。
【００８６】
再び図９の説明に戻り、ステップ１４の次のステップ１５において、コントロール点関連付処理が行われる。コントロール点関連付処理とは、コントロール点として指定された頂点と形状モデルの全頂点とを関連付ける処理である。コントロール点関連付処理は、上記第２仮想バネを設定する２頂点の組を第２関連付リスト（図２０）に格納することによって第２関連付リストを作成する処理である。
【００８７】
図１９は、図９に示すコントロール点関連付処理の詳細な処理の流れを示すフローチャートである。コントロール点関連付処理においては、まず、ステップ７０において、第２関連付リストがクリアされる。第２関連付リストは、第２仮想バネが設定される各頂点間およびその基準距離を示すデータである。図２０は、第２関連付リストを示す図である。第２関連付リストには、第２仮想バネが設定される２頂点の組（図２０に示すリストの左側の２列）と、その２頂点間のｘ軸方向に関する距離（図２０に示すリストの右から２列目）およびｙ軸方向に関する距離（図１７に示すリストの右端の列）とが２頂点間毎に格納される。また、コントロール点Ｃと頂点Ｐ（ｉ）とのｘ軸方向に関する距離はΔＸｃ（ｉ）で表され、コントロール点Ｃと頂点Ｐ（ｉ）とのｙ軸方向に関する距離はΔＹｃ（ｉ）で表される。なお、本実施形態においては、コントロール点である頂点とそれと同一の頂点との間にも関連付けが行われるが、コントロール点である頂点とそれと同一の頂点との間の関連付けはなくてもよい。
【００８８】
ステップ７１においては、頂点リストから１つの頂点の座標が選出される。ステップ７１では、まだ選出されていない頂点であって、頂点リストに格納されている順番が最も若い頂点が選出される。続くステップ７２において、ステップ７１で選出した頂点とコントロール点との間の距離が座標成分毎に分けて算出される。具体的には、ステップ７１で選出された頂点を頂点Ｐ（ｉ）と頂点Ｐ（ｉ＋１）とすると、当該頂点とコントロール点との間の距離のｘ座標成分ΔＸｃ（ｉ）およびｙ座標成分ΔＹｃ（ｉ）は、次の式（３）によって算出される。
ΔＸｃ（ｉ）＝Ｘｃ−Ｘ（ｉ）
ΔＹｃ（ｉ）＝Ｙｃ−Ｙ（ｉ）…（３）
ここで、Ｘｃはコントロール点である頂点のｘ座標値であり、Ｙｃは当該頂点のｙ座標値である。従って、Ｘｃ、Ｘ（ｉ）、Ｙｃ、およびＹ（ｉ）は、頂点リストを参照することによって得ることができる。なお、ステップ７２で算出される距離（ΔＸｃ（ｉ），ΔＹｃ（ｉ））は、形状モデルが基準状態にある場合におけるコントロール点と各頂点との間の距離、すなわち、基準距離である。ここでは、コントロール点と各頂点との間の基準距離を特にコントロール点間基準距離と呼ぶ。次に、ステップ７３において、ＣＰＵコア２１は、ステップ７２で算出されたコントロール点間基準距離（ΔＸｃ（ｉ），ΔＹｃ（ｉ））を第２関連付リスト（図２０）に登録する。
【００８９】
ステップ７３の次のステップ７４において、頂点リストに格納されている全ての頂点についてコントロール点間基準距離を算出したか否かが判定される。コントロール点間基準距離を算出していない頂点がある場合、処理はステップ７１に戻り、全ての頂点についてコントロール点間基準距離を算出するまでステップ７１〜７３の処理が繰り返される。一方、全ての頂点についてコントロール点間基準距離を算出した場合、ＣＰＵコア２１は、コントロール点間関連付処理を終了する。
【００９０】
再び図９の説明に戻り、ステップ１５の次のステップ１６において、頂点移動処理が行われる。頂点移動処理は、コントロール点の移動に応じた形状モデルの各頂点の移動先を、仮想バネを用いて決定する処理である。
【００９１】
図２１は、図９に示す頂点移動処理の詳細な処理の流れを示すフローチャートである。頂点移動処理においては、まず、ステップ８０において、バネ力リストがクリアされる。図２２は、バネ力リストを示す図である。バネ力リストには、形状モデルの各頂点が仮想バネから受ける力が座標軸成分毎に分けて格納される。バネ力リストにおいては、頂点Ｐ（ｉ）が受ける力のｘ座標成分はＦｘ（ｉ）で表され、ｙ座標成分はＦｙ（ｉ）で表される。
【００９２】
ステップ８１において、コントロール点が移動したか否かが判定される。具体的には、ＣＰＵコア２１は、タッチパネル１３への入力が行われた位置を示す座標をタッチパネル１３から取得する。そして、取得した座標が、前回のステップ８１において取得した座標と同じであるか否かを判定する。なお、ステップ８１の処理が最初に行われる場合には、前回のステップ８１において取得した座標に代えて、直前のステップ１３において検出される座標を用いる。また、タッチパネル１３への入力が検出されなかった場合、コントロール点が移動していないと判定する。
【００９３】
ステップ８１の判定において、コントロール点が移動していないと判定された場合、ステップ８２および８３の処理がスキップされ、ステップ８４の処理が行われる。一方、ステップ８１の判定において、コントロール点が移動したと判定された場合、ステップ８２および８３の処理が行われる。すなわち、ステップ８２において、コントロール点の移動量（ΔＸｄ，ΔＹｄ）が算出される。コントロール点の移動量は、直前のステップ８１でタッチパネル１３から取得された座標と、その前のステップ８１で取得した座標とを用いて算出される。具体的には、直前のステップ８１でタッチパネル１３から取得された座標を（Ｘｄ１，Ｙｄ１）とし、その前のステップ８１で取得した座標を（Ｘｄ２，Ｙｄ２）とすると、コントロール点の移動量（ΔＸｄ，ΔＹｄ）は、次の式（４）によって算出される。
ΔＸｄ＝Ｘｄ１−Ｘｄ２
ΔＹｄ＝Ｙｄ１−Ｙｄ２…（４）
次に、ステップ８３において、コントロール点に設定されている頂点の座標が更新される。具体的には、頂点リスト内の当該頂点の座標が更新される。
【００９４】
上記ステップ８３で説明したように、本実施形態では、コントロール点である頂点の位置は、プレイヤによる指定によって決定され、仮想バネの影響を受けない。従って、プレイヤは、コントロール点の位置を操作することによって形状モデルを容易に移動させることができる。
【００９５】
ステップ８４においては、ｘ方向に関する位置決定処理が行われる。ｘ方向に関する位置決定処理は、形状モデルの各頂点のｘ軸方向に関する位置を決定するための処理である。当該処理においては、ｘ方向仮想バネが用いられる。なお、ｘ方向に関する位置決定処理においては、「ｘ軸方向に関する第１仮想バネ」を「ｘ方向第１仮想バネ」と呼び、「ｘ軸方向に関する第２仮想バネ」を「ｘ方向第２仮想バネ」と呼ぶ。
【００９６】
図２３は、図２１に示すｘ方向に関する位置決定処理の詳細な処理の流れを示すフローチャートである。ｘ方向に関する位置決定処理においては、まず、ステップ９０において、第１力計算処理が行われる。第１力算出処理は、頂点間に設定されるｘ方向第１仮想バネが各頂点に加える力を算出する処理である。
【００９７】
図２４は、図２３に示す第１力計算処理の詳細な処理の流れを示すフローチャートである。第１力計算処理においては、まず、ステップ１００において、頂点リストから連続する２つの頂点が選出される。ステップ１００では、ｘ方向第１仮想バネが設定される２頂点の組であって、まだ選出されていない組が選出される。なお、ステップ１００において選出された頂点のうちの頂点リストにおける順番が若い方の頂点を第１頂点と呼び、他方の頂点を第２頂点と呼ぶ。
【００９８】
ステップ１０１においては、ステップ１００で選出された２頂点間のｘ軸方向に関する距離が算出される。具体的には、第１頂点Ｐ（ｉ）と第２頂点Ｐ（ｉ＋１）との間のｘ軸方向に関する距離ΔＸ（ｉ）’は、以下の式（５）によって算出することができる。
ΔＸ（ｉ）’＝Ｘ（ｉ）−Ｘ（ｉ＋１）…（５）
ここで、Ｘ（ｉ）およびＸ（ｉ＋１）は、頂点リスト（図１５）を参照することによって得ることができる。
【００９９】
ステップ１０２においては、第１頂点Ｐ（ｉ）と第２頂点Ｐ（ｉ＋１）との間のｘ軸方向に関する現在の頂点間距離と基準距離との差分が算出される。具体的には、当該頂点間距離ΔＸ（ｉ）’と当該基準距離ΔＸ（ｉ）との差分Ｄ（ｉ）は、Ｄ（ｉ）＝ΔＸ（ｉ）’−ΔＸ（ｉ）として算出される。なお、この基準距離ΔＸ（ｉ）は、上記第１関連付リストを参照することによって得ることができる。
【０１００】
ステップ１０３においては、ステップ１００で選出された２頂点間に設定されるｘ方向第１仮想バネから上記第１頂点が受ける力が算出される。ここで、頂点間に設定された仮想バネから頂点が受ける力は、仮想バネの「バネの力」（上記差分Ｄ（ｉ）に比例する力）と、仮想バネに働く減衰力（頂点の速度Ｖｘ（ｉ）に比例する力）との和である。従って、頂点Ｐ（ｉ）と頂点Ｐ（ｉ＋１）との間に設定される第１仮想バネから第１頂点が受ける力Ｆｘ（ｉ）は、以下の式（６）によって算出することができる。
Ｆｘ（ｉ）＝−ｋｘ×Ｄ（ｉ）−ｄｘ×Ｖｘ（ｉ）…（６）
ここで、ｋｘはｘ方向第１仮想バネのバネ係数であり、ｄｘはｘ方向第１仮想バネの減衰係数である。ｋｘおよびｄｘは、予め定められた定数であり、ともに０以上の値である。本実施形態では、ｘ方向第１仮想バネのバネ係数および減衰係数は全て同じ値（ｋｘ、ｄｘ）であるとする。なお、他の実施の形態においては、仮想バネ毎にバネ係数の値を異ならせるようにしてもよい。また、本実施形態では、バネの力（上式（６）の右辺の第１項）に加えてバネの減衰力（右辺の第２項）をも考慮して、仮想バネから頂点が受ける力を算出したが、他の実施形態では、減衰力を無視してバネの力のみから当該力を算出するようにしてもよい。
【０１０１】
また、上式（６）におけるＶｘ（ｉ）は、頂点Ｐ（ｉ）の速度である。形状モデルの各頂点の速度は、速度リストとしてＷＲＡＭ２２に格納される。図２５は、速度リストを示す図である。速度リストには、形状モデルの各頂点の速度が座標軸成分毎に分けて格納される。速度リストにおいては、頂点Ｐ（ｉ）の速度のｘ座標成分はＶｘ（ｉ）で表され、ｙ座標成分はＶｙ（ｉ）で表される。
【０１０２】
図２４の説明に戻り、上記ステップ１０３で算出された力は、バネ力リストに格納される。すなわち、ステップ１０３で算出された力Ｆｘ（ｉ）が頂点Ｐ（ｉ）と対応付けられてバネ力リストに格納される。
【０１０３】
ステップ１０４においては、ステップ１００で選出された２頂点間に設定されるｘ方向第１仮想バネから上記第２頂点が受ける力が算出される。具体的には、頂点Ｐ（ｉ）と頂点Ｐ（ｉ＋１）との間に設定される第１仮想バネから第２頂点が受ける力Ｆｘ（ｉ＋１）は、以下の式（７）によって算出することができる。
Ｆｘ（ｉ＋１）＝−ｋｘ×（ΔＸ（ｉ）’−ΔＸ（ｉ））−ｄｘ×Ｖｘ（ｉ＋１）…（７）
なお、上記ステップ１０４で算出された力は、既に格納されているバネ力リストの内容（Ｆｘ（ｉ））に足し合わされ、足し合わされた結果がバネ力リストに新たなＦｘ（ｉ）として格納される。ステップ１０３および１０４の処理によって、第１力算出処理の終了時には、頂点に接続される全ての第１仮想バネから当該頂点が受ける力の和がバネ力リストに格納されることとなる。
【０１０４】
ステップ１０５においては、第１仮想バネが設定される頂点の組の全てについて、頂点が受ける力を算出したか否かが判定される。頂点が受ける力を算出していない組がある場合、全ての組について当該力を算出するまでステップ１０１〜１０４の処理が繰り返される。一方、全ての組について当該力を算出した場合、ＣＰＵコア２１は、図２４に示す第１力算出処理を終了する。
【０１０５】
図２３の説明に戻り、ステップ９０の次のステップ９１において、第２力算出処理が行われる。第２力算出処理は、コントロール点と頂点との間に設定されるｘ方向第２仮想バネが各頂点に加える力を算出する処理である。
【０１０６】
図２６は、図２３に示す第２力計算処理の詳細な処理の流れを示すフローチャートである。第２力計算処理においては、まず、ステップ１１０において、頂点リストから１つの頂点が選出される。ステップ１１０では、まだ選出されていない頂点であって、頂点リストに格納されている順番が最も若い頂点が選出される。
【０１０７】
ステップ１１１においては、ステップ１１０で選出された頂点とコントロール点との間のｘ軸方向に関する距離が算出される。具体的には、頂点Ｐ（ｉ）とコントロール点との間のｘ軸方向に関する距離ΔＸｃ（ｉ）’は、以下の式（８）によって算出することができる。
ΔＸｃ（ｉ）’＝Ｘｃ（ｉ）−Ｘｃ…（８）
ここで、Ｘｃ（ｉ）は、第２関連付リストを参照することによって得ることができる。また、Ｘｃは、コントロール点である頂点のｘ座標値であるので、頂点リスト（図１５）を参照することによって得ることができる。
【０１０８】
ステップ１１２においては、ステップ１１０で選出された頂点とコントロール点との間のｘ軸方向に関する現在の頂点間距離と基準距離との差分が算出される。具体的には、当該頂点間距離ΔＸｃ（ｉ）’と当該基準距離ΔＸｃ（ｉ）との差分Ｄｃ（ｉ）は、Ｄｃ（ｉ）＝ΔＸｃ（ｉ）’−ΔＸｃ（ｉ）として算出される。なお、この基準距離ΔＸｃ（ｉ）は、上記第２関連付リストを参照することによって得ることができる。
【０１０９】
ステップ１１３においては、ステップ１１０で選出された頂点に設定されるｘ方向第２仮想バネから当該頂点が受ける力が算出される。ここで、上述したように、頂点間に設定された仮想バネから頂点が受ける力は、仮想バネの「バネの力」と、仮想バネに働く減衰力との和である。従って、頂点Ｐ（ｉ）とコントロール点との間に設定される第２仮想バネから頂点Ｐ（ｉ）が受ける力Ｆｘ（ｉ）’は、以下の式（９）によって算出することができる。
Ｆｘ（ｉ）’＝−ｋｘ’×Ｄｃ（ｉ）−ｄｘ×Ｖｘ（ｉ）…（９）
ここで、ｋｘ’はｘ方向第２仮想バネのバネ係数であり、予め定められた０以上の定数である。なお、本実施形態では、ｘ方向第２仮想バネのバネ係数および減衰係数は全て同じ値（ｋｘ’、ｄｘ）であるとするが、他の実施の形態においては、仮想バネ毎にバネ係数の値を異ならせるようにしてもよい。
【０１１０】
次に、ステップ１１４において、ステップ１１０で選出された頂点がそれに設定される各仮想バネから受ける力の総和が算出される。具体的には、ＣＰＵコア２１は、ステップ１１３で算出された力を、既に格納されているバネ力リストの内容（ステップ１０３および１０４で格納された内容）に足し合わせる。そして、足し合わせた結果をバネ力リストに格納する。これによって、バネ力リストの内容は、その頂点に接続される全ての第１仮想バネおよび第２仮想バネから当該頂点が受ける力の総和を示すことになる。
【０１１１】
ステップ１１４の次のステップ１１５においては、頂点リストに格納されている全ての頂点をステップ１１０で選出したか否かが判定される。選出していない頂点がある場合、処理はステップ１１０に戻り、全ての頂点が選出されるまでステップ１１１〜１１４の処理が繰り返される。一方、全ての頂点が選出された場合、ＣＰＵコア２１は、第２力算出処理を終了する。
【０１１２】
図２３の説明に戻り、以上のステップ９０および９１によって、各頂点が受ける力（ｘ軸方向を向く力）の和が算出されてバネ力リストに格納される。そこで、ステップ９１の次のステップ９２においては、ｘ座標決定処理が行われる。ｘ座標更新処理は、頂点が仮想バネから受ける力に基づいて、各頂点を移動させるべき位置のｘ座標を決定する処理である。
【０１１３】
図２７は、図２３に示すｘ座標決定処理の詳細な処理の流れを示すフローチャートである。ｘ座標決定処理においては、まず、ステップ１２０において、頂点リストからコントロール点以外の１つの頂点の座標が選出される。具体的には、ステップ１２０でまだ選出されていない頂点であって、頂点リストに格納されている順番が最も若い頂点が選出される。なお、コントロール点を選出しない理由は、コントロール点の位置は前述のステップ８３で決定されるからである。
【０１１４】
ステップ１２１においては、選出された頂点のｘ軸方向の加速度が算出される。頂点のｘ軸方向の加速度は、当該頂点が仮想バネから受ける力に基づいて算出することができる。具体的には、頂点Ｐ（ｉ）のｘ軸方向の加速度Ａｘ（ｉ）は、頂点Ｐ（ｉ）の質量をｍ（ｉ）とすると、バネ力リストに格納されている力Ｆｘ（ｉ）に基づいて以下の式（１０）によって算出することができる。
Ａｘ（ｉ）＝（Ｆｘ（ｉ）−ｄ×Ｖｘ（ｉ）’）／ｍ（ｉ）…（１０）
ここで、ｄは空気抵抗係数である。また、Ｖｘ（ｉ）’は頂点Ｐ（ｉ）の速度である。ただし、上式（１０）で用いられるＶｘ（ｉ）’は、後述するステップ１２２において更新される前の値である。
【０１１５】
ステップ１２２においては、選出された頂点のｘ軸方向の速度が算出される。頂点のｘ軸方向の速度は、ステップ１２１で算出された当該頂点の速度に基づいて算出することができる。具体的には、頂点Ｐ（ｉ）のｘ軸方向の速度Ｖｘ（ｉ）は、加速度Ａｘ（ｉ）に基づいて以下の式（１１）によって算出することができる。
Ｖｘ（ｉ）＝Ｖｘ（ｉ）’＋Ａｘ（ｉ）×Δｔ…（１１）
ここで、Δｔは、形状モデルの表示画像を更新する時間間隔、すなわちフレーム時間である。なお、ＣＰＵコア２１は、ステップ１２２で頂点Ｐ（ｉ）について新たな速度が算出されると、算出された速度に速度リストの内容を更新する。
【０１１６】
ステップ１２３においては、選出された頂点のｘ座標をステップ１２２で算出された速度に基づいて算出する。具体的には、頂点Ｐ（ｉ）のｘ座標値Ｘ（ｉ）は、次の式（１２）に従って算出される。
Ｘ（ｉ）＝Ｘ（ｉ）’＋Ｖｘ（ｉ）×Δｔ…（１２）
ここで、Ｘ（ｉ）’は、このステップ１２３で新たなｘ座標が算出される前の頂点Ｐ（ｉ）のｘ座標である。Ｘ（ｉ）’は、頂点リスト（図１５）の内容を参照することによって得ることができる。ＣＰＵコア２１は、ステップ１２３で頂点Ｐ（ｉ）について新たなｘ座標が算出されると、算出されたｘ座標に頂点リストの内容を更新する。以上のステップ１２１〜１２３によって、ステップ１２０で選出された頂点のｘ座標が新たな位置に更新される。
【０１１７】
ステップ１２４において、頂点リストに格納されている全ての頂点についてｘ座標を算出したか否かが判定される。ｘ座標を算出していない頂点がある場合、処理はステップ１２０に戻り、全ての頂点についてｘ座標を算出するまでステップ１２０〜１２４の処理が繰り返される。一方、全ての頂点についてｘ座標を算出した場合、ＣＰＵコア２１は、ｘ座標決定処理を終了する。また、これによって図２３に示すｘ方向に関する位置決定処理が終了する。
【０１１８】
図２１の説明に戻り、上記ステップ８４のｘ方向に関する位置決定処理によって、形状モデルの各頂点のｘ軸方向に関する新たな位置（ｘ座標）が決定される。ステップ８４の次にステップ８５においては、ｙ方向に関する位置決定処理が行われる。ｙ方向に関する位置決定処理は、形状モデルの各頂点のｙ軸方向に関する位置を決定するための処理である。ｙ方向に関する位置決定処理は、ｘ軸方向であるかｙ軸方向であるかの違いを除いて、上述したｘ方向に関する位置決定処理と同様の処理であるので、詳細な説明を省略する。
【０１１９】
以上に示したｘ方向に関する位置決定処理（ステップ８４）およびｙ方向に関する位置決定処理（ステップ８５）においては、各仮想バネによって生じる仮想の力、仮想バネによって頂点に与えられる仮想の力、および、仮想の力による頂点の移動先の位置が、ｘ軸方向およびｙ軸方向について独立して、つまり、座標成分毎に算出される。従って、仮想バネによって生じる仮想の力に関する計算は、向きが平行な力同士の加算によって行われるので、ステップ９０および９１からも明らかなように、本実施形態における処理では２乗計算や平方根計算が必要でないことがわかる。また、移動先の各頂点の位置も、座標成分毎の仮想の力を用いて座標成分毎に計算されるので、２乗計算や平方根計算を用いずに計算することができる。
【０１２０】
上記ステップ８４および８５によって、形状モデルの各頂点の新たな位置（ｘ座標およびｙ座標）が決定する。従って、ステップ８５の処理が完了した時点で、頂点リストは、各頂点の新たな位置を示す内容に更新されている。ステップ８６においては、この頂点リストに基づいて形状モデルの表示を更新する。具体的には、頂点リストの各頂点の位置を、頂点リストにより示される位置に更新して第１ＬＣＤ１１に表示する。
【０１２１】
ステップ８６の次のステップ８７において、形状モデルは前の状態から変形したか否かが判定される。すなわち、ＣＰＵコア２１は、ステップ８６で表示が更新された形状モデルは、更新前の状態（すなわち、１フレーム前の状態）と形状が同じであるか否かが判定される。ステップ８７の判定は、例えば、１フレーム前の形状モデルの各頂点の位置を記憶しておき、更新前後の各頂点の位置を比較することによって行われてもよいし、バネ力リストに格納されている力が全て０であるか否かによって行われてもよい。形状モデルは、コントロール点の移動が停止した後でもしばらくの間は、元の形状（基準状態の形状）に戻るように変形を行い、元の形状に戻ると静止する（図３Ｃおよび図３Ｄ参照）。ステップ８７は、形状モデルが元の形状に戻り静止しているか否かを判定するための処理である。
【０１２２】
ステップ８７の判定において、形状モデルが前の状態から変形している場合、処理はステップ８０に戻る。以降、形状モデルが元の形状に戻って静止するまで、ステップ８０〜８７の処理が繰り返される。一方、ステップ８７の判定において、形状モデルが前の状態から変形していない場合、ＣＰＵコア２１は、図２１に示す頂点移動処理を終了する。
【０１２３】
再び図９の説明に戻り、ステップ１６の頂点移動処理の次に、ステップ１７の処理が行われる。すなわち、ステップ１７において、ゲーム処理を終了するか否かが判定される。ステップ１７の判定は、例えば、ゲームを終了する指示がプレイヤによって行われたか否かによって行われる。ゲーム処理を終了しないと判定された場合、処理はステップ１３に戻り、ゲーム終了までステップ１３からステップ１７の処理が繰り返される。一方、ゲーム処理を終了すると判定された場合、ＣＰＵコア２１は、図９に示す処理を終了する。以上で、ゲーム装置１において実行されるゲーム処理の説明を終了する。
【０１２４】
以上のように、本実施形態によれば、ｘ軸方向に関する仮想バネの力の計算（図２１に示すステップ８４）と、ｙ軸方向に関する仮想バネの力の計算（図２１に示すステップ８５）とを別々に行うことができる。従って、上述したゲーム処理の説明からも明らかなように、本実施形態では２乗計算や平方根計算等の計算が不要である。それ故、仮想バネを用いた計算処理を従来に比べて非常に簡易な計算で行うことが可能になる。特に、処理能力が高くない携帯機器においては本実施形態に係る画像処理プログラムが有効である。
【０１２５】
また、本実施形態によれば、第２仮想バネを設定することによって、コントロール点と直接接続されていない頂点についての追従性を向上することができる。これによって、弾性体のごとく変形する形状モデルをより自然に見えるように表現することができる。
【０１２６】
なお、本実施形態ではコントロール点の位置はプレイヤによって決められたが、他の実施形態においては、画像処理プログラムにおいて予め定められたアルゴリズムに従ってコントロール点の位置を決定するようにしてもよい。
【０１２７】
なお、上記の実施形態では、コントロール点の移動が停止した場合であっても、形状モデルの変形が続いている間は、コントロール点がそのまま設定され、コントロール点である頂点の位置は移動しないように処理された（図２６に示すｘ座標決定処理において、コントロール点である頂点の座標は更新されないため）。ここで、他の実施形態においては、コントロール点の移動が完了した後は、コントロール点の設定を外すようにしてもよい。すなわち、コントロール点の移動が完了した後は、コントロール点に指定されたいた頂点についても仮想バネの力によってその位置が移動されるようにしてもよい。具体的には、図２０のステップ８０の判定結果が否定であった場合、図２６のステップ１２０でコントロール点であった頂点も選出対象とするようにしてもよい。また、コントロール点の移動が完了したか否かの判定は、プレイヤによるタッチパネル１３への入力位置が前回検出した位置から変化しなくなったか否かによって行われてもよいし、プレイヤによるタッチパネル１３への入力がなくなったか否かによって行われてもよい。
【０１２８】
また、本実施形態においては、２次元の直交座標系に配置された２次元の形状モデルを変形する場合を例として説明したが、３次元の直交座標系に配置された３次元の形状モデルを変形する場合も本実施形態と同様に処理することが可能である。図２８は、３次元の形状モデルにおける頂点間に設定される仮想バネを示す図である。３次元の形状モデルを対象とする場合、直交座標系の次数と同数、すなわち３つの仮想バネが１組の頂点間に設定される。すなわち、図２８に示すように、頂点Ｐ１と頂点Ｐ２という１組の頂点間に、ｘ軸方向に関する仮想バネ５５、ｙ軸方向に関する仮想バネ５６、およびｚ方向に関する仮想バネ５７が設定される。また、３次元の形状モデルを処理対象とする場合は、ｘ方向に関する位置決定処理（上記ステップ８４）およびｙ方向に関する位置決定処理（上記ステップ８５）に加えて、ｚ方向に関する位置決定処理を行う必要があるが、この位置決定処理も上記ステップ８４と同様の処理である。
【０１２９】
また、本実施形態においては、線分によって全ての頂点が接続されている形状モデルを例として説明した。すなわち、図４等に示した形状モデルは、任意の頂点から線分を辿ることによって全ての頂点に到達することが可能な形状であった。ここで、形状モデルは線分によって全ての頂点が必ずしも接続されている必要はない。図２９は、形状モデルの他の例を示す図である。図２９に示す形状モデル６１は、頂点Ｐ１から頂点Ｐ５を順に線分によって接続した部分と、頂点Ｐ６と頂点Ｐ７とを線分によって接続した部分とからなる（この形状モデル６１は、頂点Ｐ１から頂点Ｐ５を順に線分によって接続した１つの形状モデルと、頂点Ｐ６と頂点Ｐ７とを線分によって接続した１つの形状モデルという２つの形状モデルであると捉えてもよい。）。このような形状モデルの場合、頂点関連付処理（ステップ１２）では、線分によって結ばれる２頂点の間に仮想バネを設定することに加えて、上記２つの部分を接続するように仮想バネを設定すればよい。つまり、任意の頂点から仮想バネを辿ることによって全ての頂点に到達することが可能となるように、仮想バネを設定すればよい。図２９に示す例では、頂点Ｐ３と頂点Ｐ６との間、および、頂点Ｐ４と頂点Ｐ７との間に仮想バネが設定されている。図２９に示すように、形状モデルは、２つの部分からなる構成であってもよい。従って、接続されていない複数の部分からなる図形や文字（例えば漢字）がプレイヤによって入力された場合であっても、その図形や文字を形状モデルとして変形することが可能である。
【０１３０】
図３０Ａおよび図３０Ｂは、バネの伸びと時間との関係を示すグラフを示す図である。図３０Ａおよび図３０Ｂにおいて、縦軸はバネの伸び（Δｘ）であり、横軸は時間（ｔ）である。形状モデルの各頂点の挙動としては、図３０Ａのように振動を行いながら徐々に減衰していくような挙動、および、図３０Ｂのように振動せずに単に減衰していくような挙動となることが考えられる。形状モデルの頂点がいずれの挙動となるかは、仮想バネのバネ係数や減衰係数、頂点の質量、空気抵抗等の種々の定数の値の設定の仕方によって変化するものであり、いずれの挙動となるように各変数を設定してもよい。
【産業上の利用可能性】
【０１３１】
本発明は、モデルがあたかも弾性体のように変形する処理を行う画像処理装置、または、それにおいて実行される画像処理プログラムとして利用することが可能である。
【図面の簡単な説明】
【０１３２】
【図１】本発明の一実施形態に係る画像処理装置の一例である携帯型のゲーム装置の外観図
【図２】ゲーム装置１の内部構成を示すブロック図
【図３Ａ】形状モデルが表示された第１ＬＣＤ１１の画面の一例を示す図
【図３Ｂ】形状モデルが表示された第１ＬＣＤ１１の画面の一例を示す図
【図３Ｃ】形状モデルが表示された第１ＬＣＤ１１の画面の一例を示す図
【図３Ｄ】形状モデルが表示された第１ＬＣＤ１１の画面の一例を示す図
【図４】形状モデルの関連付けられた頂点間に設定される仮想バネを示す図
【図５】従来の方法において形状モデルの頂点を移動させた場合における形状モデルの変形の様子を示す図
【図６】図４に示した形状モデルが変形する様子をフレーム時間毎に示す図
【図７】形状モデルに設定される第２仮想バネを示す図
【図８】ゲーム装置１における処理において用いられる変数を説明するための図
【図９】ゲーム装置１において実行されるゲーム処理の流れを示すフローチャート
【図１０】プレイヤによってタッチパネル１３上に描かれた軌跡の一例を示す図
【図１１】図１０に示す入力に対してゲーム装置１が読み取った入力座標を示す図
【図１２】入力座標リストの一例を示す図
【図１３】図９に示す入力検出処理の詳細な処理の流れを示すフローチャート
【図１４】図９に示すモデル作成処理の詳細な処理の流れを示すフローチャート
【図１５】頂点リストの一例を示す図
【図１６】図９に示す頂点関連付処理の詳細な処理の流れを示すフローチャート
【図１７】第１関連付リストの一例を示す図
【図１８】図９に示すコントロール点設定処理の詳細な処理の流れを示すフローチャート
【図１９】図９に示すコントロール点関連付処理の詳細な処理の流れを示すフローチャート
【図２０】第２関連付リストを示す図
【図２１】図９に示す頂点移動処理の詳細な処理の流れを示すフローチャート
【図２２】バネ力リストを示す図
【図２３】図２１に示すｘ方向に関する位置決定処理の詳細な処理の流れを示すフローチャート
【図２４】図２３に示す第１力計算処理の詳細な処理の流れを示すフローチャート
【図２５】速度リストを示す図
【図２６】図２３に示す第２力計算処理の詳細な処理の流れを示すフローチャート
【図２７】図２３に示すｘ座標決定処理の詳細な処理の流れを示すフローチャート
【図２８】３次元の形状モデルにおける頂点間に設定される仮想バネを示す図
【図２９】形状モデルの他の例を示す図
【図３０Ａ】バネの伸びと時間との関係を示すグラフを示す図
【図３０Ｂ】バネの伸びと時間との関係を示すグラフを示す図
【図３１Ａ】従来の仮想バネの設定方法を示す図
【図３１Ｂ】従来の仮想バネの設定方法を示す図
【符号の説明】
【０１３３】
１  ゲーム装置
１１  第１ＬＣＤ
２１  ＣＰＵコア
２２  ＷＲＡＭ
３１，６１  形状モデル
３４〜３９，４１〜４６，５５〜５７  仮想バネ
【図１】
2006059028.tif 000003
【図２】
2006059028.tif 000004
【図３Ａ】
2006059028.tif 000005
【図３Ｂ】
2006059028.tif 000006
【図３Ｃ】
2006059028.tif 000007
【図３Ｄ】
2006059028.tif 000008
【図４】
2006059028.tif 000009
【図５】
2006059028.tif 000010
【図６】
2006059028.tif 000011
【図７】
2006059028.tif 000012
【図８】
2006059028.tif 000013
【図９】
2006059028.tif 000014
【図１０】
2006059028.tif 000015
【図１１】
2006059028.tif 000016
【図１２】
2006059028.tif 000017
【図１３】
2006059028.tif 000018
【図１４】
2006059028.tif 000019
【図１５】
2006059028.tif 000020
【図１６】
2006059028.tif 000021
【図１７】
2006059028.tif 000022
【図１８】
2006059028.tif 000023
【図１９】
2006059028.tif 000024
【図２０】
2006059028.tif 000025
【図２１】
2006059028.tif 000026
【図２２】
2006059028.tif 000027
【図２３】
2006059028.tif 000028
【図２４】
2006059028.tif 000029
【図２５】
2006059028.tif 000030
【図２６】
2006059028.tif 000031
【図２７】
2006059028.tif 000032
【図２８】
2006059028.tif 000033
【図２９】
2006059028.tif 000034
【図３０Ａ】
2006059028.tif 000035
【図３０Ｂ】
2006059028.tif 000036
【図３１Ａ】
2006059028.tif 000037
【図３１Ｂ】
2006059028.tif 000038