파라미터 조작

파라미터를 설정한다
파라미터 값은 일반적으로 모션에서 설정합니다만, 직접 파라미터 값을 설정하는 것도 가능합니다.
파라미터를 조작하는 방법에는 세 가지가 있습니다.

1. 직접 설정
setParamFloat함수를 이용합니다.
첫번째 인수는 파라미터의 ID, 두번째 인수는 설정할 값, 세번째 인수는 가중치입니다.
가중치는 생략할 수 있으며 생략하면 1로 전달됩니다.
예를들어 가중치를 0.5로 하면 파라미터의 이전 값과 5:5로 섞어서 설정하게 됩니다.


live2DModel->setParamFloat( "PARAM_ANGLE_X", 30 ,1 );//PARAM_ANGLE_X을 30으로 설정

2. 현재 값에 더하거나 빼서 설정
addToParamFloat함수를 이용합니다.
인수는 setParamFloat와 같습니다.
전달 받은 값을 기존 값에 더하는 것이 차이입니다.


live2DModel->addToParamFloat( "PARAM_ANGLE_X", 1, 1);//PARAM_ANGLE_X에 1을 더함


3. 현재 값에 곱해서 설정
multParamFloat함수를 이용합니다.
인수는 setParamFloat와 같습니다.
전달 받은 값을 기존 값에 곱하는 것이 차이입니다.


live2DModel->multParamFloat( "PARAM_ANGLE_X", 2, 1);//PARAM_ANGLE_X의 값을 2배로 함


또한, 현재 파라미터 값을 가져오기 위해서는 getParamFloat함수를 이용합니다.

파라미터 인덱스를 이용한 설정

파라미터의 ID를 지정하기 위해서는 "PARAM_ANGLE_X"와 같은 문자열을 이용한다고 설명했습니다만
인덱스를 이용해 지정하는 방법도 있습니다.
자주 이용하는 파라미터에 대해서는 인덱스를 사용하는 것이 성능 향상에 도움이 됩니다.
파라미터의 인덱스는 getParamIndex함수를 호출해 가져올 수 있습니다.


//초기화 (파라미터 인덱스 취득)
int paramAngleX;
paramAngleX = live2DModel->getParamIndex( "PARAM_ANGLE_X" );

//인덱스를 이용해 파라미터 설정
live2DModel->setParamFloat( paramAngleX, 30 , 1);


파라미터 보존

모델의 현재 파라미터 값을 일시적으로 보존하기 위해서는 saveParam함수를 이용합니다.
이 함수를 호출하면 파라미터의 모든 값을 일시적으로 보존합니다, 그 후 loadParam함수를 호출하여 보존된 파라미터들을 복구할 수 있습니다.


// 파라미터를 30으로 설정
live2DModel->setParamFloat( "PARAM_ANGLE_X", 30 ,1 );

// 모든 파라미터를 보존
live2DModel->saveParam();

// 파라미터를 0으로 설정
live2DModel->setParamFloat( "PARAM_ANGLE_X", 0 ,1 );

// output: value = 0
printf("value = %f",live2DModel.getParamFloat( "PARAM_ANGLE_X" ) );

// 이전에 saveParam로 보존한 파라미터들을 복구
live2DModel->loadParam();

// output: value = 30
printf("value = %f",live2DModel.getParamFloat( "PARAM_ANGLE_X" ) );

파츠 투명도 설정

파츠의 투명도를 설정하기 위해서는 setPartsOpacity 함수, 투명도를 가져오기 위해서는 getPartsOpacity 함수를 이용합니다.


// 얼굴 파츠의 투명도를 0으로 설정
live2DModel->setPartsOpacity( "PARTS_01_FACE_001",0.5 );


파라미터를 적용하는 타이밍의 비용

파라미터를 설정할 때마다 파라미터에 영향을 받는 정점을 새로 계산하지 않습니다.
정점의 위치는 파라미터를 모두 갱신 한 후 호출되는 update 함수에서 갱신됩니다.
그 후 draw 함수에서 파라미터가 적용된 모델이 렌더링됩니다.

Comments