精华内容
下载资源
问答
  • WPF乱炖之2:WPF 图形特性 内容简要: 1.1 理解Windows图形 15年以来,Windows开发人员一直在使用本质上相同的显示技术,如果您不了解这一实际情况,那么就很难理解WPF的变化有多么大。标准的Windows应用...

    WPF乱炖之2:WPF 图形特性


    内容简要: 1.1 理解Windows图形 15年以来,Windows开发人员一直在使用本质上相同的显示技术,如果您不了解这一实际情况,那么就很难理解WPF的变化有多么大。标准的Windows应用程序依赖于Windows操作系统的如下两个部分来创建用户界面,这两个部分已经使用了很长时间: User32 该部分为许多元素提供了类似的窗口外观,如窗
      

      内容简要:

      1.1 理解Windows图形

      15年以来,Windows开发人员一直在使用本质上相同的显示技术,如果您不了解这一实际情况,那么就很难理解WPF的变化有多么大。标准的Windows应用程序依赖于Windows操作系统的如下两个部分来创建用户界面,这两个部分已经使用了很长时间:

      User32 该部分为许多元素提供了类似的窗口外观,如窗口、按钮、文本框等。

      GDI/GDI+ 该部分为渲染简单形状、文本以及图像提供绘图支持,但是非常复杂(而且通常性能较差)。

      在过去的几年里,这两种技术一直在改进,并且开发人员使用的与之交互的API也已经发生了很大的变化。但不管是使用.NET和Windows窗体,还是使用过去的Visual Basic 6或基于C++代码的MFC,在底层都是使用Windows操作系统的相同部分来工作的。新的框架工具为使用User32和GDI/GDI+进行交互提供了更好的封装。这些框架工具提高了开发效率,降低了复杂性,并且提供了更多的特性,使开发人员不必再自己编写底层代码,但是这些框架工具不可能避免系统组件在设计上的基本限制,这些限制已经存在了十多年。

      注意:

      User32和GDI/GDI+的基本版本是在15年之前引入的,它们是在Windows 3.0中建立的。当然,User32在那时简化了用户操作,因为那时软件还未进入32位的世界。

      1.2 DirectX:新的图形引擎

      Microsoft针对User32和GDI/GDI+库的限制,提供了一个解决方案:DirectX。DirectX开始作为一个附加的工具包,用于在Windows平台上开发游戏。DirectX在设计上主要关注的是速度,为此,Microsoft和显卡供应商紧密合作,以便为DirectX提供复杂的纹理映射、特殊效果(如半透明)以及三维图形所需要的硬件加速功能。

      在DirectX第一次发布(在Windows 95发布之后不久发布)的几年后,DirectX就变得很成熟了。现在DirectX已经成为Windows的组成部分,支持所有现代的显卡。然而,DirectX编程API,正如最初设计它的目的,仍然主要是作为游戏开发人员的工具包。因为它本来就很复杂,所以DirectX几乎不用于传统类型的Windows应用程序(如商业软件)。

      WPF改变了这一现状。在WPF中,底层的图形技术不再是GDI/GDI+,而是DirectX。需要强调的是,不管创建哪种用户界面,WPF应用程序在底层都是使用DirectX。这意味着不管是设计复杂的三维图形(这是DirectX的特长),还是仅仅绘制几个按钮以及简单的文本,所有的绘图工作都是通过DirectX管线来完成的。因此,即使是最普通的商业应用程序也能够使用丰富的效果,如半透明和反锯齿。使用WPF还可以受益于硬件加速,DirectX在渲染图形时会将尽可能多的工作交给GPU(图形处理单元)进行处理,WPF简化了这一过程,GPU是显卡专用的处理器。

      注意:

      因为DirectX能够理解高层的元素,如纹理和渐变,这些要素可以由显卡直接渲染,所以DirectX更加高效。而GDI/GDI+不理解这些高层的元素,所以需要将它们转换成逐像素指令,而用现代显卡渲染这些指令是非常慢的。

      User32在一定程度上仍然被保留了下来。因为对于特定的服务,WPF仍然依赖于User32,例如,处理和传递输入以及区分哪个应用程序实际拥有屏幕的哪一部分。但是,所有的绘图操作都是由DirectX完成的。

      注意:

      对于GDI/GDI+,WPF不再是一个封装器,而是一个通过DirectX工作的独立层次,这是在WPF中最重要的变化。

      1.3 硬件加速与WPF

      您可能知道显卡在支持特定渲染特性和优化方面的区别。当使用DirectX进行编程时,这可能是最令人头痛的问题。而使用WPF则可以不必关心显卡的问题,因为通过使用软件计算而不依赖显卡提供的内在支持,WPF可以执行任何渲染操作。

      注意:

      对于WPF软件支持有一个例外。因为驱动程序的支持不够好,只有在Windows Vista(并且在本地安装有Windows Vista显卡驱动程序)上运行应用程序时,WPF才会为三维绘图操作提供反锯齿处理。也就是说,如果在安装Windows XP的计算机上绘制三维图形,最终的图形边缘会有轻微的跳动而不是平滑的直线。对于二维绘图,WPF仍然提供反锯齿处理,而不管使用的是哪种操作系统,也不管驱动程序是否支持。

      具有一块功能强大的显卡并不能保证在WPF中一定能获得硬件加速功能。软件仍然具有非常重要的作用。例如,如果使用过期的驱动程序,WPF就不能为显卡提供硬件加速功能(如果使用老显卡,这些过期的显卡驱动很有可能是在零售发布包中提供的)。在Windows Vista操作系统中,WPF可以提供更好的性能,因为WPF可以充分利用新的Windows Vista显示驱动模型(Windows Vista Display Driver Model,WDDM)。相对于Windows XP的显示驱动模型(Windows XP Display Driver Model,XPDM),WDDM提供了几处非常重要的改进。其中最重要的改进是,WDDM允许几个GPU操作立刻执行,并且当所需的显存量超出所能得到的显存量时,允许显存内容整页面地转到常规内存中。

      作为首要的通用规则,WPF为2004年11月之后创建的所有WDDM(Windows Vista)驱动和XPDM(Windows XP)驱动提供了几类硬件加速功能,2004年12月,Microsoft发布了新的驱动程序开发指导原则。当然,支持的程度是有所不同的。当WPF基础架构第一次出现的时候,通过在显卡旁边印上"WPF Tiers"来评价显卡的性能,并对显卡从0级到2级进行分级。

      作为WPF承诺的一部分,不必担心特定硬件的细节和功能。WPF非常智能,它会尽可能地利用硬件优化功能,并且为任何操作提供了软件处理底线。所以如果在一台使用老显卡的计算机上运行WPF应用程序,仍然会以您所期望的方式显示用户界面。当然,使用软件处理的替代方法,速度会非常慢,所以在使用老显卡的计算机上不能很好地运行WPF应用程序,特别是那些包含复杂动画或其他强大图形效果的WPF应用程序。实际上,可以根据客户端硬件加速所支持的程度(由RenderCapability.Tier属性指示),来减少用户界面中复杂的特殊效果。

      注意:

      WPF的目标是将尽可能多的工作交给显卡处理,所以复杂图形通常属于渲染范围(由GPU处理)而不属于处理器范围(由计算机的CPU处理)。也就是说,可以让CPU空闲下来去完成其他工作,充分利用显卡的功能,并且还可以充分利用未来新显卡所具备的不断增加的新功能。

      WPF渲染级别(WPF TIERS)

      显卡功能的区别是非常重要的。当WPF访问显卡时,它会考虑许多因素,包括显卡上RAM的数量、对像素着色器(pixel shader)的支持(显卡提供的计算每个像素效果的程序,如透明效果),以及对顶点着色器(vertex shader)的支持(显卡提供的计算每个三角形顶点数值的程序,如3D对象的着色)。根据这些细节,WPF会指定一个渲染级别值。

      WPF提供了三个渲染级别,如下所示:

      Rendering Tier 0:显卡将不提供任何硬件加速功能。该级别和7.0或更低版本的DirectX相对应。

      Rendering Tier1:显卡可以提供部分硬件加速功能。该级别和7.0以上9.0以下版本的DirectX相对应。

      Rendering Tier2:所有的特性都将被硬件加速。该级别和DirectX 9.0及以上版本相对应。

      在某些情况下,可能想通过程序来检查当前显卡的渲染级别,从而可以有选择地为功能较差的显卡禁用一些图形特性。为此,需要使用System.Windows.Media.RenderCapability类的Tier静态属性。但是还需要一个技巧。为了通过Tier属性检查显卡的WPF渲染级别值,需要将它移动16位,如下所示:

    int renderingTier = (RenderCapability.Tier>>16); 
    if(renderingTier == 0) 
    { … } 
    else if(renderingTier == 1) 
    { … } 
    展开全文
  • WPF特性 看来WPF的概要和特性时候,发现有些知识点是我遗漏的 为了便于以后方便使用就把全部亮点都罗列出来,以下观点纯属个人意见,如有错误欢迎探讨。 (1)广泛整合性:这个说实话,这个有,但是其他的技术...

    WPF的特性

    看来WPF的概要和特性时候,发现有些知识点是我遗漏的

    为了便于以后方便使用就把全部亮点都罗列出来,以下观点纯属个人意见,如有错误欢迎探讨。

    (1)广泛整合性:这个说实话,这个有,但是其他的技术也可以有。个人不认为是什么亮点

    (2)分辨率无关:WPF使用的是矢量图形,可以省去分辨率的考虑。以前的一个物流项目的做帮助板块

    图片的排版,做得简直就是噩梦啊,因为要应对的显示器类型实在多。

    #补足一下#,虽然书本上列出了,WPF与分辨率无关,但是实际项目上的排版还是应该要注意下的。

    我现在的项目中就碰到了FHD屏幕与SXGA屏幕时候,画面有文字被切的事情,后来是写代码把它修正了

    (3)硬件加速:WPF是基于Direct3D创建的。#注意#在WPF中,无论与是2D还是3D的图形或者文字内容都是会转成3D

    三角形,材质和其他Direct3D对象,并由硬件负责渲染。关于图形呈现技术这块,目前自己掌握的知识还是比较少,

    但是最近项目已经到发现了几个负荷测试点,画面启动大于了0.5秒,要把它压到0.5秒以下。与3D相关的目前基本偏少,

    据我的经验来说,如果没有应用到DierctX的图像技术的,虽然特性有说他有硬件负责渲染,基本不影响速度。

    #补足#

              WPF没有提供任何Windows Vista专用的API。但是有两个有趣的隐藏特性在早期Windows

              版本中不受支持:

              ? 仅在Windows Vista及其以后的版本中,3D 对象有抗锯齿特性。

              ? 仅在Windows Vista及其以后的版本中,非矩形或者透明窗口才支持硬件加速。

              当然,WPF控件有不同的默认主题来匹配它们的宿主操作系统(Windows Vista匹配Aero,

              更早期系统匹配Luna或者Classic)(现在Winodws8 是不是就是Metro了呢?)

              Windows Vista中一个有利于WPF应用程序的重大改进是,有一个新的驱动模型来解决资

              源争夺的问题。它会对GPU资源进行虚拟化和安排,当多个使用GPU的应用程序同时运行时,

              它可以让你的系统运行得更顺畅。在Windows XP系统中,运行多个WPF或DirectX应用程序可

              能会让系统出现停顿,但在Windows Vista系统中,不会引起任何性能问题。

    (4)声明式编程:看来看去主要说的是XAML,但是关于每项技术都是有自己的特殊定义格式,

    把它列为亮点有点太牵强了,几年前做的一个涂料方程式管理系统里就使用了,Flex那个时候不也一样

    有自己的定义文件MXML,所以刚接触WPF时候,第一感觉就是WPF是Microsoft为了对抗富有化应用的

    技术。

    (5)富创作和定制(Rich Composition & Customization):这个亮点实在是太方便,我个人觉得WPF最精妙之处就在这里了。

    (6)易于部署:这个我感觉是被硬挤出来的。。NET的程序本来部署都是比较方便的,小规模的程序都是有与之相对的

    Framework就能运行。

    ===================================================

     

    转载于:https://www.cnblogs.com/wuzhenyi/archive/2012/12/23/2830147.html

    展开全文
  • WPF中添加3D特性

    2018-10-23 14:51:00
    WPF中添加3D特性 原文:在WPF中添加3D特性 35.4 在WPF中添加3D特性 本节介绍WPF中的3D特性,其中包含了开始使用该特性的信息。 提示: WPF中的3D特性在System.Windows.Media.Media3D...
    原文:在WPF中添加3D特性

    35.4  在WPF中添加3D特性

    本节介绍WPF中的3D特性,其中包含了开始使用该特性的信息。

    提示:

    WPF中的3D特性在System.Windows.Media.Media3D命名空间中。

    为了理解WPF中的3D特性,一定要知道坐标系统之间的区别。图35-22显示了WPF 3D中的坐标系统。原点位于中心。X轴的正值在右边,负值在左边。Y轴是垂直的,正值在上边,负值在下边。Z轴在指向观察者的方向上定义了正值。

     
    图  35-22

    表35-9描述了最重要的类及其功能。

    表  35-9

     

       

    ViewPort3D

    ViewPort3D定义了3D对象的渲染表面。这个元素包含3D绘图的所有可见元素

    ModelVisual3D

    ModelVisual3D包含在ViewPort3D中,它包含了所有可见元素。可以给完整的模型指定变换

    GeometryModel3D

    GeometryModel3D包含在ModelVisual3D中,它包含网格和材质

    Geometry3D

    Geometry3D是一个抽象基类,定义了几何形状。派生于Geometry3D的类是MeshGeometry3D。使用MeshGeometry3D可以定义三角形的位置,建立3D模型

    Material

    Material是一个抽象基类,定义了MeshGeometry3D指定的三角形的前边和后边。Material包含在GeometryModel3D中。.NET 3.5定义了几个材质类,例如DiffuseMaterialEmissiveMaterialSpecularMaterial。根据材质的类型,以不同的方式计算灯光。EmissiveMaterial利用灯光的计算,使材质发出等于笔刷颜色的光。DiffuseMaterial使用漫射光,SpecularMaterial定义了镜面发光模型。使用MaterialGroup类可以创建由其他材质合并而成的材质

    Light

    Light是灯光的抽象基类。其派生类有AmbientLightDirectionalLightPointLightSpotLightAmbientLight是不自然的光,会近似照亮整个场景。使用这种光看不到边界。DirectionalLight定义了定向光。太阳光就是一种定向光,光线来自一边,此时可以看到边界和阴影。PointLight是一种位于指定位置的光,会照亮所有的方向。SpotLight照亮指定的方向。这个光定义了一个圆锥,会得到一个发出光亮的区域

    Camera

    Camera是摄像机的抽象基类,用于把3D场景映射为2D显示。其派生类是PerspectiveCameraOrthographicCameraMatrixCamera。在PerspectiveCamera中,3D对象离得越远就越小,这不同于OrthographicCamera,在Orthographic Camera中,摄像机的距离对对象的大小没有影响。在MatrixCamera中,可以在矩阵中定义视图和变换

    Transform3D

    Transform3D3D变换的抽象基类。其派生类是RotateTransform3DScaleTransform3DTranslateTransform3DMatrixTransform3DTransform3D GroupTranslateTransform3D允许在xyz向上变换对象,ScaleTransform3D可以重置对象的大小。RotateTransform3D可以在xyz向上把对象旋转指定的角度。Transform3DGroup可以合并其他变换效果

     

    三角形

    本节从一个简单的3D示例开始。3D模型由三角形组成,所以最简单的模型是一个三角形。三角形用MeshGeometry3D的Positions属性定义。3个顶点都使用相同的z坐标-4,x、y坐标分别为-1-1、1-1和01。属性TriangleIndices指定了逆时针的位置顺序。使用这个属性可以确定三角形的哪一边是可见的。三角形的一边显示了用GeometryModel3D类的Meterial属性定义的颜色,其他边显示了BackMeterial属性定义的颜色。

    用于显示场景的摄像机位于坐标0,0,0,其方向指向0,0,-8。把摄像机的位置改变到左边,矩形就移动到右边,反之亦然。改变摄像机的y位置,矩形就会变大或变小。

    这个场景中使用的光线是AmbientLight,它用白色光照亮了整个场景。图35-23显示了三角形的效果。

    < Window x:Class="Triangle3D.Window1"
    xmlns=""
    xmlns:x=""
    Title="3D" Height="300" Width="300" >
    < Grid >
    < Viewport3D >
    < 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 >
    < /Viewport3D >
    < /Grid >
    < /Window >

     

     

      
    图  35-23

     

     

    1. 改变光线

    图35-23仅显示了一个简单的三角形,它与2D的效果相同。但是,下面将继续添加3D特性。例如,用SpotLight元素把环境光改为聚光灯,就可以看到三角形的另一个外观,使用聚光灯可以定义光源的位置和光线的照射方向。给光源的位置指定-1 1 2,光就位于三角形的左边顶点处,其y坐标是三角形的高度。之后,光线向下向左照射。图35-24显示了三角形的新外观。

    < ModelVisual3D >
    < ModelVisual3D.Content >
    < SpotLight Position="-1 1 -2" Color="White"
    Direction="-1.5, -1, -5" / >
    < /ModelVisual3D.Content >
    < /ModelVisual3D >

     

     
    图  35-24

    2. 添加纹理

    除了给三角形的材质使用纯色笔刷之外,还可以使用其他笔刷,例如LinearGradient- Brush,如下面的XAML代码所示。用DiffuseMeterial定义的LinearGradientBrush元素指定了黄色、橙色、红色、蓝色和紫罗兰色的渐变点。要把使用这种笔刷的对象的2D表面映射到3D几何体上,必须设置TextCoordinates属性。TextCoordinates定义了2D点的集合,它可以映射到3D位置上。图35-25显示了示例应用程序中笔刷的2D坐标。三角形中的第一个位置-1-1映射到笔刷坐标0 1上,右下角的位置1 -1映射到笔刷的1 1上,即紫罗兰色;0 1映射到0.5 0上。图35-26显示了材质为渐变笔刷的三角形,这里也使用了环境光。

     
    图  35-25

     
    图  35-26

     

     

    < 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 >

     

    提示:

    可以用类似的方式添加文本和其他控件。为此,只需用要绘制的元素创建VisualBrush。VisualBrush详见第34章。

     

     

    3. 3D对象

    下面研究真正的3D对象:立方体。立方体由5个矩形组成:后面、前面、左面、右面和底面。每个矩形都由两个三角形组成,因为这是网格的核心。在WPF和3D术语中,网格用于描述建立3D形状的基本三角形。

    下面是立方体中前面矩形的代码,该矩形由两个三角形组成。三角形的位置按TriangleIndies定义的逆时针设置。立方体的前面用红色的笔刷绘制,后面用灰色笔刷绘制。这两个笔刷都是SolidColorBrush类型,用Window的资源定义。

    < !-- Front -- >
    < GeometryModel3D >
    < GeometryModel3D.Geometry >
    < MeshGeometry3D
    Positions="-1 -1 1, 1 -1 1, 1 1 1, 1 1 1,
    -1 1 1, -1 -1 1"
    TriangleIndices="0 1 2, 3 4 5" / >
    < /GeometryModel3D.Geometry >
    < GeometryModel3D.Material >
    < DiffuseMaterial Brush="{StaticResource redBrush}" / >
    < /GeometryModel3D.Material >
    < GeometryModel3D.BackMaterial >
    < DiffuseMaterial Brush="{StaticResource grayBrush}" / >
    < /GeometryModel3D.BackMaterial >
    < /GeometryModel3D >

    其他矩形非常类似,只是在不同的位置上。下面是立方体左面的XAML代码:

    < !-- Left side -- >
    < GeometryModel3D >
    < GeometryModel3D.Geometry >
    < MeshGeometry3D
    Positions="-1 -1 1, -1 1 1, -1 -1 -1, -1 -1 -1, -1 1 1,
    -1 1 -1"
    TriangleIndices="0 1 2, 3 4 5" / >
    < /GeometryModel3D.Geometry >
    < GeometryModel3D.Material >
    < DiffuseMaterial Brush="{StaticResource redBrush}" / >
    < /GeometryModel3D.Material >
    < GeometryModel3D.BackMaterial >
    < DiffuseMaterial Brush="{StaticResource grayBrush}" / >
    < /GeometryModel3D.BackMaterial >
    < /GeometryModel3D >

    提示:

    示例代码为立方体的每个面定义了一个GeometryModel3D,仅是为了更好地理解代码。只要每个面都使用相同的材质,就可以定义一个网格,它包含立方体所有面的全部10个三角形。

    所有的矩形都在Model3DGroup中组合,所以可以对立方体的所有面进行变换:

    < !-- the model -- >
    < ModelVisual3D >
    < ModelVisual3D.Content >
    < Model3DGroup >
    < ! - GeometryModel3D elements for every side of the box -- >
    < /Model3DGroup >

    使用Model3DGroup的Transform属性,就可以变换这个组中的所有几何体。下面使用RotateTransform3D定义一个AxisAngleRotation3D。要在运行期间旋转立方体,Angle属性要绑定到Slider控件的值上。

    < !-- Transformation of the complete model -- >
    < Model3DGroup.Transform >
    < RotateTransform3D CenterX="0" CenterY="0" CenterZ="0" >
    < RotateTransform3D.Rotation >
    < AxisAngleRotation3D x:Name="axisRotation"
    Axis="0, 0, 0"
    Angle="{Binding Path=Value,
    ElementName=axisAngle}" / >
    < /RotateTransform3D.Rotation >
    < /RotateTransform3D >
    < /Model3DGroup.Transform >

    为了查看立方体,需要一个摄像机。这里使用PerspectiveCamera,因此立方体离摄像机越远,就越小。摄像机的位置的方向在运行期间设置。

    < !-- Camera -- >
    < Viewport3D.Camera >
    < PerspectiveCamera x:Name="camera"
    Position="{Binding Path=Text,
    ElementName=textCameraPosition}"
    LookDirection="{Binding Path=Text,
    ElementName=textCameraDirection}" / >
    < /Viewport3D.Camera >

    应用程序使用两个不同的光源,其中一个光源是DirectionalLight:

    < !-- directional light -- >
    < ModelVisual3D >
    < ModelVisual3D.Content >
    < DirectionalLight Color="White" x:Name="directionalLight" >
    < DirectionalLight.Direction >
    < Vector3D X="1" Y="2" Z="3" / >
    < /DirectionalLight.Direction >
    < /DirectionalLight >
    < /ModelVisual3D.Content >
    < /ModelVisual3D >

    另一个光源是SpotLight。使用这个光源可以突出显示立方体的一个特定区域。SpotLight定义了属性InnerConeAngle和OuterConeAngle,以指定完全照亮的区域:

    < !-- spot light -- >
    < ModelVisual3D >
    < ModelVisual3D.Content >
    < SpotLight x:Name="spotLight"
    InnerConeAngle="{Binding Path=Value,
    ElementName=spotInnerCone}"
    OuterConeAngle="{Binding Path=Value,
    ElementName=spotOuterCone}"
    Color="#FFFFFF"
    Direction="{Binding Path=Text, ElementName=spotDirection}"
    Position="{Binding Path=Text, ElementName=spotPosition}"
    Range="{Binding Path=Value, ElementName=spotRange}" / >
    < /ModelVisual3D.Content >
    < /ModelVisual3D >

    运行应用程序,就可以改变立方体的旋转角度、摄像机和灯光,如图35-27所示。

     
    图  35-27

    提示:

    创建仅包含矩形或三角形的3D模型是很简单的。不应手工创建更复杂的模型,而应使用对应的工具。WPF的3D工具在www.codeplex/3DTools上。

     

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

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

    展开全文
  • WPF的新特性

    2009-04-26 19:19:00
    用过WPF的人应该都会感到WPF如此的好用和强大,以至于只要可以,就会尽量使用WPF而不是以前的技术开发软件。那么 WPF与以前的技术比如MFC,WinForm之间的根本性区别在哪里?(1)xaml配置文件配置界面。一个可配置的...

     用过WPF的人应该都会感到WPF如此的好用和强大,以至于只要可以,就会尽量使用WPF而不是以前的技术开发软件。那么 WPF与以前的技术比如MFC,WinForm之间的根本性区别在哪里?

    (1)xaml配置文件配置界面。一个可配置的界面使得代码更加简单清晰,让界面和逻辑的分离更加自然。

    (2)Data Binding技术。这个技术使得界面真正的跟逻辑分离,使得用户不必关注界面的更新。MFC也有类似的技术比如DDX/DDV,但是WPF的Data Binding技术更加自动化,可扩展性更高。

    展开全文
  • WPF 4 新特性

    2011-08-16 14:26:00
    WPF 4 新特性 提供了更多的控件 新增加了DataGrid、DatePicker、Calendar以及WebBrowser。 2D绘图改进 现在任何元素的可视化外观都能够通过像素着色器进行极大的改变,以得到PhotoShop风格的效果。...
  • UpdateSourceTrigger主要有三个点做下简要说明 Explicit:手动更新 LostFocus:失去焦点时更新 ProPertyChange:属性源改变就立即改变 转载于:https://www.cnblogs.com/jiangyan219/articles/9881091.html...
  • wpf

    2017-04-27 09:33:52
    下面先整理下,本人主要学习的WPF参考书: 1、WPF编程宝典(C#2010) ![wpf编程宝典(C#2010)] ![wpf]...
  • WPF 毛玻璃 窗体 及 拖拽 特性 工程 样例 framework4.0 visual 2010
  • WPF Elements是Mindscape公司旗下的一款用户界面控件套包,包含50余子个控件,可帮助开发者简单快速的创建下一代应用...现在WPF Elements 5又增添了一些新特性,使得这款控件锦上添花,下面就来看一下。http://www.e
  • WPF 框架开发中,其实...本文告诉大家如何给 WPF 框架加入 InternalsVisibleToAttribute 特性让其他程序集可以访问 internal 权限成员 如果我不新加入一个程序集,而是在原有的程序集开发,加上新功能,是否可行
  • WPF

    2016-09-01 02:01:03
    WPF编程宝典》 观书笔记,请支持正版图书WPF的体系结构: 在顶层,应用程序与完全由托管C#代码编写的一组高层服务进行交互。 将.NET对象转换为Direct3D纹理和三角形的实际工作,在后台由一个名为milcore.dll的...
  • WPF 参照WPF实现Silverlight中的多值绑定特性 2013-04-17 11:20 by swarb, ... 阅读, ... 评论, 收藏, 编辑 前言 数据绑定在WPF和Silvelright开发中的作用不言而喻,无处不在的绑定,节省了大量的代码...
  • WPF QuickStart系列

    2015-08-05 23:17:00
    接触WPF有一段时间了,现在做的项目也是WPF相关的。...当中也会有一些自己对WPF特性的理解写下来,锻炼自己的文笔和语言组织能力。下面是写博客的计划, 1、附加属性(Attached Property); 2、依赖属...
  •  Mindscap WPF Elements 5.1发布了,全新的版本中拥有多个新的控件,在性能上也有很大的提高,...如果你是一个从事于WPF开发的人员,相信新版的WPF Elements 5.1将会是最完善的WPF界面开发工具集,下面就来的看几个
  • WPF揭秘PDF格式

    2013-09-09 14:43:33
    ·以令人难以置信的深度讲解WPF 特性:控件、布局、资源、数据绑定、样式、图形、动画等。 ·研究许多书中没有涉及的主题,如3D、语音、音频/视频、文档、位图特效等。 ·演示如何创建流行的UI 元素,例如Microsoft ...
  • 示例描述:本章学习WPF提供的布局特性。 CanvasDemo 使用Canvas进行布局。 DockPanelDemo 使用DockPanel进行布局。 GridDemo 使用Grid进行布局。 InkCanvasDemo 使用InkCanvas的示例。 ...
  • 不过可以 使用特性来减少代码量 CallerMemberName可以代替手工输入名称   public class Test:INotifyPropertyChanged { protected void OnPropertyChanged([CallerMemberName] string name= ...
  • WPF 特性之一 附加属性 在本文里实现文本框内容的验证 public class TextBoxHelper:DependencyObject { public static bool GetisOnlyNumber(DependencyObject obj) { return (bool)obj.GetVal...
  • 本文介绍利用WPF创建一个含有以下特性的窗口:有窗口阴影,比如QQ窗口外围只有几像素的阴影;支持透明且无边框,为了自行美化窗口通常都会想到使用无边框窗口吧;可正常最大化,WPF无边框窗口直接最大化会直接使窗口...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,972
精华内容 5,988
关键字:

wpf特性