模型的碰撞偵測

Live2D中沒有碰撞偵測的功能
但是,因為可以取得多邊形的頂點資訊,因此可以透過外部進行碰撞偵測。



如需頂點的index,基本上必須在Modeler上確認。
請參考上面的連結中「頂點index的確認方法」。
如要在程式中取得,請參考這裡

要進行碰撞偵測需使用ALive2DModel class中的getTransformedPoints函數。
這個是取得繪圖資訊中頂點的函數。
無法取得時回傳NULL。第二引數可取得頂點數。

頂點的排列方法,各平台可能會不同。
DEF::VERTEX_OFFSET裡存放著點列中x為首的offset值。
DEF::VERTEX_STEP存放著1點中含有的點數。
一般以下列方式取得。

[x1,y1,x2,y2...]

此時
DEF::VERTEX_OFFSET為0、
DEF::VERTEX_STEP為x和y這2個,故值為2


此外使用前請先呼叫update函數1次以上。


頂點取得例
int pointCount = 0 ;
int drawIndex = live2DModel->getDrawDataIndex("D_REF.HEAD") ;//Modeler中設定的ID
float* points = live2DModel->getTransformedPoints( drawIndex , &pointCount ) ;

if( ! points )return;//取得失敗。考量ID寫錯或編寫設定疏失等情形。

//live2d::DEF 於 DEF.h 中記載
int offset = live2d::DEF::VERTEX_OFFSET ;//點列中x開始的offset
int step = live2d::DEF::VERTEX_STEP ; //1點中所包含的點數目

for( int i = 0 ; i < pointCount ; i++ )
{
    int xi = i*step + offset   ;
    int yi = i*step + offset+1 ;
    printf("%5.1f ,%5.1f  " , points[xi], points[yi]) ;
}



サブページ (1): 取得頂點index
コメント