Windows 合成 API 是否支持 2.5D 投影旋转?
Does the Windows Composition API support 2.5D projected rotation?
我已经开始在 UWP 应用程序中使用 Windows 组合 API 来为 UI 的元素设置动画。
视觉元素公开 RotationAngleInDegrees 和 RotationAngle 属性以及 RotationAxis 属性。
当我围绕 Y 轴设置矩形对象的 RotationAngleInDegrees 值的动画时,矩形按我预期的那样旋转,但在 2D 应用程序中 window,它似乎没有显示 2.5D 投影。
有没有办法用合成api得到旋转的2.5D投影效果?
这取决于你想要的效果。 GitHub 和 here is the link. You will be able to download the demo from the store. And you can get some idea from depth samples. For example, flip to reveal shows a way to rotate a image card and you can find source code from here 上有一个流畅的设计应用程序示例。有关详细信息,请查看示例和演示。
一般情况下,动画是以X轴为基准旋转的:
rectanglevisual.RotationAxis = new System.Numerics.Vector3(1f, 0f, 0f);
然后使用旋转动画根据RotationAngleInDegrees旋转。
您也可以直接在 XAML 平台上使用图像控件中的 PlaneProjection 执行此操作。
正如@BarryWang 向我指出的示例所示,有必要在执行动画之前将 TransformMatrix 应用到页面(或育儿容器),以获得旋转的 2.5D 效果或其他空间变换动画作文 api.
private void UpdatePerspective()
{
Visual visual = ElementCompositionPreview.GetElementVisual(MainPanel);
// Get the size of the area we are enabling perspective for
Vector2 sizeList = new Vector2((float)MainPanel.ActualWidth, (float)MainPanel.ActualHeight);
// Setup the perspective transform.
Matrix4x4 perspective = new Matrix4x4(
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, -1.0f / sizeList.X,
0.0f, 0.0f, 0.0f, 1.0f);
// Set the parent transform to apply perspective to all children
visual.TransformMatrix =
Matrix4x4.CreateTranslation(-sizeList.X / 2, -sizeList.Y / 2, 0f) * // Translate to origin
perspective * // Apply perspective at origin
Matrix4x4.CreateTranslation(sizeList.X / 2, sizeList.Y / 2, 0f); // Translate back to original position
}
我已经开始在 UWP 应用程序中使用 Windows 组合 API 来为 UI 的元素设置动画。
视觉元素公开 RotationAngleInDegrees 和 RotationAngle 属性以及 RotationAxis 属性。
当我围绕 Y 轴设置矩形对象的 RotationAngleInDegrees 值的动画时,矩形按我预期的那样旋转,但在 2D 应用程序中 window,它似乎没有显示 2.5D 投影。
有没有办法用合成api得到旋转的2.5D投影效果?
这取决于你想要的效果。 GitHub 和 here is the link. You will be able to download the demo from the store. And you can get some idea from depth samples. For example, flip to reveal shows a way to rotate a image card and you can find source code from here 上有一个流畅的设计应用程序示例。有关详细信息,请查看示例和演示。
一般情况下,动画是以X轴为基准旋转的:
rectanglevisual.RotationAxis = new System.Numerics.Vector3(1f, 0f, 0f);
然后使用旋转动画根据RotationAngleInDegrees旋转。
您也可以直接在 XAML 平台上使用图像控件中的 PlaneProjection 执行此操作。
正如@BarryWang 向我指出的示例所示,有必要在执行动画之前将 TransformMatrix 应用到页面(或育儿容器),以获得旋转的 2.5D 效果或其他空间变换动画作文 api.
private void UpdatePerspective()
{
Visual visual = ElementCompositionPreview.GetElementVisual(MainPanel);
// Get the size of the area we are enabling perspective for
Vector2 sizeList = new Vector2((float)MainPanel.ActualWidth, (float)MainPanel.ActualHeight);
// Setup the perspective transform.
Matrix4x4 perspective = new Matrix4x4(
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, -1.0f / sizeList.X,
0.0f, 0.0f, 0.0f, 1.0f);
// Set the parent transform to apply perspective to all children
visual.TransformMatrix =
Matrix4x4.CreateTranslation(-sizeList.X / 2, -sizeList.Y / 2, 0f) * // Translate to origin
perspective * // Apply perspective at origin
Matrix4x4.CreateTranslation(sizeList.X / 2, sizeList.Y / 2, 0f); // Translate back to original position
}