• WPF 最基本的前后台代码对照


    最基本的3D代码对照

    xaml代码

    <Viewport3D>
                <Viewport3D.Camera>
                    <PerspectiveCamera Position="0, 0, 4"/>
                </Viewport3D.Camera>
    
                <!-- Button on 3D -->
                <Viewport2DVisual3D>
                    <!-- Give the plane a slight rotation -->
                    <Viewport2DVisual3D.Transform>
                        <RotateTransform3D>
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Angle="40" Axis="0, 1, 0" />
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                    </Viewport2DVisual3D.Transform>
    
                    <!-- The Geometry, Material, and Visual for the Viewport2DVisual3D -->
                    <Viewport2DVisual3D.Geometry>
                        <MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0"
                                        TextureCoordinates="0,0 0,1 1,1 1,0" TriangleIndices="0 1 2 0 2 3"/>
                    </Viewport2DVisual3D.Geometry>
    
                    <Viewport2DVisual3D.Material>
                        <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="White"/>
                    </Viewport2DVisual3D.Material>
    
                    <Button>Hello, 3D</Button>
                </Viewport2DVisual3D>
    
                <!-- Lights -->
                <ModelVisual3D>
                    <ModelVisual3D.Content>
                        <DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
            </Viewport3D>

    cs后台对照写法

    private void Init_Draw()
            {
                Viewport3D viewport3D = new Viewport3D();
                PerspectiveCamera perspectiveCamera = new PerspectiveCamera()
                {
                    Position = new Point3D(0, 0, 4),
                };
                viewport3D.Camera = perspectiveCamera;
    
                Viewport2DVisual3D viewport2DVisual3D = new Viewport2DVisual3D();
                RotateTransform3D rotateTransform3D = new RotateTransform3D();
                AxisAngleRotation3D axisAngleRotation3D = new AxisAngleRotation3D()
                {
                    Angle = 40,
                    Axis = new Vector3D(0, 1, 0),
                };
                rotateTransform3D.Rotation = axisAngleRotation3D;
                viewport2DVisual3D.Transform = rotateTransform3D;
    
                MeshGeometry3D meshGeometry3D = new MeshGeometry3D()
                {
                    Positions = new Point3DCollection(new Point3D[] { new Point3D(-1, 1, 0), new Point3D(-1, -1, 0), new Point3D(1, -1, 0), new Point3D(1, 1, 0) }),
                    TextureCoordinates = new PointCollection { new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 0) },
                    TriangleIndices = new Int32Collection(new int[] { 0, 1, 2, 0, 2, 3 }),
                };
                viewport2DVisual3D.Geometry = meshGeometry3D;
    
                DiffuseMaterial diffuseMaterial = new DiffuseMaterial();
                Viewport2DVisual3D.SetIsVisualHostMaterial(diffuseMaterial, true);
                viewport2DVisual3D.Material = diffuseMaterial;
    
    
                Button button = new Button()
                {
                    Content = "Hello,3D",
              Direction = new Vector3D(0, 0, -1), }; viewport2DVisual3D.Visual
    = button; ModelVisual3D modelVisual3D = new ModelVisual3D(); DirectionalLight directionalLight = new DirectionalLight() { Color = Color.FromRgb(255, 255, 255),
    Direction = new Vector3D(0, 0, -1), }; modelVisual3D.Content
    = directionalLight; viewport3D.Children.Add(viewport2DVisual3D); viewport3D.Children.Add(modelVisual3D); Grid组件.Children.Add(viewport3D); }

     引伸一下,按照1:1大小显示原始组件,写入原始宽度和高度。显示出来的是原始UserControl的大小

    private void Init_Draw(FrameworkElement element,double width,double height)
            {
                double Mesh_Width = width / 2;
                double Mesh_Height = height / 2;
    
                Viewport3D viewport3D = new Viewport3D();
                viewport3D.Width = width * 2;
    
                PerspectiveCamera perspectiveCamera = new PerspectiveCamera();
                double fieldOfViewInRadians = perspectiveCamera.FieldOfView * (Math.PI / 180.0);
                var z = (0.5 * viewport3D.Width) / Math.Tan(0.5 * fieldOfViewInRadians);
                perspectiveCamera.Position = new Point3D(0, 0, z);
    
                perspectiveCamera.LookDirection = new Vector3D(0, 0, -1);
                viewport3D.Camera = perspectiveCamera;
    
                Viewport2DVisual3D viewport2DVisual3D = new Viewport2DVisual3D();
                RotateTransform3D rotateTransform3D = new RotateTransform3D();
                axisAngleRotation3D = new AxisAngleRotation3D()
                {
                    Angle = 40,
                    Axis = new Vector3D(0, 1, 0),
                };
                rotateTransform3D.Rotation = axisAngleRotation3D;
                viewport2DVisual3D.Transform = rotateTransform3D;
    
                MeshGeometry3D meshGeometry3D = new MeshGeometry3D()
                {
                    Positions = new Point3DCollection(new Point3D[] { 
                            new Point3D(-Mesh_Width, Mesh_Height, 0),
                            new Point3D(-Mesh_Width, -Mesh_Height, 0),
                            new Point3D(Mesh_Width, -Mesh_Height, 0),
                            new Point3D(Mesh_Width, Mesh_Height, 0)
                        }
                    ),
                    TextureCoordinates = new PointCollection { new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 0) },
                    TriangleIndices = new Int32Collection(new int[] { 0, 1, 2, 0, 2, 3 }),
                };
                viewport2DVisual3D.Geometry = meshGeometry3D;
    
                DiffuseMaterial diffuseMaterial = new DiffuseMaterial();
                Viewport2DVisual3D.SetIsVisualHostMaterial(diffuseMaterial, true);
                viewport2DVisual3D.Material = diffuseMaterial;
    
                viewport2DVisual3D.Visual = element;
                element.MouseDown += Element_MouseDown;
    
                ModelVisual3D modelVisual3D = new ModelVisual3D();
                DirectionalLight directionalLight = new DirectionalLight()
                {
                    Color = Color.FromRgb(255, 255, 255),
                    Direction = new Vector3D(0, 0, -1),
                };
                modelVisual3D.Content = directionalLight;
    
                viewport3D.Children.Add(viewport2DVisual3D);
                viewport3D.Children.Add(modelVisual3D);
    
                MainGrid.Children.Add(viewport3D);
            }
  • 相关阅读:
    杭州电子科技大学程序设计竞赛(2016’12)- 网络同步赛 1001
    AtCoder Beginner Contest 050 ABC题
    2016年第四届湘潭大学新生趣味程序设计竞赛
    华东交通大学2016年ACM“双基”程序设计竞赛 1008
    移动端报表JS开发示例
    unity shader入门
    现代控制理论思考题----倒立摆小车控制算法研究
    Linux驱动基础:msm平台,modem等framework加载
    简谈高通Trustzone的实现
    现代控制理论课件分享及课后思考题(初稿待完善)
  • 原文地址:https://www.cnblogs.com/qiaoke/p/11664775.html
Copyright © 2020-2023  润新知