Метод IDCompositionAnimation::AddCubic (dcompanimation.h)
Добавляет кубический полиномический сегмент в функцию анимации.
Синтаксис
HRESULT AddCubic(
[in] double beginOffset,
[in] float constantCoefficient,
[in] float linearCoefficient,
[in] float quadraticCoefficient,
[in] float cubicCoefficient
);
Параметры
[in] beginOffset
Тип: double
Смещение (в секундах) от начала функции анимации до точки, когда этот сегмент должен ввести в действие.
[in] constantCoefficient
Тип: float
Коэффициент константы полинома.
[in] linearCoefficient
Тип: float
Линейный коэффициент полинома.
[in] quadraticCoefficient
Тип: float
Квадратный коэффициент полинома.
[in] cubicCoefficient
Тип: float
Кубический коэффициент полинома.
Возвращаемое значение
Тип: HRESULT
Если функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT . Список кодов ошибок см. в разделе Коды ошибок DirectComposition .
Комментарии
Кубический сегмент перемещает время вдоль кубической полиномиала. Для заданных входных данных времени (t) выходное значение задается с помощью следующей формулы.
x(t) = at² + bt² + ct + d
Этот метод завершается ошибкой, если какой-либо из параметров имеет значение NaN, положительная бесконечность или отрицательная бесконечность.
Так как сегменты анимации должны добавляться в порядке увеличения, этот метод завершается ошибкой, если параметр beginOffset меньше или равен параметру beginOffset предыдущего сегмента, если он имеется.
Этот сегмент анимации остается в силе до момента начала следующего сегмента в функции анимации. Если функция анимации не содержит больше сегментов, этот сегмент остается в силе на неопределенный срок.
Если все коэффициенты, кроме constantCoefficient , равны нулю, значение этого сегмента остается постоянным с течением времени, а анимация не вызывает рекомпозиции в течение всего сегмента.
Примеры
В следующем примере создается функция анимации с двумя кубическими полиномиальными сегментами.
HRESULT DoAnimatedRotation(IDCompositionDevice *pDevice,
IDCompositionRotateTransform *pRotateTransform,
IDCompositionVisual *pVisual,
float animationTime)
{
HRESULT hr = S_OK;
IDCompositionAnimation *pAnimation = nullptr;
// Create an animation object.
hr = pDevice->CreateAnimation(&pAnimation);
if (SUCCEEDED(hr))
{
// Create the animation function by adding cubic polynomial segments.
// For a given time input (t), the output value is
// a*t^3 + b* t^2 + c*t + d.
//
// The following segment will rotate the visual clockwise.
pAnimation->AddCubic(
0.0, // Begin offset
0.0, // Constant coefficient - d
(360.0f * 1.0f) / animationTime, // Linear coefficient - c
0.0, // Quadratic coefficient - b
0.0); // Cubic coefficient - a
// The following segment will rotate the visual counterclockwise.
pAnimation->AddCubic(
animationTime,
0.0,
-(360.0f * 1.0f) / animationTime,
0.0,
0.0);
// Set the end of the animation.
pAnimation->End(
2 * animationTime, // End offset
0.0); // End value
// Apply the animation to the Angle property of the
// rotate transform.
hr = pRotateTransform->SetAngle(pAnimation);
}
if (SUCCEEDED(hr))
{
// Apply the rotate transform object to a visual.
hr = pVisual->SetTransform(pRotateTransform);
}
if (SUCCEEDED(hr))
{
// Commit the changes to the composition.
hr = pDevice->Commit();
}
SafeRelease(&pAnimation);
return hr;
}
Требования
Минимальная версия клиента | Windows 8 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
Целевая платформа | Windows |
Header | dcompanimation.h |
Библиотека | Dcomp.lib |
DLL | Dcomp.dll |