//xaml <Window x:Class="WpfApp113.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp113" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid x:Name="myGrid"> <TextBlock Panel.ZIndex="1" IsHitTestVisible="False"> <TextBlock.RenderTransform> <TranslateTransform x:Name="t_000"/> </TextBlock.RenderTransform> (-1,-1,-1) </TextBlock> <TextBlock Panel.ZIndex="1" IsHitTestVisible="False"> <TextBlock.RenderTransform> <TranslateTransform x:Name="t_001"/> </TextBlock.RenderTransform> (-1,-1,1) </TextBlock> <TextBlock Panel.ZIndex="1" IsHitTestVisible="False"> <TextBlock.RenderTransform> <TranslateTransform x:Name="t_010"/> </TextBlock.RenderTransform> (-1,-1,-1) </TextBlock> <TextBlock Panel.ZIndex="1" IsHitTestVisible="False"> <TextBlock.RenderTransform> <TranslateTransform x:Name="t_011"/> </TextBlock.RenderTransform> (-1,1,1) </TextBlock> <TextBlock Panel.ZIndex="1" IsHitTestVisible="False"> <TextBlock.RenderTransform> <TranslateTransform x:Name="t_100"/> </TextBlock.RenderTransform> (1,-1,-1) </TextBlock> <TextBlock Panel.ZIndex="1" IsHitTestVisible="False"> <TextBlock.RenderTransform> <TranslateTransform x:Name="t_101"/> </TextBlock.RenderTransform> (1,-1,1) </TextBlock> <TextBlock Panel.ZIndex="1" IsHitTestVisible="False"> <TextBlock.RenderTransform> <TranslateTransform x:Name="t_110"/> </TextBlock.RenderTransform> (1,1,-1) </TextBlock> <TextBlock Panel.ZIndex="1" IsHitTestVisible="False"> <TextBlock.RenderTransform> <TranslateTransform x:Name="t_111"/> </TextBlock.RenderTransform> (1,1,1) </TextBlock> <Viewport3D Panel.ZIndex="0"> <Viewport3D.Camera> <PerspectiveCamera Position="3,3,4" LookDirection="-1,-1,-1" FieldOfView="60"/> </Viewport3D.Camera> <Viewport3D.Children> <ModelVisual3D> <ModelVisual3D.Content> <DirectionalLight Direction="-0.3,-0.4,-0.5"/> </ModelVisual3D.Content> </ModelVisual3D> <ModelUIElement3D x:Name="Cube"> <ModelUIElement3D.Transform> <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D x:Name="rotationY" Axis="0,1,0" Angle="0"/> </RotateTransform3D.Rotation> </RotateTransform3D> </ModelUIElement3D.Transform> <ModelUIElement3D.Model> <GeometryModel3D x:Name="ob_cube"> <GeometryModel3D.Material> <DiffuseMaterial> <DiffuseMaterial.Brush> <SolidColorBrush Color="Orange" x:Name="cubeBrush"/> </DiffuseMaterial.Brush> </DiffuseMaterial> </GeometryModel3D.Material> <GeometryModel3D.Geometry> <MeshGeometry3D x:Name="me_cube2" Positions="1,1,-1 1,-1,-1 -1,-1,-1 -1,1,-1 1,1,1 -1,1,1 -1,-1,1 1,-1,1 1,1,-1 1,1,1 1,-1,1 1,-1,-1 1,-1,-1 1,-1,1 -1,-1,1 -1,-1,-1 -1,-1,-1 -1,-1,1 -1,1,1 -1,1,-1 1,1,1 1,1,-1 -1,1,-1 -1,1,1" TriangleIndices="0 1 2 0 2 3 4 5 6 4 6 7 8 9 10 8 10 11 12 13 14 12 14 15 16 17 18 16 18 19 20 21 22 20 22 23" TextureCoordinates="0,1 0,0 1,0 1,1 1,1 -0,1 0,-0 1,0 1,1 -0,1 0,-0 1,0 1,0 1,1 -0,1 0,-0 -0,0 1,-0 1,1 0,1 1,-0 1,1 0,1 -0,0"/> </GeometryModel3D.Geometry> </GeometryModel3D> </ModelUIElement3D.Model> </ModelUIElement3D> </Viewport3D.Children> </Viewport3D> </Grid> <Window.Triggers> <EventTrigger RoutedEvent="Window.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="rotationY" Storyboard.TargetProperty="Angle" From="0" To="360" Duration="0:0:12" RepeatBehavior="Forever"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Window.Triggers> </Window> //cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Media.Media3D; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApp113 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); CompositionTarget.Rendering += CompositionTarget_Rendering; } static TimeSpan lastRenderTime = new TimeSpan(); private void CompositionTarget_Rendering(object sender, EventArgs e) { if (lastRenderTime == ((RenderingEventArgs)e).RenderingTime) { return; } lastRenderTime = ((RenderingEventArgs)e).RenderingTime; GeneralTransform3DTo2D transform = Cube.TransformToAncestor(myGrid); Point p = transform.Transform(new Point3D(-1, -1, -1)); t_000.X = p.X; t_000.Y = p.Y; p = transform.Transform(new Point3D(-1, -1, 1)); t_001.X = p.X; t_001.Y = p.Y; p = transform.Transform(new Point3D(-1, 1, -1)); t_010.X = p.X; t_010.Y = p.Y; p = transform.Transform(new Point3D(-1, 1, 1)); t_011.X = p.X; t_011.Y = p.Y; p = transform.Transform(new Point3D(1, -1, -1)); t_100.X = p.X; t_100.Y = p.Y; p = transform.Transform(new Point3D(1, -1, 1)); t_101.X = p.X; t_101.Y = p.Y; p = transform.Transform(new Point3D(1, 1, -1)); t_110.X = p.X; t_110.Y = p.Y; p = transform.Transform(new Point3D(1, 1, 1)); t_111.X = p.X; t_111.Y = p.Y; } } }
标签:Windows,System,transform,TransformToAncestor,GeneralTransform3DTo2D,new,using,WP From: https://www.cnblogs.com/Fred1987/p/18639339