(57)【特許請求の範囲】
【請求項１】
リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法であって、
仮想的なシナリオにおける仮想オブジェクトに対応する円柱コライダを前記円柱コライダと同心の予め設定された多角柱にコンバートするステップと、
凸体のローカル座標系内の前記予め設定された多角柱の位置を取得するために前記予め設定された多角柱を前記凸体の前記ローカル座標系に変換するステップと、
前記凸体の前記ローカル座標系内の前記予め設定された多角柱の前記位置に従って、前記予め設定された多角柱の各面の法線方向、予め設定された多角形の辺方向、および前記多角柱の側面の辺の辺方向を取得するステップと、
前記凸体の各面の法線方向および各辺方向を取得するステップと、
前記凸体の各辺方向と前記予め設定された多角形の前記辺方向とのベクトル積、および前記凸体の各辺方向と前記多角柱の前記側面の辺の前記辺方向とのベクトル積を別に取得するステップと、
前記予め設定された多角柱の各面の法線方向、前記凸体の各面の法線方向、および前記ベクトル積のうちの1つまたは複数を1つまたは複数の試験軸として使用するステップと、
各試験軸および前記凸体の前記ローカル座標系内の前記予め設定された多角柱の前記位置に従って前記試験軸上の前記円柱コライダの射影の長さおよび射影の位置を取得し、各試験軸上の前記凸体の射影を取得するステップと、
前記円柱コライダおよび前記凸体の射影が各試験軸上で互いに交わる場合、前記円柱コライダと前記凸体との間の衝突が存在すると判定するステップとを含む、方法。
【請求項２】
凸体のローカル座標系内の前記予め設定された多角柱の位置を取得するために前記予め設定された多角柱を前記凸体の前記ローカル座標系に変換する前記ステップが、
前記凸体の前記ローカル座標系内の前記予め設定された多角柱のX軸、Y軸、およびZ軸の単位ベクトルに対応するベクトルを取得するために前記予め設定された多角柱の前記X軸、前記Y軸、前記Z軸、および中央の点を前記凸体の前記ローカル座標系に変換し、前記多角柱の2つの面、すなわち、上面および下面上の中央の点の座標を取得するために前記凸体の前記ローカル座標系内の前記Z軸の前記ベクトルに前記円柱コライダの正の半分の高さの値および負の半分の高さの値を乗算するステップと、
前記円柱コライダの半径を取得し、前記半径に対応する前記ベクトル、前記凸体の前記ローカル座標系内の前記円柱コライダの前記X軸、前記Y軸に従って、前記予め設定された多角柱の頂点が置かれる前記面の前記中央の点に対する前記頂点のオフセットを取得し、対応する頂点の座標を得るために前記オフセットおよび前記中央の点の座標の和を取得するステップと、
各頂点の座標に従って前記凸体の前記ローカル座標系内に前記予め設定された多角柱を再構築するステップとを含む請求項1に記載の方法。
【請求項３】
前記凸体の前記ローカル座標系に変換された後、前記円柱コライダからコンバートされる前記予め設定された多角柱が円柱コライダではない場合、前記凸体の前記ローカル座標系内の前記予め設定された多角柱の各頂点を射影し、前記円柱コライダの射影の長さを得るために、差を得るために極値を設定するステップをさらに含む請求項2に記載の方法。
【請求項４】
前記凸体の前記ローカル座標系に変換された後、前記円柱コライダからコンバートされる前記予め設定された多角柱が引き続き円柱コライダである場合、前記円柱コライダの半径および半分の高さ、前記凸体の前記ローカル座標系に変換された前記円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトル、ならびに前記凸体の前記ローカル座標系内の前記試験軸の試験軸方向を、前記円柱コライダの前記射影の長さを計算するために取得するステップをさらに含む請求項2に記載の方法。
【請求項５】
前記試験軸が前記円柱コライダの垂直軸と並行である場合、前記凸体の前記ローカル座標系に変換される前記円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトルのZ基底ベクトルの長さと半分の高さとの積を、前記円柱コライダの前記射影の長さとして取得するステップと、
前記試験軸が前記円柱コライダの前記垂直軸に垂直である場合、前記凸体の前記ローカル座標系に変換される前記円柱コライダの3つの軸、すなわち、前記X軸、前記Y軸、および前記Z軸の前記基底ベクトルに対応する前記座標基底ベクトルのX基底ベクトルの長さおよびY基底ベクトルの長さのうちの大きな方の値を取得し、さらに、前記大きな方の値と前記円柱コライダの半径との積を、前記円柱コライダの前記射影の長さとして使用するステップとをさらに含む請求項1から4のいずれか一項に記載の方法。
【請求項６】
前記予め設定された多角形が、前記円柱コライダの底面に内接する正多角形である請求項1から4のいずれか一項に記載の方法。
【請求項７】
前記多角形が偶数個の辺を有する正多角形である場合、前記予め設定された多角形の辺方向が取得されるとき、中心に基づいて非対称である辺方向が、前記予め設定された多角柱の上面および下面上の2つの予め設定された多角形のうちの予め設定された多角形から選択され、前記多角柱の側面の辺の横方向を取得するとき、1つの側面の辺の横方向が選択される請求項6に記載の方法。
【請求項８】
メモリおよびプロセッサを含む端末であって、前記メモリが、前記プロセッサによって実行されるときに前記プロセッサに以下のステップ、すなわち、
仮想的なシナリオにおける仮想オブジェクトに対応する円柱コライダを前記円柱コライダと同心の予め設定された多角柱にコンバートするステップと、
凸体のローカル座標系内の前記予め設定された多角柱の位置を取得するために前記予め設定された多角柱を前記凸体の前記ローカル座標系に変換するステップと、
前記凸体の前記ローカル座標系内の前記予め設定された多角柱の前記位置に従って、前記予め設定された多角柱の各面の法線方向、予め設定された多角形の辺方向、および前記多角柱の側面の辺の辺方向を取得するステップと、
前記凸体の各面の法線方向および各辺方向を取得するステップと、
前記凸体の各辺方向と前記予め設定された多角形の前記辺方向とのベクトル積、および前記凸体の各辺方向と前記多角柱の前記側面の辺の前記辺方向とのベクトル積を別に取得するステップと、
前記予め設定された多角柱の各面の法線方向、前記凸体の各面の法線方向、および前記ベクトル積のうちの1つまたは複数を1つまたは複数の試験軸として使用するステップと、
各試験軸および前記凸体の前記ローカル座標系内の前記予め設定された多角柱の前記位置に従って前記試験軸上の前記円柱コライダの射影の長さおよび射影の位置を取得し、各試験軸上の前記凸体の射影を取得するステップと、
前記円柱コライダおよび前記凸体の射影が各試験軸上で互いに交わる場合、前記円柱コライダと前記凸体との間の衝突が存在すると判定するステップとを実行させる命令を記憶する、端末。
【請求項９】
凸体のローカル座標系内の前記予め設定された多角柱の位置を取得するために前記予め設定された多角柱を前記凸体の前記ローカル座標系に変換する前記ステップが、
前記凸体の前記ローカル座標系内の前記予め設定された多角柱のX軸、Y軸、およびZ軸の単位ベクトルに対応するベクトルを取得するために前記予め設定された多角柱の前記X軸、前記Y軸、前記Z軸、および中央の点を前記凸体の前記ローカル座標系に変換し、前記多角柱の2つの面、すなわち、上面および下面上の中央の点の座標を取得するために前記凸体の前記ローカル座標系内の前記Z軸の前記ベクトルに前記円柱コライダの正の半分の高さの値および負の半分の高さの値を乗算することと、
前記円柱コライダの半径を取得し、前記半径に対応する前記ベクトル、前記凸体の前記ローカル座標系内の前記円柱コライダの前記X軸、前記Y軸に従って、前記予め設定された多角柱の頂点が置かれる前記面の前記中央の点に対する前記頂点のオフセットを取得し、対応する頂点の座標を得るために前記オフセットおよび前記中央の点の座標の和を取得することと、
各頂点の座標に従って前記凸体の前記ローカル座標系内に前記予め設定された多角柱を再構築することとを含む請求項8に記載の端末。
【請求項１０】
前記プロセッサが、
前記凸体の前記ローカル座標系に変換された後、前記円柱コライダからコンバートされる前記予め設定された多角柱が円柱コライダではない場合、前記凸体の前記ローカル座標系内の前記予め設定された多角柱の各頂点を射影し、前記円柱コライダの射影の長さを得るために、差を得るために極値を設定するステップをさらに実行する請求項9に記載の端末。
【請求項１１】
前記プロセッサが、
前記凸体の前記ローカル座標系に変換された後、前記円柱コライダからコンバートされる前記予め設定された多角柱が引き続き円柱コライダである場合、前記円柱コライダの半径および半分の高さ、前記凸体の前記ローカル座標系に変換された前記円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトル、ならびに前記凸体の前記ローカル座標系内の前記試験軸の試験軸方向を、前記円柱コライダの前記射影の長さを計算するために取得するステップをさらに実行する請求項9に記載の端末。
【請求項１２】
前記プロセッサが、
前記試験軸が前記円柱コライダの垂直軸と並行である場合、前記凸体の前記ローカル座標系に変換される前記円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトルのZ基底ベクトルの長さと半分の高さとの積を、前記円柱コライダの前記射影の長さとして取得するステップと、
前記試験軸が前記円柱コライダの前記垂直軸に垂直である場合、前記凸体の前記ローカル座標系に変換される前記円柱コライダの3つの軸、すなわち、前記X軸、前記Y軸、および前記Z軸の前記基底ベクトルに対応する前記座標基底ベクトルのX基底ベクトルの長さおよびY基底ベクトルの長さのうちの大きな方の値を取得し、さらに、前記大きな方の値と前記円柱コライダの半径との積を、前記円柱コライダの前記射影の長さとして使用するステップとをさらに実行する請求項8から11のいずれか一項に記載の端末。
【請求項１３】
前記予め設定された多角形が、前記円柱コライダの底面に内接する正多角形である請求項8から11のいずれか一項に記載の端末。
【請求項１４】
前記多角形が偶数個の辺を有する正多角形である場合、前記予め設定された多角形の辺方向が取得されるとき、中心に基づいて非対称である辺方向が、前記予め設定された多角柱の上面および下面上の2つの予め設定された多角形のうちの予め設定された多角形から選択され、前記多角柱の側面の辺の横方向を取得するとき、1つの側面の辺の横方向が選択される請求項13に記載の端末。
【請求項１５】
1つまたは複数のプロセッサによって実行されるときに前記1つのプロセッサまたは前記複数のプロセッサに以下のステップ、すなわち、
仮想的なシナリオにおける仮想オブジェクトに対応する円柱コライダを前記円柱コライダと同心の予め設定された多角柱にコンバートするステップと、
凸体のローカル座標系内の前記予め設定された多角柱の位置を取得するために前記予め設定された多角柱を前記凸体の前記ローカル座標系に変換するステップと、
前記凸体の前記ローカル座標系内の前記予め設定された多角柱の前記位置に従って、前記予め設定された多角柱の各面の法線方向、予め設定された多角形の辺方向、および前記多角柱の側面の辺の辺方向を取得するステップと、
前記凸体の各面の法線方向および各辺方向を取得するステップと、
前記凸体の各辺方向と前記予め設定された多角形の前記辺方向とのベクトル積、および前記凸体の各辺方向と前記多角柱の前記側面の辺の前記辺方向とのベクトル積を別に取得するステップと、
前記予め設定された多角柱の各面の法線方向、前記凸体の各面の法線方向、および前記ベクトル積のうちの1つまたは複数を1つまたは複数の試験軸として使用するステップと、
各試験軸および前記凸体の前記ローカル座標系内の前記予め設定された多角柱の前記位置に従って前記試験軸上の前記円柱コライダの射影の長さおよび射影の位置を取得し、各試験軸上の前記凸体の射影を取得するステップと、
前記円柱コライダおよび前記凸体の射影が各試験軸上で互いに交わる場合、前記円柱コライダと前記凸体との間の衝突が存在すると判定するステップとを実行させるコンピュータ可読命令を記憶する1つまたは複数の不揮発性コンピュータ可読ストレージ媒体。
【請求項１６】
凸体のローカル座標系内の前記予め設定された多角柱の位置を取得するために前記予め設定された多角柱を前記凸体の前記ローカル座標系に変換する前記ステップが、
前記凸体の前記ローカル座標系内の前記予め設定された多角柱のX軸、Y軸、およびZ軸の単位ベクトルに対応するベクトルを取得するために前記予め設定された多角柱の前記X軸、前記Y軸、前記Z軸、および中央の点を前記凸体の前記ローカル座標系に変換し、前記多角柱の2つの面、すなわち、上面および下面上の中央の点の座標を取得するために前記凸体の前記ローカル座標系内の前記Z軸の前記ベクトルに前記円柱コライダの正の半分の高さの値および負の半分の高さの値を乗算することと、
前記円柱コライダの半径を取得し、前記半径に対応する前記ベクトル、前記凸体の前記ローカル座標系内の前記円柱コライダの前記X軸、前記Y軸に従って、前記予め設定された多角柱の頂点が置かれる前記面の前記中央の点に対する前記頂点のオフセットを取得し、対応する頂点の座標を得るために前記オフセットおよび前記中央の点の座標の和を取得することと、
各頂点の座標に従って前記凸体の前記ローカル座標系内に前記予め設定された多角柱を再構築することとを含む請求項15に記載の不揮発性コンピュータ可読ストレージ媒体。
【請求項１７】
前記凸体の前記ローカル座標系に変換された後、前記円柱コライダからコンバートされる前記予め設定された多角柱が円柱コライダではない場合、前記凸体の前記ローカル座標系内の前記予め設定された多角柱の各頂点を射影し、前記円柱コライダの射影の長さを得るために、差を得るために極値を設定するステップをさらに含む請求項16に記載の不揮発性コンピュータ可読ストレージ媒体。
【請求項１８】
前記凸体の前記ローカル座標系に変換された後、前記円柱コライダからコンバートされる前記予め設定された多角柱が引き続き円柱コライダである場合、前記円柱コライダの半径および半分の高さ、前記凸体の前記ローカル座標系に変換された前記円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトル、ならびに前記凸体の前記ローカル座標系内の前記試験軸の試験軸方向を、前記円柱コライダの前記射影の長さを計算するために取得するステップをさらに含む請求項16に記載の不揮発性コンピュータ可読ストレージ媒体。
【請求項１９】
前記試験軸が前記円柱コライダの垂直軸と並行である場合、前記凸体の前記ローカル座標系に変換される前記円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトルのZ基底ベクトルの長さと半分の高さとの積を、前記円柱コライダの前記射影の長さとして取得するステップと、
前記試験軸が前記円柱コライダの前記垂直軸に垂直である場合、前記凸体の前記ローカル座標系に変換される前記円柱コライダの3つの軸、すなわち、前記X軸、前記Y軸、および前記Z軸の前記基底ベクトルに対応する前記座標基底ベクトルのX基底ベクトルの長さおよびY基底ベクトルの長さのうちの大きな方の値を取得し、さらに、前記大きな方の値と前記円柱コライダの半径との積を、前記円柱コライダの前記射影の長さとして使用するステップとをさらに含む請求項15から18のいずれか一項に記載の不揮発性コンピュータ可読ストレージ媒体。
【請求項２０】
前記予め設定された多角形が、前記円柱コライダの底面に内接する正多角形である請求項15から18のいずれか一項に記載の不揮発性コンピュータ可読ストレージ媒体。
【請求項２１】
前記多角形が偶数個の辺を有する正多角形である場合、前記予め設定された多角形の辺方向が取得されるとき、中心に基づいて非対称である辺方向が、前記予め設定された多角柱の上面および下面上の2つの予め設定された多角形のうちの予め設定された多角形から選択され、前記多角柱の側面の辺の横方向を取得するとき、1つの側面の辺の横方向が選択される請求項20に記載の不揮発性コンピュータ可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、2015年11月30日に中国専利局に出願した「METHOD AND SYSTEM FOR DETECTING COLLISION BETWEEN CYLINDRICAL COLLIDER AND CONVEX BODY IN REAL-TIME VIRTUAL SCENARIO」と題した中国特許出願第201510864339.0号の優先権を主張するものであり、この特許出願は、参照によりその全体が組み込まれる。
【０００２】
本開示は、コンピュータアプリケーションの分野に関し、特に、リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法、端末、および不揮発性コンピュータ可読ストレージ媒体に関する。
【背景技術】
【０００３】
仮想的なシナリオは、コンピュータを使用することによってシミュレーションされるゲームのシナリオまたはアニメーションのシナリオなどのシナリオである。ゲームのシナリオを例として使用すると、仮想オブジェクトが障害物に出くわすとき、仮想オブジェクトは、障害物、つまりは、仮想オブジェクトと障害物との間の衝突を回避する必要がある。通常の処理の手法は、仮想オブジェクトと障害物との両方を軸平行境界ボックス(AABB: Axis Aligned Bounding Box)のコライダとして単純化することである。図1に示されるように、仮想オブジェクトから単純化されたコライダ110は、壁の角120を回避する必要があり、図に示される運動変化プロセスによれば、コライダ110は、角全体を完全に回避した後にのみ、壁の下の辺に沿って前に進み続けることができる。
【０００４】
しかし、そのようなコライダ110が壁の角と衝突するかまたは壁の角の側を通り過ぎるとき、操作者の操作はスムーズではなく、操作者は、角を回避するために全体を動かすようにコライダを制御する必要があり、運動の効率が低い。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
以上に基づいて、操作のスムーズさを改善し、移動の効率を改善するために、仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法を提供することが必要である。
【０００６】
さらに、操作のスムーズさを改善し、移動の効率を改善するために、端末および不揮発性コンピュータ可読ストレージ媒体を提供することも必要である。
【課題を解決するための手段】
【０００７】
リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法が、以下のステップ、すなわち、
仮想的なシナリオにおける仮想オブジェクトに対応する円柱コライダを円柱コライダと同心の予め設定された多角柱にコンバートするステップと、
凸体のローカル座標系内の予め設定された多角柱の位置を取得するために予め設定された多角柱を凸体のローカル座標系に変換するステップと、
凸体のローカル座標系内の予め設定された多角柱の位置に従って、予め設定された多角柱の各面の法線方向、予め設定された多角形の辺方向、および多角柱の側面の辺の辺方向を取得するステップと、
凸体の各面の法線方向および各辺方向を取得するステップと、
凸体の各辺方向と予め設定された多角形の辺方向とのベクトル積、および凸体の各辺方向と多角柱の側面の辺の辺方向とのベクトル積を別に取得するステップと、
予め設定された多角柱の各面の法線方向、凸体の各面の法線方向、およびベクトル積のうちの1つまたは複数を1つまたは複数の試験軸(testing axis)として使用するステップと、
各試験軸および凸体のローカル座標系内の予め設定された多角柱の位置に従って試験軸上の円柱コライダの射影の長さおよび射影の位置を取得し、各試験軸上の凸体の射影を取得するステップと、
円柱コライダおよび凸体の射影が各試験軸上で互いに交わる場合、円柱コライダと凸体との間の衝突が存在すると判定するステップとを含む。
【０００８】
端末が、メモリおよびプロセッサを含み、メモリが、プロセッサによって実行されるときにプロセッサに以下のステップ、すなわち、
仮想的なシナリオにおける仮想オブジェクトに対応する円柱コライダを円柱コライダと同心の予め設定された多角柱にコンバートするステップと、
凸体のローカル座標系内の予め設定された多角柱の位置を取得するために予め設定された多角柱を凸体のローカル座標系に変換するステップと、
凸体のローカル座標系内の予め設定された多角柱の位置に従って、予め設定された多角柱の各面の法線方向、予め設定された多角形の辺方向、および多角柱の側面の辺の辺方向を取得するステップと、
凸体の各面の法線方向および各辺方向を取得するステップと、
凸体の各辺方向と予め設定された多角形の辺方向とのベクトル積、および凸体の各辺方向と多角柱の側面の辺の辺方向とのベクトル積を別に取得するステップと、
予め設定された多角柱の各面の法線方向、凸体の各面の法線方向、およびベクトル積のうちの1つまたは複数を1つまたは複数の試験軸として使用するステップと、
各試験軸および凸体のローカル座標系内の予め設定された多角柱の位置に従って試験軸上の円柱コライダの射影の長さおよび射影の位置を取得し、各試験軸上の凸体の射影を取得するステップと、
円柱コライダおよび凸体の射影が各試験軸上で互いに交わる場合、円柱コライダと凸体との間の衝突が存在すると判定するステップとを実行させる命令を記憶する。
【０００９】
1つまたは複数の不揮発性コンピュータ可読ストレージ媒体が、1つまたは複数のプロセッサによって実行されるときに1つのプロセッサまたは複数のプロセッサに以下のステップ、すなわち、
仮想的なシナリオにおける仮想オブジェクトに対応する円柱コライダを円柱コライダと同心の予め設定された多角柱にコンバートするステップと、
凸体のローカル座標系内の予め設定された多角柱の位置を取得するために予め設定された多角柱を凸体のローカル座標系に変換するステップと、
凸体のローカル座標系内の予め設定された多角柱の位置に従って、予め設定された多角柱の各面の法線方向、予め設定された多角形の辺方向、および多角柱の側面の辺の辺方向を取得するステップと、
凸体の各面の法線方向および各辺方向を取得するステップと、
凸体の各辺方向と予め設定された多角形の辺方向とのベクトル積、および凸体の各辺方向と多角柱の側面の辺の辺方向とのベクトル積を別に取得するステップと、
予め設定された多角柱の各面の法線方向、凸体の各面の法線方向、およびベクトル積のうちの1つまたは複数を1つまたは複数の試験軸として使用するステップと、
各試験軸および凸体のローカル座標系内の予め設定された多角柱の位置に従って試験軸上の円柱コライダの射影の長さおよび射影の位置を取得し、各試験軸上の凸体の射影を取得するステップと、
円柱コライダおよび凸体の射影が各試験軸上で互いに交わる場合、円柱コライダと凸体との間の衝突が存在すると判定するステップとを実行させるコンピュータ可読命令を記憶する。
【００１０】
本発明の1つまたは複数の実施形態の詳細が、添付の図面および説明において下に与えられる。本開示のその他の特徴、目的、および利点は、本明細書、添付の図面、および請求項を参照すると明らかになる。
【図面の簡単な説明】
【００１１】
【図１】通常のリアルタイムの仮想的なシナリオにおけるコライダの間の衝突のプロセスの概略図である。
【図２】実施形態におけるリアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法および装置の応用環境の概略図である。
【図３Ａ】実施形態における端末の内部構造の概略図である。
【図３Ｂ】実施形態におけるサーバの内部構造の概略図である。
【図４】Componentクラスに含まれるシナリオオブジェクト(scenario object)の概略図である。
【図５】2つの凸体の射影が同じ軸上で互いに交わらない概略図である。
【図６】円柱コライダの概略図である。
【図７】実施形態におけるリアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法の流れ図である。
【図８】正八角柱の上面図である。
【図９】実施形態における凸体のローカル座標系内の予め設定された多角柱の位置を取得するために予め設定された多角柱を凸体のローカル座標系に変換するステップの特定の流れ図である。
【図１０】八角柱の頂点を取得する概略図である。
【図１１】八角柱の法線方向を取得する概略図である。
【図１２】円柱コライダを使用する衝突検出において通常のアルゴリズムを使用した効果および理論上の結果の概略図である。
【図１３】実施形態におけるリアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための装置の構造のブロック図である。
【発明を実施するための形態】
【００１２】
本開示の目的、技術的な解決策、および利点をより理解しやすくするために、本開示が、添付の図面および実施形態を参照して以下でさらに詳細に説明される。それら図面および実施形態の中で説明される特定の実施形態は、本開示を限定するのではなく本開示を説明するために使用されるに過ぎないことを理解されたい。
【００１３】
図2は、実施形態におけるリアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法および装置の応用環境の概略図である。図2に示されるように、応用環境は端末210およびサーバ220を含み、複数の端末210が存在する可能性がある。複数の端末210が、サーバ220と通信する。リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法は、端末210上で実行される可能性があり、端末210は、サーバ220から仮想的なシナリオのデータを取得し、端末210は、仮想的なシナリオにおける凸体と仮想オブジェクトに対応する円柱コライダとを取得し、凸体と円柱コライダとの間の衝突を検出する。リアルタイムの仮想的なシナリオは、リアルタイムゲームのシナリオ、リアルタイムアニメーションのシナリオなどである可能性があり、仮想オブジェクトは、キャラクターまたは物体である可能性がある。凸体は、キャラクターまたはオブジェクトである可能性がある。
【００１４】
図3Aは、実施形態における端末210の内部構造の概略図である。図3Aに示されるように、端末210は、システムバスを通じて接続されるプロセッサ、ストレージ媒体、メモリ、およびネットワークインターフェース、集音装置、ディスプレイスクリーン、ラウドスピーカ、および入力装置を含む。端末のストレージ媒体は、オペレーティングシステムを記憶し、リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための装置をさらに含み、リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための装置は、リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法を実施するように構成される。プロセッサは、端末全体の実行をサポートするための計算および制御能力を提供するように構成される。端末のメモリは、リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための装置の実行のための環境を提供する。ネットワークインターフェースは、たとえば、サーバにデータ要求を送信し、サーバによって返された対応するデータを受信するなど、サーバとのネットワーク通信を実行するように構成される。端末のディスプレイスクリーンは、液晶ディスプレイスクリーンまたは電子インクディスプレイスクリーンである可能性がある。入力装置は、ディスプレイスクリーンを覆うタッチレイヤである可能性があり、または端末の筐体に配置されたキー、トラックボール、もしくはトラックパッドである可能性があり、または外部キーボード、トラックパッド、マウスなどである可能性がある。端末は、モバイル電話、デスクトップコンピュータ、タブレットコンピュータ、携帯情報端末などである可能性がある。当業者は、図3Aに示される構造が、本出願の解決策に関連する部分的な構造のブロック図であるに過ぎず、本出願の解決策が適用される端末に対する限定を定めず、特に、端末が、図に示される構成要素より多くの構成要素もしくはより少ない構成要素を含む可能性があり、または一部の構成要素が組み合わされる可能性があり、または異なる構成要素の配置が使用される可能性があることを理解するであろう。
【００１５】
図3Bは、実施形態におけるサーバ220の内部構造の概略図である。図3Bに示されるように、サーバは、システムバスを通じて接続されるプロセッサ、ストレージ媒体、メモリ、ネットワークインターフェース、ディスプレイスクリーン、および入力装置を含む。サーバのストレージ媒体は、オペレーティングシステム、データベース、およびリアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための装置を収容し、データベースは、リアルタイムの仮想的なシナリオのデータなどを記憶し、リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための装置は、リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための、サーバに適用され得る方法を実施するように構成される。サーバのプロセッサは、サーバ全体の実行をサポートするための計算および制御能力を提供するように構成される。サーバのメモリは、ストレージ媒体内のリアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための装置の実行のための環境を提供する。サーバのディスプレイスクリーンは、液晶ディスプレイスクリーンまたは電子インクディスプレイスクリーンである可能性がある。入力装置は、ディスプレイスクリーンを覆うタッチレイヤである可能性があり、または端末の筐体に配置されたキー、トラックボール、もしくはトラックパッドである可能性があり、または外部キーボード、トラックパッド、マウスなどである可能性がある。サーバのネットワークインターフェースは、たとえば、サーバによって送信されたデータインタラクション要求を受信し、端末にデータを返すなど、ネットワーク接続を使用することによって外部端末と通信するように構成される。サーバは、独立したサーバ、または複数のサーバによって構成されるサーバクラスタを使用することによって実装され得る。当業者は、図3Bに示される構造が、本出願の解決策に関連する部分的な構造のブロック図であるに過ぎず、本出願の解決策が適用されるサーバに対する限定を定めず、特に、サーバが、図に示される構成要素より多くの構成要素もしくはより少ない構成要素を含む可能性があり、または一部の構成要素が組み合わされる可能性があり、または異なる構成要素の配置が使用される可能性があることを理解するであろう。
【００１６】
別の応用環境においては、端末210またはサーバ220のみが含まれる可能性がある。リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法は、たとえば、ゲームのシナリオまたはアニメーションのシナリオにおける仮想オブジェクトの運動などに関して端末またはサーバ上で実行されさえすればよい。ユーザが、ダウンロードされたコンソールゲームを端末上で実行し、または試験者が、コンソールゲームをサーバ上で試験する等々である。
【００１７】
コライダの間の衝突を検出することを容易にするために、リアルタイムの仮想的なシナリオにおいて、プレイヤーの制御を表す仮想的なキャラクターおよび(手榴弾またはカメラなどの)その他の移動するオブジェクトは、すべてActorクラスまたはそのサブクラスのオブジェクトであり、したがって、衝突の検出が、軸に並行に(in an axis aligned manner)実行される。仮想的なキャラクターのコライダを変えるためには、円柱コライダを仮想的なキャラクターとして使用し、AABBをキャラクターではないActorとして使用することによって衝突検出が実行されるようにActorクラスが修正される。リアルタイムの仮想的なシナリオにおいては、BSPシナリオオブジェクトおよびComponentシナリオオブジェクトを含む主に2種類のシナリオオブジェクトが存在する。分類されたストレージが、異なるシナリオオブジェクトに応じて実行される。つまり、オブジェクトは、BSPまたはComponentとして分類される。衝突検出中に、クラスのどのオブジェクトが入ってくるActorオブジェクトのコライダと衝突する可能性があるのかを判定するために、シナリオオブジェクトの分類に従って衝突検出のエントリ関数(entry function) Uworld::MoveActor()を使用することによって荒削り(rough cutting)が実行され、それから、厳密な衝突検出が実行され、結果が返される。荒削りは、粗い衝突を実行することを示す。厳密な衝突は、下で説明されるリアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法に従って円柱コライダと凸体(すなわち、Componentシナリオオブジェクト)との間の厳密な衝突検出を実施することを示し、衝突検出が終わった後、衝突検出の結果が、一連のCheck関数を使用することによってUworld::MoveActor()に収集され、さらなる収集が、状態変化およびダメージ計算などのさらなる計算のためにUworld::MoveActor()を使用することによって実行される。Componentシナリオオブジェクトにおいては、入ってくるMoveActor()のコライダとして、AABBが円柱によって置き換えられる。リアルタイムの仮想的なシナリオは、ゲームのシナリオおよびアニメーションのシナリオを含む可能性があり、リアルタイムゲームのシナリオに適用される可能性があり、それらに限定されない。
【００１８】
各Componentシナリオオブジェクトは、Elementクラスのいくつかのオブジェクトを含み、Elementは、図4に示されるように、Componentクラスに含まれるElementクラスのオブジェクトである、配向された箱形、球、スフィル体(sphyl body)、および凸多面体をそれぞれ示すFKBoxElem、FKSphereElem、FKSphylElem、およびFKConvexElemを含む。Elementは、Componentオブジェクトの中ですべてが凸体であるコライダを示す。円柱コライダと凸体との間の衝突検出のステータスが、分離軸(separating axis)試験アルゴリズムを使用することによって計算される。分離軸試験アルゴリズムの理論的な基礎は、2つの凸体が互いに交わらない場合、2つの凸体の射影がやはり互いに交わらない軸が確かに見つかり得る。図5に示されるように、2つの凸体の射影は、同軸上にあり、互いに交わらない。
【００１９】
Actorクラスが、円柱コライダのメンバー変数を記憶するために追加される。この場合、Actorの円柱コライダはワールド座標系の垂直な円柱であり、Cylinderクラスを使用することによって表されると仮定される。図6は、実施形態における円柱コライダの概略図である。図6に示されるように、垂直な円柱は、Cylinderクラスを使用することによって表され、Cylinderクラスにおいて、水平な線62は、半径を表すために使用され、垂直な線64は、高さを表すために使用され、その値は、半分の高さである(すなわち、円柱コライダの高さの値の半分である)。
【００２０】
図7は、実施形態におけるリアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法の流れ図である。図7に示されるように、リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための方法は、図2の応用環境内で実行され、以下のステップを含む。
【００２１】
ステップ702:  仮想的なシナリオにおける仮想オブジェクトに対応する円柱コライダを円柱コライダと同心の予め設定された多角柱にコンバートする。
【００２２】
特に、仮想オブジェクトは、リアルタイムの仮想的なシナリオにおいて動的に実行される可能性があるキャラクターまたは物体である可能性がある。仮想オブジェクトは、円柱コライダとして構成される。コライダは、オブジェクト間の衝突が存在するかどうかを計算するように構成されたオブジェクト、つまり、衝突アルゴリズムの計算に実際に参加するオブジェクトである。
【００２３】
円柱コライダは、予め設定された多角柱にコンバートされ、予め設定された多角柱の垂直方向の中心軸は、円柱コライダの中心軸と同じである。予め設定された多角柱の中心は、円柱コライダの中央の点と同じであり、予め設定された多角柱の上面および下面の中心は、円柱コライダの上面および下面の中心と同じである。
【００２４】
予め設定された多角形は、正多角形である可能性がある。正多角形の辺の量は、5、6、7、8、9、16、32などである可能性があり、これらの数に限定されない。正多角形の辺の量が2のべき乗であるとき、たとえば、正多角形が八角形、十六角形、三十二角形、六十四角形などであるとき、コンピュータの処理は容易にされる。
【００２５】
リアルタイムの仮想的なシナリオは、リアルタイムゲームのシナリオ、リアルタイムアニメーションのシナリオなどである。リアルタイムゲームのシナリオは、実行されているゲームのシナリオである。リアルタイムアニメーションのシナリオは、実行されているアニメーションのシナリオである。衝突検出は、コライダの間で衝突が起こるかどうかを検出することである。衝突が起こった後、衝突応答が生成され、つまり、コライダが別のコライダと衝突した後、コライダは、元の移動方向に沿って移動し続けることができず、コライダの移動方向が、別のコライダを回避するように調整されるか、またはコライダが、別のコライダに当たって当たり応答(hit response)などを生成する。この実施形態において、衝突検出は、コライダが別のコライダと衝突することを防ぐために、コライダの移動方向が別のコライダを回避するように調整されることを主に示す。
【００２６】
コライダのサイズは、仮想的なシナリオにおける仮想オブジェクトのサイズに従って設定され得る。たとえば、仮想オブジェクトが球である場合、仮想オブジェクトに対応する円柱コライダの高さが球の直径に設定される可能性があり、円柱の半径が球の半径よりもわずかに大きく設定される可能性がある。
【００２７】
図8は、正八角柱の上面図である。図8は、円柱コライダの円柱が八角柱にコンバートされた後の八角柱の上面図を示す。外側の長方形は、円柱コライダのAABBである。
【００２８】
ステップ704:  凸体のローカル座標系内の予め設定された多角柱の位置を取得するために予め設定された多角柱を凸体のローカル座標系に変換する。
【００２９】
この実施形態において、円柱は、凸体Elementのローカル座標系に変換され、それは、中央の点を凸体のローカル座標系に変換しながら、元の3つの軸、すなわち、X軸、Y軸、およびZ軸を凸体のローカル座標系に実際に変換し、さらに、3つの軸、すなわち、X軸、Y軸、およびZ軸の変換結果に従って凸体のローカル座標系内に円柱コライダの位置を再構築すること、つまり、凸体のローカル座標系内の予め設定された多角柱の位置を得るために予め設定された多角柱を凸体のローカル座標系に変換することである。十六角柱である予め設定された多角柱が例として使用される場合、十六角柱に対応する32個の頂点の座標が、3つの軸、すなわち、X軸、Y軸、およびZ軸ならびに凸体のローカル座標系内の中央の点に対応するベクトルに従って計算され、18個の面および48個の辺が、32個の頂点に従って構成される。
【００３０】
座標系の変換は、ArbitraryAxisCylinderクラスを使用することによって処理され、ArbitraryAxisCylinderクラスは、凸体Elementのローカル座標系に変換されるように構成された変換行列メンバー変数を追加し、凸体のローカル座標系内の変換された円柱コライダの元のX軸単位ベクトル、Y軸単位ベクトル、およびZ軸単位ベクトルのベクトルが、回転、平行移動、または拡大もしくは縮小などの変換が円柱コライダに対して実行されたかどうかを迅速に判定するために使用される。ArbitraryAxisCylinderクラス内には、半径、高さ、新しいX軸、Y軸、およびZ軸、ならびに中央の点の変位が記録される。円柱コライダがどのように変換されるかは、射影の計算を早くするために3つの軸の変換結果に従って決定され得る。中央の点の変位は、射影の位置を計算するために使用され得る。
【００３１】
図9は、実施形態における凸体のローカル座標系内の予め設定された多角柱の位置を取得するために予め設定された多角柱を凸体のローカル座標系に変換するステップの特定の流れ図である。図9に示されるように、凸体のローカル座標系内の予め設定された多角柱の位置を取得するために予め設定された多角柱を凸体のローカル座標系に変換することは、以下を含む。
【００３２】
ステップ902:  凸体のローカル座標系内の予め設定された多角柱のX軸、Y軸、およびZ軸の単位ベクトルに対応するベクトルを取得するために予め設定された多角柱のX軸、Y軸、Z軸、および中央の点を凸体のローカル座標系に変換し、多角柱の2つの面、すなわち、上面および下面上の中央の点の座標を取得するために凸体のローカル座標系内のZ軸のベクトルに円柱コライダの正の半分の高さの値および負の半分の高さの値を乗算する。
【００３３】
特に、円柱コライダの半分の高さは、Heightによって表される。
【００３４】
ステップ904:  円柱コライダの半径を取得し、半径に対応するベクトル、凸体のローカル座標系内の円柱コライダのX軸、Y軸に従って、予め設定された多角柱の頂点が置かれる面の中央の点に対するそれらの頂点のオフセットを取得し、対応する頂点の座標を得るためにオフセットおよび中央の点の座標の和を取得する。
【００３５】
特に、円柱コライダの半径は、Rによって表される。三角関数によって、対応する中央の点の座標に対する十六角柱の上面および下面上の十六角形の頂点のオフセット、すなわち、上面の中央の点の座標に対する上面の16個の頂点のオフセット、および下面の中央の点の座標に対する下面の16個の頂点のオフセットを取得するために、凸体のローカル座標系内の円柱コライダの半径R、X軸、およびY軸のベクトルが互いに乗算される。対応する頂点の座標は、対応する中央の点の座標にオフセットを加算することによって取得され得る。
【００３６】
図10は、八角柱の頂点を取得する概略図である。図10に示されるように、1002は、底面の中央の点であり、1004は、底面の頂点のうちの1つである。
【００３７】
ステップ906:  各頂点の座標に従って凸体のローカル座標系内に予め設定された多角柱を再構築する。
【００３８】
特に、各頂点の座標が取得された後、上面を形成するために上面の頂点が順に接続され、下面を形成するために下面の頂点が順に接続され、多角柱の側面の辺を形成するために上面および底面の対応する頂点が互いに接続される。このようにして、32個の頂点が、18個の面および48個の辺を形成する。
【００３９】
円柱コライダのX軸、Y軸、およびZ軸を凸体のローカル座標系に変換し、円柱コライダの中央の点を凸体のローカル座標系に変換することによって、凸体のローカル座標系内の円柱コライダからコンバートされた予め設定された多角柱の位置が、凸体のローカル座標系内の円柱コライダのX軸、Y軸、およびZ軸に対応するベクトル、中央の点の座標、円柱コライダの半径および半分の高さなどに従って計算され、したがって、計算は単純であり、計算量は少なく、性能は高い。
【００４０】
せん断変換が円柱コライダに対して実行される場合、予め設定された多角柱のすべての頂点が円柱コライダのローカル座標系において計算された後、頂点が、行列演算を使用することによって凸体のローカル座標系に変換されることに留意されたい。せん断変換は、パターンに歪みを生じさせることを示す。
【００４１】
ステップ706:  凸体のローカル座標系内の予め設定された多角柱の位置に従って、予め設定された多角柱の各面の法線方向、予め設定された多角形の辺方向、および多角柱の側面の辺の辺方向を取得する。
【００４２】
特に、面の法線方向は、面に垂直な法線ベクトルである。辺方向は、辺の2つの末端の延びる方向を示し、方向は、同じである可能性がある。対応する面の法線方向は、予め設定された多角形の辺方向と多角柱の側面の辺の辺方向とのベクトル積を取得することによって取得される。
【００４３】
図11は、八角柱の法線方向を取得する概略図である。図11に示されるように、対応する辺1106が、頂点1102および頂点1104の取得された座標に従って計算される可能性があり、さらに、辺1106の辺方向が、取得され、辺方向は、辺の2つの末端が延びるとき、ランダムに延びる方向が辺の辺方向であることを示す。
【００４４】
ステップ708:  凸体の各面の法線方向および各辺方向を取得する。
【００４５】
特に、凸体は、配向された箱形または凸多面体である可能性がある。配向された箱形は、直方体、立方体などである。凸多面体は、多角柱などである可能性がある。
【００４６】
ステップ710:  凸体の各辺方向と予め設定された多角形の辺方向とのベクトル積、および凸体の各辺方向と多角柱の側面の辺の辺方向とのベクトル積を別に取得する。
【００４７】
特に、凸体の各辺方向と予め設定された多角形の辺方向とのベクトル積が、別に取得され、凸体の各辺方向と多角柱の側面の辺の辺方向とのベクトル積が、別に取得される。
【００４８】
ステップ712:  予め設定された多角柱の各面の法線方向、凸体の各面の法線方向、およびベクトル積のうちの1つまたは複数を1つまたは複数の試験軸として使用する。
【００４９】
特に、試験軸は、予め設定された多角柱の各面の法線方向、凸体の各面の法線方向、凸体の各辺方向と予め設定された多角柱の辺方向とのベクトル積、および凸体の各辺方向と予め設定された多角柱の側面の辺の辺方向とのベクトル積のうちの1つまたは複数を含む可能性がある。つまり、試験軸は、予め設定された多角柱の各面の法線方向、凸体の各面の法線方向、凸体の各辺方向と予め設定された多角柱の辺方向とのベクトル積、凸体の各辺方向と予め設定された多角柱の側面の辺の辺方向とのベクトル積、およびこれらのいくつかの組合せから選択される可能性がある。選択される試験軸が少なすぎる場合、交わりでないものが誤って交わりとして特定される可能性があり、選択される試験軸が多すぎる場合、性能が影響を受ける可能性がある。
【００５０】
ステップ714:  各試験軸および凸体のローカル座標系内の予め設定された多角柱の位置に従って試験軸上の円柱コライダの射影の長さおよび射影の位置を取得し、各試験軸上の凸体の射影を取得する。
【００５１】
この実施形態において、凸体のローカル座標系に変換された後、円柱コライダからコンバートされる予め設定された多角柱が円柱コライダではない場合、凸体のローカル座標系内の予め設定された多角柱の各頂点が射影され、円柱コライダの射影の長さを得るために、差を得るために極値(extreme value)が設定される。
【００５２】
特に、十六角柱を例として使用すると、凸体のローカル座標系内の十六角柱の32個の頂点が射影され、極大の頂点(maximum extreme vertex)および極小の頂点(minimum extreme vertex)を取得するために極値が設定され、射影の後の極大の頂点と極小の頂点との間の差の絶対値が円柱コライダの射影の長さとして取得される。
【００５３】
凸体のローカル座標系に変換された後、円柱コライダからコンバートされる予め設定された多角柱が引き続き円柱コライダである場合、円柱コライダの半径および半分の高さ、凸体のローカル座標系に変換された円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトル(coordinate base vector)、ならびに凸体のローカル座標系内の試験軸の試験軸方向が、円柱コライダの射影の長さを計算するために取得される。
【００５４】
特に、円柱コライダに対して一様でない拡大縮小もせん断変換も実行されなかった場合、つまり、変換された後、円柱コライダが引き続き円柱コライダである場合、射影の長さは、GetExtentOnAxisForRealCylinder()関数を使用することによって計算される。
【００５５】
FArbitraryAxisCylinder::GetExtentOnAxis()関数においては、変換された後に引き続き円柱である円柱コライダに関して、GetExtentOnAxis()が、射影の長さを計算するためにGetExtentOnAxisForRealCylinder()を呼び出す。Mが円柱を円柱のローカル座標系から凸体Elementのローカル座標系に変換する行列を表す場合、M-1は、円柱を凸体Elementのローカル座標系から円柱のローカル座標系に変換する行列である。入ってくる試験軸InAxisが、凸体Elementのローカル座標系内にある。したがって、L=InAxis*M-1である場合、Lは、円柱のローカル座標系内の試験軸の試験軸方向である。円柱コライダの3つの基底ベクトルが凸体Elementのローカル座標系に変換された後の(3つのメンバーX、Y、およびZを含む)座標基底ベクトルを表すためにCTが使用され、アルゴリズムは式(1)のとおりである。
【００５６】
【数１】
0006480606.tif 000002
【００５７】
式(1)において、Rは、円柱コライダの半径を表し、L.xは、Lのx成分を表し、L.yは、Lのy成分を表し、|Lz|は、Lのz成分の絶対値であり、
【００５８】
【数２】
0006480606.tif 000003
【００５９】
は、CTのX基底ベクトルの長さを表し、
【００６０】
【数３】
0006480606.tif 000004
【００６１】
は、CTのY基底ベクトルの長さを表し、
【００６２】
【数４】
0006480606.tif 000005
【００６３】
は、CTのZ基底ベクトルの長さを表し、Hは、円柱コライダの半分の高さ(すなわち、高さの半分)を表す。
【００６４】
凸体のローカル座標系に変換された後、円柱コライダからコンバートされる予め設定された多角柱が引き続き円柱コライダである場合、円柱コライダの射影の長さは、以下のプロセス、つまり、円柱コライダの3つの基底ベクトルを凸体Elementのローカル座標系に変換することによって取得される座標基底ベクトルのX基底ベクトルの長さおよびY基底ベクトルの長さのうちの大きな方の値を取得し、さらに、大きな方の値に円柱コライダの半径を乗算し、さらに、積に、円柱のローカル座標系の軸方向の試験軸のx成分およびy成分の平方根を乗算して第1の積を取得し、円柱コライダの3つの基底ベクトルを凸体Elementのローカル座標系に変換することによって取得される座標基底ベクトルのZ基底ベクトルの長さに円柱コライダの半分の高さを乗算し、さらに、積に、円柱のローカル座標系内の試験軸の試験軸方向のz成分の絶対値を乗算して第2の積の値を取得し、第1の積の値と第2の積の値との和を円柱コライダの射影の長さとして取得するプロセスにおいて計算によって取得され得る。
【００６５】
さらに、試験軸が円柱コライダの垂直軸と並行である場合、凸体のローカル座標系に変換される円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトルのZ基底ベクトルの長さと半分の高さとの積が、円柱コライダの射影の長さとして取得される。
【００６６】
特に、
【００６７】
【数５】
0006480606.tif 000006
【００６８】
が、円柱コライダの射影の長さとして使用される。
【００６９】
さらに、試験軸が円柱コライダの垂直軸に垂直である場合、凸体のローカル座標系に変換される円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトルのX基底ベクトルの長さおよびY基底ベクトルの長さのうちの大きな方の値が取得され、さらに、大きな方の値と円柱コライダの半径との積が、円柱コライダの射影の長さとして使用される。
【００７０】
特に、
【００７１】
【数６】
0006480606.tif 000007
【００７２】
が、円柱コライダの射影の長さとして使用される。理論上、
【００７３】
【数７】
0006480606.tif 000008
【００７４】
は
【００７５】
【数８】
0006480606.tif 000009
【００７６】
と等しいが、実際の計算においては、行列演算の精度の誤差が存在する可能性がある。衝突検出の結果に検出漏れがないことを保証するために、通常、2つのうちの大きな方の値が選択される。
【００７７】
ステップ716:  円柱コライダおよび凸体の射影が各試験軸上で互いに交わる場合、円柱コライダと凸体との間の衝突が存在すると判定する。
【００７８】
特に、円柱コライダおよび凸体の射影が各試験軸上で互いに交わる場合、円柱コライダと凸体との間に衝突が存在すると判定され、円柱コライダおよび凸体の射影が互いに交わらない試験軸が存在する場合、円柱コライダと凸体との間に衝突がないと判定される可能性がある。
【００７９】
リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための上述の方法では、リアルタイムの仮想的なシナリオにおいて、円柱コライダとしての仮想オブジェクトと凸体との間で衝突検出が実行され、衝突検出は、コライダの衝突を避けるために実行され、AABBと凸体との間で実行される元の衝突検出を置き換える。凸体において、円柱コライダは、比較的短い距離だけ移動すれば十分である。移動距離が短くされるので、移動の効率が改善され、操作のスムーズさも改善される。円柱コライダを予め設定された多角柱にコンバートすることによって、円柱コライダの面の法線方向および辺方向が、試験軸の選択を容易にするために取得され得る。試験軸の適切な選択、ならびに試験軸上の円柱コライダおよび凸体の射影の交差ステータスによって、円柱コライダと凸体との間の衝突ステータスが決定され、したがって、決定の精度が改善される。
【００８０】
実施形態において、予め設定された多角形は、円柱コライダの底面に内接する正多角形である。
【００８１】
特に、正多角形の辺の量は、5、6、7、8、9、16、32等である可能性があり、これらの数に限定されない。正多角形の辺の量が2のべき乗であるとき、たとえば、正多角形が八角形、十六角形、三十二角形、六十四角形などであるとき、コンピュータの処理は容易にされる。正多角形は、計算を簡素化し、計算リソースを節約することができる。
【００８２】
さらに、多角形が偶数個の辺を有する正多角形である場合、予め設定された多角形の辺方向が取得されるとき、中心に基づいて非対称である辺方向が、予め設定された多角柱の上面および下面上の2つの予め設定された多角形のうちの予め設定された多角形から選択され、多角柱の側面の辺の横方向を取得するとき、1つの側面の辺の横方向が選択される。
【００８３】
たとえば、正十六角柱である予め設定された多角柱を例として使用すると、正十六角柱の側面の辺はすべて互いに平行であり、側面の辺の辺方向を取得するために1つの側面の辺を選択することのみが必要とされる。正十六角柱の上面および下面は、互いに平行であり、したがって、1つの底面の辺方向を選択することのみが必要とされる。各底面に関して、十六角形は中心対称でもあり、したがって、8つの辺の辺方向を取得することのみが必要とされる。
【００８４】
図12は、円柱コライダを使用する衝突検出において通常のアルゴリズムを使用した効果および理論上の結果の概略図である。図12に示されるように、左の図は、通常のアルゴリズムに従って円柱コライダを使用することによって衝突検出を実行することを示す。円柱コライダが黒いコライダの底辺に沿って移動することができるように円柱コライダ全体を移動させることも必要とされ、右の図は、リアルタイムの仮想的なシナリオにおいてコライダの間の衝突を検出するための上述の方法を使用した後、円柱コライダを使用することによって実現され得る理論上の結果を示す。円柱コライダの移動プロセスにおいて、移動方向は比較的短く、移動の効率は高く、操作はスムーズである。
【００８５】
リアルタイムの仮想的なシナリオにおいてコライダの間の衝突を検出するための方法の実施プロセスが、特定の応用のシナリオを参照して下で説明される。リアルタイムゲームのシナリオを例として使用すると、円柱コライダが仮想的なキャラクターであり、凸体が壁体であり、図12を参照すると、円が円柱の2次元射影であり、ブロック体(block body)が凸体の2次元射影である。衝突検出プロセスは、
【００８６】
(1)仮想的なシナリオにおける仮想オブジェクトに対応する円柱コライダを円柱コライダと同心の予め設定された多角柱にコンバートすることと、
【００８７】
(2)凸体のローカル座標系内の予め設定された多角柱の位置を取得するために予め設定された多角柱を凸体のローカル座標系に変換することと、
【００８８】
(3)凸体のローカル座標系内の予め設定された多角柱の位置に従って、予め設定された多角柱の各面の法線方向、予め設定された多角形の辺方向、および多角柱の側面の辺の辺方向を取得することと、
【００８９】
(4)凸体の各面の法線方向および各辺方向を取得することと、
【００９０】
(5)凸体の各辺方向と予め設定された多角形の辺方向とのベクトル積、および凸体の各辺方向と多角柱の側面の辺の辺方向とのベクトル積を別に取得することと、
【００９１】
(6)予め設定された多角柱の各面の法線方向、凸体の各面の法線方向、およびベクトル積のうちの1つまたは複数を1つまたは複数の試験軸として使用することと、
【００９２】
(7)各試験軸および凸体のローカル座標系内の予め設定された多角柱の位置に従って試験軸上の円柱コライダの射影の長さおよび射影の位置を取得し、各試験軸上の凸体の射影を取得することと、
【００９３】
(8)円柱コライダおよび凸体の射影が各試験軸上で互いに交わる場合、円柱コライダと凸体との間の衝突が存在すると判定することとを含む。
【００９４】
衝突検出が円柱コライダによって射影された円と凸体との間で実行される場合、図12に示されるように、円柱コライダの移動経路が取得される。
【００９５】
図13は、実施形態におけるリアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための装置の構造のブロック図である。図13に示されるように、リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための装置は、コンバートモジュール1302、変換モジュール1304、第1の取得モジュール1306、第2の取得モジュール1308、ベクトル積取得モジュール1310、試験軸取得モジュール1312、射影モジュール1314、および判定モジュール1316を含む。
【００９６】
コンバートモジュール1302は、仮想的なシナリオにおける仮想オブジェクトに対応する円柱コライダを円柱コライダと同心の予め設定された多角柱にコンバートするように構成される。
【００９７】
特に、仮想オブジェクトは、リアルタイムの仮想的なシナリオにおいて動的に実行される可能性があるキャラクターまたは物体である可能性がある。仮想オブジェクトは、円柱コライダとして構成される。コライダは、オブジェクト間の衝突が存在するかどうかを計算するように構成されたオブジェクト、つまり、衝突アルゴリズムの計算に実際に参加するオブジェクトである。
【００９８】
円柱コライダは、予め設定された多角柱にコンバートされ、予め設定された多角柱の垂直方向の中心軸は、円柱コライダの中心軸と同じである。予め設定された多角柱の中心は、円柱コライダの中央の点と同じであり、予め設定された多角柱の上面および下面の中心は、円柱コライダの上面および下面の中心と同じである。
【００９９】
予め設定された多角形は、正多角形である可能性がある。正多角形の辺の量は、5、6、7、8、9、16、32などである可能性があり、これらの数に限定されない。正多角形の辺の量が2のべき乗であるとき、たとえば、正多角形が八角形、十六角形、三十二角形、六十四角形などであるとき、コンピュータの処理は容易にされる。
【０１００】
変換モジュール1304は、凸体のローカル座標系内の予め設定された多角柱の位置を取得するために予め設定された多角柱を凸体のローカル座標系に変換するように構成される。
【０１０１】
この実施形態において、円柱は、凸体Elementのローカル座標系に変換され、それは、中央の点を凸体のローカル座標系に変換しながら、元の3つの軸、すなわち、X軸、Y軸、およびZ軸を凸体のローカル座標系に実際に変換し、さらに、3つの軸、すなわち、X軸、Y軸、およびZ軸の変換結果に従って凸体のローカル座標系内に円柱コライダの位置を再構築すること、つまり、凸体のローカル座標系内の予め設定された多角柱の位置を得るために予め設定された多角柱を凸体のローカル座標系に変換することである。十六角柱である予め設定された多角柱が例として使用される場合、十六柱に対応する32個の頂点の座標が、3つの軸、すなわち、X軸、Y軸、およびZ軸ならびに凸体のローカル座標系内の中央の点に対応するベクトルに従って計算され、18個の面および48個の辺が、32個の頂点に従って構成される。
【０１０２】
この実施形態において、変換モジュール1304は、凸体のローカル座標系内の予め設定された多角柱のX軸、Y軸、およびZ軸の単位ベクトルに対応するベクトルを取得するために予め設定された多角柱のX軸、Y軸、Z軸、および中央の点を凸体のローカル座標系に変換し、多角柱の2つの面、すなわち、上面および下面上の中央の点の座標を取得するために凸体のローカル座標系内のZ軸のベクトルに円柱コライダの正の半分の高さの値および負の半分の高さの値を乗算し、円柱コライダの半径を取得し、半径に対応するベクトル、凸体のローカル座標系内の円柱コライダのX軸、Y軸に従って、予め設定された多角柱の頂点が置かれる面の中央の点に対するそれらの頂点のオフセットを取得し、対応する頂点の座標を得るためにオフセットおよび中央の点の座標の和を取得し、各頂点の座標に従って凸体のローカル座標系内に予め設定された多角柱を再構築するようにさらに構成される。
【０１０３】
特に、円柱コライダの半径は、Rによって表される。三角関数によって、対応する中央の点の座標に対する十六角柱の上面および下面上の十六角形の頂点のオフセット、すなわち、上面の中央の点の座標に対する上面の16個の頂点のオフセット、および下面の中央の点の座標に対する下面の16個の頂点のオフセットを取得するために、凸体のローカル座標系内の円柱コライダの半径R、X軸、およびY軸のベクトルが互いに乗算される。対応する頂点の座標は、対応する中央の点の座標にオフセットを加算することによって取得され得る。特に、各頂点の座標が取得された後、上面を形成するために上面の頂点が順に接続され、下面を形成するために下面の頂点が順に接続され、多角柱の側面の辺を形成するために上面および底面の対応する頂点が互いに接続される。このようにして、32個の頂点が、18個の面および48個の辺を形成する。
【０１０４】
円柱コライダのX軸、Y軸、およびZ軸を凸体のローカル座標系に変換し、円柱コライダの中央の点を凸体のローカル座標系に変換することによって、凸体のローカル座標系内の円柱コライダからコンバートされた予め設定された多角柱の位置が、凸体のローカル座標系内の円柱コライダのX軸、Y軸、およびZ軸に対応するベクトル、中央の点の座標、円柱コライダの半径および半分の高さなどに従って計算され、したがって、計算は単純であり、計算量は少なく、性能は高い。
【０１０５】
第1の取得モジュール1306は、凸体のローカル座標系内の予め設定された多角柱の位置に従って、予め設定された多角柱の各面の法線方向、予め設定された多角形の辺方向、および多角柱の側面の辺の辺方向を取得するように構成される。
【０１０６】
特に、面の法線方向は、面に垂直な法線ベクトルである。辺方向は、辺の2つの末端の延びる方向を示し、方向は、同じである可能性がある。対応する面の法線方向は、予め設定された多角形の辺方向と多角柱の側面の辺の辺方向とのベクトル積を取得することによって取得される。
【０１０７】
第2の取得モジュール1308は、凸体の各面の法線方向および各辺方向を取得するように構成される。
【０１０８】
特に、凸体は、配向された箱形または凸多面体である可能性がある。配向された箱形は、直方体、立方体などである。凸多面体は、多角柱などである可能性がある。
【０１０９】
ベクトル積取得モジュール1310は、凸体の各辺方向と予め設定された多角形の辺方向とのベクトル積、および凸体の各辺方向と多角柱の側面の辺の辺方向とのベクトル積を別に取得するように構成される。
【０１１０】
特に、凸体の各辺方向と予め設定された多角形の辺方向とのベクトル積が、別に取得され、凸体の各辺方向と多角柱の側面の辺の辺方向とのベクトル積が、別に取得される。
【０１１１】
試験軸取得モジュール1312は、予め設定された多角柱の各面の法線方向、凸体の各面の法線方向、およびベクトル積を試験軸として使用するように構成される。
【０１１２】
特に、試験軸は、予め設定された多角柱の各面の法線方向、凸体の各面の法線方向、凸体の各辺方向と予め設定された多角柱の辺方向とのベクトル積、および凸体の各辺向と予め設定された多角柱の側面の辺の辺方向とのベクトル積のうちの1つまたは複数を含む可能性がある。
【０１１３】
射影モジュール1314は、各試験軸および凸体のローカル座標系内の予め設定された多角柱の位置に従って試験軸上の円柱コライダの射影の長さおよび射影の位置を取得し、各試験軸上の凸体の射影を取得するように構成される。
【０１１４】
この実施形態において、射影モジュール1314は、凸体のローカル座標系に変換された後、円柱コライダからコンバートされる予め設定された多角柱が円柱コライダではない場合、凸体のローカル座標系内の予め設定された多角柱の各頂点を射影し、円柱コライダの射影の長さを得るために、差を得るために極値を設定するようにさらに構成される。
【０１１５】
特に、十六角柱を例として使用すると、凸体のローカル座標系内の十六角柱の32個の頂点が射影され、極大の頂点および極小の頂点を取得するために極値が設定され、射影の後の極大の頂点と極小の頂点との間の差の絶対値が円柱コライダの射影の長さとして取得される。
【０１１６】
射影モジュール1314は、凸体のローカル座標系に変換された後、円柱コライダからコンバートされる予め設定された多角柱が引き続き円柱コライダである場合、円柱コライダの半径および半分の高さ、凸体のローカル座標系に変換された円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトル、ならびに凸体のローカル座標系内の試験軸の試験軸方向を、円柱コライダの射影の長さを計算するために取得するようにさらに構成される。
【０１１７】
特に、円柱コライダに対して一様でない拡大縮小もせん断変換も実行されなかった場合、つまり、変換された後、円柱コライダが引き続き円柱コライダである場合、射影の長さは、GetExtentOnAxisForRealCylinder()関数を使用することによって計算される。
【０１１８】
FArbitraryAxisCylinder::GetExtentOnAxis()関数においては、変換された後に引き続き円柱である円柱コライダに関して、GetExtentOnAxis()が、射影の長さを計算するためにGetExtentOnAxisForRealCylinder()を呼び出す。Mが円柱を円柱のローカル座標系から凸体Elementのローカル座標系に変換する行列を表す場合、M-1は、円柱を凸体Elementのローカル座標系から円柱のローカル座標系に変換する行列である。入ってくる試験軸InAxisが、凸体Elementのローカル座標系内にある。したがって、L=InAxis*M-1である場合、Lは、円柱のローカル座標系内の試験軸の試験軸方向である。円柱コライダの3つの基底ベクトルが凸体Elementのローカル座標系に変換された後の(3つのメンバーX、Y、およびZを含む)座標基底ベクトルを表すためにCTが使用され、アルゴリズムは式(1)のとおりである。
【０１１９】
【数９】
0006480606.tif 000010
【０１２０】
式(1)において、Rは、円柱コライダの半径を表し、L.xは、Lのx成分を表し、L.yは、Lのy成分を表し、|Lz|は、Lのz成分の絶対値であり、
【０１２１】
【数１０】
0006480606.tif 000011
【０１２２】
は、CTのX基底ベクトルの長さを表し、
【０１２３】
【数１１】
0006480606.tif 000012
【０１２４】
は、CTのY基底ベクトルの長さを表し、
【０１２５】
【数１２】
0006480606.tif 000013
【０１２６】
は、CTのZ基底ベクトルの長さを表し、Hは、円柱コライダの半分の高さ(すなわち、高さの半分)を表す。
【０１２７】
凸体のローカル座標系に変換された後、円柱コライダからコンバートされる予め設定された多角柱が引き続き円柱コライダである場合、円柱コライダの射影の長さは、以下のプロセス、つまり、円柱コライダの3つの基底ベクトルを凸体Elementのローカル座標系に変換することによって取得される座標基底ベクトルのX基底ベクトルの長さおよびY基底ベクトルの長さのうちの大きな方の値を取得し、さらに、大きな方の値に円柱コライダの半径を乗算し、さらに、積に、円柱のローカル座標系の軸方向の試験軸のx成分およびy成分の平方根を乗算して第1の積を取得し、円柱コライダの3つの基底ベクトルを凸体Elementのローカル座標系に変換することによって取得される座標基底ベクトルのZ基底ベクトルの長さに円柱コライダの半分の高さを乗算し、さらに、積に、円柱のローカル座標系内の試験軸の試験軸方向のz成分の絶対値を乗算して第2の積の値を取得し、第1の積の値と第2の積の値との和を円柱コライダの射影の長さとして取得するプロセスにおいて計算によって取得され得る。
【０１２８】
さらに、試験軸が円柱コライダの垂直軸と並行である場合、凸体のローカル座標系に変換される円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトルのZ基底ベクトルの長さと半分の高さとの積が、円柱コライダの射影の長さとして取得される。
【０１２９】
特に、
【０１３０】
【数１３】
0006480606.tif 000014
【０１３１】
が、円柱コライダの射影の長さとして使用される。
【０１３２】
さらに、試験軸が円柱コライダの垂直軸に垂直である場合、凸体のローカル座標系に変換される円柱コライダの3つの軸、すなわち、X軸、Y軸、およびZ軸の基底ベクトルに対応する座標基底ベクトルのX基底ベクトルの長さおよびY基底ベクトルの長さのうちの大きな方の値が取得され、さらに、大きな方の値と円柱コライダの半径との積が、円柱コライダの射影の長さとして使用される。
【０１３３】
特に、
【０１３４】
【数１４】
0006480606.tif 000015
【０１３５】
が、円柱コライダの射影の長さとして使用される。理論上、
【０１３６】
【数１５】
0006480606.tif 000016
【０１３７】
は
【０１３８】
【数１６】
0006480606.tif 000017
【０１３９】
と等しいが、実際の計算においては、行列演算の精度の誤差が存在する可能性がある。衝突検出の結果に検出漏れがないことを保証するために、通常、2つのうちの大きな方の値が選択される。
【０１４０】
判定モジュール1316は、円柱コライダおよび凸体の射影が各試験軸上で互いに交わる場合、円柱コライダと凸体との間の衝突が存在すると判定するように構成される。
【０１４１】
特に、円柱コライダおよび凸体の射影が各試験軸上で互いに交わる場合、円柱コライダと凸体との間に衝突が存在すると判定され、円柱コライダおよび凸体の射影が互いに交わらない試験軸が存在する場合、円柱コライダと凸体との間に衝突がないと判定される可能性がある。
【０１４２】
リアルタイムの仮想的なシナリオにおいて円柱コライダと凸体との間の衝突を検出するための上述の装置では、リアルタイムの仮想的なシナリオにおいて、円柱コライダとしての仮想オブジェクトと凸体との間で衝突検出が実行され、衝突検出は、コライダの衝突を避けるために実行され、AABBと凸体との間で実行される元の衝突検出を置き換える。凸体において、円柱コライダは、比較的短い距離だけ移動すれば十分である。移動距離が短くされるので、移動の効率が改善され、操作のスムーズさも改善される。円柱コライダを予め設定された多角柱にコンバートすることによって、円柱コライダの面の法線方向および辺方向が、試験軸の選択を容易にするために取得され得る。試験軸の適切な選択、ならびに試験軸上の円柱コライダおよび凸体の射影の交差ステータスによって、円柱コライダと凸体との間の衝突ステータスが決定され、したがって、決定の精度が改善される。
【０１４３】
実施形態において、予め設定された多角形は、円柱コライダの底面に内接する正多角形である。多角形が偶数個の辺を有する正多角形である場合、予め設定された多角形の辺方向が取得されるとき、中心に基づいて非対称である辺方向が、予め設定された多角柱の上面および下面上の2つの予め設定された多角形のうちの予め設定された多角形から選択され、多角柱の側面の辺の横方向を取得するとき、1つの側面の辺の横方向が選択される。
【０１４４】
たとえば、正十六角柱である予め設定された多角柱を例として使用すると、正十六角柱の側面の辺はすべて互いに平行であり、側面の辺の辺方向を取得するために1つの側面の辺を選択することのみが必要とされる。正十六角柱の上面および下面は、互いに平行であり、したがって、1つの底面の辺方向を選択することのみが必要とされる。各底面に関して、十六角形は中心対称でもあり、したがって、8つの辺の辺方向を取得することのみが必要とされる。
【０１４５】
当業者は、上述の方法の実施形態のプロセスのすべてまたは一部が、関連するハードウェアに命令するコンピュータプログラムによって実装され得ることを理解するであろう。上述のプログラムは、不揮発性コンピュータ可読ストレージ媒体に記憶され得る。プログラムが実行されるとき、上述の方法の実施形態のステップが実行される。ストレージ媒体は、磁気ディスク、光ディスク、読み出し専用メモリ(ROM)などである可能性がある。
【０１４６】
上の実施形態は、本発明のいくつかの実装を表すに過ぎず、特に詳細に説明されているが、本開示の範囲に対する限定と解釈されるべきでない。当業者が本開示の概念を逸脱することなく変更および改善をさらに行い得ること、およびこれらがすべて本開示の保護範囲内に入ることに留意されたい。したがって、本開示の特許の保護範囲は、添付の請求項に従うべきである。
【符号の説明】
【０１４７】
62  水平な線
64  垂直な線
110  コライダ
120  角
210  端末
220  サーバ
1002  底面の中央の点
1004  底面の頂点
1102  頂点
1104  頂点
1106  辺
1302  コンバートモジュール
1304  変換モジュール
1306  第1の取得モジュール
1308  第2の取得モジュール
1310  ベクトル積取得モジュール
1312  試験軸取得モジュール
1314  射影モジュール
1316  判定モジュール
【図１】
0006480606.tif 000018
【図２】
0006480606.tif 000019
【図３Ａ】
0006480606.tif 000020
【図３Ｂ】
0006480606.tif 000021
【図４】
0006480606.tif 000022
【図５】
0006480606.tif 000023
【図６】
0006480606.tif 000024
【図７】
0006480606.tif 000025
【図８】
0006480606.tif 000026
【図９】
0006480606.tif 000027
【図１０】
0006480606.tif 000028
【図１１】
0006480606.tif 000029
【図１２】
0006480606.tif 000030
【図１３】
0006480606.tif 000031