private CompositionPropertySet _createSpotLightColorsProxy(SpotLight compositionSpotLight) { var lightProperties = compositionSpotLight.Properties; var compositor = compositionSpotLight.Compositor; lightProperties.InsertColor("InnerConeColor", Color.FromArgb(255, 255, 255, 255)); lightProperties.InsertColor("OuterConeColor", Color.FromArgb(255, 255, 255, 255)); lightProperties.InsertScalar("LightIntensity", 1f); var innerConeColorExpression = compositor.CreateExpressionAnimation("ColorLerp(ColorRgb(0,0,0,0), target.InnerConeColor, target.LightIntensity)"); innerConeColorExpression.SetReferenceParameter("target", lightProperties); var outerConeColorExpression = compositor.CreateExpressionAnimation("ColorLerp(ColorRgb(0,0,0,0), target.OuterConeColor, target.LightIntensity)"); outerConeColorExpression.SetReferenceParameter("target", lightProperties); compositionSpotLight.StartAnimation("InnerConeColor", innerConeColorExpression); compositionSpotLight.StartAnimation("OuterConeColor", outerConeColorExpression); return(lightProperties); }
private void GalleryItem_PointerEntered(object sender, PointerRoutedEventArgs e) { var frameworkElement = sender as FrameworkElement; //Setup Animations for the current Image Visual var element = ElementCompositionPreview.GetElementVisual(frameworkElement); var scaleAnimation = _compositor.CreateVector3KeyFrameAnimation(); scaleAnimation.Duration = TimeSpan.FromMilliseconds(durationHover); scaleAnimation.InsertKeyFrame(1f, new Vector3(1.1f, 1.1f, 1.1f)); element.CenterPoint = new Vector3(275f / 2, 275f / 2, 275f / 2); element.StartAnimation("Scale", scaleAnimation); var shadowBorder = (Grid)sender; var shadow = _compositor.CreateDropShadow(); shadow.Color = Colors.DimGray; var shadowBlurAnimation = _compositor.CreateScalarKeyFrameAnimation(); shadowBlurAnimation.Duration = TimeSpan.FromMilliseconds(durationHover); shadowBlurAnimation.InsertKeyFrame(0f, 1f); shadowBlurAnimation.InsertKeyFrame(1f, 18f); shadow.StartAnimation(nameof(shadow.BlurRadius), shadowBlurAnimation); var shadowOffsetAnimation = _compositor.CreateVector3KeyFrameAnimation(); shadowOffsetAnimation.Duration = TimeSpan.FromMilliseconds(durationHover); shadowOffsetAnimation.InsertKeyFrame(1f, new Vector3(shadowDistance, shadowDistance, 0)); shadow.StartAnimation(nameof(Visual.Offset), shadowOffsetAnimation); var sprite = _compositor.CreateSpriteVisual(); sprite.Size = new System.Numerics.Vector2((float)shadowBorder.ActualWidth, (float)shadowBorder.ActualHeight); sprite.Shadow = shadow; ElementCompositionPreview.SetElementChildVisual((UIElement)shadowBorder.FindName("Shadow"), sprite); //Move the spotlight to the center of the hovered light var ttv = frameworkElement.TransformToVisual(galleryPage); Point screenCoords = ttv.TransformPoint(new Point(0, 0)); var mouse_x = screenCoords.X + frameworkElement.ActualWidth / 2; var mouse_y = screenCoords.Y + frameworkElement.ActualHeight / 2; var elementOffset = new Vector3((float)mouse_x, (float)mouse_y, spotlight_z); // EF: Need to calculate tile offset here var spotlightOffsetAnimation = _compositor.CreateVector3KeyFrameAnimation(); spotlightOffsetAnimation.Duration = TimeSpan.FromMilliseconds(durationHover); spotlightOffsetAnimation.InsertKeyFrame(1f, elementOffset); spotLight.StartAnimation(nameof(Visual.Offset), spotlightOffsetAnimation); var ambientLightColorAnimation = _compositor.CreateColorKeyFrameAnimation(); ambientLightColorAnimation.Duration = TimeSpan.FromMilliseconds(durationHover); ambientLightColorAnimation.InsertKeyFrame(1f, ambientLightColorOn); ambientLight.StartAnimation(nameof(AmbientLight.Color), ambientLightColorAnimation); }
private void UpdateAnimations() { Vector2 sizeLightBounds = new Vector2((float)RootPanel.ActualWidth, (float)RootPanel.ActualHeight); Vector3KeyFrameAnimation lightPositionAnimation; ColorKeyFrameAnimation lightColorAnimation; ComboBoxItem item = LightingSelection.SelectedValue as ComboBoxItem; switch ((LightingTypes)item.Tag) { case LightingTypes.PointDiffuse: case LightingTypes.PointSpecular: { float zDistance = 50f; // Create the light position animation lightPositionAnimation = _compositor.CreateVector3KeyFrameAnimation(); lightPositionAnimation.InsertKeyFrame(0f, new Vector3(0f, 0f, zDistance)); lightPositionAnimation.InsertKeyFrame(.25f, new Vector3(sizeLightBounds.X * .2f, sizeLightBounds.Y * .5f, zDistance)); lightPositionAnimation.InsertKeyFrame(.50f, new Vector3(sizeLightBounds.X * .75f, sizeLightBounds.Y * .5f, zDistance)); lightPositionAnimation.InsertKeyFrame(.75f, new Vector3(sizeLightBounds.X * .2f, sizeLightBounds.Y * .2f, zDistance)); lightPositionAnimation.InsertKeyFrame(1f, new Vector3(0f, 0f, zDistance)); lightPositionAnimation.Duration = TimeSpan.FromMilliseconds(7500); lightPositionAnimation.IterationBehavior = AnimationIterationBehavior.Forever; lightColorAnimation = _compositor.CreateColorKeyFrameAnimation(); lightColorAnimation.InsertKeyFrame(0f, Colors.White); lightColorAnimation.InsertKeyFrame(.33f, Colors.White); lightColorAnimation.InsertKeyFrame(.66f, Colors.Yellow); lightColorAnimation.InsertKeyFrame(1f, Colors.White); lightColorAnimation.Duration = TimeSpan.FromMilliseconds(20000); lightColorAnimation.IterationBehavior = AnimationIterationBehavior.Forever; _pointLight.StartAnimation("Offset", lightPositionAnimation); _pointLight.StartAnimation("Color", lightColorAnimation); } break; case LightingTypes.SpotLightDiffuse: case LightingTypes.SpotLightSpecular: { // Create the light position animation lightPositionAnimation = _compositor.CreateVector3KeyFrameAnimation(); lightPositionAnimation.InsertKeyFrame(0f, new Vector3(0f, 0f, 100f)); lightPositionAnimation.InsertKeyFrame(.33f, new Vector3(sizeLightBounds.X * .5f, sizeLightBounds.Y * .5f, 200f)); lightPositionAnimation.InsertKeyFrame(.66f, new Vector3(sizeLightBounds.X, sizeLightBounds.Y * .5f, 400f)); lightPositionAnimation.InsertKeyFrame(1f, new Vector3(0f, 0f, 100f)); lightPositionAnimation.Duration = TimeSpan.FromMilliseconds(7500); lightPositionAnimation.IterationBehavior = AnimationIterationBehavior.Forever; lightColorAnimation = _compositor.CreateColorKeyFrameAnimation(); lightColorAnimation.InsertKeyFrame(0f, Colors.White); lightColorAnimation.InsertKeyFrame(.33f, Colors.White); lightColorAnimation.InsertKeyFrame(.66f, Colors.Yellow); lightColorAnimation.InsertKeyFrame(1f, Colors.White); lightColorAnimation.Duration = TimeSpan.FromMilliseconds(20000); lightColorAnimation.IterationBehavior = AnimationIterationBehavior.Forever; _spotLight.StartAnimation("Offset", lightPositionAnimation); _spotLight.StartAnimation("InnerConeColor", lightColorAnimation); } break; case LightingTypes.DistantDiffuse: case LightingTypes.DistantSpecular: { // Animate the light direction Vector3 position = new Vector3(0, 0, 100); float offCenter = 700f; Vector3KeyFrameAnimation lightDirectionAnimation = _compositor.CreateVector3KeyFrameAnimation(); lightDirectionAnimation.InsertKeyFrame(0f, Vector3.Normalize(new Vector3(0, 0, 0) - position)); lightDirectionAnimation.InsertKeyFrame(.25f, Vector3.Normalize(new Vector3(offCenter, 0, 0) - position)); lightDirectionAnimation.InsertKeyFrame(.5f, Vector3.Normalize(new Vector3(-offCenter, offCenter, 0) - position)); lightDirectionAnimation.InsertKeyFrame(.75f, Vector3.Normalize(new Vector3(0, -offCenter, 0) - position)); lightDirectionAnimation.InsertKeyFrame(1f, Vector3.Normalize(new Vector3(0, 0, 0) - position)); lightDirectionAnimation.Duration = TimeSpan.FromMilliseconds(7500); lightDirectionAnimation.IterationBehavior = AnimationIterationBehavior.Forever; _distantLight.StartAnimation("Direction", lightDirectionAnimation); } break; default: break; } }