3dsmax — ключевые кадры в 3DS MAX 2014 SDK Переполнение стека

Я хочу попросить вас, ребята, помочь мне с созданием ключевых кадров в Max SDK C ++.
Что я сделал:

  • Создан плагин контроллера
  • Внутри getValue Функция Я сделал свои переводы с помощью кода.
  • Я также написал setValue функция.

Который, я думаю, управляет ключевыми кадрами и сохраняет положение контроллеров в заданное время в данном ключевом кадре. Таким образом, я смог настроить клавиши вручную, но мне бы очень хотелось работать с Auto Key, включенной в Max.
С другой стороны, я не вижу недавно добавленные значения ключей. Поэтому, пожалуйста, помогите мне, как я могу добавить ключевые кадры?

Большое спасибо:
Бандерас

void maxProject3::GetValue(TimeValue t, void *ptr, Interval &valid, GetSetMethod method)
{

Point3 p3OurAbsValue(0, 0, 0);
tomb[0]=0;

//These positions stores my data they are globals
XPosition += (accX);
YPosition += (accY);
ZPosition += (accZ);

p3OurAbsValue.x = XPosition;
p3OurAbsValue.y = YPosition;
p3OurAbsValue.z = ZPosition;

valid.Set(t,t+1); //This answer is only valid at the calling time.

MatrixCtrl->GetValue(t, &p3OurAbsValue.y, valid, CTRL_RELATIVE);

if (method == CTRL_ABSOLUTE)
{

Point3* p3InVal = (Point3*)ptr;
*p3InVal = p3OurAbsValue;

}
else // CTRL_RELATIVE
{
//We do our translations on a Matrix
Matrix3* m3InVal = (Matrix3*)ptr;
//m3InVal->PreTranslate(p3OurAbsValue);
m3InVal->PreRotateX(rotX);
m3InVal->PreRotateY(rotY);
m3InVal->PreRotateZ(rotZ);
}
}

int maxProject3::NumSubs() {
return 1;
}

Animatable* maxProject3::SubAnim(int n) {
return MatrixCtrl;
}

void maxProject3::SetValue(TimeValue t, void *ptr, int commit, GetSetMethod method)
{
Matrix3* m3InVal = (Matrix3*)ptr;
MatrixCtrl->AddNewKey(t, ADDKEY_SELECT);
MatrixCtrl->SetValue(t, &m3InVal, commit, CTRL_RELATIVE);
}

0

Решение

Чтобы включить режим Auto key, попробуйте использовать AnimateOn() до вашей трансформации. Также добавьте AnimateOff() отключить режим автоматического ключа в конце.

Я сделал это в одном из моих проектов, чтобы создать анимацию идентификатора материала, используя режим автоключей.

/** Auto key on*/
AnimateOn();

/** Creating material id animation */
for(int mtl_id = 1; mtl_id <= num_sub_mtl; ++mtl_id, time += time_step)
{
mtl_modifier->GetParamBlock()->SetValue(MATMOD_MATID,time,mtl_id);
}

/** Auto key off*/
AnimateOff();

Также в качестве предложения используйте слушатель скрипта max, чтобы узнать, что происходит, когда анимация создается с использованием 3ds Max GUI. Это поможет вам воссоздать анимацию с помощью Max SDK.

1

Другие решения