JP3697321B2 - 仮想物体の運動生成方法 - Google Patents
仮想物体の運動生成方法 Download PDFInfo
- Publication number
- JP3697321B2 JP3697321B2 JP18171696A JP18171696A JP3697321B2 JP 3697321 B2 JP3697321 B2 JP 3697321B2 JP 18171696 A JP18171696 A JP 18171696A JP 18171696 A JP18171696 A JP 18171696A JP 3697321 B2 JP3697321 B2 JP 3697321B2
- Authority
- JP
- Japan
- Prior art keywords
- vector
- point
- determination
- contact
- calculation result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
Description
【0001】
【発明の属する技術分野】
本発明は仮想物体の運動生成方法に関し、更に詳しくは、仮想の物体が仮想の面と接触した際の該物体の運動を生成する仮想物体の運動生成方法に関する。
ゲーム機等におけるCGアニメーションでは、ゲームの進行により、画面の仮想上の物体が仮想上の面(地面や対戦相手の面等)と接触(衝突)する場合も少なくない。係る場合の物体の運動の画像を、予め想定したゲームのシナリオに従って複数用意しておくと、自然な動きが得られないばかりか、用意する画像の量も膨大となる。一方、高性能なコンピュータ等を使用すれば、運動のシミュレーション画像をリアルタイムに生成することも可能となるが、パーソナルコンピュータやゲーム機等でこれを実現するのは極めて困難である。そこで、少ない情報と簡単な演算で、物体の物理法則に準じた自然な運動を自動生成することの可能な仮想物体の運動生成方法の提供が望まれる。
【0002】
【従来の技術】
図13は従来技術を説明する図である。
図13(A)において、例えばある描画時刻t0 では、物体aが地面に向かって速度vで落下している。図13(B)において、次の描画時刻t1 では、物体aが地面に速度vで衝突した。係る場合に、従来の、特にゲーム機等では、図13(B)の状態で物体aの運動が停止していた。
【0003】
【発明が解決しようとする課題】
しかし、このような物体aの運動は物理的に不自然であり、CGアニメーションの質、ひいてはゲームの質を低下させる。一方、予め図13(A),(B)のような事態が生じるのを想定して、予めゲームシナリオの中に図13(C)の様な画面を用意しておくことが可能である。しかし、シナリオ毎に図13(C)の様な画面を用意しても、自然な動きが得られないばかりか、用意する画像の量が膨大となる。
【0004】
本発明の目的は、少ない情報と簡単な演算で物体の物理法則に準じた自然な運動を高速に自動生成可能な仮想物体の運動生成方法を提供することにある。
【0005】
【課題を解決するための手段】
上記の課題は例えば図1(A)の構成により解決される。即ち、本発明(1)の運動生成方法は、仮想の物体が仮想の面と接触した際の該物体の運動を生成する仮想物体の運動生成方法において、物体重心の接触面への運動方向の投影点Qと、該物体と面の接触点P 1 〜P n とからなる各ベクトル〈QP 1 〉〜〈QP n 〉と、該各ベクトルにつき前記投影点Qの内側判定に有効に使用されたか否かを表す使用フラグUF 1 〜UF n とをそれぞれ関連付けて記憶したデータテーブルと、前記データテーブルより抽出した2つのベクトルの外積と、前記接触面の法線ベクトル〈N〉との内積を求める第1の演算手段と、前記データテーブルの情報及び第1の演算手段を使用した所定の処理により前記投影点Qが前記接触点P 1 〜P n により構成される最大面積の多角形の領域内にあるか否かを判定する制御手段とを備え、該制御手段は、(1)ベクトル〈QP1〉〜〈QPn〉の使用フラグUF1〜UFnを未使用に初期化すると共に、任意最初のベクトルQP(k) を選択してその使用フラグUF(k)を使用となし、かつi=kとする処理と、(2)i≠jの条件で、前記第1の演算手段によりベクトル〈QP(i) 〉,〈QP(j) 〉の外積と、法線ベクトル〈N〉との内積を求め、その演算結果が内側判定の符号(例えば>0)となるベクトル〈QP(j)〉を探査する処理と、(3)前記(2)の条件を満たすベクトル〈QP(j) 〉が存在しないことにより、投影点Qが接触点P1〜Pnで構成される最大面積の多角形の領域外にあると判定する処理と、を備えるものである。
【0006】
本発明(1)の処理は、面と接触する物体に回転モーメントが発生するか否の前判定を行う処理に位置し、点Qが点P1 〜Pn で構成される最大面積の多角形の領域外に在る場合は回転モーメントが発生し、それ以外の場合は回転モーメントが発生しないとする物理的な着想に基づいている。従って、物体と面との接触面の形状等には一切関知せず、点Q(即ち、物体の重心G)及び接触点P1 〜Pn の座標等からなる、単純で、かつ少ない情報と、簡単な演算とにより物体の物理法則に準じた自然な運動を高速に自動生成可能となる。
【0007】
本発明(1)においては、例えば図9(B)に示す様な場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉<0
▲2▼〈N〉・〈QP1 〉×〈QP3 〉<0
▲3▼〈N〉・〈QP1 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP1 〉×〈QP5 〉<0
▲5▼〈N〉・〈QP1 〉×〈QP6 〉<0
で終了し、点Qは最大面積の5角形(P1 P2 P3 P5 P6 )の外側にある。この場合に、図のハッチングで示した様な物体と面との接触面の形状は問わない。従って、この判定処理のみならず、その前後の処理における必要な座標データの準備、取扱及び演算が大幅に単純化され、処理が軽減される。
【0008】
ところで、もし点Qの内側判定が先に得られれば、点Qの外側判定を待たなくても、物体に回転モーメントが発生しないと判定できる。
そこで、好ましくは、本発明(2)においては、上記本発明(1)において、前記制御手段は、(4)前記(2)の演算結果が内側判定の符号であることにより、その際のjが
指す使用フラグUF(j)を使用となし、かつ前記第1の演算手段により該ベクトル〈QP(j)〉と前記(1)で選択した最初のベクトル〈QP(k)〉の外積と、法線ベクトル〈N〉との内積を求める処理と、(5)前記(4)の演算結果が内側判定の符号であることにより、前記投影点Qが前記接触点P1〜Pnで構成される最大面積の多角形の領域内にあると判定する処理と、(6)前記(4)の演算結果が内側判定の符号ではないこと(例えば≦0)により、その際のiにjの内容を転送し、かつ該jの内容を次の未使用ベクトルを指す値に更新して前記(2)に戻る処理と、を更に備える。
【0009】
本発明(2)によれば、例えば図7(A)に示す様な場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉>0
で終了し、点Qは3角形(P1 ,P2 ,P3 )の内側に含まれる。即ち、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。従って、本発明(2)によれば、物体に回転モーメントを発生させるか否かの判定を、点Qと点P1 〜Pn との相対位置に応じて、能率良く、より早く判定できる。
【0010】
ところで、上記図7(A)の場合の様に、処理(2)の演算について毎回>0の結果が得られる場合は良いが、必ずしもそうなるとは限らない。これを図8(A)の例で説明する。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
となり、次に、
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
となる。即ち、この場合のベクトル〈QP4 〉は点Qの内側判定には当面は有用では無い。そこで、次のベクトル〈QP5 〉を選択し、処理を進めると、
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉<0
となる。即ち、点Qの内側判定に有用な新たなベクトル〈QP5 〉が得られたが、この時点では点Qの最終的な内側判定は得られていない。
【0011】
しかるに、上記一旦有用でないとされたベクトル〈QP4 〉であっても、この新たなベクトル〈QP5 〉との関係で調べると、点Qの内側判定に有用となるかも知れない。そこで、このベクトル〈QP4 〉を再度検査し、
▲5▼〈N〉・〈QP5 〉×〈QP4 〉>0
の結果を得る。しかも、その内側判定では、
〈N〉・〈QP4 〉×〈QP1 〉>0
となり、この時点で、点Qは5角形(P1 ,P2 ,P3 ,P5 ,P4 )の内側に含まれる。従って、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。
【0012】
そこで、好ましくは、本発明(3)においては、上記本発明(2)において、制御の流れを変えるための制御フラグMFを更に備え、前記制御手段は、(7)前記(2)の演算結果が内側判定の符号ではないことにより、その際のベクトル〈QP ( j ) 〉の使用フラグUF(j)を未使用にし、かつjの内容を前記未使用ベクトルを指すためのレジスタmに保持すると共に、前記制御フラグMFを真となし、かつ前記jの内容を次の未使用ベクトルを指す値に更新して前記(2)に戻る処理と、(8)前記(4)の演算結果が内側判定の符号ではなく、かつ制御フラグMFが真により、その時点のjよりも以前の未使用ベクトルを指すレジスタmを探査し、かつ前記第1の演算手段により当該ベクトル〈QP(j)〉と該探査したベクトル〈QP(m)〉の外積と、法線ベクトル〈N〉との内積を求める処理と、(9)前記(8)の演算結果が内側判定の符号であることにより、前記第1の演算手段によりその際のベクトル〈QP(m)〉と前記(1)で選択した最初のベクトル〈QP(k)〉の外積と、法線ベクトル〈N〉との内積を求める処理と、(10)前記(9)の演算結果が内側判定の符号であることにより、前記投影点Qが前記接触点P1〜Pnで構成される最大面積の多角形の領域内にあると判定する処理と、を更に備える。
【0013】
この様に、本発明(3)によれば、不使用ベクトルの早期再活用処理を設けたことにより、点Qの内側判定は接触点のより若い番号で得られる。従って、残りのベクトルの検査を行う必要は無く、判定処理が速い。
また好ましくは、本発明(4)においては、上記本発明(3)において、前記制御手段は、(14)前記(9)の演算結果が内側判定の符号ではなく、かつデータテーブルに未使用ベクトルが存在しないことにより、前記投影点Qが前記接触点P 1 〜P n で構成される最大面積の多角形の領域外にあると判定する処理、を更に備える。
また上記の課題は例えば図1(B)の構成により解決される。即ち、本発明(5)の運動生成方法は、上記本発明(1)又は(4)において、2つのベクトルの内積を求める第2の演算手段を更に備え、前記制御手段は、前記投影点Qが前記接触点P 1 〜P n で構成される最大面積の多角形の領域外に在ると判定したことにより、(11)任意の整数i,j(1≦i<j≦n)に対し、前記第2の演算手段によるベクトル〈QCij〉,〈Pi Pj〉の内積が0を満たす線分PiPj上の点Cijであって、距離|QCij|が最小となる点Cmnを求め、該点Cmnを物体の回転中心の座標となす処理、を更に備えるものである。
【0014】
本発明(5)の処理は、上記点Qが点P1〜Pnで構成される最大面積の多角形の領域外に在る場合に実行され、物体のどの部分を中心にして回転モーメントを発生させるかを決定する処理である。但し、ここでも物体と面との接触面の形状等には一切関知せず、点Q及び接触点P1〜Pnの座標からなる、単純かつ少ない情報と、簡単な演算とにより物体の物理法則に準じた回転の中心座標を高速に求め得る。
【0015】
図11(A)を参照して一例の回転中心位置決定処理を具体的に説明する。
上記処理(11)において、ベクトル〈QCij〉≠0,〈Pi Pj 〉≠0とする場合に、〈QCij〉・〈Pi Pj 〉=0を満たすベクトル〈QCij〉,〈Pi Pj 〉は互いに直交するベクトルである。この処理(11)を図11(A)に適用すると、例えば〈P1 P2 〉と〈QC12〉とは直交するが、その交点C12は線分P1 P2 上には無いので除外される。一方、例えば〈P2 P3 〉と〈QC23〉とは直交し、かつその交点C23は線分P2 P3 上に在るので保持される。こうして全ての場合を検査し、最終的に交点C16,C23,C35,C46等が保持される。
【0016】
更に、距離|QCij|が最小となる点Cmnを求め、該点Cmnを物体の回転中心の座標Rとなす。図11(A)の例では、距離|QC16|が最小となり、回転中心の座標R=C16である。これは、物体の図示の一例の接触面形状から見ても合理的な回転の中心であり、この接触面形状が他のどの様な形をしていても合理性を損なわない。
【0017】
ところで、点Qと接触点Pとの間には例えば図11(B)に示すような関係も生じ得る。即ち、ここでは点Qが3角形の一つの頂点P1 付近に存在している。係る場合に、もし交点C23が物体の回転中心の座標Rに選ばれると、物理的に不合理な回転モーメントが生成されてしまう。
そこで、好ましくは、本発明(6)においては、上記本発明(5)において、前記制御手段は、(12)前記接触点P1〜Pnの中で、前記投影点Qに最も近い点Pkとの間の距離|QPk|を求める処理と、(13)2点Q,C mn 間の距離|QCmn|と前記距離|QPk|の小さい方に対応する点Cmn又はPkを物体の回転中心の座標となす処理と、を更に備える。
【0018】
これにより、図11(B)の例では、点Qとの距離が小さい方の、点P1が物体の回転中心の座標Rに選ばれる。従って、係る場合でも運動の合理性を損なわない。
また、好ましくは、上記本発明(1)乃至(6)の何れか1に記載の処理をコンピュータが実施するためのプログラムとして記憶媒体に記録する。
【0019】
従って、より高度で高品質のCGアニメーションを生成するようなゲームソフト等を、低価格、低容量で提供できる。
【0020】
【発明の実施の形態】
以下、添付図面に従って本発明に好適なる実施の形態を詳細に説明する。
なお、以下の説明では、記号〈〉はベクトル、記号||は絶対値(距離,大きさ等)、記号×はベクトル積、記号・はスカラー積、記号*はスカラーの掛け算、記号←は代入を夫々表すものとする。
【0021】
図2は実施の形態によるのゲーム機の構成を示す図で、図において、1は本ゲーム機の本体、2はユーザが操作するための十字キー、A,Bボタン、スタートボタン等を有するコンソール部(CSL)、3はCRT等による表示装置(DISP)、4は本実施の形態による仮想物体の運動生成方法等をプログラムで記憶しているコンパクトディスク(CD)、100はネットワーク(公衆網等)、5はゲーム等に関する様々な通信サービスをオンラインで提供するサーバ、6は他のゲーム機である。
【0022】
ゲーム機本体1において、11は本ゲーム機の主制御・処理を行うCPU、12はCPU11が実行するプログラムやデータであって、例えば図3〜図5,図10に示す物体の運動生成に係る処理等を記憶するRAM,ROM,EEPROM等よりなる主メモリ(MEM)、13は表示装置3を制御する表示制御部(DISPC)、14はコンソール部2をCPU11に接続するインタフェース部(IF)、15はCD4の着脱、駆動及びデータ読取を行うCD駆動部(CDD)、16はゲーム機本体1をネットワーク100に接続する通信制御部(NCC)、17はCPU11の共通バスである。
【0023】
ゲームを行う時は、ゲーム機本体1及び表示装置3に電源投入し、ゲーム用のCD4をCD駆動部15に装填する。更に、CD4から必要なプログラムやデータを主メモリ12にロードし、ゲームをスタートする。そして、表示装置3の生成アニメーション画像を見ながら、コンソール部2を操作してゲームを楽しむ。なお、CD4に代えて、ROMカードやフロッピーディスク等の他の2次記憶装置を使用しても良い。また、サーバ5から所望のゲームソフトをダウンロードしても良い。更に、他のゲーム機6とオンラインで対戦ゲームを行っても良い。
【0024】
図3は実施の形態による仮想物体の運動生成処理のフローチャートである。
例えば、ゲームの実行中に物体が面(壁、地面等)と接触(衝突)したような事態に至ると、この処理に入力する。ここで必要となる情報は、面の法線ベクトル〈N〉、物体と面の接触点P1 〜Pn の座標、物体の重心Gの座標、及び該重心Gの面への運動方向の投影点Qの座標(但し、これは他の情報から求められる)である。
【0025】
ステップS1では、接触点Pが3個以上か否かを判別する。3個以上の場合は、3角形以上が構成されるので、後述するステップS2の処理に進み、点Qと点P1 〜Pn で構成される多角形との間で内外判定処理を行う。
ステップS3では、点Qが多角形の外側判定か否かを判別する。外側判定の場合は、物体に回転モーメントが生じるので、後述するステップS4の処理に進み、物体の回転中心の座標Rの抽出処理を行う。
【0026】
ステップS5では、〈N〉×〈RQ〉を軸として物体に回転モーメントを発生する。但し、〈RQ〉がゼロベクトルの場合(即ち、点Qと回転中心の座標Rとが重なる場合)は回転モーメントを発生しない。回転モーメントの大きさMは、例えば次式で与えられる。
M=α*(v+1)*cosθ
但し、α:物体の慣性モーメント
v:物体の面方向の速度
θ:〈RQ〉と〈RG〉とのなす角度
なお、上式右辺()内の+1は、接触面が地面の場合に、重力による速度成分を考慮したものである。この式によれば、θが小の時は、比較的大きな回転モーメントが発生し、物体は地面に速く倒れる。またθが大の時は、比較的小さな回転モーメントが発生し、物体はゆっくりと地面に倒れる。
【0027】
ステップS6では、接触面の法線方向にリバウンド力(跳ね返り慣性モーメント)を発生する。跳ね返り慣性モーメント(イナーシャ)の大きさKは、例えば次式で与えられる。
K=β*v*sinθ
但し、β:面又は物体の弾性係数
v:物体の面方向の速度
θ:〈RQ〉と〈RG〉とのなす角度
この式によれば、θが小の時は、比較的小さな跳ね返り慣性モーメントが発生し、物体は僅かに跳ね返る。またθが大の時は、比較的大きな跳ね返り慣性モーメントが発生し、物体はより大きく跳ね返る。
【0028】
なお、実際はステップS5の回転モーメントとステップS6の跳ね返り慣性モーメントとが合成処理され、物体に物理法則に準じたより自然な運動を生成することになる。
また、上記ステップS3の判別で点Qが内側判定の場合は、物体に回転モーメントは発生しないので、上記ステップS4,S5の回転処理をスキップし、ステップS6のリバウンド発生処理に進む。
【0029】
また、上記ステップS1の判別で接触点Pが3個未満の場合は、多角形が構成されないので、上記ステップS2,S3の処理をスキップし、ステップS4の処理に進む。なお、この場合のステップS4の処理は、図10の説明に関連して後述する。
図4,図5は実施の形態による点と多角形の内外判定処理のフローチャート(1),(2)で、図6は実施の形態による点と多角形の内外判定処理を説明する図である。
【0030】
図6(A)は物体が平面(例えば地面Z=0)に落下した場合を示している。この場合に、内外判定処理が使用する情報は、物体と面との接触点P1 〜P6 の座標と、物体の重心Gを平面に投影した点Qの座標である。即ち、ここでは物体がどの様な面形状で地面と接触しているかの情報は必要無い。従って、例えば図6(B)に示す如く、点Qが接触面(ハッチング部分)に含まれていない場合も有るし、また図6(C)に示す如く、点Qが接触面に含まれている場合も有る。図示しないが、他にも様々な接触面の形状が考えられる。
【0031】
しかるに、物理法則によれば、点Qが、点P1 〜P6 により形成される最大面積の多角形(破線で示す)に含まれる場合は、物体に回転モーメントは発生せず、また含まれない場合にのみ、回転モーメントが発生することが理解できる。
なお、点Qが最大面積の多角形の境界線上に在る場合がある。この場合は、回転モーメントを発生させても良いし、また発生させなくても良い。この点、本実施の形態では、上記ステップS5の処理で〈RQ〉=0となるため、回転モーメントは発生しないこととしている。
【0032】
この内外判定処理は、基本的には、点Qが最大面積の多角形の内側(境界線を含まない)に在るとする内側判定を能率良く求めるように構成されており、それ以外の場合は外側判定となる。その結果、内外判定又は外側判定が高速に得られる。以下、図6(A)を参照しつつ、内外判定処理を具体的に説明する。
図4は本判定処理の基本部分を示している。
【0033】
ステップS11では必要な初期化処理を行う。例えば判定演算で使用するデータテーブルを初期化する。図5(B)に一例のデータテーブルを示す。
このテーブルには、図6(A)の例に対応して、点Qから各接触点P1 〜P6 に向かうベクトル〈QP1 〉〜〈QP6 〉が昇順に記憶されている。各接触点の付加番号1〜6は予め物体に固有の番号でも良いし、この判定処理又は事前の処理で任意に付加しても良い。従って、最初の接触点P1 は実質的に任意に選択出来ることになる。コード「Null」はデータテーブルの終わりを表す。
【0034】
フラグ変数UFはベクトル〈QP1 〉〜〈QP6 〉が点Qの内側判定に有効に使用されたか否かを表す使用フラグであり、最初は全て0(不使用)に初期化される。更に、図示しないが、外側判定結果を表すフラグEXTF←0(内側判定)に初期化し、また判定演算の流れを制御するためのモードフラグMF←0に初期化する。
【0035】
ステップS12では、各ポインタi←0,j←1,k←0,m←0とする。ポインタiは後述のステップS14におけるベクトル外積演算の第1のベクトルを指すポインタ、ポインタjは同じく第2のベクトルを指すポインタである。因みに、ステップS14の処理は、第1のベクトル〈QP(i) 〉を基準として点Qの内側判定に有用な第2のベクトル〈QP(j) 〉を探す処理である。更に、後述のステップS16の処理は、ステップS14の処理で探した第2のベクトル〈QP(j) 〉と、ステップS14で最初に選択した第1のベクトル〈QP(i) 〉{即ち、〈QP1 〉}とを使用して点Qの最終的な内側判定を行う処理である。このため、ポインタkは常にテーブルの最初のベクトル〈QP1 〉を指している。
【0036】
ところで、上記ステップS14の処理で、点Qの内側判定に有用でないと判定されたような第2のベクトル〈QP(j) 〉は、当面の内側判定演算から除外される。即ち、その使用フラグUF(j) =0(不使用)のままで残される。しかし、その後のステップS14の処理で他の有用な第2のベクトル〈QP(j) 〉が見つかる場合があり、係る場合には、この第2のベクトルとの関係で前記不使用となったベクトル〈QP(j) 〉が有用となり、かつ続くステップS16の処理でより早く最終的な内側判定に至る場合がある。ポインタmは、この処理を実現するために設けられており、データテーブルの中から一旦不使用となった{使用フラグUF(m) =0の}ベクトルを探すためのポインタとして使用される。
【0037】
ステップS13では、最初のベクトル〈QP1 〉は無条件で使用するので、その使用フラグUF(i) ←1とする。ステップS14では{〈N〉・〈QP(i) 〉×〈QP(j) 〉}の演算を行い、その結果が>0か否かを判別する。この演算はスカラー3重積となっており、ベクトル〈N〉,〈QP(i) 〉,〈QP(j) 〉の各要素の行列演算により容易に求まる。なお、{(〈QP(i) 〉×〈QP(j) 〉)・〈N〉}演算を行い、その結果が>0か否かを判別しても良い。
【0038】
図6(A)の例では、法線ベクトル〈N〉が紙面の手前側(Z軸方向)に向いているとすると、最初の演算では{〈N〉・〈QP1 〉×〈QP2 〉}>0となる。結果が>0の場合は、2番目のベクトル〈QP2 〉は、点Qの内側判定に有用なベクトルとして使用されたので、ステップS15に進み、その使用フラグUF(j) ←1とする。
【0039】
ステップS16では{〈N〉・〈QP(j) 〉×〈QP(k) 〉}の演算を行い、結果が>0か否かを判別する。結果が>0の場合は、点Qが、これまでに領域判定した、より少ない面積の多角形の内側に含まれることになるので、内側判定(EXTF=0)のままで処理を抜ける。
しかし、図6(A)の例では{〈N〉・〈QP2 〉×〈QP1 〉}の演算結果は<0となる。この場合は、ステップS17でポインタiにポインタjの内容を転送し、次回のステップS14の処理における第1のベクトルを〈QP1 〉から〈QP2 〉に変更する。
【0040】
ステップS18ではモードフラグMF=1か否かを判別する。この時点では不使用ベクトルが発生していないので、MF=0のままである。ステップS19ではポインタjの内容をインクリメント(即ち、次の未検査のベクトルを指す様に更新)し、次回のステップS14の処理における第2のベクトルを〈QP2 〉から〈QP3 〉に変更する。
【0041】
ステップS20では、〈QP(j) 〉=Nullか否かを判別し、Nullでない場合は未だ未検査のベクトルが有るのでステップS14に戻る。またNullの場合は、点Qの積極的な内側判定が得られずに全ベクトルの検査を終了したことになるので、ステップS21で外側判定のフラグEXTF←1となし、処理を抜ける。
【0042】
また、上記ステップS14の処理で{〈N〉・〈QP(i) 〉×〈QP(j) 〉}≦0の場合は、点Qの内側判定に有用では無いベクトル〈QP(j) 〉が検出されたので、ステップS22に進み、モードフラグMF←1とする。これを図6(A)の例で言うと、ステップS14で{〈N〉・〈QP2 〉×〈QP3 〉}>0を行った後、次回のステップS14で{〈N〉・〈QP3 〉×〈QP4 〉}を行った時点で結果が<0となる。この場合のベクトル〈QP4 〉の使用フラグUF(3)=0(不使用)のままである。
【0043】
ステップS19ではポインタjの内容をインクリメントする。これにより、次のステップS14では{〈N〉・〈QP3 〉×〈QP5 〉}>0となる。このベクトル〈QP5 〉は点Qの内側判定に有用な新たなベクトルである。これに伴い、UF(4)=1となる。しかし、続くステップS16では{〈N〉・〈QP5 〉×〈QP1 〉}>0を満足しない。即ち、点Qの最終的な内側判定は得られない。ステップS17ではポインタiにポインタjの内容を転送する。即ち、i=5となる。ステップS18ではMF=1により、図5の処理▲1▼に進む。
【0044】
図5(A)は点Qの最終的な内側判定を早める付加的処理とも言える。
ステップS31,S32では最初の使用フラグUF(m) =0となる不使用ベクトルを探す。ポインタmは最初は「0」であったが、この例ではm=3で最初の不使用ベクトル〈QP4 〉が検出される。ステップS33ではポインタjにポインタmの内容を転送する。ステップS34では{〈N〉・〈QP(i) 〉×〈QP(j) 〉}>0か否かの判別を行う。図6(A)の例では{〈N〉・〈QP5 〉×〈QP4 〉}>0となる。即ち、この時点まで不使用であったベクトル〈QP4 〉は新たなベクトル〈QP5 〉との関係では点Qの内側判定に有用となった。ステップS35ではUF(j) ←1とし、不使用ベクトル〈QP4 〉を使用済みにする。
【0045】
ステップS36では{〈N〉・〈QP(j) 〉×〈QP(k) 〉}>0か否かの判別を行う。図6(A)の例では{〈N〉・〈QP4 〉×〈QP1 〉}>0となり、この時点で点Qの最終的な内側判定が得られる。これによりフローは図4の処理▲3▼に戻り、本処理を抜ける。
また、上記ステップS36の処理で{〈N〉・〈QP(j) 〉×〈QP(k) 〉}≦0の場合は、ステップS37でポインタjの内容をインクリメントする。ステップS38ではi=jか否かを判別する。i=jの場合は、この時点までに不使用であったベクトルを全て調べたので、フローは図4の処理▲2▼に戻る。またi≠jの場合は、更にステップS39で使用フラグUF(j) =0か否かの判別を行う。UF(j) =0の場合は、新たに選択したベクトル〈QP(j) 〉が不使用なので、ステップS34に戻り、その有用性を調べる。また、UF(j) ≠0の場合は、選択したベクトル〈QP(j) 〉が使用済みなので、ステップS37に戻り、次の不使用ベクトルを探す。
【0046】
図7〜図9は点Qの様々な位置に対する内外判定例を説明する図(1)〜(3)である。なお、接触点P1 〜P6 の座標は全て図6(A)と同一である。
図7(A)は点Qが3角形(P1 ,P2 ,P3 )の内側に在る場合を示している。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉>0
で高速に終了し、点Qは3角形(P1 ,P2 ,P3 )の内側に含まれる。従って、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。
【0047】
図7(B)は点Qが4角形(P1 ,P2 ,P3 ,P5 )の内側に在る場合を示している。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉>0
で終了し、点Qは4角形(P1 ,P2 ,P3 ,P5 )の内側に含まれる。従って、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。この場合でも、もし点P3 から判定処理を開始したら、より早く内側判定が得られることは明らかである。
【0048】
図8(A)は点Qが5角形(P1 ,P2 ,P3 ,P5 ,P4 )の内側に在る場合を示している。なお、この点Qの位置は上記図6(A)の場合と同一である。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉<0
▲5▼〈N〉・〈QP5 〉×〈QP4 〉>0→〈N〉・〈QP4 〉×〈QP1 〉>0
で終了し、点Qは5角形(P1 ,P2 ,P3 ,P5 ,P4 )の内側に含まれる。従って、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。このように、本実施の形態では図5の不使用ベクトルの早期再活用処理を設けたことにより、点Qの内側判定は接触点のより若い番号で得られる。本実施の形態では、接触点の若い番号はより早く使用されるので、判定処理が速い。
【0049】
図8(B)は点Qが5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に在る場合を示している。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉<0
▲5▼〈N〉・〈QP5 〉×〈QP4 〉<0
▲6▼〈N〉・〈QP5 〉×〈QP6 〉>0→〈N〉・〈QP6 〉×〈QP1 〉>0
で終了し、点Qは最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。
【0050】
図9(A)は点Qが最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の外側に在る場合を示している。なお、ここでは点Qが多角形の外側に在るイメージを分かり易くするために、一例の接触面形状をハッチングで塗りつぶしている。但し、この判定処理は接触面形状とは無関係に行われる。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉<0
▲5▼〈N〉・〈QP5 〉×〈QP4 〉<0
▲6▼〈N〉・〈QP5 〉×〈QP6 〉>0→〈N〉・〈QP6 〉×〈QP1 〉<0
▲7▼〈N〉・〈QP6 〉×〈QP4 〉<0
で終了し、点Qは最大面積の5角形の外側にある。
【0051】
図9(B)は点Qが最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の外側に在る他の場合を示している。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉<0
▲2▼〈N〉・〈QP1 〉×〈QP3 〉<0
▲3▼〈N〉・〈QP1 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP1 〉×〈QP5 〉<0
▲5▼〈N〉・〈QP1 〉×〈QP6 〉<0
で終了し、点Qは最大面積の5角形の外側にある。なお、この例は本発明(1)の外側判定処理で高速に得られる。
【0052】
因みに、図9(B)において、例えば点Q´が線分P1 P2 上に存在する場合の演算は、
▲1▼〈N〉・〈Q´P1 〉×〈Q´P2 〉=0
▲2▼〈N〉・〈Q´P1 〉×〈Q´P3 〉<0
▲3▼〈N〉・〈Q´P1 〉×〈Q´P4 〉<0
▲4▼〈N〉・〈Q´P1 〉×〈Q´P5 〉<0
▲5▼〈N〉・〈Q´P1 〉×〈Q´P6 〉<0
で終了し、点Qは最大面積の5角形の外側にある。
【0053】
かくして、本実施の形態によれば、点Qと点P1 〜Pn の座標が与えられるだけで、点Qが点P1 〜Pn で囲まれる最大面積の多角形に含まれるか否か、即ち、衝突物体に回転モーメントを発生させるか否か、を能率良く判定できる。
次に、点Qが領域外の場合は、物体がどの様な軸の回りに回転するかを決定する必要がある。
【0054】
図10は実施の形態による回転の中心座標の抽出処理のフローチャートであり、図11は回転の中心座標の抽出処理を説明する図である。
図11(A)は図9(A)と同じ場合を示している。即ち、重心Gの投影点Qは最大面積の多角形(P1 ,P2 ,P3 ,P5 ,P6 )の外側にあり、既に点Qの外側判定が得られている。なお、この状態をイメージし易い様に一例の接触面形状をハッチングで塗りつぶしてあるが、以下の抽出処理でも接触面の情報は必要無い。
【0055】
図10において、ステップS51では必要な初期化処理を行う。ステップS52では接触点P1 〜Pn の中で点Qに最も近い点Pk を求め、その距離|QPk |を保持する。図11(A)の例で言うと、Pk =P6 であり、その距離|QP6 |を保持する。
ステップS53では、任意のi,j(但し、1≦i<j≦n)について、
〈QCij〉・〈Pi Pj 〉=0
を満たすような、線分Pi Pj 上の点Cijを求める。
【0056】
これを図11(A)の例で具体的に説明する。例えば、先ず点P1 ,P2 を選択し、線分P1 P2 又はその延長線と直行するような直線QC12を求め、交点C12の座標を得る。しかし、この交点C12は線分P1 P2 上には無いので、除外される。次に点P1 ,P3 ,点P1 ,P4 ,…の如く昇順に選択して、同様の処理を行う。この流れの最後の点P1 ,P6 を選択した時は、交点C16が得られ、該交点C16は線分P1 P6 上に在るので、残される。次に、点P2 を基準として点P3 〜P6 を順に選択し、同様の処理を行う。ここでは交点C23等が残される。次に点P3 を基準として点P4 〜P6 を順に選択し、同様の処理を行う。ここでは交点C35が残される。以下同様にして進み、交点C46が残される。
【0057】
ステップS54では、上記残された点Cijの中で点Qに最も近い点Cmnを求め、その距離|QCmn|を保持する。図11(A)の例では距離|QC16|が保持される。そして、ステップS55では、距離|QPk |と距離|QCmn|の内の小さい方を選択し、その点Pk 又は交点Cmnの座標を回転中心の座標Rとする。図11(A)の例では交点C16が回転中心の座標Rとなる。これは物理的に見ても妥当な回転の中心である。
【0058】
ところで、例えば図11(B)に示す様なケースが存在する。ここでは、点Qは3角形P1 ,P2 ,P3 の一つの頂点P1 の側に略対面している。この場合に、もし上記ステップS53,S54の処理のみで回転中心の座標Rを抽出したとすると、物体裏面側の交点C23が回転中心の座標Rとなり、これは物理的に不合理な回転モーメントを発生することになる。本実施の形態によれば、上記ステップS52,S55の処理を設けたことにより、このケースでは|QP1 |<|QC23|となり、点P1 が回転中心の座標Rとなる。これは合理的な回転中心である。
【0059】
なお、上記図10の処理では、先ず〈QCij〉・〈Pi Pj 〉=0を満たす線分Pi Pj 上の各交点Cijを求め、次に該交点Cijの中で距離|QCij|を最小とするような交点Cmnを求める方法を述べたが、これに限らない。例えば、これとは逆に、先ず〈QCij〉・〈Pi Pj 〉=0を満たす各ベクトル〈QCij〉の距離|QCij|を求め、次に該距離|QCij|が最小となるような線分Pi Pj 上の交点Cmnを求めても良い。
【0060】
これを図11(A)の例で具体的に言うと、先ず距離|QC12|=|〈QP2 〉|*sinθ12=|〈QP2 〉×〈P1 P2 〉|/|〈P1 P2 〉|を求める。以下同様にして進み、距離|QC16|=|〈QP6 〉|*sinθ16=|〈QP6 〉×〈P1 P6 〉|/|〈P1 P6 〉|等を求める。この時点では距離のみを求めているので計算が速い。
【0061】
こうして全ての組み合わせの距離を求め、次に距離|QCij|が最小となるような線分Pi Pj 上の交点Cmnを求める。この場合に、もし距離|QCij|を最小とする交点Cijが線分Pi Pj 上に無い時は、次に大きい距離|QCij|について、該交点Cijが線分Pi Pj 上にあるか否かの判別を行う。しかるに、図11(A)の例からも分かるように、大抵の場合は、点Qは、接触点P1 〜Pn で囲まれる最大面積の多角形の何れか1辺に対面している。従って、通常は、最初の距離|QCij|を最小とするような交点Cijは線分Pi Pj 上に在る。即ち、距離|QC16|を最小とするような交点C16は線分P1 P6 上にある。
【0062】
従って、この方法によれば、交点Cijを求める計算処理と、該交点Cijが線分Pi Pj 上に在るか否かの判定処理とを大幅に削減でき、処理が速い。
ところで、上記図3のステップS1の判別で、接触点が3個未満の場合は、ステップS4の中心座標Rの抽出処理に直接入力することとした。そこで、図示しないが、以下、この場合における回転中心の抽出処理を上記図10の処理(アイデア)に関連して概説する。
【0063】
まず接触点Pが1個の場合は、P1 =Qの場合と、P1 ≠Qの場合とがある。P1 =Qの場合は、容易にR=P1 (=Q)とできる。この場合は、図3のステップS5の処理で〈N〉×〈RQ〉=〈N〉×〈QQ〉=0となり、回転モーメントは発生しない。またP1 ≠Qの場合は、R=P1 (≠Q)となる。この場合は、ステップS5の処理で〈N〉×〈RQ〉=〈N〉×〈P1 Q〉≠0となり、回転モーメントが発生する。
【0064】
次に接触点Pが2個の場合は、点Qが線分P1 P2 上に在る場合と、無い場合とがある。点Qが線分P1 P2 上に在るとする判別は、例えば、〈QP1 〉×〈QP2 〉=0,P1x≦Qx ≦P2x,P1y≦Qy ≦P2yを同時に満足すると言う条件で得られる。なお、x,yは接触面上の座標である。点Qが線分P1 P2 上に在る場合は、常にR=Qとなる。この場合は、ステップS5の処理で〈N〉×〈RQ〉=0となり、回転モーメントは発生しない。また点Qが線分P1 P2 上に無い場合は、常にR≠Q(即ち、R=P1 /P2 /線分P1 P2 上の交点C12)となる。この場合は、ステップS5の処理で〈N〉×〈RQ〉≠0となり、回転モーメントが発生する。かくして本実施の形態によれば、接触点が任意のn個の場合における仮想物体の運動を合理的に生成できる。
【0065】
図12は実施の形態による一例の物体の運動を説明する図で、図12(A)は速度vで地面に落下した瞬間の物体aの斜視図を示している。
例えば、地面をZ=0の平面とし、法線ベクトル〈N〉,地面との接触点の座標P1 〜P3 ,物体aの重心座標G,重心Gの地面への投影点の座標Qを夫々、〈N〉=(0,0,1),P1 (0,2,0),P2 (−1,0,0),P3 (0,−1,0),G(2,1,2),Q(2,1,0)とする。
【0066】
上記図3のステップS2(即ち、図4,図5)の処理によると、例えば、
(〈QP3 〉×〈QPj 〉)・〈N〉>0 (但し、1≦j≦3,j≠3)
を満たすjは存在しないから、点Qは多角形(P1 ,P2 ,P3 )の外側に存在する。
次に、ステップS4(即ち、図10)の処理によると、先ず点Qに最も近い接触点はP1 (0,2,0)である。一方、点Qに最も近い線分Pi Pj 上の点はC13(0,1,0)である。よって、回転中心の座標Rは点Qから近い方のC13(0,1,0)となる。
【0067】
次に、ステップS5では、〈R〉=〈N〉×〈RQ〉=(0,2,0)を回転軸となし、物体aに、大きさMの回転モーメントを発生させる。大きさMは、上記により、例えば、
M=α*(v+1)*cosθ
で与えられる。ここで〈RQ〉と〈RG〉とのなす角θは、θ=tan-1{|〈RQ〉×〈RG〉|/〈RQ〉・〈RG〉}=tan-1{|(2,0,0)×(2,2,0)|/(2,0,0)・(2,2,0)}=tan-1(4/4)=45°と求まり、cosθ=1/√(2)となる。
【0068】
次に、ステップS6では、更に、この物体aに大きさKの跳ね返り慣性モーメントを発生させる。大きさKは、上記により、例えば、
K=β*v*sinθ
で与えられる。sinθ=1/√(2)である。
図12(B)は上記物体aの運動を時系列に示す側面図である。
【0069】
例えば、ゲームのユーザは、敵との対戦途中で、不用意にも自分の武器(例えばピストル等)を地面に落としてしまった。従来技術によれば、予め用意されたゲームのシナリオに従って、かつ予め用意された時刻t0 〜t2 の各画面が、逐次表示されるかも知れない。
しかし、本実施の形態においては、上記の少ない情報を利用して、かつ物理法則に従い、時刻t0 〜t2 の画面が自動生成される。即ち、時刻t0 では、物体aと地面との当たり判定により、その時の各接触点P1 〜P3 ,重心Gの座標情報を利用して、物体aを回転させるための回転中心の座標Rが求められる。時刻t1 では、落下時の速度vの情報を利用して、〈N〉×〈RQ〉を軸とする回転モーメントMによる回転運動と、跳ね返り慣性モーメントKによるリバウンド運動とが同時に生成される。これにより、物体aは地面から跳ね返りつつ、かつ衝突条件に応じた自然な動きで地面に倒れ掛かる。時刻t2 では、物体aが倒れた状態で静止している。
【0070】
かくして、本実施の形態によれば、ゲームがどの様に展開しても、それに伴うこの種のアニメーション画像を予め用意することなく、各場面に応じた自然な運動を高速に自動生成できる。従って、より少ないゲームデータと簡単な処理で、質の高いゲームを安価に提供できる。
なお、上記実施の形態ではゲーム機への適用例を中心に述べたが、本発明はCPUを使用して行われるあらゆるCGアニメーション処理に適用可能である。
【0071】
また、上記実施の形態では面を平面(例えば地面)としたがこれに限らない。面は任意の方向を向いていても良いし、また面は曲面でも良い。なお、接触点で囲まれる最大面積の面が複雑な曲面(又は折れた段状の面)を成しているような場合には、その部分曲面の法線ベクトルの加重平均をとり、1つの法線ベクトルで複雑な曲面等を代表させることが可能である。
【0072】
また、上記本発明に好適なる実施の形態を述べたが、本発明思想を逸脱しない範囲内で、各処理の構成、制御の流れ、及びこれらの組合せの様々な変更が行えることは言うまでも無い。
【0073】
【発明の効果】
以上述べた如く本発明によれば、仮想物体に物理法則に準じた運動を生成することが、比較的少ないデータと計算量で、かつ高速に可能となり、よって、特にパーソナルコンピュータや専用のゲーム機等により実行されるゲームの、高機能化、高品質化、低価格化等に寄与する所が極めて大きい。
【図面の簡単な説明】
【図1】図1は本発明の原理的構成を説明する図である。
【図2】図2は実施の形態によるゲーム機の構成を示す図である。
【図3】図3は実施の形態による仮想物体の運動生成処理のフローチャートである。
【図4】図4は実施の形態による点と多角形の内外判定処理のフローチャート(1)である。
【図5】図5は実施の形態による点と多角形の内外判定処理のフローチャート(2)である。
【図6】図6は実施の形態による点と多角形の内外判定処理を説明する図である。
【図7】図7は点Qの様々な位置に対する内外判定例を説明する図(1)である。
【図8】図8は点Qの様々な位置に対する内外判定例を説明する図(2)である。
【図9】図9は点Qの様々な位置に対する内外判定例を説明する図(3)である。
【図10】図10は実施の形態による回転の中心座標の抽出処理のフローチャートである。
【図11】図11は実施の形態による回転の中心座標の抽出処理を説明する図である。
【図12】図12は実施の形態による一例の物体の運動を説明する図である。
【図13】図13は従来技術を説明する図である。
【符号の説明】
1 ゲーム機本体
2 コンソール部
3 表示装置
4 コンパクトディスク
5 サーバ
6 他のゲーム機
11 CPU
12 主メモリ
13 表示制御部
14 インタフェース部
15 CD駆動部
16 通信制御部
17 共通バス
100 ネットワーク
【発明の属する技術分野】
本発明は仮想物体の運動生成方法に関し、更に詳しくは、仮想の物体が仮想の面と接触した際の該物体の運動を生成する仮想物体の運動生成方法に関する。
ゲーム機等におけるCGアニメーションでは、ゲームの進行により、画面の仮想上の物体が仮想上の面(地面や対戦相手の面等)と接触(衝突)する場合も少なくない。係る場合の物体の運動の画像を、予め想定したゲームのシナリオに従って複数用意しておくと、自然な動きが得られないばかりか、用意する画像の量も膨大となる。一方、高性能なコンピュータ等を使用すれば、運動のシミュレーション画像をリアルタイムに生成することも可能となるが、パーソナルコンピュータやゲーム機等でこれを実現するのは極めて困難である。そこで、少ない情報と簡単な演算で、物体の物理法則に準じた自然な運動を自動生成することの可能な仮想物体の運動生成方法の提供が望まれる。
【0002】
【従来の技術】
図13は従来技術を説明する図である。
図13(A)において、例えばある描画時刻t0 では、物体aが地面に向かって速度vで落下している。図13(B)において、次の描画時刻t1 では、物体aが地面に速度vで衝突した。係る場合に、従来の、特にゲーム機等では、図13(B)の状態で物体aの運動が停止していた。
【0003】
【発明が解決しようとする課題】
しかし、このような物体aの運動は物理的に不自然であり、CGアニメーションの質、ひいてはゲームの質を低下させる。一方、予め図13(A),(B)のような事態が生じるのを想定して、予めゲームシナリオの中に図13(C)の様な画面を用意しておくことが可能である。しかし、シナリオ毎に図13(C)の様な画面を用意しても、自然な動きが得られないばかりか、用意する画像の量が膨大となる。
【0004】
本発明の目的は、少ない情報と簡単な演算で物体の物理法則に準じた自然な運動を高速に自動生成可能な仮想物体の運動生成方法を提供することにある。
【0005】
【課題を解決するための手段】
上記の課題は例えば図1(A)の構成により解決される。即ち、本発明(1)の運動生成方法は、仮想の物体が仮想の面と接触した際の該物体の運動を生成する仮想物体の運動生成方法において、物体重心の接触面への運動方向の投影点Qと、該物体と面の接触点P 1 〜P n とからなる各ベクトル〈QP 1 〉〜〈QP n 〉と、該各ベクトルにつき前記投影点Qの内側判定に有効に使用されたか否かを表す使用フラグUF 1 〜UF n とをそれぞれ関連付けて記憶したデータテーブルと、前記データテーブルより抽出した2つのベクトルの外積と、前記接触面の法線ベクトル〈N〉との内積を求める第1の演算手段と、前記データテーブルの情報及び第1の演算手段を使用した所定の処理により前記投影点Qが前記接触点P 1 〜P n により構成される最大面積の多角形の領域内にあるか否かを判定する制御手段とを備え、該制御手段は、(1)ベクトル〈QP1〉〜〈QPn〉の使用フラグUF1〜UFnを未使用に初期化すると共に、任意最初のベクトルQP(k) を選択してその使用フラグUF(k)を使用となし、かつi=kとする処理と、(2)i≠jの条件で、前記第1の演算手段によりベクトル〈QP(i) 〉,〈QP(j) 〉の外積と、法線ベクトル〈N〉との内積を求め、その演算結果が内側判定の符号(例えば>0)となるベクトル〈QP(j)〉を探査する処理と、(3)前記(2)の条件を満たすベクトル〈QP(j) 〉が存在しないことにより、投影点Qが接触点P1〜Pnで構成される最大面積の多角形の領域外にあると判定する処理と、を備えるものである。
【0006】
本発明(1)の処理は、面と接触する物体に回転モーメントが発生するか否の前判定を行う処理に位置し、点Qが点P1 〜Pn で構成される最大面積の多角形の領域外に在る場合は回転モーメントが発生し、それ以外の場合は回転モーメントが発生しないとする物理的な着想に基づいている。従って、物体と面との接触面の形状等には一切関知せず、点Q(即ち、物体の重心G)及び接触点P1 〜Pn の座標等からなる、単純で、かつ少ない情報と、簡単な演算とにより物体の物理法則に準じた自然な運動を高速に自動生成可能となる。
【0007】
本発明(1)においては、例えば図9(B)に示す様な場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉<0
▲2▼〈N〉・〈QP1 〉×〈QP3 〉<0
▲3▼〈N〉・〈QP1 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP1 〉×〈QP5 〉<0
▲5▼〈N〉・〈QP1 〉×〈QP6 〉<0
で終了し、点Qは最大面積の5角形(P1 P2 P3 P5 P6 )の外側にある。この場合に、図のハッチングで示した様な物体と面との接触面の形状は問わない。従って、この判定処理のみならず、その前後の処理における必要な座標データの準備、取扱及び演算が大幅に単純化され、処理が軽減される。
【0008】
ところで、もし点Qの内側判定が先に得られれば、点Qの外側判定を待たなくても、物体に回転モーメントが発生しないと判定できる。
そこで、好ましくは、本発明(2)においては、上記本発明(1)において、前記制御手段は、(4)前記(2)の演算結果が内側判定の符号であることにより、その際のjが
指す使用フラグUF(j)を使用となし、かつ前記第1の演算手段により該ベクトル〈QP(j)〉と前記(1)で選択した最初のベクトル〈QP(k)〉の外積と、法線ベクトル〈N〉との内積を求める処理と、(5)前記(4)の演算結果が内側判定の符号であることにより、前記投影点Qが前記接触点P1〜Pnで構成される最大面積の多角形の領域内にあると判定する処理と、(6)前記(4)の演算結果が内側判定の符号ではないこと(例えば≦0)により、その際のiにjの内容を転送し、かつ該jの内容を次の未使用ベクトルを指す値に更新して前記(2)に戻る処理と、を更に備える。
【0009】
本発明(2)によれば、例えば図7(A)に示す様な場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉>0
で終了し、点Qは3角形(P1 ,P2 ,P3 )の内側に含まれる。即ち、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。従って、本発明(2)によれば、物体に回転モーメントを発生させるか否かの判定を、点Qと点P1 〜Pn との相対位置に応じて、能率良く、より早く判定できる。
【0010】
ところで、上記図7(A)の場合の様に、処理(2)の演算について毎回>0の結果が得られる場合は良いが、必ずしもそうなるとは限らない。これを図8(A)の例で説明する。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
となり、次に、
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
となる。即ち、この場合のベクトル〈QP4 〉は点Qの内側判定には当面は有用では無い。そこで、次のベクトル〈QP5 〉を選択し、処理を進めると、
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉<0
となる。即ち、点Qの内側判定に有用な新たなベクトル〈QP5 〉が得られたが、この時点では点Qの最終的な内側判定は得られていない。
【0011】
しかるに、上記一旦有用でないとされたベクトル〈QP4 〉であっても、この新たなベクトル〈QP5 〉との関係で調べると、点Qの内側判定に有用となるかも知れない。そこで、このベクトル〈QP4 〉を再度検査し、
▲5▼〈N〉・〈QP5 〉×〈QP4 〉>0
の結果を得る。しかも、その内側判定では、
〈N〉・〈QP4 〉×〈QP1 〉>0
となり、この時点で、点Qは5角形(P1 ,P2 ,P3 ,P5 ,P4 )の内側に含まれる。従って、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。
【0012】
そこで、好ましくは、本発明(3)においては、上記本発明(2)において、制御の流れを変えるための制御フラグMFを更に備え、前記制御手段は、(7)前記(2)の演算結果が内側判定の符号ではないことにより、その際のベクトル〈QP ( j ) 〉の使用フラグUF(j)を未使用にし、かつjの内容を前記未使用ベクトルを指すためのレジスタmに保持すると共に、前記制御フラグMFを真となし、かつ前記jの内容を次の未使用ベクトルを指す値に更新して前記(2)に戻る処理と、(8)前記(4)の演算結果が内側判定の符号ではなく、かつ制御フラグMFが真により、その時点のjよりも以前の未使用ベクトルを指すレジスタmを探査し、かつ前記第1の演算手段により当該ベクトル〈QP(j)〉と該探査したベクトル〈QP(m)〉の外積と、法線ベクトル〈N〉との内積を求める処理と、(9)前記(8)の演算結果が内側判定の符号であることにより、前記第1の演算手段によりその際のベクトル〈QP(m)〉と前記(1)で選択した最初のベクトル〈QP(k)〉の外積と、法線ベクトル〈N〉との内積を求める処理と、(10)前記(9)の演算結果が内側判定の符号であることにより、前記投影点Qが前記接触点P1〜Pnで構成される最大面積の多角形の領域内にあると判定する処理と、を更に備える。
【0013】
この様に、本発明(3)によれば、不使用ベクトルの早期再活用処理を設けたことにより、点Qの内側判定は接触点のより若い番号で得られる。従って、残りのベクトルの検査を行う必要は無く、判定処理が速い。
また好ましくは、本発明(4)においては、上記本発明(3)において、前記制御手段は、(14)前記(9)の演算結果が内側判定の符号ではなく、かつデータテーブルに未使用ベクトルが存在しないことにより、前記投影点Qが前記接触点P 1 〜P n で構成される最大面積の多角形の領域外にあると判定する処理、を更に備える。
また上記の課題は例えば図1(B)の構成により解決される。即ち、本発明(5)の運動生成方法は、上記本発明(1)又は(4)において、2つのベクトルの内積を求める第2の演算手段を更に備え、前記制御手段は、前記投影点Qが前記接触点P 1 〜P n で構成される最大面積の多角形の領域外に在ると判定したことにより、(11)任意の整数i,j(1≦i<j≦n)に対し、前記第2の演算手段によるベクトル〈QCij〉,〈Pi Pj〉の内積が0を満たす線分PiPj上の点Cijであって、距離|QCij|が最小となる点Cmnを求め、該点Cmnを物体の回転中心の座標となす処理、を更に備えるものである。
【0014】
本発明(5)の処理は、上記点Qが点P1〜Pnで構成される最大面積の多角形の領域外に在る場合に実行され、物体のどの部分を中心にして回転モーメントを発生させるかを決定する処理である。但し、ここでも物体と面との接触面の形状等には一切関知せず、点Q及び接触点P1〜Pnの座標からなる、単純かつ少ない情報と、簡単な演算とにより物体の物理法則に準じた回転の中心座標を高速に求め得る。
【0015】
図11(A)を参照して一例の回転中心位置決定処理を具体的に説明する。
上記処理(11)において、ベクトル〈QCij〉≠0,〈Pi Pj 〉≠0とする場合に、〈QCij〉・〈Pi Pj 〉=0を満たすベクトル〈QCij〉,〈Pi Pj 〉は互いに直交するベクトルである。この処理(11)を図11(A)に適用すると、例えば〈P1 P2 〉と〈QC12〉とは直交するが、その交点C12は線分P1 P2 上には無いので除外される。一方、例えば〈P2 P3 〉と〈QC23〉とは直交し、かつその交点C23は線分P2 P3 上に在るので保持される。こうして全ての場合を検査し、最終的に交点C16,C23,C35,C46等が保持される。
【0016】
更に、距離|QCij|が最小となる点Cmnを求め、該点Cmnを物体の回転中心の座標Rとなす。図11(A)の例では、距離|QC16|が最小となり、回転中心の座標R=C16である。これは、物体の図示の一例の接触面形状から見ても合理的な回転の中心であり、この接触面形状が他のどの様な形をしていても合理性を損なわない。
【0017】
ところで、点Qと接触点Pとの間には例えば図11(B)に示すような関係も生じ得る。即ち、ここでは点Qが3角形の一つの頂点P1 付近に存在している。係る場合に、もし交点C23が物体の回転中心の座標Rに選ばれると、物理的に不合理な回転モーメントが生成されてしまう。
そこで、好ましくは、本発明(6)においては、上記本発明(5)において、前記制御手段は、(12)前記接触点P1〜Pnの中で、前記投影点Qに最も近い点Pkとの間の距離|QPk|を求める処理と、(13)2点Q,C mn 間の距離|QCmn|と前記距離|QPk|の小さい方に対応する点Cmn又はPkを物体の回転中心の座標となす処理と、を更に備える。
【0018】
これにより、図11(B)の例では、点Qとの距離が小さい方の、点P1が物体の回転中心の座標Rに選ばれる。従って、係る場合でも運動の合理性を損なわない。
また、好ましくは、上記本発明(1)乃至(6)の何れか1に記載の処理をコンピュータが実施するためのプログラムとして記憶媒体に記録する。
【0019】
従って、より高度で高品質のCGアニメーションを生成するようなゲームソフト等を、低価格、低容量で提供できる。
【0020】
【発明の実施の形態】
以下、添付図面に従って本発明に好適なる実施の形態を詳細に説明する。
なお、以下の説明では、記号〈〉はベクトル、記号||は絶対値(距離,大きさ等)、記号×はベクトル積、記号・はスカラー積、記号*はスカラーの掛け算、記号←は代入を夫々表すものとする。
【0021】
図2は実施の形態によるのゲーム機の構成を示す図で、図において、1は本ゲーム機の本体、2はユーザが操作するための十字キー、A,Bボタン、スタートボタン等を有するコンソール部(CSL)、3はCRT等による表示装置(DISP)、4は本実施の形態による仮想物体の運動生成方法等をプログラムで記憶しているコンパクトディスク(CD)、100はネットワーク(公衆網等)、5はゲーム等に関する様々な通信サービスをオンラインで提供するサーバ、6は他のゲーム機である。
【0022】
ゲーム機本体1において、11は本ゲーム機の主制御・処理を行うCPU、12はCPU11が実行するプログラムやデータであって、例えば図3〜図5,図10に示す物体の運動生成に係る処理等を記憶するRAM,ROM,EEPROM等よりなる主メモリ(MEM)、13は表示装置3を制御する表示制御部(DISPC)、14はコンソール部2をCPU11に接続するインタフェース部(IF)、15はCD4の着脱、駆動及びデータ読取を行うCD駆動部(CDD)、16はゲーム機本体1をネットワーク100に接続する通信制御部(NCC)、17はCPU11の共通バスである。
【0023】
ゲームを行う時は、ゲーム機本体1及び表示装置3に電源投入し、ゲーム用のCD4をCD駆動部15に装填する。更に、CD4から必要なプログラムやデータを主メモリ12にロードし、ゲームをスタートする。そして、表示装置3の生成アニメーション画像を見ながら、コンソール部2を操作してゲームを楽しむ。なお、CD4に代えて、ROMカードやフロッピーディスク等の他の2次記憶装置を使用しても良い。また、サーバ5から所望のゲームソフトをダウンロードしても良い。更に、他のゲーム機6とオンラインで対戦ゲームを行っても良い。
【0024】
図3は実施の形態による仮想物体の運動生成処理のフローチャートである。
例えば、ゲームの実行中に物体が面(壁、地面等)と接触(衝突)したような事態に至ると、この処理に入力する。ここで必要となる情報は、面の法線ベクトル〈N〉、物体と面の接触点P1 〜Pn の座標、物体の重心Gの座標、及び該重心Gの面への運動方向の投影点Qの座標(但し、これは他の情報から求められる)である。
【0025】
ステップS1では、接触点Pが3個以上か否かを判別する。3個以上の場合は、3角形以上が構成されるので、後述するステップS2の処理に進み、点Qと点P1 〜Pn で構成される多角形との間で内外判定処理を行う。
ステップS3では、点Qが多角形の外側判定か否かを判別する。外側判定の場合は、物体に回転モーメントが生じるので、後述するステップS4の処理に進み、物体の回転中心の座標Rの抽出処理を行う。
【0026】
ステップS5では、〈N〉×〈RQ〉を軸として物体に回転モーメントを発生する。但し、〈RQ〉がゼロベクトルの場合(即ち、点Qと回転中心の座標Rとが重なる場合)は回転モーメントを発生しない。回転モーメントの大きさMは、例えば次式で与えられる。
M=α*(v+1)*cosθ
但し、α:物体の慣性モーメント
v:物体の面方向の速度
θ:〈RQ〉と〈RG〉とのなす角度
なお、上式右辺()内の+1は、接触面が地面の場合に、重力による速度成分を考慮したものである。この式によれば、θが小の時は、比較的大きな回転モーメントが発生し、物体は地面に速く倒れる。またθが大の時は、比較的小さな回転モーメントが発生し、物体はゆっくりと地面に倒れる。
【0027】
ステップS6では、接触面の法線方向にリバウンド力(跳ね返り慣性モーメント)を発生する。跳ね返り慣性モーメント(イナーシャ)の大きさKは、例えば次式で与えられる。
K=β*v*sinθ
但し、β:面又は物体の弾性係数
v:物体の面方向の速度
θ:〈RQ〉と〈RG〉とのなす角度
この式によれば、θが小の時は、比較的小さな跳ね返り慣性モーメントが発生し、物体は僅かに跳ね返る。またθが大の時は、比較的大きな跳ね返り慣性モーメントが発生し、物体はより大きく跳ね返る。
【0028】
なお、実際はステップS5の回転モーメントとステップS6の跳ね返り慣性モーメントとが合成処理され、物体に物理法則に準じたより自然な運動を生成することになる。
また、上記ステップS3の判別で点Qが内側判定の場合は、物体に回転モーメントは発生しないので、上記ステップS4,S5の回転処理をスキップし、ステップS6のリバウンド発生処理に進む。
【0029】
また、上記ステップS1の判別で接触点Pが3個未満の場合は、多角形が構成されないので、上記ステップS2,S3の処理をスキップし、ステップS4の処理に進む。なお、この場合のステップS4の処理は、図10の説明に関連して後述する。
図4,図5は実施の形態による点と多角形の内外判定処理のフローチャート(1),(2)で、図6は実施の形態による点と多角形の内外判定処理を説明する図である。
【0030】
図6(A)は物体が平面(例えば地面Z=0)に落下した場合を示している。この場合に、内外判定処理が使用する情報は、物体と面との接触点P1 〜P6 の座標と、物体の重心Gを平面に投影した点Qの座標である。即ち、ここでは物体がどの様な面形状で地面と接触しているかの情報は必要無い。従って、例えば図6(B)に示す如く、点Qが接触面(ハッチング部分)に含まれていない場合も有るし、また図6(C)に示す如く、点Qが接触面に含まれている場合も有る。図示しないが、他にも様々な接触面の形状が考えられる。
【0031】
しかるに、物理法則によれば、点Qが、点P1 〜P6 により形成される最大面積の多角形(破線で示す)に含まれる場合は、物体に回転モーメントは発生せず、また含まれない場合にのみ、回転モーメントが発生することが理解できる。
なお、点Qが最大面積の多角形の境界線上に在る場合がある。この場合は、回転モーメントを発生させても良いし、また発生させなくても良い。この点、本実施の形態では、上記ステップS5の処理で〈RQ〉=0となるため、回転モーメントは発生しないこととしている。
【0032】
この内外判定処理は、基本的には、点Qが最大面積の多角形の内側(境界線を含まない)に在るとする内側判定を能率良く求めるように構成されており、それ以外の場合は外側判定となる。その結果、内外判定又は外側判定が高速に得られる。以下、図6(A)を参照しつつ、内外判定処理を具体的に説明する。
図4は本判定処理の基本部分を示している。
【0033】
ステップS11では必要な初期化処理を行う。例えば判定演算で使用するデータテーブルを初期化する。図5(B)に一例のデータテーブルを示す。
このテーブルには、図6(A)の例に対応して、点Qから各接触点P1 〜P6 に向かうベクトル〈QP1 〉〜〈QP6 〉が昇順に記憶されている。各接触点の付加番号1〜6は予め物体に固有の番号でも良いし、この判定処理又は事前の処理で任意に付加しても良い。従って、最初の接触点P1 は実質的に任意に選択出来ることになる。コード「Null」はデータテーブルの終わりを表す。
【0034】
フラグ変数UFはベクトル〈QP1 〉〜〈QP6 〉が点Qの内側判定に有効に使用されたか否かを表す使用フラグであり、最初は全て0(不使用)に初期化される。更に、図示しないが、外側判定結果を表すフラグEXTF←0(内側判定)に初期化し、また判定演算の流れを制御するためのモードフラグMF←0に初期化する。
【0035】
ステップS12では、各ポインタi←0,j←1,k←0,m←0とする。ポインタiは後述のステップS14におけるベクトル外積演算の第1のベクトルを指すポインタ、ポインタjは同じく第2のベクトルを指すポインタである。因みに、ステップS14の処理は、第1のベクトル〈QP(i) 〉を基準として点Qの内側判定に有用な第2のベクトル〈QP(j) 〉を探す処理である。更に、後述のステップS16の処理は、ステップS14の処理で探した第2のベクトル〈QP(j) 〉と、ステップS14で最初に選択した第1のベクトル〈QP(i) 〉{即ち、〈QP1 〉}とを使用して点Qの最終的な内側判定を行う処理である。このため、ポインタkは常にテーブルの最初のベクトル〈QP1 〉を指している。
【0036】
ところで、上記ステップS14の処理で、点Qの内側判定に有用でないと判定されたような第2のベクトル〈QP(j) 〉は、当面の内側判定演算から除外される。即ち、その使用フラグUF(j) =0(不使用)のままで残される。しかし、その後のステップS14の処理で他の有用な第2のベクトル〈QP(j) 〉が見つかる場合があり、係る場合には、この第2のベクトルとの関係で前記不使用となったベクトル〈QP(j) 〉が有用となり、かつ続くステップS16の処理でより早く最終的な内側判定に至る場合がある。ポインタmは、この処理を実現するために設けられており、データテーブルの中から一旦不使用となった{使用フラグUF(m) =0の}ベクトルを探すためのポインタとして使用される。
【0037】
ステップS13では、最初のベクトル〈QP1 〉は無条件で使用するので、その使用フラグUF(i) ←1とする。ステップS14では{〈N〉・〈QP(i) 〉×〈QP(j) 〉}の演算を行い、その結果が>0か否かを判別する。この演算はスカラー3重積となっており、ベクトル〈N〉,〈QP(i) 〉,〈QP(j) 〉の各要素の行列演算により容易に求まる。なお、{(〈QP(i) 〉×〈QP(j) 〉)・〈N〉}演算を行い、その結果が>0か否かを判別しても良い。
【0038】
図6(A)の例では、法線ベクトル〈N〉が紙面の手前側(Z軸方向)に向いているとすると、最初の演算では{〈N〉・〈QP1 〉×〈QP2 〉}>0となる。結果が>0の場合は、2番目のベクトル〈QP2 〉は、点Qの内側判定に有用なベクトルとして使用されたので、ステップS15に進み、その使用フラグUF(j) ←1とする。
【0039】
ステップS16では{〈N〉・〈QP(j) 〉×〈QP(k) 〉}の演算を行い、結果が>0か否かを判別する。結果が>0の場合は、点Qが、これまでに領域判定した、より少ない面積の多角形の内側に含まれることになるので、内側判定(EXTF=0)のままで処理を抜ける。
しかし、図6(A)の例では{〈N〉・〈QP2 〉×〈QP1 〉}の演算結果は<0となる。この場合は、ステップS17でポインタiにポインタjの内容を転送し、次回のステップS14の処理における第1のベクトルを〈QP1 〉から〈QP2 〉に変更する。
【0040】
ステップS18ではモードフラグMF=1か否かを判別する。この時点では不使用ベクトルが発生していないので、MF=0のままである。ステップS19ではポインタjの内容をインクリメント(即ち、次の未検査のベクトルを指す様に更新)し、次回のステップS14の処理における第2のベクトルを〈QP2 〉から〈QP3 〉に変更する。
【0041】
ステップS20では、〈QP(j) 〉=Nullか否かを判別し、Nullでない場合は未だ未検査のベクトルが有るのでステップS14に戻る。またNullの場合は、点Qの積極的な内側判定が得られずに全ベクトルの検査を終了したことになるので、ステップS21で外側判定のフラグEXTF←1となし、処理を抜ける。
【0042】
また、上記ステップS14の処理で{〈N〉・〈QP(i) 〉×〈QP(j) 〉}≦0の場合は、点Qの内側判定に有用では無いベクトル〈QP(j) 〉が検出されたので、ステップS22に進み、モードフラグMF←1とする。これを図6(A)の例で言うと、ステップS14で{〈N〉・〈QP2 〉×〈QP3 〉}>0を行った後、次回のステップS14で{〈N〉・〈QP3 〉×〈QP4 〉}を行った時点で結果が<0となる。この場合のベクトル〈QP4 〉の使用フラグUF(3)=0(不使用)のままである。
【0043】
ステップS19ではポインタjの内容をインクリメントする。これにより、次のステップS14では{〈N〉・〈QP3 〉×〈QP5 〉}>0となる。このベクトル〈QP5 〉は点Qの内側判定に有用な新たなベクトルである。これに伴い、UF(4)=1となる。しかし、続くステップS16では{〈N〉・〈QP5 〉×〈QP1 〉}>0を満足しない。即ち、点Qの最終的な内側判定は得られない。ステップS17ではポインタiにポインタjの内容を転送する。即ち、i=5となる。ステップS18ではMF=1により、図5の処理▲1▼に進む。
【0044】
図5(A)は点Qの最終的な内側判定を早める付加的処理とも言える。
ステップS31,S32では最初の使用フラグUF(m) =0となる不使用ベクトルを探す。ポインタmは最初は「0」であったが、この例ではm=3で最初の不使用ベクトル〈QP4 〉が検出される。ステップS33ではポインタjにポインタmの内容を転送する。ステップS34では{〈N〉・〈QP(i) 〉×〈QP(j) 〉}>0か否かの判別を行う。図6(A)の例では{〈N〉・〈QP5 〉×〈QP4 〉}>0となる。即ち、この時点まで不使用であったベクトル〈QP4 〉は新たなベクトル〈QP5 〉との関係では点Qの内側判定に有用となった。ステップS35ではUF(j) ←1とし、不使用ベクトル〈QP4 〉を使用済みにする。
【0045】
ステップS36では{〈N〉・〈QP(j) 〉×〈QP(k) 〉}>0か否かの判別を行う。図6(A)の例では{〈N〉・〈QP4 〉×〈QP1 〉}>0となり、この時点で点Qの最終的な内側判定が得られる。これによりフローは図4の処理▲3▼に戻り、本処理を抜ける。
また、上記ステップS36の処理で{〈N〉・〈QP(j) 〉×〈QP(k) 〉}≦0の場合は、ステップS37でポインタjの内容をインクリメントする。ステップS38ではi=jか否かを判別する。i=jの場合は、この時点までに不使用であったベクトルを全て調べたので、フローは図4の処理▲2▼に戻る。またi≠jの場合は、更にステップS39で使用フラグUF(j) =0か否かの判別を行う。UF(j) =0の場合は、新たに選択したベクトル〈QP(j) 〉が不使用なので、ステップS34に戻り、その有用性を調べる。また、UF(j) ≠0の場合は、選択したベクトル〈QP(j) 〉が使用済みなので、ステップS37に戻り、次の不使用ベクトルを探す。
【0046】
図7〜図9は点Qの様々な位置に対する内外判定例を説明する図(1)〜(3)である。なお、接触点P1 〜P6 の座標は全て図6(A)と同一である。
図7(A)は点Qが3角形(P1 ,P2 ,P3 )の内側に在る場合を示している。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉>0
で高速に終了し、点Qは3角形(P1 ,P2 ,P3 )の内側に含まれる。従って、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。
【0047】
図7(B)は点Qが4角形(P1 ,P2 ,P3 ,P5 )の内側に在る場合を示している。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉>0
で終了し、点Qは4角形(P1 ,P2 ,P3 ,P5 )の内側に含まれる。従って、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。この場合でも、もし点P3 から判定処理を開始したら、より早く内側判定が得られることは明らかである。
【0048】
図8(A)は点Qが5角形(P1 ,P2 ,P3 ,P5 ,P4 )の内側に在る場合を示している。なお、この点Qの位置は上記図6(A)の場合と同一である。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉<0
▲5▼〈N〉・〈QP5 〉×〈QP4 〉>0→〈N〉・〈QP4 〉×〈QP1 〉>0
で終了し、点Qは5角形(P1 ,P2 ,P3 ,P5 ,P4 )の内側に含まれる。従って、最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。このように、本実施の形態では図5の不使用ベクトルの早期再活用処理を設けたことにより、点Qの内側判定は接触点のより若い番号で得られる。本実施の形態では、接触点の若い番号はより早く使用されるので、判定処理が速い。
【0049】
図8(B)は点Qが5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に在る場合を示している。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉<0
▲5▼〈N〉・〈QP5 〉×〈QP4 〉<0
▲6▼〈N〉・〈QP5 〉×〈QP6 〉>0→〈N〉・〈QP6 〉×〈QP1 〉>0
で終了し、点Qは最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の内側に含まれる。
【0050】
図9(A)は点Qが最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の外側に在る場合を示している。なお、ここでは点Qが多角形の外側に在るイメージを分かり易くするために、一例の接触面形状をハッチングで塗りつぶしている。但し、この判定処理は接触面形状とは無関係に行われる。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉>0→〈N〉・〈QP2 〉×〈QP1 〉<0
▲2▼〈N〉・〈QP2 〉×〈QP3 〉>0→〈N〉・〈QP3 〉×〈QP1 〉<0
▲3▼〈N〉・〈QP3 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP3 〉×〈QP5 〉>0→〈N〉・〈QP5 〉×〈QP1 〉<0
▲5▼〈N〉・〈QP5 〉×〈QP4 〉<0
▲6▼〈N〉・〈QP5 〉×〈QP6 〉>0→〈N〉・〈QP6 〉×〈QP1 〉<0
▲7▼〈N〉・〈QP6 〉×〈QP4 〉<0
で終了し、点Qは最大面積の5角形の外側にある。
【0051】
図9(B)は点Qが最大面積の5角形(P1 ,P2 ,P3 ,P5 ,P6 )の外側に在る他の場合を示している。この場合の演算は、
▲1▼〈N〉・〈QP1 〉×〈QP2 〉<0
▲2▼〈N〉・〈QP1 〉×〈QP3 〉<0
▲3▼〈N〉・〈QP1 〉×〈QP4 〉<0
▲4▼〈N〉・〈QP1 〉×〈QP5 〉<0
▲5▼〈N〉・〈QP1 〉×〈QP6 〉<0
で終了し、点Qは最大面積の5角形の外側にある。なお、この例は本発明(1)の外側判定処理で高速に得られる。
【0052】
因みに、図9(B)において、例えば点Q´が線分P1 P2 上に存在する場合の演算は、
▲1▼〈N〉・〈Q´P1 〉×〈Q´P2 〉=0
▲2▼〈N〉・〈Q´P1 〉×〈Q´P3 〉<0
▲3▼〈N〉・〈Q´P1 〉×〈Q´P4 〉<0
▲4▼〈N〉・〈Q´P1 〉×〈Q´P5 〉<0
▲5▼〈N〉・〈Q´P1 〉×〈Q´P6 〉<0
で終了し、点Qは最大面積の5角形の外側にある。
【0053】
かくして、本実施の形態によれば、点Qと点P1 〜Pn の座標が与えられるだけで、点Qが点P1 〜Pn で囲まれる最大面積の多角形に含まれるか否か、即ち、衝突物体に回転モーメントを発生させるか否か、を能率良く判定できる。
次に、点Qが領域外の場合は、物体がどの様な軸の回りに回転するかを決定する必要がある。
【0054】
図10は実施の形態による回転の中心座標の抽出処理のフローチャートであり、図11は回転の中心座標の抽出処理を説明する図である。
図11(A)は図9(A)と同じ場合を示している。即ち、重心Gの投影点Qは最大面積の多角形(P1 ,P2 ,P3 ,P5 ,P6 )の外側にあり、既に点Qの外側判定が得られている。なお、この状態をイメージし易い様に一例の接触面形状をハッチングで塗りつぶしてあるが、以下の抽出処理でも接触面の情報は必要無い。
【0055】
図10において、ステップS51では必要な初期化処理を行う。ステップS52では接触点P1 〜Pn の中で点Qに最も近い点Pk を求め、その距離|QPk |を保持する。図11(A)の例で言うと、Pk =P6 であり、その距離|QP6 |を保持する。
ステップS53では、任意のi,j(但し、1≦i<j≦n)について、
〈QCij〉・〈Pi Pj 〉=0
を満たすような、線分Pi Pj 上の点Cijを求める。
【0056】
これを図11(A)の例で具体的に説明する。例えば、先ず点P1 ,P2 を選択し、線分P1 P2 又はその延長線と直行するような直線QC12を求め、交点C12の座標を得る。しかし、この交点C12は線分P1 P2 上には無いので、除外される。次に点P1 ,P3 ,点P1 ,P4 ,…の如く昇順に選択して、同様の処理を行う。この流れの最後の点P1 ,P6 を選択した時は、交点C16が得られ、該交点C16は線分P1 P6 上に在るので、残される。次に、点P2 を基準として点P3 〜P6 を順に選択し、同様の処理を行う。ここでは交点C23等が残される。次に点P3 を基準として点P4 〜P6 を順に選択し、同様の処理を行う。ここでは交点C35が残される。以下同様にして進み、交点C46が残される。
【0057】
ステップS54では、上記残された点Cijの中で点Qに最も近い点Cmnを求め、その距離|QCmn|を保持する。図11(A)の例では距離|QC16|が保持される。そして、ステップS55では、距離|QPk |と距離|QCmn|の内の小さい方を選択し、その点Pk 又は交点Cmnの座標を回転中心の座標Rとする。図11(A)の例では交点C16が回転中心の座標Rとなる。これは物理的に見ても妥当な回転の中心である。
【0058】
ところで、例えば図11(B)に示す様なケースが存在する。ここでは、点Qは3角形P1 ,P2 ,P3 の一つの頂点P1 の側に略対面している。この場合に、もし上記ステップS53,S54の処理のみで回転中心の座標Rを抽出したとすると、物体裏面側の交点C23が回転中心の座標Rとなり、これは物理的に不合理な回転モーメントを発生することになる。本実施の形態によれば、上記ステップS52,S55の処理を設けたことにより、このケースでは|QP1 |<|QC23|となり、点P1 が回転中心の座標Rとなる。これは合理的な回転中心である。
【0059】
なお、上記図10の処理では、先ず〈QCij〉・〈Pi Pj 〉=0を満たす線分Pi Pj 上の各交点Cijを求め、次に該交点Cijの中で距離|QCij|を最小とするような交点Cmnを求める方法を述べたが、これに限らない。例えば、これとは逆に、先ず〈QCij〉・〈Pi Pj 〉=0を満たす各ベクトル〈QCij〉の距離|QCij|を求め、次に該距離|QCij|が最小となるような線分Pi Pj 上の交点Cmnを求めても良い。
【0060】
これを図11(A)の例で具体的に言うと、先ず距離|QC12|=|〈QP2 〉|*sinθ12=|〈QP2 〉×〈P1 P2 〉|/|〈P1 P2 〉|を求める。以下同様にして進み、距離|QC16|=|〈QP6 〉|*sinθ16=|〈QP6 〉×〈P1 P6 〉|/|〈P1 P6 〉|等を求める。この時点では距離のみを求めているので計算が速い。
【0061】
こうして全ての組み合わせの距離を求め、次に距離|QCij|が最小となるような線分Pi Pj 上の交点Cmnを求める。この場合に、もし距離|QCij|を最小とする交点Cijが線分Pi Pj 上に無い時は、次に大きい距離|QCij|について、該交点Cijが線分Pi Pj 上にあるか否かの判別を行う。しかるに、図11(A)の例からも分かるように、大抵の場合は、点Qは、接触点P1 〜Pn で囲まれる最大面積の多角形の何れか1辺に対面している。従って、通常は、最初の距離|QCij|を最小とするような交点Cijは線分Pi Pj 上に在る。即ち、距離|QC16|を最小とするような交点C16は線分P1 P6 上にある。
【0062】
従って、この方法によれば、交点Cijを求める計算処理と、該交点Cijが線分Pi Pj 上に在るか否かの判定処理とを大幅に削減でき、処理が速い。
ところで、上記図3のステップS1の判別で、接触点が3個未満の場合は、ステップS4の中心座標Rの抽出処理に直接入力することとした。そこで、図示しないが、以下、この場合における回転中心の抽出処理を上記図10の処理(アイデア)に関連して概説する。
【0063】
まず接触点Pが1個の場合は、P1 =Qの場合と、P1 ≠Qの場合とがある。P1 =Qの場合は、容易にR=P1 (=Q)とできる。この場合は、図3のステップS5の処理で〈N〉×〈RQ〉=〈N〉×〈QQ〉=0となり、回転モーメントは発生しない。またP1 ≠Qの場合は、R=P1 (≠Q)となる。この場合は、ステップS5の処理で〈N〉×〈RQ〉=〈N〉×〈P1 Q〉≠0となり、回転モーメントが発生する。
【0064】
次に接触点Pが2個の場合は、点Qが線分P1 P2 上に在る場合と、無い場合とがある。点Qが線分P1 P2 上に在るとする判別は、例えば、〈QP1 〉×〈QP2 〉=0,P1x≦Qx ≦P2x,P1y≦Qy ≦P2yを同時に満足すると言う条件で得られる。なお、x,yは接触面上の座標である。点Qが線分P1 P2 上に在る場合は、常にR=Qとなる。この場合は、ステップS5の処理で〈N〉×〈RQ〉=0となり、回転モーメントは発生しない。また点Qが線分P1 P2 上に無い場合は、常にR≠Q(即ち、R=P1 /P2 /線分P1 P2 上の交点C12)となる。この場合は、ステップS5の処理で〈N〉×〈RQ〉≠0となり、回転モーメントが発生する。かくして本実施の形態によれば、接触点が任意のn個の場合における仮想物体の運動を合理的に生成できる。
【0065】
図12は実施の形態による一例の物体の運動を説明する図で、図12(A)は速度vで地面に落下した瞬間の物体aの斜視図を示している。
例えば、地面をZ=0の平面とし、法線ベクトル〈N〉,地面との接触点の座標P1 〜P3 ,物体aの重心座標G,重心Gの地面への投影点の座標Qを夫々、〈N〉=(0,0,1),P1 (0,2,0),P2 (−1,0,0),P3 (0,−1,0),G(2,1,2),Q(2,1,0)とする。
【0066】
上記図3のステップS2(即ち、図4,図5)の処理によると、例えば、
(〈QP3 〉×〈QPj 〉)・〈N〉>0 (但し、1≦j≦3,j≠3)
を満たすjは存在しないから、点Qは多角形(P1 ,P2 ,P3 )の外側に存在する。
次に、ステップS4(即ち、図10)の処理によると、先ず点Qに最も近い接触点はP1 (0,2,0)である。一方、点Qに最も近い線分Pi Pj 上の点はC13(0,1,0)である。よって、回転中心の座標Rは点Qから近い方のC13(0,1,0)となる。
【0067】
次に、ステップS5では、〈R〉=〈N〉×〈RQ〉=(0,2,0)を回転軸となし、物体aに、大きさMの回転モーメントを発生させる。大きさMは、上記により、例えば、
M=α*(v+1)*cosθ
で与えられる。ここで〈RQ〉と〈RG〉とのなす角θは、θ=tan-1{|〈RQ〉×〈RG〉|/〈RQ〉・〈RG〉}=tan-1{|(2,0,0)×(2,2,0)|/(2,0,0)・(2,2,0)}=tan-1(4/4)=45°と求まり、cosθ=1/√(2)となる。
【0068】
次に、ステップS6では、更に、この物体aに大きさKの跳ね返り慣性モーメントを発生させる。大きさKは、上記により、例えば、
K=β*v*sinθ
で与えられる。sinθ=1/√(2)である。
図12(B)は上記物体aの運動を時系列に示す側面図である。
【0069】
例えば、ゲームのユーザは、敵との対戦途中で、不用意にも自分の武器(例えばピストル等)を地面に落としてしまった。従来技術によれば、予め用意されたゲームのシナリオに従って、かつ予め用意された時刻t0 〜t2 の各画面が、逐次表示されるかも知れない。
しかし、本実施の形態においては、上記の少ない情報を利用して、かつ物理法則に従い、時刻t0 〜t2 の画面が自動生成される。即ち、時刻t0 では、物体aと地面との当たり判定により、その時の各接触点P1 〜P3 ,重心Gの座標情報を利用して、物体aを回転させるための回転中心の座標Rが求められる。時刻t1 では、落下時の速度vの情報を利用して、〈N〉×〈RQ〉を軸とする回転モーメントMによる回転運動と、跳ね返り慣性モーメントKによるリバウンド運動とが同時に生成される。これにより、物体aは地面から跳ね返りつつ、かつ衝突条件に応じた自然な動きで地面に倒れ掛かる。時刻t2 では、物体aが倒れた状態で静止している。
【0070】
かくして、本実施の形態によれば、ゲームがどの様に展開しても、それに伴うこの種のアニメーション画像を予め用意することなく、各場面に応じた自然な運動を高速に自動生成できる。従って、より少ないゲームデータと簡単な処理で、質の高いゲームを安価に提供できる。
なお、上記実施の形態ではゲーム機への適用例を中心に述べたが、本発明はCPUを使用して行われるあらゆるCGアニメーション処理に適用可能である。
【0071】
また、上記実施の形態では面を平面(例えば地面)としたがこれに限らない。面は任意の方向を向いていても良いし、また面は曲面でも良い。なお、接触点で囲まれる最大面積の面が複雑な曲面(又は折れた段状の面)を成しているような場合には、その部分曲面の法線ベクトルの加重平均をとり、1つの法線ベクトルで複雑な曲面等を代表させることが可能である。
【0072】
また、上記本発明に好適なる実施の形態を述べたが、本発明思想を逸脱しない範囲内で、各処理の構成、制御の流れ、及びこれらの組合せの様々な変更が行えることは言うまでも無い。
【0073】
【発明の効果】
以上述べた如く本発明によれば、仮想物体に物理法則に準じた運動を生成することが、比較的少ないデータと計算量で、かつ高速に可能となり、よって、特にパーソナルコンピュータや専用のゲーム機等により実行されるゲームの、高機能化、高品質化、低価格化等に寄与する所が極めて大きい。
【図面の簡単な説明】
【図1】図1は本発明の原理的構成を説明する図である。
【図2】図2は実施の形態によるゲーム機の構成を示す図である。
【図3】図3は実施の形態による仮想物体の運動生成処理のフローチャートである。
【図4】図4は実施の形態による点と多角形の内外判定処理のフローチャート(1)である。
【図5】図5は実施の形態による点と多角形の内外判定処理のフローチャート(2)である。
【図6】図6は実施の形態による点と多角形の内外判定処理を説明する図である。
【図7】図7は点Qの様々な位置に対する内外判定例を説明する図(1)である。
【図8】図8は点Qの様々な位置に対する内外判定例を説明する図(2)である。
【図9】図9は点Qの様々な位置に対する内外判定例を説明する図(3)である。
【図10】図10は実施の形態による回転の中心座標の抽出処理のフローチャートである。
【図11】図11は実施の形態による回転の中心座標の抽出処理を説明する図である。
【図12】図12は実施の形態による一例の物体の運動を説明する図である。
【図13】図13は従来技術を説明する図である。
【符号の説明】
1 ゲーム機本体
2 コンソール部
3 表示装置
4 コンパクトディスク
5 サーバ
6 他のゲーム機
11 CPU
12 主メモリ
13 表示制御部
14 インタフェース部
15 CD駆動部
16 通信制御部
17 共通バス
100 ネットワーク
Claims (6)
- 仮想の物体が仮想の面と接触した際の該物体の運動を生成する仮想物体の運動生成方法において、
物体重心の接触面への運動方向の投影点Qと、該物体と面の接触点P 1 〜P n とからなる各ベクトル〈QP 1 〉〜〈QP n 〉と、該各ベクトルにつき前記投影点Qの内側判定に有効に使用されたか否かを表す使用フラグUF 1 〜UF n とをそれぞれ関連付けて記憶したデータテーブルと、
前記データテーブルより抽出した2つのベクトルの外積と、前記接触面の法線ベクトル〈N〉との内積を求める第1の演算手段と、
前記データテーブルの情報及び第1の演算手段を使用した所定の処理により前記投影点Qが前記接触点P 1 〜P n により構成される最大面積の多角形の領域内にあるか否かを判定する制御手段とを備え、該制御手段は、
(1)ベクトル〈QP1〉〜〈QPn〉の使用フラグUF1〜UFnを未使用に初期化すると共に、任意最初のベクトルQP(k) を選択してその使用フラグUF(k)を使用となし、かつi=kとする処理と、
(2)i≠jの条件で、前記第1の演算手段によりベクトル〈QP(i) 〉,〈QP(j) 〉の外積と、法線ベクトル〈N〉との内積を求め、その演算結果が内側判定の符号(例えば>0)となるベクトル〈QP(j)〉を探査する処理と、
(3)前記(2)の条件を満たすベクトル〈QP(j) 〉が存在しないことにより、投影点Qが接触点P1〜Pnで構成される最大面積の多角形の領域外にあると判定する処理と、を備えることを特徴とする仮想物体の運動生成方法。 - 前記制御手段は、
(4)前記(2)の演算結果が内側判定の符号であることにより、その際のjが指す使用フラグUF(j)を使用となし、かつ前記第1の演算手段により該ベクトル〈QP(j)〉と前記(1)で選択した最初のベクトル〈QP(k)〉の外積と、法線ベクトル〈N〉との内積を求める処理と、
(5)前記(4)の演算結果が内側判定の符号であることにより、前記投影点Qが前記接触点P1〜Pnで構成される最大面積の多角形の領域内にあると判定する処理と、
(6)前記(4)の演算結果が内側判定の符号ではないこと(例えば≦0)により、その際のiにjの内容を転送し、かつ該jの内容を次の未使用ベクトルを指す値に更新して前記(2)に戻る処理と、を更に備えることを特徴とする請求項1に記載の仮想物体の運動生成方法。 - 制御の流れを変えるための制御フラグMFを更に備え、
前記制御手段は、
(7)前記(2)の演算結果が内側判定の符号ではないことにより、その際のベクトル〈QP ( j ) 〉の使用フラグUF(j)を未使用にし、かつjの内容を前記未使用ベクトルを指すためのレジスタmに保持すると共に、前記制御フラグMFを真となし、かつ前記jの内容を次の未使用ベクトルを指す値に更新して前記(2)に戻る処理と、
(8)前記(4)の演算結果が内側判定の符号ではなく、かつ制御フラグMFが真により、その時点のjよりも以前の未使用ベクトルを指すレジスタmを探査し、かつ前記第1の演算手段により当該ベクトル〈QP(j)〉と該探査したベクトル〈QP(m)〉の外積と、法線ベクトル〈N〉との内積を求める処理と、
(9)前記(8)の演算結果が内側判定の符号であることにより、前記第1の演算手段によりその際のベクトル〈QP(m)〉と前記(1)で選択した最初のベクトル〈QP(k)〉の外積と、法線ベクトル〈N〉との内積を求める処理と、
(10)前記(9)の演算結果が内側判定の符号であることにより、前記投影点Qが前記接触点P1〜Pnで構成される最大面積の多角形の領域内にあると判定する処理と、を更に備えることを特徴とする請求項2に記載の仮想物体の運動生成方法。 - 前記制御手段は、
(14)前記(9)の演算結果が内側判定の符号ではなく、かつデータテーブルに未使 用ベクトルが存在しないことにより、前記投影点Qが前記接触点P 1 〜P n で構成される最大面積の多角形の領域外にあると判定する処理、を更に備えることを特徴とする請求項3に記載の仮想物体の運動生成方法。 - 2つのベクトルの内積を求める第2の演算手段を更に備え、
前記制御手段は、前記投影点Qが前記接触点P 1 〜P n で構成される最大面積の多角形の領域外に在ると判定したことにより、
(11)任意の整数i,j(1≦i<j≦n)に対し、前記第2の演算手段によるベクトル〈QCij〉,〈Pi Pj〉の内積が0を満たす線分PiPj上の点Cijであって、距離|QCij|が最小となる点Cmnを求め、該点Cmnを物体の回転中心の座標となす処理、を更に備えることを特徴とする請求項1又は4に記載の仮想物体の運動生成方法。 - 前記制御手段は、
(12)前記接触点P1〜Pnの中で、前記投影点Qに最も近い点Pkとの間の距離|QPk|を求める処理と、
(13)2点Q,C mn 間の距離|QCmn|と前記距離|QPk|の小さい方に対応する点Cmn又はPkを物体の回転中心の座標となす処理と、を更に備えることを特徴とする請求項5に記載の仮想物体の運動生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP18171696A JP3697321B2 (ja) | 1996-06-24 | 1996-06-24 | 仮想物体の運動生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP18171696A JP3697321B2 (ja) | 1996-06-24 | 1996-06-24 | 仮想物体の運動生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH1011601A JPH1011601A (ja) | 1998-01-16 |
JP3697321B2 true JP3697321B2 (ja) | 2005-09-21 |
Family
ID=16105624
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP18171696A Expired - Fee Related JP3697321B2 (ja) | 1996-06-24 | 1996-06-24 | 仮想物体の運動生成方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3697321B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4642104B2 (ja) * | 2008-11-10 | 2011-03-02 | 株式会社バンダイナムコゲームス | 画像生成システム及び情報記憶媒体 |
-
1996
- 1996-06-24 JP JP18171696A patent/JP3697321B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH1011601A (ja) | 1998-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Dalmau | Core techniques and algorithms in game programming | |
US7922584B2 (en) | Image generation method and information storage medium with program for video game in which operation of the controller beyond a predetermined angle causes a character to attack | |
JP5657848B2 (ja) | プログラム、及びサーバ装置 | |
US7495665B2 (en) | Storage medium having game program stored thereon and game apparatus | |
US20070168309A1 (en) | System, method and computer program product for dynamically extracting and sharing event information from an executing software application | |
JP2008005961A (ja) | 画像生成システム、プログラム及び情報記憶媒体 | |
US9539513B2 (en) | Method and system for simulations of dynamic motion and position | |
JP2020014670A (ja) | ゲーム制御装置、ゲームシステム、及びプログラム | |
CN116993893B (zh) | 一种抵御ai自瞄作弊的对抗贴图生成方法及装置 | |
JP3697321B2 (ja) | 仮想物体の運動生成方法 | |
CN112295224A (zh) | 三维特效生成方法及装置、计算机存储介质、电子设备 | |
US6890261B2 (en) | Game system, program and image generation method | |
JP2015039591A (ja) | プログラム、端末及びゲームシステム | |
JP6096154B2 (ja) | プログラム、及びサーバ装置 | |
JP2003210837A (ja) | 画像生成システム、プログラム及び情報記憶媒体 | |
KR100510339B1 (ko) | 역학 정보를 이용한 화면 갱신 방법 및 시스템 | |
KR101400536B1 (ko) | 온라인 게임 서비스에서의 캐릭터간 충격 반응 표시 방법 및 서버, 및 충격 반응 표시 기능을 가지는 온라인 게임 시스템 | |
JP7131905B2 (ja) | 情報処理方法、サーバ装置、プログラム、及び情報端末 | |
JP2008093163A (ja) | プログラム、情報記憶媒体、及びゲームシステム | |
JP2011145953A (ja) | 画像処理装置、及び画像処理プログラム | |
JP4025716B2 (ja) | プログラム、情報記憶媒体及びゲーム装置 | |
JP2004329531A (ja) | ゲームプログラム、情報記憶媒体及びゲーム装置 | |
García et al. | Perceptually validated global/local deformations | |
CN116135272A (zh) | 游戏中的碰撞处理方法、装置、电子设备及存储介质 | |
JP2001218979A (ja) | ゲームシステム及び情報記憶媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050315 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050510 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050621 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050704 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |