- 浏览: 648113 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
abao1:
老贾 在安装IDEA的过程中,在激活步骤时,按如下操作即可: ...
IntelliJ IDEA 2016注册方法和注册码 -
bo_hai:
./usr/bin/java: symbol lookup ...
jmagick安装步骤 -
wxcking:
不错的, 收藏一下
JAVA使用POI生成Excel文件 -
zgyfh:
大哥,密码是多少啊?zgyfh@tom.com谢谢了!新手学习 ...
WPF做的必备示例 -
记忆无泪:
jiasongmao 写道你的邮箱是多少,我可以发源代码到邮箱 ...
WPF做的必备示例
通过上一节的解说,大家是否已经对HLSL有了较深刻的认识和理解,HLSL的渲染不仅仅局限于静态处理,通过时时更新HLSL代码的各全局变量值同样可以实现动画形式的渲染,非常Cool对吧~。那么本节我将向大家介绍如何在Silverlight平台上实现HLSL动画渲染特效。
以BandedSwirl(螺旋波纹)渲染特效为例,我们首先要做的是按照上一节的方法将BandedSwirl.ps文件添加进项目中,同时创建一个对应的BandedSwirl.cs文件:
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Effects;
namespace Silverlight.Shader {
public class BandedSwirl : ShaderEffect {
public static DependencyProperty InputProperty = ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(BandedSwirl), 0);
public static DependencyProperty CenterProperty = DependencyProperty.Register("Center", typeof(System.Windows.Point), typeof(BandedSwirl), new PropertyMetadata(new System.Windows.Point(), PixelShaderConstantCallback(0)));
public static DependencyProperty SpiralstrengthProperty = DependencyProperty.Register("Spiralstrength", typeof(double), typeof(BandedSwirl), new PropertyMetadata(new double(), PixelShaderConstantCallback(1)));
public static DependencyProperty DistancethresholdProperty = DependencyProperty.Register("Distancethreshold", typeof(double), typeof(BandedSwirl), new PropertyMetadata(new double(), PixelShaderConstantCallback(2)));
public BandedSwirl(PixelShader shader) {
PixelShader = shader;
this.UpdateShaderValue(InputProperty);
this.UpdateShaderValue(CenterProperty);
this.UpdateShaderValue(SpiralstrengthProperty);
this.UpdateShaderValue(DistancethresholdProperty);
}
public virtual System.Windows.Media.Brush Input {
get {
return ((System.Windows.Media.Brush)(GetValue(InputProperty)));
}
set {
SetValue(InputProperty, value);
}
}
public virtual System.Windows.Point Center {
get {
return ((System.Windows.Point)(GetValue(CenterProperty)));
}
set {
SetValue(CenterProperty, value);
}
}
public virtual double Spiralstrength {
get {
return ((double)(GetValue(SpiralstrengthProperty)));
}
set {
SetValue(SpiralstrengthProperty, value);
}
}
public virtual double Distancethreshold {
get {
return ((double)(GetValue(DistancethresholdProperty)));
}
set {
SetValue(DistancethresholdProperty, value);
}
}
}
}
接下来在后台cs代码中创建渲染特效实例:
pixelShader = new PixelShader() {
UriSource = GetShaderUri("BandedSwirl.ps")
};
BandedSwirl bandedSwirl = new BandedSwirl(pixelShader) {
Center = new Point(0.5, 0.5),
Spiralstrength = 1,
Distancethreshold = 0
};
Spirit.Effect = bandedSwirl;
最后就是关键环节了,如何实现动画效果呢?大家是否有注意到BandedSwirl类中的CenterProperty、SpiralstrengthProperty、DistancethresholdProperty这三个DependencyProperty(关联属性)参数,它们分别代表该渲染特效的中心、螺旋强度和延伸阈值。由于是关联属性,所以我们可以直接使用Storyboard去实现基于它们的渐变动画,那么以动态修改Distancethreshold值为例,具体实现代码如下:
BeginShaderAnimation(bandedSwirl, 0, 1, 3, "Distancethreshold");
/// <summary>
/// 启动渲染动画
/// </summary>
private void BeginShaderAnimation(DependencyObject shader, double from, double to, double timeSpanFromSeconds, string dependencyProperty) {
if (storyboard != null) { storyboard.Stop(); }
storyboard = new Storyboard();
storyboard.RepeatBehavior = RepeatBehavior.Forever;
storyboard.AutoReverse = true;
doubleAnimation = new DoubleAnimation();
doubleAnimation.From = from;
doubleAnimation.To = to;
doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(timeSpanFromSeconds));
Storyboard.SetTarget(doubleAnimation, shader);
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath(dependencyProperty));
storyboard.Children.Add(doubleAnimation);
storyboard.Begin();
}
通过一个Storyboard故事板,我们让bandedSwirl渲染特效的Distancethreshold值在3秒时间内从0改变到1,然后反序列帧执行并不断循环。至此一个基于HLSL的螺旋波纹渲染特效就制作完成啦!以同样的方法我还特意制作了波浪渲染动画、放大渲染动画、模糊缩放渲染动画、环状发散渲染动画、挤压收缩渲染动画等几个动画,都非常非常的Cool哦~下面是它们的效果截图:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/alamiye010/archive/2009/09/28/4612735.aspx
有些遗憾的是,目前的Silverlight3.0版本仅支持基于pixel(像素)的渲染,暂时还无法实现基于Vertex(顶点)的HLSL渲染,但是这些已经很大程度上能够满足我们现有的需求。基于HLSL的动画渲染特效能够通过简单的代码编写再配上合适的图片即可实现诸如光晕、雨雪、云雾、闪电、冰块等环境特效以及爆炸、激光、水晶等魔法特效,这一切一切的实现仅仅使用最大不过几十KB的存储空间,如果让我展望Silverlight的明天,我坚信,明天会更好。
- 第7节.rar (327 KB)
- 下载次数: 4
发表评论
-
wpf开源项目
2019-12-03 11:35 584SharpDevelop SharpDevelop是一款用 ... -
wpf datagrid样式
2014-12-23 22:42 1026http://www.iringo.cn/wpf-datag ... -
WPF 的全球化
2010-10-06 00:40 1360本主题介绍了您在编写面向全球市场的 Windows Pre ... -
WPF如何:对应用程序进行本地化
2010-10-06 00:28 1297本教程演示如何使用 LocBaml 工具创建本地化的应用程 ... -
WPF 全球化和本地化概述
2010-10-06 00:25 1686当您将自己的产品限制为只能通过一种语言使用时,您便将潜在的 ... -
WPF概述一
2010-02-03 10:59 0以前在工作之余学习了WPF,感觉WPF对于软件界面的表现不仅快 ... -
WPF中如何让程序支持国际化
2009-12-23 01:47 1631如果想让我们的应用程序支持多国语言,就像瑞星那么样支持中日英三 ... -
MediaElement详解
2009-12-23 09:32 1989MediaElement:播放器 MediaOpen ... -
WPF电子书
2010-01-18 10:47 1642一些好的电子书 -
WPF开发之mvvm插件
2010-01-18 10:45 1263该插件的使用请参见附件示例 -
WPF开发3D工具类
2010-01-18 10:44 1200请参见附件 -
使用WPFRibbonCTP开发类似于office 2007界面的WPF应用程序
2010-01-18 10:42 1430具体请参见附件 -
MediaElement详解
2009-10-29 14:00 1738MediaElement:播放器 MediaOp ... -
HLSL自定义渲染特效之完美攻略(上)
2009-10-23 15:15 2644Shader Effect中文名称为“渲染特效”或“滤镜”,W ... -
基于像素的图像合成(For Silverlight)
2009-10-23 14:36 1073本节我将为大家讲解如何在Silverlight平台上实现上一节 ... -
基于像素的图像合成(For WPF)
2009-10-23 14:33 2601传统的基于GDI或G ... -
WPF中如何让程序支持国际化
2009-09-18 11:48 1891如果想让我们的应用程序支持多国语言,就像瑞星那么样支持中日英三 ... -
WPF中的依赖属性
2009-09-17 10:57 1925依赖属性 (Dependency Property) ... -
ListBox(CheckListBox)样式
2009-07-31 11:42 2711样式代码: <Application.Resour ... -
wpf仿vista得玻璃效果按钮
2009-07-31 10:07 4809仿vista玻璃效果的按钮样式: <Style x ...
相关推荐
NULL 博文链接:https://code.iteye.com/blog/502692
基于HLSL的bloom特效(全屏泛光),是目前游戏中常见的后期处理技术,从视觉上基本取代了HDR光照。是目前很少有的DX+HLSL版本哦!
5:Direct3D中使用HLSL 10 1.简单的示例 10 2.shader版本的查询 10 1:通过外部工具 11 2:通过编写代码(D3DCAPS9 Caps) 11 6:在Direct3D中使用HLSL 12 1.ID3DXEffect对象 12 2. ID3DXEffect对象的创建 12 1.D3...
VS2005平台,实现茶壶卡通渲染效果 需DX9.0c支持
hlsl fx特效演示原代码
批量渲染几何图形,使用顶点渲染器和像素着色器,进行一份缓存大批量渲染几何图形。
第19章 HLSL像素渲染 1、HLSLPixelColor 演示使用HLSL渲染语言进行GPU编程直接指定像素颜色值、HLSL像素渲染基本步骤。 2、HLSLTexture 演示HLSL渲染语言进行GPU编程实现纹理映射。
演示使用HLSL渲染语言进行GPU编程实现坐标变换、HLSL顶点渲染的基本步骤。 2、HLSLAmbient 演示使用HLSL渲染语言进行GPU编程实现环境光照计算。 3、HLSLDiffuse 演示使用HLSL渲染语言进行GPU编程实现漫反射光照计算...
带钩边效果的卡通渲染(茶壶渲染DX9.0),希望大家能够满意!
High Level Shading Language,高级着色语言的全面解析!!
演示使用HLSL渲染语言进行GPU编程实现自遮蔽阴影。 2、HLSLBumpTexture 演示使用HLSL渲染语言进行GPU编程实现凹凸纹理映射。 3、HLSLCubeMapping 演示使用HLSL渲染语言进行GPU编程实现基本的立方体环境映射。 4、...
学习HLSL收集的资料,包括: HLSL.and.Pixel.Shaders.for.XAML.Developers HLSL初级教程 HLSL理论 HLSL特效 hlsl语法基础中文书
hlsl2glsl hlsl转换为glsl图形化工具hlsl2glsl hlsl转换为glsl图形化工具
《DirectX 3D HLSL高级实例精讲》中的代码
HLSL初级教程,从HLSL入门到顶点和像素渲染,还有效果框架。
XNA中的HLSL简单应用XNA中的HLSL简单应用
在OGRE中使用HLSL.txt在OGRE中使用HLSL.txt在OGRE中使用HLSL.txt
HLSL shader 的基本函数中文解释
HLSL 中文教程 Doc文档的打包版。 机会不可错