WPF(Windows Presentation Foundation)提供了强大的3D图形支持,允许开发者创建复杂的3D场景和视觉效果。以下是一个简单的WPF 3D图形入门教学,我们将使用XAML来创建一个旋转的3D立方体。

1. 创建一个新的WPF项目

首先,打开Visual Studio并创建一个新的WPF应用程序项目。

2. 添加3D场景到XAML

在MainWindow.xaml文件中,我们可以添加一个Viewport3D控件,并在其中创建一个3D立方体。


<Window x:Class="WpfApp3D.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WPF 3D Example" Height="450" Width="800">
    <Grid>
        <Viewport3D>
            <Viewport3D.Camera>
                <PerspectiveCamera Position="0,0,4" LookDirection="0,0,-1" UpDirection="0,1,0" FieldOfView="60"/>
            </Viewport3D.Camera>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <Model3DGroup>
                        <DirectionalLight Color="#FFFFFF" Direction="-1,-1,-3"/>
                        <GeometryModel3D>
                            <GeometryModel3D.Geometry>
                                <MeshGeometry3D Positions="-1,-1,0  1,-1,0  1,1,0  -1,1,0
                                                        -1,-1,1  1,-1,1  1,1,1  -1,1,1"
                                              TriangleIndices="0,1,2  0,2,3
                                                                4,6,5  4,7,6
                                                                0,1,5  0,5,4
                                                                2,3,7  2,7,6
                                                                0,3,7  0,7,4
                                                                1,2,6  1,6,5"
                                              TextureCoordinates="0,0  1,0  1,1  0,1
                                                                  0,0  1,0  1,1  0,1
                                                                  0,0  1,0  1,1  0,1
                                                                  0,0  1,0  1,1  0,1
                                                                  0,0  1,0  1,1  0,1
                                                                  0,0  1,0  1,1  0,1"/>
                            </GeometryModel3D.Geometry>
                            <GeometryModel3D.Material>
                                <DiffuseMaterial>
                                    <DiffuseMaterial.Brush>
                                        <VisualBrush Visual="{Binding ElementName=texture}"/>
                                    </DiffuseMaterial.Brush>
                                </DiffuseMaterial>
                            </GeometryModel3D.Material>
                        </GeometryModel3D>
                    </Model3DGroup>
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D>
    </Grid>
</Window>

3. 添加纹理

为了给立方体添加纹理,我们可以在XAML中添加一个Image控件,并将其作为纹理绑定到立方体的Material上。


<Image x:Name="texture" Source="texture.jpg" Stretch="None" />

确保你有一个名为texture.jpg的图片文件放在项目的根目录下。

4. 添加动画

为了使立方体旋转,我们需要在XAML中添加一个RotateTransform3D,并将其应用到立方体上。然后,我们可以使用Storyboard来创建一个旋转动画。


<Viewport3D>
    ...
    <ModelVisual3D>
        <ModelVisual3D.Transform>
            <RotateTransform3D>
                <RotateTransform3D.Rotation>
                    <AxisAngleRotation3D x:Name="rotate" Axis="0,1,0" Angle="0"/>
                </RotateTransform3D.Rotation>
            </RotateTransform3D>
        </ModelVisual3D.Transform>
        ...
    </ModelVisual3D>
</Viewport3D>

在代码隐藏文件中,我们可以创建一个Storyboard来控制旋转动画。


using System.Windows;
using System.Windows.Media.Animation;

namespace WpfApp3D
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            DoubleAnimation rotationAnimation = new DoubleAnimation(0, 360, new Duration(TimeSpan.FromSeconds(10)));
            rotationAnimation.RepeatBehavior = RepeatBehavior.Forever;
            rotate.BeginAnimation(AxisAngleRotation3D.AngleProperty, rotationAnimation);
        }
    }
}

5. 运行程序

现在,当你运行程序时,你应该会看到一个旋转的3D立方体。

解释

  • Viewport3D 是WPF中用于显示3D场景的控件。
  • PerspectiveCamera 定义了观察3D场景的相机位置和方向。
  • ModelVisual3D 是一个容器,用于包含3D模型和它们的变换。
  • GeometryModel3D 包含了3D模型的几何形状和材质。
  • MeshGeometry3D 定义了3D模型的顶点、三角形索引和纹理坐标。
  • DiffuseMaterial 是一种材质,用于给3D模型添加颜色或纹理。
  • RotateTransform3D 和 AxisAngleRotation3D 用于定义3D模型的旋转。
  • Storyboard 和 DoubleAnimation 用于创建和控制动画。

WPF的3D图形功能非常强大,可以创建各种复杂的3D场景和视觉效果。你可以进一步探索WPF的3D图形API来创建更加丰富和动态的用户体验。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