精华内容
下载资源
问答
  • WPF 3D三角形图形

    2019-09-18 08:09:36
    创建一个新WPF项目 以下XAML代码创建3D对象 <Viewport3D Margin="128,60,169.6,10" > <Viewport3D.Camera > <PerspectiveCamera Position="0 0 0" LookDirection="0 0 -8" />...

    创建一个新WPF项目

    以下XAML代码创建3D对象

        <Viewport3D Margin="128,60,169.6,10" >

                <Viewport3D.Camera >

                    <PerspectiveCamera Position="0 0 0" LookDirection="0 0 -8" />

                </Viewport3D.Camera >

                <ModelVisual3D >

                    <ModelVisual3D.Content >

                        <AmbientLight Color="White" />

                    </ModelVisual3D.Content >

                </ModelVisual3D >

                <ModelVisual3D >

                    <ModelVisual3D.Content >

                        <GeometryModel3D >

                            <GeometryModel3D.Geometry >

                                <MeshGeometry3D

    Positions="-1 -1 -4, 1 -1 -4, 0 1 -4"

    TriangleIndices="0, 1, 2" />

                            </GeometryModel3D.Geometry>

                            <GeometryModel3D.Material >

                                <MaterialGroup >

                                    <DiffuseMaterial >

                                        <DiffuseMaterial.Brush >

                                            <SolidColorBrush Color="Red" />

                                        </DiffuseMaterial.Brush >

                                    </DiffuseMaterial >

                                </MaterialGroup >

                            </GeometryModel3D.Material >

                        </GeometryModel3D >

                    </ModelVisual3D.Content >

                </ModelVisual3D >

                <ModelVisual3D >

                    <ModelVisual3D.Content >

                        <GeometryModel3D >

                            <GeometryModel3D.Geometry >

                                <MeshGeometry3D

    Positions="-1 -1 -4, 1 -1 -4, 0 1 -4"

    TriangleIndices="0, 1, 2"

    TextureCoordinates="0 1, 1 1, 0.5 0" />

                            </GeometryModel3D.Geometry >

                            <GeometryModel3D.Material >

                                <MaterialGroup >

                                    <DiffuseMaterial >

                                        <DiffuseMaterial.Brush >

                                            <LinearGradientBrush StartPoint="0,0"

    EndPoint="1,1" >

                                                <GradientStop Color="Yellow" Offset="0"/>

                                                <GradientStop Color="Orange" Offset="0.25"/>

                                                <GradientStop Color="Red" Offset="0.50"/>

                                                <GradientStop Color="Blue" Offset="0.75"/>

                                                <GradientStop Color="Violet" Offset="1"/>

                                            </LinearGradientBrush >

                                        </DiffuseMaterial.Brush >

                                    </DiffuseMaterial >

                                </MaterialGroup >

                            </GeometryModel3D.Material >

                        </GeometryModel3D >

                    </ModelVisual3D.Content >

                </ModelVisual3D >

            </Viewport3D >

    编译并执行上述代码时,它将生成如下图所示的三角形对象。

    展开全文
  • 本文实例为大家分享了WPF实现平面三角形3D运动效果的具体代码,供大家参考,具体内容如下 实现效果如下: 思路:封装三角形三个顶点和路径的三角形类,图形渲染时同步更新公共顶点三角形的顶点位置。 步骤: 1、...
  • shadereffect三角形马赛克特效 wpf源码
  • WPF平台上通过PATH类出扇形,带箭头的直线,和具有宽度的箭头线
  • WPF三角形、圆形按钮

    万次阅读 2011-09-28 16:42:17
    <UserControl x:Class="WpfApplication1.UserControl1"  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  xmlns:mc=...
    例子简单,代码更简单。
    
    <Window
        xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class
    ="Custom_Button.Window1"
        x:Name
    ="Window"
        Title
    ="圆形按钮"
        Width
    ="600" Height="480">

        
    <Grid x:Name="LayoutRoot">

            
    <Grid.RowDefinitions>
                
    <RowDefinition/>
            
    </Grid.RowDefinitions>

            
    <Button Grid.Column="0" Grid.Row="0" Height="400" Width="400" HorizontalAlignment="Left" VerticalAlignment="Top" Content="Button" Template="{DynamicResource ButtonControlTemplate1}" Cursor="Hand">
                
    <Button.Resources>
                    
    <ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}">
                        
    <Grid>
                            
    <Ellipse x:Name="ButtonEllipse" Width="Auto" Height="Auto" StrokeThickness="4" Fill="White" Stroke="Gray"></Ellipse>
                            
    <Polygon x:Name="ButtonPolygon" Points="20,200 300,50 300,350" Stroke="White" StrokeThickness="2">
                                
    <Polygon.Fill>
                                    
    <SolidColorBrush Color="Gray" Opacity="0.4"/>
                                
    </Polygon.Fill>
                            
    </Polygon>
                        
    </Grid>
                        
    <ControlTemplate.Triggers>
                            
    <Trigger Property="IsMouseOver" Value="True">
                                
    <Setter TargetName="ButtonPolygon" Property="Fill" Value="Black"></Setter>
                            
    </Trigger>
                            
    <Trigger Property="IsPressed" Value="True">
                                
    <Setter TargetName="ButtonPolygon" Property="Fill" Value="Gray"/>
                            
    </Trigger>
                        
    </ControlTemplate.Triggers>
                    
    </ControlTemplate>
                
    </Button.Resources>
            
    </Button>
        
    </Grid>
    </Window>




    修改后三角形自动放大



        <Grid x:Name="LayoutRoot">

            <Grid.RowDefinitions>
                <RowDefinition/>
            </Grid.RowDefinitions>

            

            <Button Width="305" HorizontalAlignment="Left" Content="Button1" Template="{DynamicResource ButtonControlTemplate1}" Cursor="Hand" Margin="52,45,0,142" Click="Button_Click_1">
                <Button.Resources>
                    <ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}">
                        <Grid>
                            <Ellipse x:Name="ButtonEllipse" Width="Auto" Height="Auto" StrokeThickness="4" Fill="White" Stroke="Gray"></Ellipse>
                            <Polygon x:Name="ButtonPolygon" Stretch="Fill" Points="0,50 100,0 100,100" Stroke="White" StrokeThickness="2">
                                <Polygon.Fill>
                                    <SolidColorBrush Color="Gray" Opacity="0.4"/>
                                </Polygon.Fill>
                            </Polygon>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="ButtonPolygon" Property="Fill" Value="Black"></Setter>
                            </Trigger>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter TargetName="ButtonPolygon" Property="Fill" Value="Gray"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Button.Resources>
            </Button>
        </Grid>



    自定义控件上使用代创建

    xaml:

    <UserControl x:Class="WpfApplication1.UserControl1"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                 mc:Ignorable="d"
                 d:DesignHeight="439" d:DesignWidth="437" Loaded="UserControl_Loaded">
        
        <UserControl.Resources>
            <ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}">
                <Grid>
                    <Polygon x:Name="ButtonPolygon" Stretch="Fill" Points="0,50 100,0 100,100" Stroke="White" StrokeThickness="2">
                        <Polygon.Fill>
                            <SolidColorBrush Color="Gray" Opacity="0.4"/>
                        </Polygon.Fill>
                    </Polygon>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="ButtonPolygon" Property="Fill" Value="Black"></Setter>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="ButtonPolygon" Property="Fill" Value="red"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </UserControl.Resources>
        
        
    </UserControl>

    code:

        public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
            }

            private void UserControl_Loaded(object sender, RoutedEventArgs e)
            {
                Button button1 = new Button();
                this.AddChild(button1);
                button1.Template = (ControlTemplate)(this.Resources["ButtonControlTemplate1"]);
                button1.Click += button1_Click;
            }

            private void button1_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("sss");
            }


        }

    展开全文
  • wpf_绘画圆形.zip

    2020-08-12 18:07:40
    实现了在画布上绘画三角形,正方形,直线,五角星,等形状的图形,代码简洁易懂,使用方便,使用Canvas画布。
  • silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发) 原文:silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发)本教程基本涵盖了WPF和silverlight中的各种动画。先上张效果图。 声明...
    原文:silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发)

    本教程基本涵盖了WPF和silverlight中的各种动画。先上张效果图。

    声明下,这个做的不是让大家照搬的,只是让大家熟悉下动画效果,这个成品基本涵盖了sl里面所有的动画效果。如果大家真的想掌握动画,我建议按着做一遍。看的不如动手的说.

    觉的好的别忘记推荐下,谢谢了

    2011050312485180.jpg

    很多人对这个网站应该很熟悉,我用这个做案例,一步步实现他所有的动画效果。相信你做完以后动画水平能有不小的提高。

    看上面的图可以发现他是由几块动画组成的。这节我们开始小鸟的制作。

    2011050409434042.jpg

    开发环境,blend 4.

    1.在blend 4中新建一个silverliht程序。

    2011050312582283.jpg

    2.应该小鸟只是整个动画中的其中的一个部分,所以新建一个文件夹,在其中新建一个usercontrol。

    2011050313043580.jpg2011050313044243.jpg2011050313045064.jpg

    3.设置可视区为width:400,height:412.同时将页面大小设为375*319(默认情况下,silverlight总会有一个固定的尺寸,要想让其自动扩展,很简单把Height="640",Width="480"删除即可(或设置成Auto),但是这样处理后,用blend再打开该xaml文件,可视区域就为0了,很不方便选取对象,这时我们可以加上这标识mc:Ignorable="d" ,再用blend打开时,会发现可视区域变成640*480了,而运行时即仍然可以自动扩展)

    4.选择钢笔工具,绘制小鸟的尾巴。用钢笔绘制出其中一根羽毛(画圆弧时按住alt键,等出现一个v形时拖动)。绘制完成后,用渐变画刷作为填充(#FFF4DF00,#FFB15800)。同时设置路径的边框为6.

    2011050313313914.jpg2011050313325497.jpg2011050313330445.jpg2011050313315362.jpg

    5.将路径复制3次,一共得到4个路径。调整每个路径到合适的位置,然后按住ctrl键选中4个路径,右击将他们合并到一个grid中,并将grid命名为tail。

    2011050313443575.jpg

    6.画一个圆作为小鸟的身体。用椭圆工具,按住alt键画圆。给圆形填充线性渐变(#FFF4C900,#FFA15000)。这时候你会发现你的渐变方向不对,选择渐变工具来调整方向。

    2011050313555061.jpg

    7.复制刚才画的圆,将圆略微缩小,用纯色画刷填充(#FF8E4903)。去掉stroke画刷,并改变透明度为41%。

    2011050314005819.jpg2011050314010495.jpg2011050314011060.jpg

    8.再次复制2个圆形,缩小后用纯色画刷填充(#FFFFFFFF)。并改变透明度为10%。

    2011050314095440.jpg2011050314100084.jpg2011050314123839.jpg

    9.复制最小的那个圆,移动到合适位置,用纯色画刷填充(#FF000000)。并改变透明度为20%。这个圆用来做小鸟眼部的阴影。将这个圆重命名为shadowEye。

    2011050314165971.jpg2011050314170381.jpg2011050314170919.jpg

    10.复制一个圆作为小鸟的眼睛。按照下图设置圆的属性。效果不一样的情况:没有讲透明度改为100,渐变的位置不对。

    2011050314201396.jpg2011050314202178.jpg2011050314202538.jpg

    11.绘制小鸟嘴吧。选择钢笔工具,绘制两个三角形。并按下图设置属性。用渐变工具可以改变渐变方向。如果小鸟嘴巴没有被身体遮住,调整一下位置。

    2011050314295537.jpg2011050314300113.jpg2011050314313464.jpg

    12.绘制小鸟的脚。选择椭圆工具,按住shift键,画出一个圆,并按照下图设置属性。(同样方法画出另外两个脚)

    2011050314371792.jpg2011050314372149.jpg2011050314372975.jpg

    13.画出小鸟眼睛。先用椭圆画出一个圆,设置一下属性。

    2011050314403762.jpg2011050314404246.jpg2011050314404790.jpg

    14.用同样的方法在中间画出瞳孔。(将两个圆合并到grid中,命名为eye_grid)

    2011050314423183.jpg2011050314423637.jpg2011050314424069.jpg

    15.选择钢笔工具,画出一个月牙形,并设置一下属性。

    2011050314531093.jpg2011050314531429.jpg2011050314532589.jpg2011050314533068.jpg(注意一下位置,eye_grid中只有2个椭圆,路径不在里面)

    16.画闭着眼睛的鸟。用椭圆工具画出3个园,属性分别为。

    2011050315001496.jpg2011050315001923.jpg2011050315002338.jpg

    17.用钢笔工具绘制一条曲线。设置如下属性。

    2011050315042762.jpg2011050315110093.jpg

    18.将3个园和一个路径合并到一个grid中,并命名为eyesClosed。然后将eyesClosed的opactity属性设为0.

    2011050315124430.jpg

    19.选择钢笔工具,绘制一个路径。设置如下属性。

    2011050315482018.jpg2011050315482671.jpg2011050315483152.jpg

    20.复制路径。设置如下属性。完成后将两个路径合并到一个grid中,命名为wingDown。

    2011050315500563.jpg2011050315500936.jpg2011050315501443.jpg

    20.将19步的路径复制,然后移动到合适位置。然后将改路径放入grid中,命名为wingUp。然后将wingUp的opacity设置为0.

    21.到这里我们的小鸟完成了。将所有的元素放到一个canvas中,命名为sbird。

    2011050316092839.jpg

    22.按F6开始动画设计。点击左下角的state,状态管理器。新建state group命名为Loop。然后再该组新建state命名为Hover。

    2011050409480770.jpg

    23.然后回到object and timeline面板,在sbird元素和tai元素的0帧处添加关键帧。(那一排0旁边的那个按钮就是添加关键帧按钮)

    2011050409505561.jpg

    24.选择sbird元素,将时间指针调到0.5s处(就是那根黄色的线)。然后按住方向键中的↓,让sbird元素向下位移一段距离。

    2011050409544232.jpg2011050409544871.jpg

    25.将时间指针调到1s处,然后按住方向键中的↑,让sbird元素回到原来位置。(tip:你可以先选中sbird元素在0s的关键帧,右击选择copy,然后将时间指针调到1s处按ctrl+v)。

    2011050409592642.jpg

    26.选中tail元素,将时间指针调到0.5s处。在属性面板中的transoft类别中,选择转换。在angle中填入你要让尾巴摆动的幅度。

    2011050410041017.jpg2011050410041671.jpg2011050410042214.jpg

    27.继续保持tail元素为选中状态,然后将时间指针调到1s处。在angle处输入0,小鸟尾巴变回原来形状。

    28.点击0s处得关键帧,右边出现属性面板,将easing变成如图所示。(0s处有2个关键帧!)

    2011050410085929.jpg2011050410090888.jpg

    29.点击0.5s处的关键帧。设置如图的属性。(0.5s的两个指针设置属性相同)。

    2011050410122727.jpg

    30.点击1s出的关键帧,重复29的步骤。属性设置为上图。完成后可以点击播放按钮看一下效果,小鸟是不是在上下动了。最后一步,点击hover,然后在属性面板将repeatbehavior属性设为forever。

    2011050410183568.jpg2011050410184067.jpg

    31.让小鸟眨动眼睛。在左下角的state面板中新建state group命名为Eye,然后新建两个state,分别命名为Blink,NoBlink。选中Blink开始动画。

    32.选中eyesClosed元素,分别在0,1 , 1.03 ,1.18 ,1.21 , 3.7 ,3.73 ,3.89 ,3.92 ,4.8 ,4.83 ,4.99 ,5.02处设置关键帧。

    2011050410260949.jpg

    33.保持eyesClosed元素为选中状态,分别点击1.03, 1.18 , 3.73,3.89,4.83, 4.99处得关键帧,将eyesClosed元素的opacity属性设置为100.

    2011050410305588.jpg2011050410310015.jpg2011050410310511.jpg

    34.分别点击每个关键帧,按照下图更改每个关键帧的属性。

    2011050410321426.jpg

    35.完成后按播放键,发现小鸟是不是开始眨眼了。选中Bink,然后在属性面板将repeatbehavior属性设为forever。最后一步,让小鸟会飞。

    2011050410455057.jpg2011050410455536.jpg

    36.点击左下角的state面板,新建state group命名为Wing,然后新建state命名为Wings。

    2011050410344989.jpg

    37.选择wingDown元素,然后在0,  0.1,   0.117, 0.233处设置关键帧。(对wingUp元素做同样处理)

    2011050410371941.jpg

    38.先保持wingDown元素为选中状态,然后在0.117s处修改wingDown元素的opacity属性。将opacity改为0.

    2011050410402773.jpg2011050410413244.jpg

    39.保持wingUp元素为选中状态,然后在0.117s处修改wingUp元素的opacity属性。将opacity改为100.

    2011050410425563.jpg2011050410430715.jpg

    40.选中wings,然后在属性面板将repeatbehavior属性设为forever。

    2011050410464659.jpg2011050410465183.jpg

    41.最后的最后,让你的小鸟在页面中运行。按F6退出动画模式,在VS中写入代码。没有VS的童鞋直接copy代码吧。

    2011050410485465.jpg

    42.在最外面的LayoutRoot中添加loaded事件。

    2011050410505146.jpg

    43.在bird的cs文件中写入事件。

    2011050410515011.jpg

    44.打开appApp.xaml.cs文件将Application_Startup事件做一些改动。

    2011050410531394.jpg

    this.RootVisual=new bird();这里的bird就是你要启动的项目,比如你项目中还有个cat文件呀作为启动项,这里就是cat。

    45.完工,按F5在页面中看看你的小鸟吧。

    2011050410551381.jpg

    posted on 2018-10-22 10:23 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/9828725.html

    展开全文
  • wpf 动画 2个窗体切换

    2014-06-05 15:55:00
    这关系到三角形呈现的是有正反面区分的,可以看出上面每三个点组成的一个三角形都是逆时针顺序的,这是因为WPF采用逆时针的环绕方式来显示正面, 或者用右手定则:握住右手,伸出拇指,四指为逆时针方向,拇指指向...
    <Window x:Class="翻转.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="420" Width="650"
            xmlns:local="clr-namespace:翻转"
            WindowStyle="None"
            ResizeMode="NoResize"
            AllowsTransparency="True"
            Background="Transparent"
            WindowStartupLocation="CenterScreen">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <Viewport3D Grid.Row="0" Margin="3">
                <Viewport3D.Camera>
                    <!--Position以世界坐标表示的摄像机位置 LookDirection定义摄像机在世界坐标中的拍摄方向的 Vector3D  NearPlaneDistance指定到摄像机近端剪裁平面的摄像机的距离-->
                    <PerspectiveCamera Position="0 0 800" LookDirection="0 0 -1" NearPlaneDistance="100"/>
                </Viewport3D.Camera>
                <Viewport3D.Children>
                    <ContainerUIElement3D>
                        <Viewport2DVisual3D>
                            <Viewport2DVisual3D.Geometry>
                                <MeshGeometry3D Positions="-200 150 0  -200 -150 0  200 -150 0  200 150 0" TriangleIndices="0 1 2  0 2 3" TextureCoordinates="0 0  0 1  1 1  1 0"/>
                            </Viewport2DVisual3D.Geometry>
                            <Viewport2DVisual3D.Material>
                                <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True"/>
                            </Viewport2DVisual3D.Material>
                            <Viewport2DVisual3D.Visual>
                                <local:UcSample1 Width="400" Height="300"/>
                            </Viewport2DVisual3D.Visual>
                        </Viewport2DVisual3D>
    
                        <Viewport2DVisual3D>
                            <Viewport2DVisual3D.Geometry>
                                <MeshGeometry3D Positions="200 150 0  200 -150 0  -200 -150 0  -200 150 0" TriangleIndices="0 1 2  0 2 3" TextureCoordinates="0 0  0 1  1 1  1 0"/>
                            </Viewport2DVisual3D.Geometry>
                            <Viewport2DVisual3D.Material>
                                <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True"/>
                            </Viewport2DVisual3D.Material>
                            <Viewport2DVisual3D.Visual>
                                <local:UcSample2 Width="400" Height="300"/>
                            </Viewport2DVisual3D.Visual>
                        </Viewport2DVisual3D>
                        <!-- 三维变换 转换方向 -->
                        <ContainerUIElement3D.Transform>
                            <RotateTransform3D CenterX="0.5" CenterY="0.5" CenterZ="0.5">
                                <RotateTransform3D.Rotation>
                                    <AxisAngleRotation3D x:Name="axr" Angle="0" Axis="0 1 0"/>
                                </RotateTransform3D.Rotation>
                            </RotateTransform3D>
                        </ContainerUIElement3D.Transform>
                    </ContainerUIElement3D>
                    <!--背景-->
                    <ModelVisual3D>
                        <ModelVisual3D.Content>
                            <DirectionalLight Color="Transparent"/>
                        </ModelVisual3D.Content>
                    </ModelVisual3D>
                </Viewport3D.Children>
            </Viewport3D>
            <StackPanel Grid.Row="1" Margin="0,5,0,6" Orientation="Horizontal" HorizontalAlignment="Center">
                <Button Padding="25,5" Content="向前" Click="OnClick"/> 
                <Button Padding="25,5" Content="向后" Click="OnClick" Margin="12,0,0,0"/>
                <Button Padding="25,5" Content="关闭" Click="OnClick" Margin="12,0,0,0"/>
            </StackPanel>
        </Grid>
    </Window>

      

    private void OnClick(object sender, RoutedEventArgs e)
    {
    Button btn = e.OriginalSource as Button;
    if (btn != null)
    {
    string s = btn.Content.ToString();
    if (s == "关闭")
    {
    this.Close();
    }
    DoubleAnimation da = new DoubleAnimation();
    da.Duration = new Duration(TimeSpan.FromSeconds(1));
    if (s == "向前")
    {
    da.To = 0d;
    }
    else if (s == "向后")
    {
    da.To = 180d;
    }
    this.axr.BeginAnimation(AxisAngleRotation3D.AngleProperty, da);
    }

    local:UcSample1 和 local:UcSample2为2个单独窗体

     

    说说 MeshGeometry3D 里 常用的 四个属性。

    先看看 MSDN 的 简介

    先说说 Positions,介绍说 是顶点位置的集合,什么意思,看张图片。

    这张简单描述了一个三位坐标系,里面有四个坐标点,也就是顶点位置,都已标出,也就组成了集合(Positions)。

    它所标示的是一个正方形,先放在这里,下面说一下TriangleIndices。

    往往分不清 TriangleIndices 和 Positions 的关系。

    举个例子:

    TriangleIndices="0 1 2 2 3 0"

    它所表示的是什么。每个数字什么意思。

    先讲一下概念,字面意思是三角形索引的集合。为什么要用到三角形呢,因为在3D图形的世界里,所有物体都可以被描述成为一系列三角形的集合。

    比如我们现在画的这个正方形,可以有两个三角形组成。

    那么TriangleIndices="0 1 2 2 3 0"  按照图片显示的可以翻译成 “P0 P1 P2,P2 P3 P0”,或者 0 对应 (-1,1,0),1 对应 (-1,-1,0),以此类推。

    这里面的每个数字对应这图片里的每个点。可是为什么这样对应呢。

    这关系到三角形呈现的是有正反面区分的,可以看出上面每三个点组成的一个三角形都是逆时针顺序的,这是因为WPF采用逆时针的环绕方式来显示正面,

    或者用右手定则:握住右手,伸出拇指,四指为逆时针方向,拇指指向正面。

    如果你那顺序反过来,会显示一片黑。因为你没描述背面。

    到这里基本就搞清了TriangleIndices 和 Positions 的关系。

    这两个也是比较主要的属性,因为另两个属性,不写的话,会自动判断来给出缺省值。

    来说说 Normals 和 TextureCoordinates。

    TextureCoordinates:纹理坐标用于确定将 Material 映射到构成网格的三角形的顶点的方式。 

    这个比较好理解,比如

    TextureCoordinates="0,0 0,1 1,1 1,0"

    一般材质的的正常坐标按照上图来说顺序依次是 P0,P3,P2,P1。也就是说 0,0 0,1 1,1 1,0 这是一个正常顺序,是按照本来画面显示的。

    但如果换成TextureCoordinates="1 0, 0 0, 0 1, 1 1",你会发现显示的画面向左倒了。

    这也和你定义的坐标集合有关系。

    最后是

    Normals:法向量是与定义网格的每个三角形的面垂直的向量。 法向量用于确定是否亮显给定三角形面。如果指定了三角形索引,则将考虑相邻面来生成法向量。

    转载于:https://www.cnblogs.com/JohnnyBao/p/3770499.html

    展开全文
  • 计算顶部三角形坐标方法: 1 /// <summary> 2 /// 获取顶三角形坐标 3 /// </summary> 4 /// <param name="r">外接圆半径(顶点到中心的距离)</param> 5 /// <pa...
  • 转自:http://www.silverlightchina.net/html/tips/2011/0504/7358.html 本文来自奶油vivi的博客,原文地址:... Silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发) 时间:20...
  • WPF XAML 线

    千次阅读 2018-08-13 14:23:53
    --三角形线头-->   StrokeThickness="8">  <!--竖线-->  <Line X1="200" Y1="10" X2="200" Y2="500" Stroke="Red" StrokeDashArray="10" StrokeThickness="9"></Line>  <!--渐变线-->   ...
  • WPF中二维图形的坐标系将原点定位在呈现区域(通常是屏幕)的左上角。 在二维系统中,x 轴上的正值朝右,y 轴上的正值朝下。 在三维坐标系中,原点位于呈现区域的中心,x 轴上的正值朝右,y 轴上的正值朝上,z 轴上...
  • C# graphics polygon 画三角形

    万次阅读 2012-09-04 19:34:08
    今天下午在写一个小项目,要一个三角形,但是vs中并没有这样一个函数可以用来调用来直接输入三点然后出一个三角形, 或许是微软的程序员们觉得这个太简单了吧,这个小函数都不值得添到函数库中。 弄了几个...
  •   在WPF中,刷的使用无处不在,可以说刷是整个WPF体系里不可或缺的一部分,在刷中,从渲染效果的特征来看,可以分为纯色刷、线性渐变刷、径向渐变刷。每一种刷都有其适用的场景,下面将介绍几种刷...
  • 有关如何使用C#代码在WPF中制作动画3D机器人的系列文章的第一部分
  • WPF画三角形的代码中,摄像机的代码如下;包含2个Direction属性; <PerspectiveCamera Position="-2,2,2" LookDirection="2,-2,-2" UpDirection="0,-1,0"/> 来看一下什么是上方向; WPF中camera中的...
  • WPF

    2016-09-01 02:01:03
    WPF编程宝典》 观书笔记,请支持正版图书WPF的体系结构: 在顶层,应用程序与完全由托管C#代码编写的一组高层服务进行交互。 将.NET对象转换为Direct3D纹理和三角形的实际工作,在后台由一个名为milcore.dll的...
  • 有关如何使用C#代码在WPF中制作动画3D机器人的系列文章的第一部分
  • WPF中的简单水动画

    2019-05-01 11:53:00
    WPF中的简单水动画 原文https://stuff.seans.com/2008/08/21/simple-water-animation-in-wpf/ 很多年前(80年代中期),我在一家拥有Silicon Graphics工作站的公司工作。在旨在展示SGI机器高端图形的...
  • 原文:WPF进阶教程 - 使用Decorator自定义带三角形的边框 写下来,备忘。  Decorator,有装饰器、装饰品的意思,很容易让人联想到设计模式里面的装饰器模式。Decorator类负责包装某个UI元素,用来提供额外的行为。...
  • WPF简单模拟QQ登录背景动画 原文:WPF简单模拟QQ登录背景动画介绍 之所以说是简单模拟,是因为我不知道QQ登录背景动画是怎么实现的....把点连起来,连成三角形.布局在外层蓝色的里,显示只显示里层...
  • 路径的绘制的方法 ...首先绘画三条直线拼接出一个三角形 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 656
精华内容 262
关键字:

wpf画三角形