IDCompositionAnimation::AddCubic メソッド (dcompanimation.h)

アニメーション関数に 3 次多項式セグメントを追加します。

構文

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

多項式の 2 次係数。

[in] cubicCoefficient

型: float

多項式の 3 次係数。

戻り値

型: HRESULT

関数が成功した場合は、S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。 エラー コードの一覧については、「 DirectComposition エラー コード 」を参照してください。

解説

3 次セグメントは、3 次多項式に沿って時間を遷移します。 指定された時刻入力 (t) の場合、出力値は次の式で指定されます。

x(t) = at ≦ + bt² + ct + d

パラメーターのいずれかが NaN、正の無限大、または負の無限大である場合、このメソッドは失敗します。

アニメーション セグメントは順に追加する必要があるため、 beginOffset パラメーターが前のセグメントの beginOffset パラメーター以下の場合、このメソッドは失敗します (存在する場合)。

このアニメーション セグメントは、アニメーション関数の次のセグメントの開始時刻まで有効なままになります。 アニメーション関数にこれ以上セグメントが含まれない場合、このセグメントは無期限に有効なままになります。

constantCoefficient を除くすべての係数が 0 の場合、このセグメントの値は時間の経過と同時に一定のままであり、アニメーションはセグメントの期間中に再合成を行いません。

次の例では、2 つの 3 次多項式セグメントを含むアニメーション関数を作成します。

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