WPF Visual3D MeshGeometry3D Positions TriangleIndices TextureCoordinates
//xaml <Window x:Class="WpfApp112.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:WpfApp112" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <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> <ModelVisual3D x:Name="container"> <Viewport2DVisual3D> <Viewport2DVisual3D.Transform> <Transform3DGroup> <TranslateTransform3D OffsetX="1.5"/> <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D x:Name="rotationY" Axis="0,1,0" Angle="0"/> </RotateTransform3D.Rotation> </RotateTransform3D> </Transform3DGroup> </Viewport2DVisual3D.Transform> <Viewport2DVisual3D.Geometry> <MeshGeometry3D 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"/> </Viewport2DVisual3D.Geometry> <Viewport2DVisual3D.Material> <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True"/> </Viewport2DVisual3D.Material> <Button Name="testButton"> <Button.RenderTransform> <ScaleTransform ScaleY="-1"/> </Button.RenderTransform> Hello,3D </Button> </Viewport2DVisual3D> </ModelVisual3D> <ModelUIElement3D> <ModelUIElement3D.Transform> <Transform3DGroup> <ScaleTransform3D ScaleX="0.2" ScaleY="0.2" ScaleZ="0.2"/> <TranslateTransform3D x:Name="cube_translation"/> </Transform3DGroup> </ModelUIElement3D.Transform> <ModelUIElement3D.Model> <GeometryModel3D> <GeometryModel3D.Material> <DiffuseMaterial> <DiffuseMaterial.Brush> <SolidColorBrush Color="Purple"/> </DiffuseMaterial.Brush> </DiffuseMaterial> </GeometryModel3D.Material> <GeometryModel3D.Geometry> <MeshGeometry3D 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.Media3D; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApp112 { /// <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; GeneralTransform2DTo3D transform = testButton.TransformToAncestor(container); Point3D pt = transform.Transform(new Point(0, 0)); cube_translation.OffsetX = pt.X; cube_translation.OffsetY = pt.Y; cube_translation.OffsetZ = pt.Z; } } }
分类:
wpf
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-12-29 cppconn cpp prepared statement insert into table