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
标头 dcompanimation.h
Library Dcomp.lib
DLL Dcomp.dll

请参阅

动画

IDCompositionAnimation