説明

画像処理プログラムおよび画像処理装置

【課題】 バネを用いたモデルの変形処理を少ない処理負担で行うことが可能な画像処理プログラムおよび画像処理装置を提供する。
【解決手段】 関連付けられた2頂点の間には、直交座標系における座標軸方向を向く仮想の力であって、当該2頂点の間の当該座標軸方向に関する距離に応じて大きさが変化する仮想の力を当該2頂点に与える仮想バネが座標軸方向毎に設定される。ゲーム装置は、形状モデルの各頂点の位置関係が基準状態から変化した場合、2頂点の間の距離の基準状態からの差分を座標成分毎に分けて算出する。次に、各仮想バネによる仮想の力の大きさを差分に基づいて算出し、さらに、同じ頂点に与えられる仮想の力について向きが平行な力同士を加算することによって、仮想バネから各頂点が受ける仮想の力を座標成分毎に分けて算出する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像処理プログラムおよび画像処理装置に関し、より特定的には、図形や文字等の線画を構成する頂点間を仮想バネによって関連付けて、この線画が変形する様子を表示する画像処理プログラムおよび画像処理装置に関する。
【背景技術】
【0002】
従来の画像処理においては、図形や文字等を表すモデルが自然に変形する様子を表現するために、モデルの頂点間にバネを設定することが行われている。
【0003】
例えば、特許文献1には、モデルの頂点間にバネを設定するとともに、初期位置と移動先の位置との間にバネを設定する画像処理装置が記載されている。当該画像処理装置は、上記2種類のバネを用いることによって、モデルの1点を移動させた場合においてモデルが変形する様子を自然に表現することができる。
【0004】
また、特許文献2に記載の画像処理方法では、画像データをメッシュ状に区分することによって当該メッシュの頂点間にバネを設定している。さらに、この画像処理方法では、バネとバネとのなす角に回転バネを設定している。この画像処理方法によれば、画像が変形する様子を自然に表現することができる。
【特許文献1】特開平9−73549号公報
【特許文献2】特開平10−69549号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
上記特許文献1および2のような、バネを用いた従来の画像処理方法では、モデルの頂点間を直接接続するようにバネを設定している(図31Aおよび図31B)。従って、モデルを変形させる画像処理において、2点間の距離を算出する計算が必須となるので、平方根計算や2乗計算といった処理の重い計算処理が行われることになる。さらに、特許文献2では、頂点間を結ぶバネの他に回転バネが設定される(図31B)ので、マトリックス計算が必要となる。従って、特許文献2ではさらに計算処理が重くなってしまう。以上のように、従来の画像処理方法では、モデルを変形させる画像処理のための負担がゲーム装置にとって大きいという問題があった。処理能力の低い携帯ゲーム機や携帯電話ではこの問題は特に重要である。
【0006】
それ故、本発明の目的は、バネを用いたモデルの変形処理を少ない処理負担で行うことが可能な画像処理プログラムおよび画像処理装置を提供することである。
【課題を解決するための手段】
【0007】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【0008】
第1の発明は、直交座標系における形状モデル(31,61)の形状を変化させて表示装置(第1LCD11)の画面に表示する処理をコンピュータ(CPUコア21等)に実行させる画像処理プログラムである。画像処理プログラムは、差分算出ステップ(S102,S112)と、バネ力算出ステップ(S103,S104,S113)と、頂点力算出ステップ(S114)と、位置決定ステップ(S92)と、表示制御ステップ(S86)とをコンピュータに実行させる。ここで、形状モデルを構成する各頂点(P1〜P7)は、少なくとも1つの他の頂点と関連付けられている(第1関連付リスト、第2関連付リスト)。また、関連付けられた2頂点の間には、直交座標系における座標軸方向(x軸方向、y軸方向)を向く仮想の力であって、当該2頂点の間の当該座標軸方向に関する距離に応じて大きさが変化する仮想の力を当該2頂点に与える仮想バネ(34〜39,41〜46,55〜57)が座標軸方向毎に設定される。差分算出ステップでは、形状モデルの各頂点の位置関係が基準状態から変化した場合、2頂点の間の距離の基準状態からの差分(D,Dc)を座標成分毎に分けて算出する。バネ力算出ステップでは、各仮想バネによる仮想の力の大きさを差分に基づいて算出する。頂点力算出ステップでは、同じ頂点に与えられる仮想の力について向きが平行な力同士を加算することによって、仮想バネから各頂点が受ける仮想の力(Fx,Fy)を座標成分毎に分けて算出する。位置決定ステップでは、各頂点を移動させるべき位置を、頂点力算出ステップにおいて算出された座標成分毎の仮想の力に基づいて座標成分毎に決定する。表示制御ステップでは、決定された位置に各頂点を移動した形状モデルを画面に表示する。
【0009】
また、第2の発明においては、コントロール点指定ステップ(S14)と、コントロール点移動ステップ(S83)とをコンピュータにさらに実行させてもよい。コントロール点指定ステップでは、形状モデルのうちの少なくとも1つの頂点をコントロール点として指定する。コントロール点移動ステップでは、コントロール点を移動させる。このとき、差分算出ステップは、コントロール点の移動によって生じる差分を算出する。
【0010】
また、第3の発明においては、コントロール点関連付ステップ(S15)をコンピュータにさらに実行させてもよい。コントロール点関連付ステップでは、コントロール点指定ステップにおいてコントロール点が指定されると、コントロール点とコントロール点以外の各頂点との間に新たな関連付け(第2関連付リスト)を行う。
【0011】
また、第4の発明においては、コントロール点関連付ステップは、コントロール点移動ステップにおけるコントロール点の移動が完了するまで、または、コントロール点の移動に起因する形状モデルの変形が停止するまでの間のみ新たな関連付けを行ってもよい。
【0012】
また、第5の発明においては、入力検出ステップ(S10)と、モデル作成ステップ(S11)とをコンピュータにさらに実行させてもよい。入力検出ステップでは、入力装置の入力面上にユーザによって描かれた軌跡を座標点として時系列で検出する。モデル作成ステップでは、検出された各座標点の少なくとも一部の座標点を各頂点とする形状モデルを作成する。
【0013】
また、第6の発明においては、入力検出ステップは、ユーザによって連続して入力された座標点を1まとまりの座標点群として検出してもよい。このとき、モデル作成ステップは、入力検出ステップにおいて検出された座標点群からその少なくとも一部を選出した各頂点と、当該各頂点を時系列順に結ぶ線分とによって構成される形状モデルを作成する。画像処理プログラムは、頂点関連付ステップ(S12)をコンピュータにさらに実行させてもよい。頂点関連付ステップでは、モデル作成ステップによって作成された形状モデルに含まれる2頂点のうち、線分によって結ばれる2頂点に関連付けを行う(第1関連リスト)。
【0014】
また、第7の発明においては、形状モデルは、複数の頂点と頂点間を接続する線分とによって構成されてもよい。このとき、画像処理プログラムは、頂点関連付ステップ(S12)をコンピュータにさらに実行させてもよい。頂点関連付ステップでは、所定の頂点から線分を辿ることによって到達不可能な頂点が1つの形状モデルの内に存在する場合、当該所定の頂点から線分を辿ることによって到達可能な頂点と到達不可能な頂点との間に関連付けを行う。
【0015】
また、第8の発明においては、バネ力算出ステップは、差分に比例する大きさの力(仮想バネの「バネの力」)と、頂点の速度に比例する大きさの力(仮想バネに働く減衰力)とに基づいて仮想バネによる仮想の力を算出してもよい。
【0016】
また、第9の発明においては、画像処理プログラムは、基準距離算出ステップ(S52)と、移動後距離算出ステップ(S101,S111)とをコンピュータにさらに実行させてもよい。基準距離算出ステップでは、形状モデルが基準状態である場合における2頂点の間の距離(ΔX,ΔXc)を直交座標系の座標成分毎に分けて算出する。移動後距離算出ステップでは、その時点における2頂点の間の距離(ΔX’,ΔXc’)を座標成分毎に分けて算出する。このとき、差分算出ステップは、基準距離算出ステップにおいて算出された距離と移動後距離算出ステップにおいて算出された距離とに基づいて差分(D,Dc)を算出する。
【0017】
また、本発明は、上記画像処理プログラムを実行する画像処理装置(ゲーム装置1)の形態で提供されてもよい。
【発明の効果】
【0018】
第1の発明によれば、関連付けられた1組の頂点の間には、直交座標系の座標軸方向を向く互いに独立した複数の仮想バネが設定される。これによって、仮想バネによる仮想の力や頂点の移動先の位置を座標方向毎に別々に行うことができる。従って、第1の発明によれば、2頂点間の距離を算出する計算が不要であるので、計算処理が重い2乗計算や平方根計算を行う必要がなく、仮想バネを用いたモデルの変形処理を少ない処理負担で行うことが可能となる。
【0019】
また、第2の発明によれば、コントロール点の移動を制御することによって形状モデルの移動を容易に制御することができる。
【0020】
また、第3の発明によれば、コントロール点とそれ以外の頂点との間に仮想のバネが設定されるので、コントロール点からの接続数(コントロール点とその頂点とを接続する線分の数、換言すれば、コントロール点からその頂点に到達するまでに通る線分の数)が多い頂点であっても、コントロール点の移動に対する応答を速くすることができる。すなわち、形状モデルの変形の追従性を向上することができる。
【0021】
また、第4の発明によれば、コントロール点と各頂点との間に一時的に仮想バネを設定することができるので、予め多くの仮想バネを頂点間に設定する必要がない。つまり、仮想バネを効率良く設定することによって、必要最小限の仮想バネを用いて形状モデルの変形の追従性を向上することができる。
【0022】
また、第5の発明によれば、ユーザによって入力された図形や文字等を、あたかも弾性体のごとく変形させることができる。
【0023】
また、第6の発明によれば、ユーザによる入力に基づいて形状モデルの形状を決定するとともに、頂点間の関連付けを決定することができる。すなわち、形状モデルの頂点をどの頂点と関連付けるかを、ユーザによる入力に基づいて決定することができる。また、ユーザによる入力軌跡は一筆書き可能な形状であるので、形状モデルの各頂点は、少なくとも1つの他の頂点と確実に関連付けられることとなる。従って、頂点間の関連付けを容易にかつ正確に行うことができる。
【0024】
また、第7の発明によれば、一体的に構成されていない複数の部分を有する形状モデルであっても、各部分を一体的に変形させることができる。
【0025】
また、第8の発明によれば、仮想バネをより現実に近い形でシミュレートすることができる。
【0026】
また、第9の発明によれば、仮想バネの伸びを容易に算出することができる。また、2頂点間の距離を座標成分毎に算出することができるので、コンピュータの処理負担を軽減することができる。
【発明を実施するための最良の形態】
【0027】
以下、本実施形態に係る画像処理装置および画像処理プログラムについて説明する。なお、本実施形態では、画像処理装置の一例として2つの表示装器を備えるゲーム装置を例に挙げて説明するが、本発明に係る画像処理装置は、画像処理プログラムを実行可能な装置であればどのような装置であっても構わない。例えば、画像処理装置は、単一の表示器を備えるゲーム装置や、据え置き型のパーソナルコンピュータであってもよいし、PDA等の携帯端末であってもよい。
【0028】
図1は、本発明の一実施形態に係る画像処理装置の一例である携帯型のゲーム装置の外観図である。図1において、本実施形態のゲーム装置1は、2つの液晶表示器(以下、「LCD」という)11および12を所定の配置位置となるように、ハウジングに収納して構成される。具体的には、第1LCD11および第2LCD12を互いに上下に配置して収納する場合は、ハウジングが下部ハウジング18aおよび上部ハウジング18bから構成される。上部ハウジング18bは、下部ハウジング18aの上辺の一部で回動自在に支持される。上部ハウジング18bは、第2LCD12の平面形状よりも少し大きな平面形状を有し、一方主面から第2LCD12の表示画面を露出するように開口部が形成される。下部ハウジング18aは、横方向の略中央部に第1LCD11の表示画面を露出する開口部が形成される。下部ハウジング18aの平面形状は、上部ハウジング18bよりも横長に選ばれる。下部ハウジング18aには、第1LCD11を挟むいずれか一方にスピーカ15の音抜き孔が形成されるとともに、第1LCD11を挟む左右に操作スイッチ部14が装着される。
【0029】
操作スイッチ部14は、第1LCD11の右横における下部ハウジング18aの一方主面に装着される動作スイッチ14aおよび14bと、第1LCD11の左横における下部ハウジング18aの一方主面に装着される方向指示スイッチ14c、スタートスイッチ14d、およびセレクトスイッチ14eとを含む。動作スイッチ14aおよび14bは、例えばアクションゲームにおいてはジャンプ、パンチ、武器を動かす等の指示、ロールプレイングゲーム(RPG)やシミュレーションRPGにおいてはアイテムの取得、武器またはコマンドの選択決定等の指示入力に使用される。方向指示スイッチ14cは、プレイヤ(ユーザ)によって操作可能なプレイヤオブジェクト(またはプレイヤキャラクタ)の移動方向を指示したり、カーソルの移動方向を指示したりする等のゲーム画面における方向指示に用いられる。また、必要に応じて、動作スイッチをさらに追加したり、下部ハウジング18aにおける操作スイッチ14の装着領域の上部面(上部側面)の左右に側面スイッチ14fおよび14gを設けたりしても構わない。
【0030】
また、第1LCD11の上面には、タッチパネル13(図1における破線領域)が装着される。タッチパネル13は、例えば、抵抗膜方式、光学式(赤外線方式)、静電容量結合式のいずれの種類でもよく、その上面(入力面)をスタイラス16(または指でも可)で押圧操作、移動操作、または撫でる操作をしたとき、スタイラス16の座標位置を検出して座標データを出力するものである。
【0031】
上部ハウジング18bの側面近傍には、必要に応じてタッチパネル13を操作するスタイラス16を収納するための収納孔(図1における二点破線領域)が形成される。この収納孔には、スタイラス16が収納される。下部ハウジング18aの側面の一部には、本実施形態に係る図形識別プログラムを含むゲームプログラムを記憶したメモリ(例えば、ROM)を内蔵したカートリッジ17を着脱自在に装着するためのカートリッジ挿入部(図1における一点破線領域)が形成される。カートリッジ17は、ゲームプログラムを記憶する情報記憶媒体であり、例えば、ROMまたはフラッシュメモリのような不揮発性半導体メモリが用いられる。カートリッジ挿入部の内部には、カートリッジ17と電気的に接続するためのコネクタ(図2参照)が内蔵される。さらに、下部ハウジング18a(または上部ハウジング18bでも可)には、CPU等の各種電子部品を実装した電子回路基板が収納される。なお、ゲームプログラムを記憶する情報記憶媒体としては、上記不揮発性半導体メモリに限らず、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体でもよい。
【0032】
次に、図2を参照して、ゲーム装置1の内部構成について説明する。なお、図2は、ゲーム装置1の内部構成を示すブロック図である。
【0033】
図2において、下部ハウジング18aに収納される電子回路基板には、コンピュータとして機能するCPUコア21等が実装される。CPUコア21には、所定のバスを介して、カートリッジ17と接続するためのコネクタ28が接続されるととともに、入出力インターフェース(I/F)回路27、第1のグラフィック処理ユニット(第1GPU)24、第2のグラフィック処理ユニット(第2GPU)26、およびワーキングRAM(WRAM)22が接続される。
【0034】
コネクタ28には、カートリッジ17が着脱自在に接続される。カートリッジ17は、上述したようにゲームプログラムを格納するための記憶媒体である。具体的には、カートリッジ17は、ゲームプログラムを記憶するROM171とバックアップデータを書き換え可能に記憶するRAM172とを搭載する。カートリッジ17のROM171に記憶されたゲームプログラムは、WRAM22にロードされ、当該WRAM22にロードされたゲームプログラムがCPUコア21によって実行される。CPUコア21がゲームプログラムを実行して得ることができる一時的なデータや画像を生成するためのデータがWRAM22に記憶される。
【0035】
I/F回路27には、タッチパネル13、操作スイッチ部14、およびスピーカ15が接続される。スピーカ15は、上述した音抜き孔の内側位置に配置される。
【0036】
第1GPU24には、第1ビデオRAM(以下「VRAM」)23が接続され、第2GPU26には、第2のビデオRAM(以下「VRAM」)25が接続される。第1GPU24は、CPUコア21からの指示に応じて、WRAM22に記憶される画像を生成するためのデータに基づいて第1ゲーム画像を生成する。生成された第1ゲーム画像は、第1GPU24によって第1VRAM23に描画される。第2GPU26は、CPUコア21からの指示に応じて、WRAM22に記憶される画像を生成するためのデータに基づいて第2ゲーム画像を生成する。生成された第2ゲーム画像は、第2GPU26によって第2VRAM25に描画される。
【0037】
第1VRAM23は第1LCD11に接続され、第2VRAM25は第2LCD12に接続される。第1GPU24は、CPUコア21からの指示に応じて第1VRAM23に描画された第1ゲーム画像を第1LCD11に出力する。そして、第1LCD11は、第1GPU24から出力された第1ゲーム画像を表示する。第2GPU26は、CPUコア21からの指示に応じて第2VRAM25に描画された第2ゲーム画像を第2LCD12に出力する。そして、第2LCD12は、第2GPU26から出力された第2ゲーム画像を表示する。
【0038】
以下、カートリッジ17に格納された画像処理プログラムによってゲーム装置1において実行されるゲーム処理について説明する。なお、本実施形態では、本発明に係る画像処理プログラムがゲームプログラムとしてゲーム装置によって実行される場合を例として説明する。また、本実施形態においては、タッチパネル13によって表示画面が覆われる第1LCD11のみを表示装置として用いる。従って、ゲーム装置1は、第2LCD12を有しない構成であってもよい。
【0039】
以下、本実施形態に係る画像処理プログラムによって実行される画像処理について説明する。この画像処理は、仮想領域(2次元または3次元)内に構築された形状モデルが弾性体のごとく変形する様子を表示する処理である。形状モデルは、ゲーム中に画像として画面に表示されるものであればどのようなものでもよく、例えば、ゲーム中に登場するゲームキャラクタを表すための形状モデルであってもよいし、ゲームのオープニング画面で表示されるゲームタイトルを表すための形状モデルであってもよい。なお、以下では、2次元の仮想平面内に配置された2次元の形状モデルを変形する場合を例として説明する。
【0040】
まず、図3A〜図3Dを参照して、形状モデルが変形する様子を説明する。図3A〜図3Dは、形状モデルが表示された第1LCD11の画面の一例を示す図である。形状モデルは、複数の頂点によって構成される。図3A〜図3Dでは、第1LCD11の画面32に表示されている形状モデル31は4つの頂点からなる折れ線である。なお、詳細は後述するが、本実施形態においては形状モデル31はプレイヤの入力によって作成される。形状モデル31の全ての頂点は、少なくとも1つの他の頂点と関連付けられて定義される。関連付けられた頂点間には、仮想バネが設定される(図4および図7参照)。仮想バネとは、当該頂点間の距離に応じて大きさが変化する仮想の力を発生させるように当該頂点間において仮想的に設定されたバネである。実際の処理においては、仮想バネは、形状モデルの形状に基づいて予め定められた基準距離(形状モデルが基準状態にあるときの頂点間の距離)と頂点間の距離との差(バネの伸縮量に相当)を入力とし、当該頂点に働く仮想の力(バネの伸縮による力に相当)を出力とするバネ関数として設定される。この仮想バネによって、形状モデルをあたかも弾性体のごとく変形させることができる。つまり、形状モデルの各頂点は仮想バネによって接続されているので、仮想バネの弾性のために頂点間の距離は可変であり、形状モデルは変形することができるのである。なお、図3に示す形状モデル31では、線分によって結ばれる頂点が互いに関連付けられている。
【0041】
図3Aは、形状モデル31が変形される前の状態を示す図である。本実施形態では、図3Aに示す状態のように、形状モデル31の変形が行われていない状態を基準状態と呼ぶ。ここで、本実施形態では、形状モデルは、プレイヤの操作によって変形される。具体的には、プレイヤは、形状モデルの任意の頂点を指定し、指定した頂点を移動させる操作を行うことで、形状モデルを変形させることができる。なお、頂点の指定は、所望の頂点が表示されている近傍の位置をプレイヤがスタイラス等で指定することによって行われる。指定された頂点は、プレイヤによるドラッグ操作(スタイラスがタッチパネルに接触した状態で接触位置を移動させる操作)によって移動することが可能である。なお、以下に説明する図3A〜図3Dでは、図3Aに示す状態において形状モデル31の左端の頂点がプレイヤの操作によって指定される場合を考える。また、以下では、プレイヤによって指定される頂点をコントロール点と呼ぶ。コントロール点は、形状モデルの変形の基準となる頂点である。
【0042】
図3Bおよび図3Cは、形状モデルが変形されている状態を示す図である。なお、図3B〜図3Dに示す点線は、前の状態(前の図に示す状態)の形状モデル31およびスタイラスを示す。図3Bに示すように、プレイヤがコントロール点である頂点を左側へ移動させると、コントロール点以外の頂点は上記仮想バネから受ける仮想の力によって移動する。図3Bに示す状態のように、コントロール点の移動が開始した直後の状態においては、形状モデル31は、コントロール点である頂点が移動した方向へ伸びるように変形する。
【0043】
図3Cは、図3Bに示す状態から時間が経過し、コントロール点をさらに左側へ移動させた状態を示す図である。この状態においても図3Bと同様、コントロール点以外の頂点は左側へ移動している。図3Cにおいては、形状モデル31は、図3Bに示す場合よりもさらに伸びて変形している。図3Dは、コントロール点の移動が停止した後の状態を示す図である。図3Dに示すように、コントロール点である頂点の移動が停止すると、伸びるように変形していた形状モデルが縮むように変形し始める。その後、形状モデル31は元の形状に戻って静止する。本実施形態におけるゲーム装置1は、以上の図3A〜図3Dに示したような変形動作を形状モデルが行う様子を表現するものである。
【0044】
次に、図4を参照して、本実施形態において形状モデルに設定される仮想バネについて説明する。図4は、形状モデルの関連付けられた頂点間に設定される仮想バネを示す図である。図4に示すように、形状モデル31の関連付けられた頂点間には、仮想バネ34〜39が設定される。ここで、1組の関連付けられた2頂点間には、形状モデルが配置される直交座標系の座標軸(x軸およびy軸とする)の各方向に関する2つのバネが設定される。1つはx軸方向に関する仮想バネ(x方向仮想バネ)であり、もう1つはy軸方向に関する仮想バネ(y方向仮想バネ)である。図4においては、頂点P1と頂点P2との間にx方向仮想バネ34が設定され、頂点P2と頂点P3との間にx方向仮想バネ36が設定され、頂点P3と頂点P4との間にx方向仮想バネ38が設定される。また、頂点P1と頂点P2との間にy方向仮想バネ35が設定され、頂点P2と頂点P3との間にy方向仮想バネ37が設定され、頂点P3と頂点P4との間にy方向仮想バネ39が設定される。
【0045】
x方向仮想バネは、それが設定される2頂点間のx軸方向に関する距離に応じて仮想の力を発生する仮想バネである。x方向仮想バネによって発生する仮想の力の向きは、x軸方向である。一方、y方向仮想バネは、それが設定される2頂点間のy軸方向に関する距離に応じて仮想の力を発生する仮想バネである。y方向仮想バネによって発生する仮想の力の向きは、y軸方向である。また、x方向仮想バネとy方向仮想バネとは互いに独立である。すなわち、x方向仮想バネにより生じる仮想の力は、当該x方向仮想バネが設定される2頂点間のy軸方向に関する距離とは無関係であり、y方向仮想バネにより生じる仮想の力は、当該y方向仮想バネが設定される2頂点間のx軸方向に関する長さとは無関係である。
【0046】
図4に示したように、本実施形態においては、1組の頂点の間に、直交座標系の座標軸方向を向く互いに独立した2つの仮想バネが設定される。従って、x軸方向に関する仮想バネの力の計算と、y軸方向に関する仮想バネの力の計算とを別々に行うことができる。つまり、本実施形態においては、2頂点間の距離を算出する計算が不要であるので、計算処理が重い2乗計算を行う必要がない。それ故、仮想バネを用いた計算が簡易になり、ゲーム装置1の処理負担が軽減される。
【0047】
また、本実施形態においては、x軸方向に関するバネの伸びと、y軸方向に関するバネの伸びとは独立して処理される。例えば図3A〜図3Dに示す形状モデル31において頂点P1がx軸に平行な方向に移動された場合、x方向仮想バネは伸縮するが、y方向仮想バネは伸縮しない。その結果、形状モデル31のx軸方向に関する長さは伸縮するが、y軸方向に関する長さは変化しない。そのため、本実施形態においては、形状モデルが図3A〜図3Dに示すような、1本の線状の形状である場合でも、元の形状をある程度保ったままで形状モデルを伸縮変形させることができる(図3A〜図3D参照)。
【0048】
一方、従来のように頂点間を直接接続する仮想バネを設定する方法では、形状モデルが元の形状を保つことができない場合がある。図5は、従来の方法において形状モデルの頂点を移動させた場合における形状モデルの変形の様子を示す図である。図5に示す形状モデル31’の頂点P1を図3Aと同様、x軸方向に移動させた場合、従来のように頂点間を直接接続するように仮想バネを設定する方法では、頂点P2〜P4は、y軸方向にも移動してしまう。その結果、形状モデル31’がy軸方向にひしゃげた形状となってしまい、元の形状が著しく変化してしまうおそれがある。そのため、従来の方法では、例えばP1とP3との間やP2とP4との間にさらに仮想バネを設定しなければならなかった。これに対して、本実施形態においては、1組の頂点間に互いに独立した2つの仮想バネを設定することによって、図5に示すような極端な変形を防止することができる。
【0049】
なお、図4における各頂点間の関連付けは、形状モデルに対して予め固定的に行われるものである。従って、図4に示した仮想バネは、形状モデルに対して予め固定的に設定される。つまり、図4に示した仮想バネは、形状モデルに常に設定されており、形状モデルの状態等によって設定されたりされなかったりするものではない。以下では、図4に示した仮想バネのように、予め固定的に関連付けが行われた各2頂点間に設定される仮想バネを第1仮想バネと呼ぶ。
【0050】
次に、図4に示した形状モデルを第1仮想バネを用いて変形させる処理について説明する。図6は、図4に示した形状モデルが変形する様子をフレーム時間毎に示す図である。図6においては、形状モデルの頂点P1がコントロール点に指定され、頂点P1が移動されることによって形状モデルが変形する様子を説明する。図6に示す第1フレームは、形状モデルが変形する直前のフレームである。プレイヤは、この第1フレームから第2フレームまでの間に、頂点P1をコントロール点に指定し、直交座標系のx軸方向に平行な方向に位置Paまで頂点P1を移動するものとする(図6に示す点線矢印参照)。
【0051】
コントロール点の移動が行われた場合、ゲーム装置1は、各フレームを表示する間の処理において、(1)コントロール点の位置決定処理、(2)各仮想バネに生じる力の計算処理、(3)各頂点が受ける力の計算処理、(4)各頂点の位置決定処理という処理を順に行う。(1)コントロール点の位置決定処理は、プレイヤによって入力された位置に従ってコントロール点の位置を決定する処理である。(2)各仮想バネに生じる力の計算処理は、仮想バネの伸び(その時点における仮想バネの長さと基準状態における当該仮想バネの長さとの差分)に基づいて、仮想バネが頂点に与える力を計算する処理である。(3)各頂点が受ける力の計算処理は、(2)の処理で計算された各仮想バネによる力に基づいて、各頂点が各仮想バネから受ける力を計算する処理である。(4)各頂点の位置決定処理は、(3)の処理で計算された各頂点が受ける力に基づいて、各頂点の新たな位置を決定する処理である。以下の第2フレーム以降においては、上記(1)〜(4)の処理が各フレーム間で行われる。
【0052】
第2フレームにおける各頂点の位置を決定する処理において、ゲーム装置1は、まず、プレイヤによる入力位置を検出することによってコントロール点の位置を決定する(上記(1)の処理)。図6の例では、プレイヤによって頂点P1が位置Paまで移動させる操作が行われるので、プレイヤによる入力位置として位置Paが検出され、コントロール点の位置は位置Paに決定される。つまり、頂点P1の位置は位置Paに決定される。
【0053】
次に、ゲーム装置1は、各仮想バネに生じる力を、その時点における各頂点の位置に基づいて決定する(上記(2)の処理)。ここで、その時点における各頂点の位置とは、コントロール点については第2フレームにおいて検出された位置であり、その他の頂点については前のフレームで決定された位置である。つまり、頂点P1については、新たに検出された位置(位置Pa)が現在の位置として用いられるが、その他の頂点P2〜P4については、第1フレームで決定(表示)された位置が現在の位置として用いられる。従って、第2フレームにおいては、頂点P1が前のフレームから移動しているので、頂点P1と頂点P2との間の仮想バネには仮想の力が生じるものとして処理される。しかし、頂点P2と頂点P3との間の仮想バネ、および、頂点P3と頂点P4との間の仮想バネには、仮想の力が生じないものとして処理される。
【0054】
さらに、ゲーム装置1は、仮想バネに生じた力に基づいて各頂点が仮想バネから受ける力を算出し(上記(3)の処理)、算出した力に基づいてコントロール点以外の各頂点の位置を決定する(上記(4)の処理)。第2フレームにおいては、頂点P1と頂点P2との間の仮想バネの影響によって頂点P2が移動される。一方、頂点P2と頂点P3との間の仮想バネ、および、頂点P3と頂点P4との間の仮想バネには仮想の力が働かないので、頂点P3および頂点P4は移動しない。
【0055】
第3フレームにおける各頂点の位置を決定する処理においても、ゲーム装置1は、第2フレームにおける各頂点の位置を決定する処理と同様の処理を行う。なお、第2フレームから第3フレームまでの間においては、プレイヤによるコントロール点の移動は行われないものとする。従って、コントロール点(頂点P1)の位置は、位置Paのままである。また、頂点P2〜P4の位置は、その時点における各頂点の位置(すなわち、頂点P1は位置Pa、頂点P2〜P4は第2フレームにおける位置)に基づいて決定される。第2フレームでは頂点P1およびP2が元の位置から移動しているので、第3フレームの各頂点の位置を決定する処理においては、頂点P1と頂点P2との間の仮想バネ、および、頂点P2と頂点P3との間の仮想バネには仮想の力が働くものとして処理される。従って、頂点P3の移動が開始され、頂点P2およびP3が移動される。ただし、第2フレームにおいては頂点P3およびP4が移動していないので、第3フレームにおいて頂点P3と頂点P4との間の仮想バネには仮想の力が働かないものとして処理される結果、頂点P4は移動しない。
【0056】
第4フレームにおける各頂点の位置を決定する処理においても、ゲーム装置1は、第2および第3フレームにおける各頂点の位置を決定する処理と同様の処理を行う。第4フレームにおいては、前の第3フレームにおいて頂点P3が移動しているので、頂点P3と頂点P4との間の仮想バネには仮想の力が働くものとして処理される。従って、第4フレームにおいて頂点P4の移動が開始される。
【0057】
以上の図6に示したように、図4に示した仮想バネを設定した形状モデルにおいては、コントロール点からの接続数が大きくなるほど、移動が開始されるフレームが遅くなることがわかる。なお、接続数とは、コントロール点とその頂点とを接続する線分の数、換言すれば、コントロール点からその頂点に到達するまでに通る線分の数を意味するものとする。従って、コントロール点が移動されても、コントロール点からの接続数が大きい頂点においては、コントロール点の移動による影響がなかなか現れないことになる。つまり、プレイヤがコントロール点の移動操作を行っても、コントロール点から遠い位置ではなかなか変形・移動が行われないのである。以上に説明した、コントロール点からの接続数が大きい頂点における追従性の悪さは、形状モデルの頂点数が増えて形状モデルが複雑になるほど、顕著になる。
【0058】
そこで、本実施形態においては、上記第1仮想バネの他に、プレイヤによって指定される頂点に応じて可変的に設定される仮想バネ(第2仮想バネ)が用いられる。図7は、形状モデルに設定される第2仮想バネを示す図である。なお、図7においては、頂点P1がコントロール点であるとする。図7に示すように、第2仮想バネ41〜46は、コントロール点である頂点P1と形状モデルの他の頂点(頂点P2〜P4)との間に設定される。
【0059】
なお、第2仮想バネも第1仮想バネと同様、第2仮想バネが設定される2頂点間には、直交座標系の座標軸(x軸およびy軸とする)の各方向に関する2つの仮想バネが設定される。すなわち、x軸方向に関する仮想バネ41,43,および45と、y軸方向に関する仮想バネ42,44,および46とが設定される。第2仮想バネについても第1仮想バネと同様、1組の頂点間に互いに独立した2つの仮想バネを設定することによって、仮想バネを用いた計算処理を簡易にし、コンピュータの処理負担を軽減することができる。
【0060】
図7に示したように、本実施形態においては、第1仮想バネに加えて第2仮想バネが設定される。この第2仮想バネは、コントロール点となる頂点の位置に応じて設定される頂点間が変化する、可変的に設定される仮想バネである。従って、本実施形態では、形状モデルの頂点間に対して、予め定められた固定的な関連付けが行われるとともに、コントロール点に応じて可変的に関連付けが行われる。
【0061】
このような第2仮想バネを設定することによって、コントロール点からの接続数が大きい頂点であっても、コントロール点が移動されたフレーム(図6に示す例で言えば第2フレーム)から移動が開始されることになる。つまり、コントロール点の移動が開始された直後に、コントロール点の移動による影響が形状モデルの全体に伝わり、コントロール点からの接続数が大きい頂点の追従性を向上することができる。
【0062】
以下、本実施形態に係る画像処理プログラムによって実行される処理の詳細について説明する。まず、当該処理を実行する際にゲーム装置1において用いられる変数およびデータについて説明する。図8は、ゲーム装置1における処理において用いられる変数を説明するための図である。図8においては、4つの頂点P1〜P4から構成される形状モデルを例にとって説明する。また、図面の煩雑化を避けるため、頂点P3に関する変数のみを記載する。図8に示されるように、当該処理においては、以下の変数が用いられる。なお、以下において、iは1〜nの整数である(nは形状モデルの頂点数)。
頂点P(i)の位置のx座標値:X(i)
頂点P(i)の位置のy座標値:Y(i)
頂点P(i+1)と頂点P(i)とのx軸方向に関する距離:ΔX(i)
頂点P(i+1)と頂点P(i)とのy軸方向に関する距離:ΔY(i)
コントロール点と頂点P(i)とのx軸方向に関する距離:ΔXc(i)
コントロール点と頂点P(i)とのy軸方向に関する距離:ΔYc(i)
頂点P(i)が受ける仮想の力のx座標成分:Fx(i)
頂点P(i)が受ける仮想の力のy座標成分:Fy(i)
頂点P(i)の速度のx座標成分:Vx(i)
頂点P(i)の速度のy座標成分:Vy(i)
【0063】
以下、本実施形態に係るゲーム装置1において実行される処理の流れを説明する。図9は、ゲーム装置1において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置1の電源が投入されると、ゲーム装置1のCPUコア21は、図示しないブートROMに記憶されている起動プログラムを実行し、WRAM22等の各ユニットが初期化される。そして、カートリッジ17に格納されたプログラムがWRAM22に読み込まれ、CPUコア21によって当該プログラムの実行が開始される。図9に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【0064】
図9では、まず、ステップ10(図では「ステップ」を単に「S」と略す。)およびステップ11において、変形の対象となる形状モデルが作成される。上述したように、本実施形態においては、形状モデルはプレイヤの操作によって作成される。具体的には、プレイヤがタッチパネル13上に描いた軌跡に応じた形状の形状モデルが作成される。
【0065】
ステップ10においては、入力検出処理が行われる。入力検出処理は、プレイヤによってタッチパネル13上に描かれた軌跡の入力を検出する処理である。以下、入力検出処理を図10〜図13を用いて説明する。
【0066】
まず、入力検出処理の概要を図10〜図12を用いて説明する。図10は、プレイヤによってタッチパネル13上に描かれた軌跡の一例を示す図である。ここでは、プレイヤが図10に示すような波形の図形51をタッチパネル13に対して入力した場合を例として説明する。図11は、図10に示す入力に対してゲーム装置1が読み取った入力座標を示す図である。入力検出処理においては、例えば図10に示すような図形51がプレイヤによって入力された場合、図11に示す各入力点Tp1〜Tp9の座標(入力座標)がゲーム装置1によって検出される。ゲーム装置1によって検出された入力座標は、入力座標リストとしてWRAM22に記憶される。図12は、入力座標リストの一例を示す図である。入力座標リストは、プレイヤによってタッチパネル13上に入力された軌跡を表すデータである。図12に示すように、入力座標リストには、プレイヤによってタッチパネル13に対して入力された位置を示す入力座標が格納される。なお、当該入力座標は、Tp1,Tp2,…,Tpm(mは1以上の整数)のように、プレイヤの入力順に格納される。また、i番目に入力された頂点Tp(i)の入力座標は、Xt(i)と表される。入力検出処理は、タッチパネル13からの入力座標に基づいて図12に示すような入力座標リストを作成する処理である。
【0067】
図13は、図9に示す入力検出処理の詳細な処理の流れを示すフローチャートである。入力検出処理においては、まず、ステップ20において、上記入力座標リストの内容がクリア(初期化)される。続くステップ21において、タッチパネル13に対する入力があったか否かが判定される。本実施形態では、所定時間間隔毎にプレイヤによるタッチパネル13への入力位置が検出される。すなわち、ステップ21が所定時間間隔で実行される。
【0068】
ステップ21における判定において、タッチパネル13に対する入力がないと判定された場合、ステップ21の処理が再度行われる。すなわち、タッチパネル13に対する入力があるまでステップ21の処理が所定時間間隔で行われる。一方、ステップ21における判定において、タッチパネル13に対する入力があったと判定された場合、ステップ22の処理が行われる。すなわち、ステップ22においては、ステップ21で検出された入力座標がWRAM22内の入力座標リストに仮登録される。当該入力座標は、入力座標リストに格納される入力座標がプレイヤの入力順となるように、既に入力座標リストに格納されている入力座標の後に追加される。ここで、仮登録と呼んでいるのは、ステップ21で検出された入力座標は、入力検出処理中における後述する処理によって入力座標リストから削除される可能性があるからである。
【0069】
ステップ22の次のステップ23において、本登録された入力座標が入力座標リストに格納されているか否かが判定される。具体的には、ステップ21で検出された入力座標の前に、入力座標リストに既に格納されている入力座標(本登録された入力座標)があるか否かが判定される。ステップ23の判定において、本登録された入力座標が入力座標リストに格納されていない場合、ステップ24の処理が行われる。すなわち、ステップ24において、ステップ21で検出された入力座標が入力座標リストに本登録される。なお、「本登録する」とは、以降の入力検出処理によって入力座標を削除しないという意味である。ステップ24の後、ステップ29の処理が行われる。
【0070】
一方、ステップ23の判定において、本登録された入力座標が入力座標リストに格納されている場合、ステップ25の処理が行われる。すなわち、ステップ25の処理において、仮登録中の入力座標(ステップ21で検出された入力座標)と、直前に本登録された入力座標との距離が算出される。続くステップ26において、ステップ25で算出した距離が予め定められた所定距離以上であるか否かが判定される。ステップ26の判定において、ステップ25で算出した距離が予め定められた所定距離以上であると判定された場合、ステップ27の処理が行われる。すなわち、ステップ27において、ステップ21で検出された入力座標が入力座標リストに本登録される。ステップ27の後、ステップ29の処理が行われる。一方、ステップ26の判定において、ステップ25で算出した距離が予め定められた所定距離以上でない(すなわち、所定距離よりも小さい)と判定された場合、ステップ28の処理が行われる。すなわち、ステップ28においては、ステップ21で検出された入力座標が入力座標リストから削除される。ステップ28の後、ステップ29の処理が行われる。
【0071】
以上のように、本実施形態においては、タッチパネル13への入力が行われている際において、前回検出された入力位置と今回検出された入力位置との距離が所定距離よりも小さければ、今回検出された入力位置は削除される(ステップ28)。従って、プレイヤによる入力軌跡を示す入力座標リストから不要なデータを削除することができるので、入力座標リストのデータ量を低減することができる。
【0072】
ステップ29においては、入力座標リストに格納されている各入力座標の位置を結んだ線画が第1LCD11に表示される。ステップ29によって、プレイヤは、タッチパネル13上に自身が入力した軌跡を目で確認することができる。続くステップ30において、入力の受け付けを終了するか否かが判定される。ステップ30の判定は、例えば、入力の受け付けを終了する旨の指示がプレイヤによって行われたか否か、あるいは、入力座標が最初に検出されてから所定時間が経過したか否か等によって判定することができる。ステップ30の判定において、入力の受け付けを終了しないと判定された場合、ステップ21の処理に戻る。以降、入力の受け付けを終了するまでステップ21〜29の処理が繰り返される。一方、ステップ30の判定において、入力の受け付けを終了すると判定された場合、CPUコア21は図13に示す入力検出処理を終了する。以上の入力検出処理によって、入力座標リストが作成される。
【0073】
図9の説明に戻り、ステップ10の次のステップ11において、モデル作成処理が行われる。モデル作成処理は、入力座標リストにより示される各座標点の少なくとも一部の座標点を頂点とするような形状モデルを作成する処理である。なお、ステップ10で作成された入力座標リストの全ての入力座標の位置を頂点として形状モデルを作成してもよいが、入力座標リストに格納されている入力座標の数(形状モデルの頂点数)が多い場合には、後で行われる形状モデルを変形するための処理の処理量が大きくなってしまう。そこで、本実施形態では、モデル作成処理において、入力座標リストに格納されている入力座標のうちのいくつかを間引くことによって、入力座標リストにより示される軌跡の形状を簡易にする。
【0074】
図14は、図9に示すモデル作成処理の詳細な処理の流れを示すフローチャートである。モデル作成処理においては、まず、ステップ40において、WRAM22に記憶される頂点リストの内容がクリアされる。頂点リストは、形状モデルの各頂点の位置を示すデータである。つまり、頂点リストは、形状モデルの形状を示す。図15は、頂点リストの一例を示す図である。頂点リストには、形状モデルの頂点の位置を示す座標が頂点毎に格納される。具体的には、頂点P(i)に対して、当該頂点の位置のx座標値X(i)およびy座標値Y(i)が格納される。なお、図15に示す左側の列の「C」は、コントロール点を示すフラグである。図15に示す頂点リストは、コントロール点は頂点P1であることを示す。ステップ40においては、当該フラグも含め頂点リストの内容が全て消去される。
【0075】
ステップ40の次のステップ41において、ステップ10で作成された入力座標リストに格納されている入力座標のうちの連続する3つの入力座標が選出される。ここで選出されるのは、その時点の入力座標リストにおいて最初から3番目までに格納されている3つの入力座標である。続くステップ42において、ステップ41で選出された3つの入力座標を入力順に結んだ2つの線分のなす角度Θが算出される。続くステップ43において、ステップ42で算出されたΘが、次の式(1)を満たすか否かが判定される。
(180−a)≦Θ≦(180+a)…(1)
ここで、aは、予め定められた所定のしきい値である(aは0以上)。ステップ43は、上記2つの線分がほぼ直線と見なすことができるか否かを判定するための処理である。すなわち、ステップ42で算出されたΘが上式(1)を満たす場合、当該2つの線分はほぼ直線と見なすことができ、逆に、ステップ42で算出されたΘが上式(1)を満たさない場合、当該2つの線分はほぼ直線と見なすことはできない。
【0076】
ステップ43の判定において、ステップ42で算出されたΘが上式(1)を満たすと判定された場合、ステップ44の処理が行われる。すなわち、ステップ44において、ステップ41で選出された3つの入力座標のうちの中間の入力座標が入力座標リストから削除される。ステップ44は、上記2つの線分をほぼ直線と見なし、1本と線分として取り扱うための処理である。ステップ44の後、ステップ47の処理が行われる。一方、ステップ43の判定において、ステップ42で算出されたΘが上式(1)を満たすと判定された場合、ステップ45およびステップ46の処理が行われる。すなわち、ステップ45において、ステップ41で選出された3つの入力座標のうちの最初の入力座標がWRAM22に記憶されている頂点リストに登録される。当該入力座標は、頂点リストに格納される座標がプレイヤの入力順となるように、既に頂点リストに格納されている座標の後に追加される。さらにステップ46において、ステップ45で頂点リストに登録した入力座標が入力座標リストから削除される。1つの入力座標を頂点リストに2度登録することを防止するためである。ステップ46の後、ステップ47の処理が行われる。
【0077】
ステップ47においては、CPUコア21は、入力座標リストに格納されている全ての入力座標について処理が終了したか否かを判定する。具体的には、当該全ての入力座標がステップ41で選出されたことがあるか否かを判定する。ステップ47の判定において、全ての入力座標について処理が終了していないと判定された場合、ステップ41の処理が行われる。以降、全ての入力座標について処理が終了するまで、ステップ41〜47の処理が繰り返される。一方、ステップ47の判定において、全ての入力座標について処理が終了していないと判定された場合、ステップ48の処理が行われる。すなわち、ステップ48の判定において、頂点リストに座標が登録されている各頂点と当該各頂点を順に結んだ線分とで構成される形状モデルが第1LCD11に表示される。ステップ48の後、CPUコア21はモデル作成処理を終了する。
【0078】
以上のモデル作成処理によって、入力座標リストの入力座標により示される点から形状モデルの頂点とすべき点が抽出される。例えば、図11に示される各点から頂点が抽出されることによって、図8に示される形状モデルが作成される。すなわち、形状モデルの形状を示す頂点リスト(図15)がWRAM22に記憶される。なお、他の実施の形態においては、ステップ47とステップ48との間において、その時点で入力座標リストに残っている全ての入力座標を頂点リストに登録するようにしてもよい。図14に示す処理では、入力座標リストの最後および最後から2番目の入力座標が頂点リストに登録されないからである。
【0079】
再び図9の説明に戻り、ステップ11の次のステップ12において、頂点関連付処理が行われる。頂点関連付処理とは、頂点リストにより示される形状モデルの頂点を他の頂点と関連付ける処理である。なお、本実施形態において、2頂点の関連付けは、関連付けが行われる2頂点を後述する関連付リストに格納することによって行われる。頂点関連付処理は、上記第1仮想バネを設定する2頂点の組を第1関連付リスト(図17)に格納することによって第1関連付リストを作成する処理である。なお、本実施形態では、各頂点は、頂点リストに格納された順番に関して前後の頂点に関連付けられる。
【0080】
図16は、図9に示す頂点関連付処理の詳細な処理の流れを示すフローチャートである。頂点関連付処理においては、まず、ステップ50において、WRAM22に記憶される第1関連付リストの内容がクリアされる。第1関連付リストは、第1仮想バネが設定される各頂点間およびその基準距離を示すデータである。図17は、第1関連付リストの一例を示す図である。第1関連付リストには、第1仮想バネが設定される2頂点の組(図17に示すリストの左側の2列)と、その2頂点間のx軸方向に関する距離(図17に示すリストの右から2列目)およびy軸方向に関する距離(図17に示すリストの右端の列)とが組毎に格納される。また、頂点P(i+1)と頂点P(i)とのx軸方向に関する距離はΔX(i)で表され、頂点P(i+1)と頂点P(i)とのy軸方向に関する距離はΔY(i)で表される。
【0081】
ステップ51において、前述のステップ11で作成された頂点リスト(図15参照)から連続する2つの頂点が選出される。ステップ51では、第1仮想バネが設定される2頂点の組であって、ステップ51でまだ選出されていない組が選出される。続くステップ52において、ステップ51で選出した2頂点について、当該2頂点間の距離が座標成分毎に分けて算出される。具体的には、ステップ51で選出された2頂点を頂点P(i)および頂点P(i+1)とすると、当該2頂点間の距離のx座標成分ΔX(i)およびy座標成分ΔY(i)は、次の式(2)によって算出される。
ΔX(i)=X(i)−X(i+1)
ΔY(i)=Y(i)−Y(i+1)…(2)
ここで、X(i)、X(i+1)、Y(i)、およびY(i+1)は、頂点リストを参照することによって得ることができる。なお、ステップ52で算出される距離(ΔX(i),ΔY(i))は、形状モデルが基準状態にある場合の当該2頂点間の距離、すなわち、基準距離である。さらに、ステップ53において、CPUコア21は、ステップ52で算出された基準距離(ΔX(i),ΔY(i))を第1関連付リスト(図17)に登録する。
【0082】
ステップ53の次のステップ54において、第1仮想バネが設定される2頂点の全ての組について基準距離を算出したか否かが判定される。基準距離を算出していない組がある場合、処理はステップ51に戻り、全ての組について基準距離を算出するまでステップ51〜53の処理が繰り返される。一方、全ての組について基準距離を算出した場合、CPUコア21は、頂点関連付処理を終了する。この頂点関連付処理によって、第1関連付リスト(図17)が作成される。
【0083】
再び図9の説明に戻り、上記ステップ10および11の処理によって形状モデルが作成され、ステップ12の処理によって形状モデルの頂点間の関連付けが行われる。これらのステップ10〜12の完了によって、形状モデルの変形を行うための準備処理が完了したこととなる。なお、他の実施形態においては、ステップ10および11の処理を省略し、予め用意された形状モデルを用いて以降のステップ13〜17を行うようにしてもよい。さらに、ステップ10〜12の処理を省略し、予め関連付けが行われた形状モデルを用いて以降のステップ13〜17を行うようにしてもよい。以降のステップ13〜17は、プレイヤが指定したコントロール点を基準として形状モデルが変形する様子を表現するための処理である。
【0084】
ステップ12の次のステップ13においては、タッチパネル13への入力があったか否かが判定される。ここでの入力は、プレイヤがコントロール点を指定するための入力である。ステップ13の判定において、タッチパネル13に対する入力がないと判定された場合、ステップ13の処理が再度行われる。すなわち、タッチパネル13に対する入力があるまでステップ13の処理が所定時間間隔で行われる。一方、ステップ13における判定において、タッチパネル13に対する入力があったと判定された場合、ステップ14の処理が行われる。すなわち、ステップ14においては、コントロール点設定処理が行われる。コントロール点設定処理は、プレイヤによる指定に基づいてコントロール点を設定する処理である。
【0085】
図18は、図9に示すコントロール点設定処理の詳細な処理の流れを示すフローチャートである。コントロール点設定処理においては、まず、ステップ60において、プレイヤによって指定された座標が検出される。ここで検出される座標は、直前のステップ13で入力された座標である。続くステップ61において、ステップ60で検出された座標と、前述のステップ11で作成された頂点リスト(図15)に格納されている各頂点の座標との距離が頂点毎に算出される。続くステップ62において、ステップ61で算出した距離が最も小さい頂点がコントロール点に設定される。具体的には、頂点リストにおける当該頂点にフラグ(図15に示す「C」)が設定される。以上のステップ60〜62の完了によってCPUコア21はコントロール点設定処理を終了する。
【0086】
再び図9の説明に戻り、ステップ14の次のステップ15において、コントロール点関連付処理が行われる。コントロール点関連付処理とは、コントロール点として指定された頂点と形状モデルの全頂点とを関連付ける処理である。コントロール点関連付処理は、上記第2仮想バネを設定する2頂点の組を第2関連付リスト(図20)に格納することによって第2関連付リストを作成する処理である。
【0087】
図19は、図9に示すコントロール点関連付処理の詳細な処理の流れを示すフローチャートである。コントロール点関連付処理においては、まず、ステップ70において、第2関連付リストがクリアされる。第2関連付リストは、第2仮想バネが設定される各頂点間およびその基準距離を示すデータである。図20は、第2関連付リストを示す図である。第2関連付リストには、第2仮想バネが設定される2頂点の組(図20に示すリストの左側の2列)と、その2頂点間のx軸方向に関する距離(図20に示すリストの右から2列目)およびy軸方向に関する距離(図17に示すリストの右端の列)とが2頂点間毎に格納される。また、コントロール点Cと頂点P(i)とのx軸方向に関する距離はΔXc(i)で表され、コントロール点Cと頂点P(i)とのy軸方向に関する距離はΔYc(i)で表される。なお、本実施形態においては、コントロール点である頂点とそれと同一の頂点との間にも関連付けが行われるが、コントロール点である頂点とそれと同一の頂点との間の関連付けはなくてもよい。
【0088】
ステップ71においては、頂点リストから1つの頂点の座標が選出される。ステップ71では、まだ選出されていない頂点であって、頂点リストに格納されている順番が最も若い頂点が選出される。続くステップ72において、ステップ71で選出した頂点とコントロール点との間の距離が座標成分毎に分けて算出される。具体的には、ステップ71で選出された頂点を頂点P(i)と頂点P(i+1)とすると、当該頂点とコントロール点との間の距離のx座標成分ΔXc(i)およびy座標成分ΔYc(i)は、次の式(3)によって算出される。
ΔXc(i)=Xc−X(i)
ΔYc(i)=Yc−Y(i)…(3)
ここで、Xcはコントロール点である頂点のx座標値であり、Ycは当該頂点のy座標値である。従って、Xc、X(i)、Yc、およびY(i)は、頂点リストを参照することによって得ることができる。なお、ステップ72で算出される距離(ΔXc(i),ΔYc(i))は、形状モデルが基準状態にある場合におけるコントロール点と各頂点との間の距離、すなわち、基準距離である。ここでは、コントロール点と各頂点との間の基準距離を特にコントロール点間基準距離と呼ぶ。次に、ステップ73において、CPUコア21は、ステップ72で算出されたコントロール点間基準距離(ΔXc(i),ΔYc(i))を第2関連付リスト(図20)に登録する。
【0089】
ステップ73の次のステップ74において、頂点リストに格納されている全ての頂点についてコントロール点間基準距離を算出したか否かが判定される。コントロール点間基準距離を算出していない頂点がある場合、処理はステップ71に戻り、全ての頂点についてコントロール点間基準距離を算出するまでステップ71〜73の処理が繰り返される。一方、全ての頂点についてコントロール点間基準距離を算出した場合、CPUコア21は、コントロール点間関連付処理を終了する。
【0090】
再び図9の説明に戻り、ステップ15の次のステップ16において、頂点移動処理が行われる。頂点移動処理は、コントロール点の移動に応じた形状モデルの各頂点の移動先を、仮想バネを用いて決定する処理である。
【0091】
図21は、図9に示す頂点移動処理の詳細な処理の流れを示すフローチャートである。頂点移動処理においては、まず、ステップ80において、バネ力リストがクリアされる。図22は、バネ力リストを示す図である。バネ力リストには、形状モデルの各頂点が仮想バネから受ける力が座標軸成分毎に分けて格納される。バネ力リストにおいては、頂点P(i)が受ける力のx座標成分はFx(i)で表され、y座標成分はFy(i)で表される。
【0092】
ステップ81において、コントロール点が移動したか否かが判定される。具体的には、CPUコア21は、タッチパネル13への入力が行われた位置を示す座標をタッチパネル13から取得する。そして、取得した座標が、前回のステップ81において取得した座標と同じであるか否かを判定する。なお、ステップ81の処理が最初に行われる場合には、前回のステップ81において取得した座標に代えて、直前のステップ13において検出される座標を用いる。また、タッチパネル13への入力が検出されなかった場合、コントロール点が移動していないと判定する。
【0093】
ステップ81の判定において、コントロール点が移動していないと判定された場合、ステップ82および83の処理がスキップされ、ステップ84の処理が行われる。一方、ステップ81の判定において、コントロール点が移動したと判定された場合、ステップ82および83の処理が行われる。すなわち、ステップ82において、コントロール点の移動量(ΔXd,ΔYd)が算出される。コントロール点の移動量は、直前のステップ81でタッチパネル13から取得された座標と、その前のステップ81で取得した座標とを用いて算出される。具体的には、直前のステップ81でタッチパネル13から取得された座標を(Xd1,Yd1)とし、その前のステップ81で取得した座標を(Xd2,Yd2)とすると、コントロール点の移動量(ΔXd,ΔYd)は、次の式(4)によって算出される。
ΔXd=Xd1−Xd2
ΔYd=Yd1−Yd2…(4)
次に、ステップ83において、コントロール点に設定されている頂点の座標が更新される。具体的には、頂点リスト内の当該頂点の座標が更新される。
【0094】
上記ステップ83で説明したように、本実施形態では、コントロール点である頂点の位置は、プレイヤによる指定によって決定され、仮想バネの影響を受けない。従って、プレイヤは、コントロール点の位置を操作することによって形状モデルを容易に移動させることができる。
【0095】
ステップ84においては、x方向に関する位置決定処理が行われる。x方向に関する位置決定処理は、形状モデルの各頂点のx軸方向に関する位置を決定するための処理である。当該処理においては、x方向仮想バネが用いられる。なお、x方向に関する位置決定処理においては、「x軸方向に関する第1仮想バネ」を「x方向第1仮想バネ」と呼び、「x軸方向に関する第2仮想バネ」を「x方向第2仮想バネ」と呼ぶ。
【0096】
図23は、図21に示すx方向に関する位置決定処理の詳細な処理の流れを示すフローチャートである。x方向に関する位置決定処理においては、まず、ステップ90において、第1力計算処理が行われる。第1力算出処理は、頂点間に設定されるx方向第1仮想バネが各頂点に加える力を算出する処理である。
【0097】
図24は、図23に示す第1力計算処理の詳細な処理の流れを示すフローチャートである。第1力計算処理においては、まず、ステップ100において、頂点リストから連続する2つの頂点が選出される。ステップ100では、x方向第1仮想バネが設定される2頂点の組であって、まだ選出されていない組が選出される。なお、ステップ100において選出された頂点のうちの頂点リストにおける順番が若い方の頂点を第1頂点と呼び、他方の頂点を第2頂点と呼ぶ。
【0098】
ステップ101においては、ステップ100で選出された2頂点間のx軸方向に関する距離が算出される。具体的には、第1頂点P(i)と第2頂点P(i+1)との間のx軸方向に関する距離ΔX(i)’は、以下の式(5)によって算出することができる。
ΔX(i)’=X(i)−X(i+1)…(5)
ここで、X(i)およびX(i+1)は、頂点リスト(図15)を参照することによって得ることができる。
【0099】
ステップ102においては、第1頂点P(i)と第2頂点P(i+1)との間のx軸方向に関する現在の頂点間距離と基準距離との差分が算出される。具体的には、当該頂点間距離ΔX(i)’と当該基準距離ΔX(i)との差分D(i)は、D(i)=ΔX(i)’−ΔX(i)として算出される。なお、この基準距離ΔX(i)は、上記第1関連付リストを参照することによって得ることができる。
【0100】
ステップ103においては、ステップ100で選出された2頂点間に設定されるx方向第1仮想バネから上記第1頂点が受ける力が算出される。ここで、頂点間に設定された仮想バネから頂点が受ける力は、仮想バネの「バネの力」(上記差分D(i)に比例する力)と、仮想バネに働く減衰力(頂点の速度Vx(i)に比例する力)との和である。従って、頂点P(i)と頂点P(i+1)との間に設定される第1仮想バネから第1頂点が受ける力Fx(i)は、以下の式(6)によって算出することができる。
Fx(i)=−kx×D(i)−dx×Vx(i)…(6)
ここで、kxはx方向第1仮想バネのバネ係数であり、dxはx方向第1仮想バネの減衰係数である。kxおよびdxは、予め定められた定数であり、ともに0以上の値である。本実施形態では、x方向第1仮想バネのバネ係数および減衰係数は全て同じ値(kx、dx)であるとする。なお、他の実施の形態においては、仮想バネ毎にバネ係数の値を異ならせるようにしてもよい。また、本実施形態では、バネの力(上式(6)の右辺の第1項)に加えてバネの減衰力(右辺の第2項)をも考慮して、仮想バネから頂点が受ける力を算出したが、他の実施形態では、減衰力を無視してバネの力のみから当該力を算出するようにしてもよい。
【0101】
また、上式(6)におけるVx(i)は、頂点P(i)の速度である。形状モデルの各頂点の速度は、速度リストとしてWRAM22に格納される。図25は、速度リストを示す図である。速度リストには、形状モデルの各頂点の速度が座標軸成分毎に分けて格納される。速度リストにおいては、頂点P(i)の速度のx座標成分はVx(i)で表され、y座標成分はVy(i)で表される。
【0102】
図24の説明に戻り、上記ステップ103で算出された力は、バネ力リストに格納される。すなわち、ステップ103で算出された力Fx(i)が頂点P(i)と対応付けられてバネ力リストに格納される。
【0103】
ステップ104においては、ステップ100で選出された2頂点間に設定されるx方向第1仮想バネから上記第2頂点が受ける力が算出される。具体的には、頂点P(i)と頂点P(i+1)との間に設定される第1仮想バネから第2頂点が受ける力Fx(i+1)は、以下の式(7)によって算出することができる。
Fx(i+1)=−kx×(ΔX(i)’−ΔX(i))−dx×Vx(i+1)…(7)
なお、上記ステップ104で算出された力は、既に格納されているバネ力リストの内容(Fx(i))に足し合わされ、足し合わされた結果がバネ力リストに新たなFx(i)として格納される。ステップ103および104の処理によって、第1力算出処理の終了時には、頂点に接続される全ての第1仮想バネから当該頂点が受ける力の和がバネ力リストに格納されることとなる。
【0104】
ステップ105においては、第1仮想バネが設定される頂点の組の全てについて、頂点が受ける力を算出したか否かが判定される。頂点が受ける力を算出していない組がある場合、全ての組について当該力を算出するまでステップ101〜104の処理が繰り返される。一方、全ての組について当該力を算出した場合、CPUコア21は、図24に示す第1力算出処理を終了する。
【0105】
図23の説明に戻り、ステップ90の次のステップ91において、第2力算出処理が行われる。第2力算出処理は、コントロール点と頂点との間に設定されるx方向第2仮想バネが各頂点に加える力を算出する処理である。
【0106】
図26は、図23に示す第2力計算処理の詳細な処理の流れを示すフローチャートである。第2力計算処理においては、まず、ステップ110において、頂点リストから1つの頂点が選出される。ステップ110では、まだ選出されていない頂点であって、頂点リストに格納されている順番が最も若い頂点が選出される。
【0107】
ステップ111においては、ステップ110で選出された頂点とコントロール点との間のx軸方向に関する距離が算出される。具体的には、頂点P(i)とコントロール点との間のx軸方向に関する距離ΔXc(i)’は、以下の式(8)によって算出することができる。
ΔXc(i)’=Xc(i)−Xc…(8)
ここで、Xc(i)は、第2関連付リストを参照することによって得ることができる。また、Xcは、コントロール点である頂点のx座標値であるので、頂点リスト(図15)を参照することによって得ることができる。
【0108】
ステップ112においては、ステップ110で選出された頂点とコントロール点との間のx軸方向に関する現在の頂点間距離と基準距離との差分が算出される。具体的には、当該頂点間距離ΔXc(i)’と当該基準距離ΔXc(i)との差分Dc(i)は、Dc(i)=ΔXc(i)’−ΔXc(i)として算出される。なお、この基準距離ΔXc(i)は、上記第2関連付リストを参照することによって得ることができる。
【0109】
ステップ113においては、ステップ110で選出された頂点に設定されるx方向第2仮想バネから当該頂点が受ける力が算出される。ここで、上述したように、頂点間に設定された仮想バネから頂点が受ける力は、仮想バネの「バネの力」と、仮想バネに働く減衰力との和である。従って、頂点P(i)とコントロール点との間に設定される第2仮想バネから頂点P(i)が受ける力Fx(i)’は、以下の式(9)によって算出することができる。
Fx(i)’=−kx’×Dc(i)−dx×Vx(i)…(9)
ここで、kx’はx方向第2仮想バネのバネ係数であり、予め定められた0以上の定数である。なお、本実施形態では、x方向第2仮想バネのバネ係数および減衰係数は全て同じ値(kx’、dx)であるとするが、他の実施の形態においては、仮想バネ毎にバネ係数の値を異ならせるようにしてもよい。
【0110】
次に、ステップ114において、ステップ110で選出された頂点がそれに設定される各仮想バネから受ける力の総和が算出される。具体的には、CPUコア21は、ステップ113で算出された力を、既に格納されているバネ力リストの内容(ステップ103および104で格納された内容)に足し合わせる。そして、足し合わせた結果をバネ力リストに格納する。これによって、バネ力リストの内容は、その頂点に接続される全ての第1仮想バネおよび第2仮想バネから当該頂点が受ける力の総和を示すことになる。
【0111】
ステップ114の次のステップ115においては、頂点リストに格納されている全ての頂点をステップ110で選出したか否かが判定される。選出していない頂点がある場合、処理はステップ110に戻り、全ての頂点が選出されるまでステップ111〜114の処理が繰り返される。一方、全ての頂点が選出された場合、CPUコア21は、第2力算出処理を終了する。
【0112】
図23の説明に戻り、以上のステップ90および91によって、各頂点が受ける力(x軸方向を向く力)の和が算出されてバネ力リストに格納される。そこで、ステップ91の次のステップ92においては、x座標決定処理が行われる。x座標更新処理は、頂点が仮想バネから受ける力に基づいて、各頂点を移動させるべき位置のx座標を決定する処理である。
【0113】
図27は、図23に示すx座標決定処理の詳細な処理の流れを示すフローチャートである。x座標決定処理においては、まず、ステップ120において、頂点リストからコントロール点以外の1つの頂点の座標が選出される。具体的には、ステップ120でまだ選出されていない頂点であって、頂点リストに格納されている順番が最も若い頂点が選出される。なお、コントロール点を選出しない理由は、コントロール点の位置は前述のステップ83で決定されるからである。
【0114】
ステップ121においては、選出された頂点のx軸方向の加速度が算出される。頂点のx軸方向の加速度は、当該頂点が仮想バネから受ける力に基づいて算出することができる。具体的には、頂点P(i)のx軸方向の加速度Ax(i)は、頂点P(i)の質量をm(i)とすると、バネ力リストに格納されている力Fx(i)に基づいて以下の式(10)によって算出することができる。
Ax(i)=(Fx(i)−d×Vx(i)’)/m(i)…(10)
ここで、dは空気抵抗係数である。また、Vx(i)’は頂点P(i)の速度である。ただし、上式(10)で用いられるVx(i)’は、後述するステップ122において更新される前の値である。
【0115】
ステップ122においては、選出された頂点のx軸方向の速度が算出される。頂点のx軸方向の速度は、ステップ121で算出された当該頂点の速度に基づいて算出することができる。具体的には、頂点P(i)のx軸方向の速度Vx(i)は、加速度Ax(i)に基づいて以下の式(11)によって算出することができる。
Vx(i)=Vx(i)’+Ax(i)×Δt…(11)
ここで、Δtは、形状モデルの表示画像を更新する時間間隔、すなわちフレーム時間である。なお、CPUコア21は、ステップ122で頂点P(i)について新たな速度が算出されると、算出された速度に速度リストの内容を更新する。
【0116】
ステップ123においては、選出された頂点のx座標をステップ122で算出された速度に基づいて算出する。具体的には、頂点P(i)のx座標値X(i)は、次の式(12)に従って算出される。
X(i)=X(i)’+Vx(i)×Δt…(12)
ここで、X(i)’は、このステップ123で新たなx座標が算出される前の頂点P(i)のx座標である。X(i)’は、頂点リスト(図15)の内容を参照することによって得ることができる。CPUコア21は、ステップ123で頂点P(i)について新たなx座標が算出されると、算出されたx座標に頂点リストの内容を更新する。以上のステップ121〜123によって、ステップ120で選出された頂点のx座標が新たな位置に更新される。
【0117】
ステップ124において、頂点リストに格納されている全ての頂点についてx座標を算出したか否かが判定される。x座標を算出していない頂点がある場合、処理はステップ120に戻り、全ての頂点についてx座標を算出するまでステップ120〜124の処理が繰り返される。一方、全ての頂点についてx座標を算出した場合、CPUコア21は、x座標決定処理を終了する。また、これによって図23に示すx方向に関する位置決定処理が終了する。
【0118】
図21の説明に戻り、上記ステップ84のx方向に関する位置決定処理によって、形状モデルの各頂点のx軸方向に関する新たな位置(x座標)が決定される。ステップ84の次にステップ85においては、y方向に関する位置決定処理が行われる。y方向に関する位置決定処理は、形状モデルの各頂点のy軸方向に関する位置を決定するための処理である。y方向に関する位置決定処理は、x軸方向であるかy軸方向であるかの違いを除いて、上述したx方向に関する位置決定処理と同様の処理であるので、詳細な説明を省略する。
【0119】
以上に示したx方向に関する位置決定処理(ステップ84)およびy方向に関する位置決定処理(ステップ85)においては、各仮想バネによって生じる仮想の力、仮想バネによって頂点に与えられる仮想の力、および、仮想の力による頂点の移動先の位置が、x軸方向およびy軸方向について独立して、つまり、座標成分毎に算出される。従って、仮想バネによって生じる仮想の力に関する計算は、向きが平行な力同士の加算によって行われるので、ステップ90および91からも明らかなように、本実施形態における処理では2乗計算や平方根計算が必要でないことがわかる。また、移動先の各頂点の位置も、座標成分毎の仮想の力を用いて座標成分毎に計算されるので、2乗計算や平方根計算を用いずに計算することができる。
【0120】
上記ステップ84および85によって、形状モデルの各頂点の新たな位置(x座標およびy座標)が決定する。従って、ステップ85の処理が完了した時点で、頂点リストは、各頂点の新たな位置を示す内容に更新されている。ステップ86においては、この頂点リストに基づいて形状モデルの表示を更新する。具体的には、頂点リストの各頂点の位置を、頂点リストにより示される位置に更新して第1LCD11に表示する。
【0121】
ステップ86の次のステップ87において、形状モデルは前の状態から変形したか否かが判定される。すなわち、CPUコア21は、ステップ86で表示が更新された形状モデルは、更新前の状態(すなわち、1フレーム前の状態)と形状が同じであるか否かが判定される。ステップ87の判定は、例えば、1フレーム前の形状モデルの各頂点の位置を記憶しておき、更新前後の各頂点の位置を比較することによって行われてもよいし、バネ力リストに格納されている力が全て0であるか否かによって行われてもよい。形状モデルは、コントロール点の移動が停止した後でもしばらくの間は、元の形状(基準状態の形状)に戻るように変形を行い、元の形状に戻ると静止する(図3Cおよび図3D参照)。ステップ87は、形状モデルが元の形状に戻り静止しているか否かを判定するための処理である。
【0122】
ステップ87の判定において、形状モデルが前の状態から変形している場合、処理はステップ80に戻る。以降、形状モデルが元の形状に戻って静止するまで、ステップ80〜87の処理が繰り返される。一方、ステップ87の判定において、形状モデルが前の状態から変形していない場合、CPUコア21は、図21に示す頂点移動処理を終了する。
【0123】
再び図9の説明に戻り、ステップ16の頂点移動処理の次に、ステップ17の処理が行われる。すなわち、ステップ17において、ゲーム処理を終了するか否かが判定される。ステップ17の判定は、例えば、ゲームを終了する指示がプレイヤによって行われたか否かによって行われる。ゲーム処理を終了しないと判定された場合、処理はステップ13に戻り、ゲーム終了までステップ13からステップ17の処理が繰り返される。一方、ゲーム処理を終了すると判定された場合、CPUコア21は、図9に示す処理を終了する。以上で、ゲーム装置1において実行されるゲーム処理の説明を終了する。
【0124】
以上のように、本実施形態によれば、x軸方向に関する仮想バネの力の計算(図21に示すステップ84)と、y軸方向に関する仮想バネの力の計算(図21に示すステップ85)とを別々に行うことができる。従って、上述したゲーム処理の説明からも明らかなように、本実施形態では2乗計算や平方根計算等の計算が不要である。それ故、仮想バネを用いた計算処理を従来に比べて非常に簡易な計算で行うことが可能になる。特に、処理能力が高くない携帯機器においては本実施形態に係る画像処理プログラムが有効である。
【0125】
また、本実施形態によれば、第2仮想バネを設定することによって、コントロール点と直接接続されていない頂点についての追従性を向上することができる。これによって、弾性体のごとく変形する形状モデルをより自然に見えるように表現することができる。
【0126】
なお、本実施形態ではコントロール点の位置はプレイヤによって決められたが、他の実施形態においては、画像処理プログラムにおいて予め定められたアルゴリズムに従ってコントロール点の位置を決定するようにしてもよい。
【0127】
なお、上記の実施形態では、コントロール点の移動が停止した場合であっても、形状モデルの変形が続いている間は、コントロール点がそのまま設定され、コントロール点である頂点の位置は移動しないように処理された(図26に示すx座標決定処理において、コントロール点である頂点の座標は更新されないため)。ここで、他の実施形態においては、コントロール点の移動が完了した後は、コントロール点の設定を外すようにしてもよい。すなわち、コントロール点の移動が完了した後は、コントロール点に指定されたいた頂点についても仮想バネの力によってその位置が移動されるようにしてもよい。具体的には、図20のステップ80の判定結果が否定であった場合、図26のステップ120でコントロール点であった頂点も選出対象とするようにしてもよい。また、コントロール点の移動が完了したか否かの判定は、プレイヤによるタッチパネル13への入力位置が前回検出した位置から変化しなくなったか否かによって行われてもよいし、プレイヤによるタッチパネル13への入力がなくなったか否かによって行われてもよい。
【0128】
また、本実施形態においては、2次元の直交座標系に配置された2次元の形状モデルを変形する場合を例として説明したが、3次元の直交座標系に配置された3次元の形状モデルを変形する場合も本実施形態と同様に処理することが可能である。図28は、3次元の形状モデルにおける頂点間に設定される仮想バネを示す図である。3次元の形状モデルを対象とする場合、直交座標系の次数と同数、すなわち3つの仮想バネが1組の頂点間に設定される。すなわち、図28に示すように、頂点P1と頂点P2という1組の頂点間に、x軸方向に関する仮想バネ55、y軸方向に関する仮想バネ56、およびz方向に関する仮想バネ57が設定される。また、3次元の形状モデルを処理対象とする場合は、x方向に関する位置決定処理(上記ステップ84)およびy方向に関する位置決定処理(上記ステップ85)に加えて、z方向に関する位置決定処理を行う必要があるが、この位置決定処理も上記ステップ84と同様の処理である。
【0129】
また、本実施形態においては、線分によって全ての頂点が接続されている形状モデルを例として説明した。すなわち、図4等に示した形状モデルは、任意の頂点から線分を辿ることによって全ての頂点に到達することが可能な形状であった。ここで、形状モデルは線分によって全ての頂点が必ずしも接続されている必要はない。図29は、形状モデルの他の例を示す図である。図29に示す形状モデル61は、頂点P1から頂点P5を順に線分によって接続した部分と、頂点P6と頂点P7とを線分によって接続した部分とからなる(この形状モデル61は、頂点P1から頂点P5を順に線分によって接続した1つの形状モデルと、頂点P6と頂点P7とを線分によって接続した1つの形状モデルという2つの形状モデルであると捉えてもよい。)。このような形状モデルの場合、頂点関連付処理(ステップ12)では、線分によって結ばれる2頂点の間に仮想バネを設定することに加えて、上記2つの部分を接続するように仮想バネを設定すればよい。つまり、任意の頂点から仮想バネを辿ることによって全ての頂点に到達することが可能となるように、仮想バネを設定すればよい。図29に示す例では、頂点P3と頂点P6との間、および、頂点P4と頂点P7との間に仮想バネが設定されている。図29に示すように、形状モデルは、2つの部分からなる構成であってもよい。従って、接続されていない複数の部分からなる図形や文字(例えば漢字)がプレイヤによって入力された場合であっても、その図形や文字を形状モデルとして変形することが可能である。
【0130】
図30Aおよび図30Bは、バネの伸びと時間との関係を示すグラフを示す図である。図30Aおよび図30Bにおいて、縦軸はバネの伸び(Δx)であり、横軸は時間(t)である。形状モデルの各頂点の挙動としては、図30Aのように振動を行いながら徐々に減衰していくような挙動、および、図30Bのように振動せずに単に減衰していくような挙動となることが考えられる。形状モデルの頂点がいずれの挙動となるかは、仮想バネのバネ係数や減衰係数、頂点の質量、空気抵抗等の種々の定数の値の設定の仕方によって変化するものであり、いずれの挙動となるように各変数を設定してもよい。
【産業上の利用可能性】
【0131】
本発明は、モデルがあたかも弾性体のように変形する処理を行う画像処理装置、または、それにおいて実行される画像処理プログラムとして利用することが可能である。
【図面の簡単な説明】
【0132】
【図1】本発明の一実施形態に係る画像処理装置の一例である携帯型のゲーム装置の外観図
【図2】ゲーム装置1の内部構成を示すブロック図
【図3A】形状モデルが表示された第1LCD11の画面の一例を示す図
【図3B】形状モデルが表示された第1LCD11の画面の一例を示す図
【図3C】形状モデルが表示された第1LCD11の画面の一例を示す図
【図3D】形状モデルが表示された第1LCD11の画面の一例を示す図
【図4】形状モデルの関連付けられた頂点間に設定される仮想バネを示す図
【図5】従来の方法において形状モデルの頂点を移動させた場合における形状モデルの変形の様子を示す図
【図6】図4に示した形状モデルが変形する様子をフレーム時間毎に示す図
【図7】形状モデルに設定される第2仮想バネを示す図
【図8】ゲーム装置1における処理において用いられる変数を説明するための図
【図9】ゲーム装置1において実行されるゲーム処理の流れを示すフローチャート
【図10】プレイヤによってタッチパネル13上に描かれた軌跡の一例を示す図
【図11】図10に示す入力に対してゲーム装置1が読み取った入力座標を示す図
【図12】入力座標リストの一例を示す図
【図13】図9に示す入力検出処理の詳細な処理の流れを示すフローチャート
【図14】図9に示すモデル作成処理の詳細な処理の流れを示すフローチャート
【図15】頂点リストの一例を示す図
【図16】図9に示す頂点関連付処理の詳細な処理の流れを示すフローチャート
【図17】第1関連付リストの一例を示す図
【図18】図9に示すコントロール点設定処理の詳細な処理の流れを示すフローチャート
【図19】図9に示すコントロール点関連付処理の詳細な処理の流れを示すフローチャート
【図20】第2関連付リストを示す図
【図21】図9に示す頂点移動処理の詳細な処理の流れを示すフローチャート
【図22】バネ力リストを示す図
【図23】図21に示すx方向に関する位置決定処理の詳細な処理の流れを示すフローチャート
【図24】図23に示す第1力計算処理の詳細な処理の流れを示すフローチャート
【図25】速度リストを示す図
【図26】図23に示す第2力計算処理の詳細な処理の流れを示すフローチャート
【図27】図23に示すx座標決定処理の詳細な処理の流れを示すフローチャート
【図28】3次元の形状モデルにおける頂点間に設定される仮想バネを示す図
【図29】形状モデルの他の例を示す図
【図30A】バネの伸びと時間との関係を示すグラフを示す図
【図30B】バネの伸びと時間との関係を示すグラフを示す図
【図31A】従来の仮想バネの設定方法を示す図
【図31B】従来の仮想バネの設定方法を示す図
【符号の説明】
【0133】
1 ゲーム装置
11 第1LCD
21 CPUコア
22 WRAM
31,61 形状モデル
34〜39,41〜46,55〜57 仮想バネ



