いつもお世話になっております。
MMDモデルを使用したゲームを制作しているのですが、アクションゲームで動きが大きいためか、
MMDモデルの衣装が物理演算で頻繁に破綻してしまいます。
そこで、もし破綻を検出できれば、物理演算にリセット掛けることで自動的に破綻を防げると考えました。
破綻の検出には、MV1GetMeshMaxPosition を使用してMMDモデルの全メッシュをスキャンし、
そのY座標の最大値と最小値の差でMMDモデルの現在の大きさを調べ、
大きさが異常だったら(物理演算が破綻して衣装が異常に巨大化したら)破綻とみなす・・という方法を考えました。
プログラムを抜粋すると、以下のようになります。
// 最大値/最小値初期化
max_y = -10000.0f ;
min_y = 10000.0f ;
// モデルに含まれるメッシュの数
hand_num = mmd_handle[mmd_select] ;
mesh_num = MV1GetMeshNum( hand_num ) ;
// メッシュの数だけループ
for( cc1 = 0 ; cc1 < mesh_num ; cc1 ++ )
{
// メッシュに含まれる頂点の最大座標値
zahyo_pos = MV1GetMeshMaxPosition( hand_num, cc1 ) ;
if ( zahyo_pos.y > max_y ) max_y = zahyo_pos.y ;
// メッシュに含まれる頂点の最小座標値
zahyo_pos = MV1GetMeshMinPosition( hand_num, cc1 ) ;
if ( zahyo_pos.y < min_y ) min_y = zahyo_pos.y ;
}
// サイズ判定
mmd_check_data = max_y - min_y ;
// この値が極端に大きかったら、破綻とみなす
しかしこの方法では、物理演算が破綻して表示されている時でも、
MMDモデルのサイズは異常値になりません。
そこで質問なのですが、
Q1.物理演算が破綻して画面いっぱいに表示されるほど衣装が巨大になっていても、
MV1GetMeshMaxPosition には、巨大化した衣装の座標は反映されないのでしょうか?
Q2.物理演算が破綻して衣装が巨大化した時に、その座標を検出できる関数はありませんか?
以上、ご返信いただければ幸いです。