모델의 충돌 판정

Live2D에는 충돌 판정 기능 기본적으로 제공하지 않습니다.
하지만 모델의 정점 정보를 가져올 수 있기 때문에 충돌 판정을 구현할 수 있습니다.



정점의 인덱스가 필요한 경우 기본적으로는 Modeler에서 확인해야합니다.
위의 URL에 「정점의 인덱스 확인 방법」을 참고해주세요.
프로그램에서 가져올 수 있는 방법은 여기를 참고해주세요.

충돌 판정을 하기 위해서는 ALive2DModel 클래스의 getTransformedPoints함수를 이용합니다.
이것은 렌더링에 사용되는 정점을 가져오는 함수입니다.
가져올 수 없는 경우에는 NULL을 반환합니다. 두번째 인수로는 정점의 개수를 가져올 수 있습니다.

float형 배열에서 정점 구성 요소(위치, uv 등)는 플랫폼별로 차이가 있습니다.
DEF::VERTEX_OFFSET은 float형 배열에서 위치 x가 기록 되어있는 오프셋을 나타냅니다.
DEF::VERTEX_STEP은 정점 하나의 크기를 나타냅니다.
정점 배열을 가져오면 일반적으로 아래의 형식입니다.

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

이 경우
DEF::VERTEX_OFFSET은 0이고
DEF::VERTEX_STEP은 x와 y뿐이므로 2입니다.


또한 정점 정보를 가져오기 전에 update함수를 한 번 이상 호출하세요.


정점 정보를 가져오는 예
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가 시작하는 곳까지 오프셋
int step = live2d::DEF::VERTEX_STEP ; // 정점 구조체의 크기

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): 정점 인덱스 가져오기
Comments