【特許請求の範囲】
【請求項1】
直交座標系における形状モデルの形状を変化させて表示装置の画面に表示する処理をコンピュータに実行させる画像処理プログラムであって、
形状モデルを構成する各頂点は、少なくとも1つの他の頂点と関連付けられており、
関連付けられた2頂点の間には、前記直交座標系における座標軸方向を向く仮想の力であって、当該2頂点の間の当該座標軸方向に関する距離に応じて大きさが変化する仮想の力を当該2頂点に与える仮想バネが座標軸方向毎に設定され、
形状モデルの各頂点の位置関係が基準状態から変化した場合、前記2頂点の間の距離の基準状態からの差分を座標成分毎に分けて算出する差分算出ステップと、
各仮想バネによる仮想の力の大きさを前記差分に基づいて算出するバネ力算出ステップと、
同じ頂点に与えられる仮想の力について向きが平行な力同士を加算することによって、仮想バネから各頂点が受ける仮想の力を座標成分毎に分けて算出する頂点力算出ステップと、
各頂点を移動させるべき位置を、前記頂点力算出ステップにおいて算出された座標成分毎の仮想の力に基づいて座標成分毎に決定する位置決定ステップと、
前記決定された位置に各頂点を移動した形状モデルを画面に表示する表示制御ステップとを前記コンピュータに実行させる、画像処理プログラム。
【請求項2】
形状モデルのうちの少なくとも1つの頂点をコントロール点として指定するコントロール点指定ステップと、
前記コントロール点を移動させるコントロール点移動ステップとを前記コンピュータにさらに実行させ、
前記差分算出ステップは、前記コントロール点の移動によって生じる前記差分を算出する、請求項1に記載の画像処理プログラム。
【請求項3】
前記コントロール点指定ステップにおいて前記コントロール点が指定されると、前記コントロール点と前記コントロール点以外の各頂点との間に新たな関連付けを行うコントロール点関連付ステップを前記コンピュータにさらに実行させる、請求項2に記載の画像処理プログラム。
【請求項4】
前記コントロール点関連付ステップは、前記コントロール点移動ステップにおける前記コントロール点の移動が完了するまで、または、前記コントロール点の移動に起因する形状モデルの変形が停止するまでの間のみ前記新たな関連付けを行う、請求項3に記載の画像処理プログラム。
【請求項5】
前記入力装置の入力面上にユーザによって描かれた軌跡を座標点として時系列で検出する入力検出ステップと、
前記検出された各座標点の少なくとも一部の座標点を各頂点とする形状モデルを作成するモデル作成ステップとを前記コンピュータにさらに実行させる、請求項1に記載の画像処理プログラム。
【請求項6】
前記入力検出ステップは、ユーザによって連続して入力された座標点を1まとまりの座標点群として検出し、
前記モデル作成ステップは、前記入力検出ステップにおいて検出された座標点群からその少なくとも一部を選出した各頂点と、当該各頂点を時系列順に結ぶ線分とによって構成される形状モデルを作成し、
前記モデル作成ステップによって作成された形状モデルに含まれる2頂点のうち、線分によって結ばれる2頂点に関連付けを行う頂点関連付ステップを前記コンピュータにさらに実行させる、請求項5に記載の画像処理プログラム。
【請求項7】
形状モデルは、複数の頂点と頂点間を接続する線分とによって構成され、
所定の頂点から線分を辿ることによって到達不可能な頂点が1つの形状モデルの内に存在する場合、当該所定の頂点から線分を辿ることによって到達可能な頂点と到達不可能な頂点との間に関連付けを行う頂点関連付ステップを前記コンピュータにさらに実行させる、請求項1に記載の画像処理プログラム。
【請求項8】
前記バネ力算出ステップは、前記差分に比例する大きさの力と、頂点の速度に比例する大きさの力とに基づいて仮想バネによる仮想の力を算出する、請求項1に記載の画像処理プログラム。
【請求項9】
形状モデルが基準状態である場合における前記2頂点の間の距離を前記直交座標系の座標成分毎に分けて算出する基準距離算出ステップと、
その時点における前記2頂点の間の距離を座標成分毎に分けて算出する移動後距離算出ステップとを前記コンピュータにさらに実行させ、
前記差分算出ステップは、前記基準距離算出ステップにおいて算出された距離と前記移動後距離算出ステップにおいて算出された距離とに基づいて前記差分を算出する、請求項1に記載の画像処理プログラム。
【請求項10】
直交座標系における形状モデルの形状を変化させて表示装置の画面に表示する処理であって、
形状モデルを構成する各頂点は、少なくとも1つの他の頂点と関連付けられており、
関連付けられた2頂点の間には、前記直交座標系における座標軸方向を向く仮想の力であって、当該2頂点の間の当該座標軸方向に関する距離に応じて大きさが変化する仮想の力を当該2頂点に与える仮想バネが座標軸方向毎に設定され、
形状モデルの各頂点の位置関係が基準状態から変化した場合、前記2頂点の間の距離の基準状態からの差分を座標成分毎に分けて算出する差分算出手段と、
各仮想バネによる仮想の力の大きさを前記差分に基づいて算出するバネ力算出手段と、
同じ頂点に与えられる仮想の力について向きが平行な力同士を加算することによって、仮想バネから各頂点が受ける仮想の力を座標成分毎に分けて算出する頂点力算出手段と、
各頂点を移動させるべき位置を、前記頂点力算出手段によって算出された座標成分毎の仮想の力に基づいて座標成分毎に決定する位置決定手段と、
前記決定された位置に各頂点を移動した形状モデルを画面に表示する表示制御手段とを備える、画像処理装置。


【図1】
image rotate

【図2】
image rotate

【図3A】
image rotate

【図3B】
image rotate

【図3C】
image rotate

【図3D】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30A】
image rotate

【図30B】
image rotate

【図31A】
image rotate

【図31B】
image rotate


【公開番号】特開2006−59028(P2006−59028A)
【公開日】平成18年3月2日(2006.3.2)
【国際特許分類】
【出願番号】特願2004−238636(P2004−238636)
【出願日】平成16年8月18日(2004.8.18)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】