91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

基于WPF實現3D畫廊動畫效果的示例代碼

wpf
小云
147
2023-08-17 14:37:44
欄目: 編程語言

下面是一個基于WPF實現3D畫廊動畫效果的示例代碼:

using System;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Media.Media3D;

namespace WPF3DGallery

{

    public partial class MainWindow : Window

    {

        private const double AngleIncrement = 30;

        private const double ScaleIncrement = 0.1;

        private PerspectiveCamera _camera;

        private Model3DGroup _modelGroup;

        private Point _lastMousePosition;

        public MainWindow()

        {

            InitializeComponent();

            CreateScene();

        }

        private void CreateScene()

        {

            // 創建3D場景

            _modelGroup = new Model3DGroup();

            _modelGroup.Children.Add(CreateCubeModel(new Point3D(-100, 0, 0), Colors.Red));

            _modelGroup.Children.Add(CreateCubeModel(new Point3D(0, 0, 0), Colors.Green));

            _modelGroup.Children.Add(CreateCubeModel(new Point3D(100, 0, 0), Colors.Blue));

            // 創建燈光

            var directionalLight = new DirectionalLight(Colors.White, new Vector3D(0, -0.5, -1));

            _modelGroup.Children.Add(directionalLight);

            // 設置相機

            _camera = new PerspectiveCamera(new Point3D(0, 0, 200), new Vector3D(0, 0, -1), new Vector3D(0, 1, 0));

            // 將模型和相機添加到Viewport3D中

            var viewport = new Viewport3D();

            viewport.Camera = _camera;

            viewport.Children.Add(_modelGroup);

            // 設置Viewport3D為窗口的內容

            Content = viewport;

        }

        private GeometryModel3D CreateCubeModel(Point3D position, Color color)

        {

            var mesh = new MeshGeometry3D();

            mesh.Positions.Add(new Point3D(-50, -50, 50));

            mesh.Positions.Add(new Point3D(50, -50, 50));

            mesh.Positions.Add(new Point3D(-50, 50, 50));

            mesh.Positions.Add(new Point3D(50, 50, 50));

            mesh.Positions.Add(new Point3D(-50, -50, -50));

            mesh.Positions.Add(new Point3D(50, -50, -50));

            mesh.Positions.Add(new Point3D(-50, 50, -50));

            mesh.Positions.Add(new Point3D(50, 50, -50));

            mesh.TriangleIndices.Add(0);

            mesh.TriangleIndices.Add(1);

            mesh.TriangleIndices.Add(2);

            mesh.TriangleIndices.Add(2);

            mesh.TriangleIndices.Add(1);

            mesh.TriangleIndices.Add(3);

            mesh.TriangleIndices.Add(4);

            mesh.TriangleIndices.Add(5);

            mesh.TriangleIndices.Add(6);

            mesh.TriangleIndices.Add(6);

            mesh.TriangleIndices.Add(5);

            mesh.TriangleIndices.Add(7);

            mesh.TriangleIndices.Add(2);

            mesh.TriangleIndices.Add(3);

            mesh.TriangleIndices.Add(6);

            mesh.TriangleIndices.Add(6);

            mesh.TriangleIndices.Add(3);

            mesh.TriangleIndices.Add(7);

            mesh.TriangleIndices.Add(0);

            mesh.TriangleIndices.Add(2);

            mesh.TriangleIndices.Add(4);

            mesh.TriangleIndices.Add(4);

            mesh.TriangleIndices.Add(2);

            mesh.TriangleIndices.Add(6);

            mesh.TriangleIndices.Add(1);

            mesh.TriangleIndices.Add(0);

            mesh.TriangleIndices.Add(5);

            mesh.TriangleIndices.Add(5);

            mesh.TriangleIndices.Add(0);

            mesh.TriangleIndices.Add(4);

            mesh.TriangleIndices.Add(1);

            mesh.TriangleIndices.Add(5);

            mesh.TriangleIndices.Add(3);

            mesh.TriangleIndices.Add(3);

            mesh.TriangleIndices.Add(5);

            mesh.TriangleIndices.Add(7);

            var material = new DiffuseMaterial(new SolidColorBrush(color));

            return new GeometryModel3D(mesh, material)

            {

                Transform = new TranslateTransform3D(position.X, position.Y, position.Z)

            };

        }

        protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)

        {

            _lastMousePosition = e.GetPosition(this);

            CaptureMouse();

        }

        protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)

        {

            ReleaseMouseCapture


0
舒城县| 英吉沙县| 鹤庆县| 武清区| 关岭| 离岛区| 田林县| 九龙县| 秦安县| 民权县| 上虞市| 乌兰察布市| 柞水县| 潢川县| 轮台县| 平遥县| 闸北区| 镇安县| 宁城县| 临武县| 沧州市| 闵行区| 秭归县| 汉川市| 新田县| 上蔡县| 临颍县| 姜堰市| 北票市| 莱州市| 景德镇市| 尼木县| 吉首市| 福泉市| 营山县| 肥东县| 额济纳旗| 鄯善县| 凤凰县| 团风县| 永修县|