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 |