zoukankan      html  css  js  c++  java
  • C#编程之三维图形构建

    创建一个椎体三维图:

    相机

                <Viewport3D.Camera>
                    <PerspectiveCamera Position="-1 2 4" LookDirection="0.4 -0.5 -1"/>
                </Viewport3D.Camera>

    创建椎体图形

                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions=
                                                    "
                                                    -1,0, 0 
                                                    0 ,0,-1 
                                                    1 ,0, 0 
                                                    0 ,0, 1 
                                                    0 ,1, 0"
                                                    TriangleIndices="
                                                    0 1 2 
                                                    2 3 0
                                                    1 0 4
                                                    0 3 4
                                                    3 2 4
                                                    2 1 4
                                                    " />
                                </GeometryModel3D.Geometry>
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush Color="Green" Opacity="0.5"/>
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.BackMaterial>
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush Color="Red" Opacity="0.5"/>
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.BackMaterial>

    设置动画移动参数:

                                <GeometryModel3D.Transform>
                                    <RotateTransform3D>
                                        <RotateTransform3D.Rotation>
                                            <AxisAngleRotation3D x:Name="myAngleRotation" Axis="0,1,0" Angle="0"/>
                                        </RotateTransform3D.Rotation>
                                    </RotateTransform3D>
                                </GeometryModel3D.Transform>

    设置灯光投影:

    <DirectionalLight Direction="1 0 0" Color="White"/>

    最后添加旋转动画触发

                <!--add animation play-->
                <Viewport3D.Triggers>
                    <EventTrigger RoutedEvent="Viewport3D.Loaded">
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation 
                                        Storyboard.TargetName="myAngleRotation"
                                        Storyboard.TargetProperty="Angle"
                                        From="0" To="360" Duration="0:0:10"
                                        RepeatBehavior="Forever" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Viewport3D.Triggers>

    完整代码:

    <Window x:Class="Geometry.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Viewport3D Width="auto" Margin="0">
                <Viewport3D.Camera>
                    <PerspectiveCamera Position="-1.5 2 4" LookDirection="0.4 -0.5 -1"/>
                </Viewport3D.Camera>
                <ModelVisual3D>
                    <ModelVisual3D.Content>
                        <Model3DGroup>
                            <GeometryModel3D>
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions=
                                                    "
                                                    -1,0, 0 
                                                    0 ,0,-1 
                                                    1 ,0, 0 
                                                    0 ,0, 1 
                                                    0 ,1, 0"
                                                    TriangleIndices="
                                                    0 1 2 
                                                    2 3 0
                                                    1 0 4
                                                    0 3 4
                                                    3 2 4
                                                    2 1 4
                                                    " />
                                </GeometryModel3D.Geometry>
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush Color="Green" Opacity="0.5"/>
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.BackMaterial>
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush Color="Red" Opacity="0.5"/>
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.BackMaterial>
    
                                <GeometryModel3D.Transform>
                                    <RotateTransform3D>
                                        <RotateTransform3D.Rotation>
                                            <AxisAngleRotation3D x:Name="myAngleRotation" Axis="0,1,0" Angle="0"/>
                                        </RotateTransform3D.Rotation>
                                    </RotateTransform3D>
                                </GeometryModel3D.Transform>
                            </GeometryModel3D>
                            <DirectionalLight Direction="1 0 0" Color="White"/>
                        </Model3DGroup>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
                <!--add animation play-->
                <Viewport3D.Triggers>
                    <EventTrigger RoutedEvent="Viewport3D.Loaded">
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation 
                                        Storyboard.TargetName="myAngleRotation"
                                        Storyboard.TargetProperty="Angle"
                                        From="0" To="360" Duration="0:0:10"
                                        RepeatBehavior="Forever" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Viewport3D.Triggers>
            </Viewport3D>
        </Grid>
    </Window>
    XAML

    效果:

    End.

    Thanks.

  • 相关阅读:
    100到简单加减乘除算法的程序
    安卓日程管理系统中的bug
    绑定到Collection与绑定到CollectionViewSource的不同及解决方案
    【WPF】完美的布局不留白——解决WrapPanel右侧留白问题
    WPF里最简单的控件的Style你能写对么?(默认Style是有问题的)
    WPF Bug清单之(13)——应该出现却没有出现的ListView水平滚动条
    [WPF Bug清单]之(12)——与自定义Attached Property相关的Binding Path运行时错误
    请争取你可以拥有的——即使你不在乎
    C#编码风格——using语句的位置
    【WPF】实现QQ中的分组面板(2)——添加动画
  • 原文地址:https://www.cnblogs.com/lumao1122-Milolu/p/12059942.html
Copyright © 2011-2022 走看看