- 浏览: 666876 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
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 648SharpDevelop SharpDevelop是一款用 ... -
wpf datagrid样式
2014-12-23 22:42 1078http://www.iringo.cn/wpf-datag ... -
WPF 的全球化
2010-10-06 00:40 1411本主题介绍了您在编写面向全球市场的 Windows Pre ... -
WPF如何:对应用程序进行本地化
2010-10-06 00:28 1377本教程演示如何使用 LocBaml 工具创建本地化的应用程 ... -
WPF 全球化和本地化概述
2010-10-06 00:25 1726当您将自己的产品限制为只能通过一种语言使用时,您便将潜在的 ... -
WPF概述一
2010-02-03 10:59 0以前在工作之余学习了WPF,感觉WPF对于软件界面的表现不仅快 ... -
WPF中如何让程序支持国际化
2009-12-23 01:47 1691如果想让我们的应用程序支持多国语言,就像瑞星那么样支持中日英三 ... -
MediaElement详解
2009-12-23 09:32 2034MediaElement:播放器 MediaOpen ... -
WPF电子书
2010-01-18 10:47 1713一些好的电子书 -
WPF开发之mvvm插件
2010-01-18 10:45 1323该插件的使用请参见附件示例 -
WPF开发3D工具类
2010-01-18 10:44 1269请参见附件 -
使用WPFRibbonCTP开发类似于office 2007界面的WPF应用程序
2010-01-18 10:42 1478具体请参见附件 -
MediaElement详解
2009-10-29 14:00 1762MediaElement:播放器 MediaOp ... -
HLSL自定义渲染特效之完美攻略(上)
2009-10-23 15:15 2692Shader Effect中文名称为“渲染特效”或“滤镜”,W ... -
基于像素的图像合成(For Silverlight)
2009-10-23 14:36 1113本节我将为大家讲解如何在Silverlight平台上实现上一节 ... -
基于像素的图像合成(For WPF)
2009-10-23 14:33 2644传统的基于GDI或G ... -
WPF中如何让程序支持国际化
2009-09-18 11:48 1933如果想让我们的应用程序支持多国语言,就像瑞星那么样支持中日英三 ... -
WPF中的依赖属性
2009-09-17 10:57 1966依赖属性 (Dependency Property) ... -
ListBox(CheckListBox)样式
2009-07-31 11:42 2765样式代码: <Application.Resour ... -
wpf仿vista得玻璃效果按钮
2009-07-31 10:07 4863仿vista玻璃效果的按钮样式: <Style x ...
相关推荐
总结,HLSL自定义渲染特效的完美攻略上篇可能涵盖了HLSL的基础知识、着色器类型及其应用,以及可能的实战案例。通过学习和实践,开发者可以利用HLSL的强大功能,为游戏和应用程序注入生机,创造出令人震撼的视觉体验...
首先,HLSL是DirectX中用于编写着色器的语言,它允许开发者创建自定义的像素和顶点着色器,以实现各种复杂的视觉效果。在卡通渲染中,我们通常会用到以下几种HLSL着色器技术: 1. **边缘检测**:通过计算像素之间的...
HLSL支持许多高级特效,如法线贴图、置换贴图、环境光遮蔽、屏幕空间反射、动态模糊、全局光照、物理渲染等。这些特效通过HLSL的强大计算能力,使得游戏和应用的画面更加真实。 **8. 混合和Alpha测试** HLSL提供了...
HLSL(High-Level Shader Language)是微软为Direct3D开发的一种高级着色语言,用于GPU编程,特别是在图形渲染和图像处理中。它允许开发者创建复杂的光照、纹理和动画效果,提升图形表现力。 1: HLSL概述 HLSL是专...
然而,当我们要实现更复杂的渲染效果时,就需要使用HLSL自定义着色器。这通常涉及到创建一个`.fx`文件,其中包含着色器程序,然后在XNA项目中加载和应用这个文件。在`LoadContent()`方法中,`Content.Load("effe")`...
Unity Shader是控制游戏画面渲染的关键,通过编写Shader语言(如CG或HLSL)来定制光照、纹理、颜色等视觉元素。在Unity中,Shader脚本通常与材质(Material)配合使用,为游戏对象赋予特定的外观。 二、Bloom特效原理...
HLSL是微软为Direct3D设计的一种着色语言,它允许开发者编写自定义的顶点和像素着色器,以实现复杂的图形效果。在实现景深时,我们通常会用到像素着色器,因为该效果主要是在像素级别上计算的。 1. **景深基本原理*...
【hlsl流动云彩效果】是一种使用高级着色语言(High-Level Shader Language,简称hlsl)来实现的视觉特效,常见于3D游戏和虚拟环境中。hlsl是DirectX的一部分,专为图形处理单元(GPU)设计,允许开发者编写自定义的...
HLSL是微软为Direct3D设计的一种高级着色语言,用于编写图形渲染的顶点、像素、几何和计算着色器,以及在现代游戏和图形应用中实现复杂的视觉效果。 源代码文件"4209OT_Code bundle"中可能包含了以下关键知识点: ...
总之,HLSL作为一种强大的图形编程工具,为开发者提供了丰富的可能性,不仅可以用于游戏特效开发,还可以应用于各种图形渲染领域。通过深入学习HLSL及其相关概念和技术,可以实现高质量的视觉效果。
HLSL代码则编写了这些着色器的具体逻辑,可以实现光照、纹理映射、后期处理等多种视觉特效。 通过深入学习这本书的内容,读者将能够掌握Direct3D HLSL的核心技术,包括但不限于模型加载、效果文件的使用、UI设计...
Pixel Shader,又称为像素着色器,是HLSL中的核心部分,主要用于处理渲染过程中的像素级计算,为每个像素赋予颜色、光照、纹理等效果,极大地提升了图像的真实感和表现力。 在描述中提到的任务是使用HLSL Pixel ...
HLSL,全称为高阶着色语言,是DirectX SDK中的一个重要组件,由微软开发,主要用于为图形渲染提供高效的着色器编程。它是一种面向GPU(图形处理器)的编程语言,能够帮助开发者充分利用现代图形硬件的计算能力,实现...
通过编写HLSL代码,开发者可以创建自定义的光照模型、纹理贴图、动态阴影和各种高级视觉特效。 2. HLSL与游戏编程: 在游戏中,HLSL主要用于实现图形渲染的计算密集部分。例如,它可以用来计算角色的表面光照、...
在DirectX的图形渲染过程中,采用的是管道技术(pipeline),它负责图形的处理与绘制。早期的DirectX版本中,使用的是固定功能管道(fixed function pipeline),开发者可以设定顶点、图元、纹理等数据信息以及管道...
在Direct3D中,开发者可以通过HLSL自定义每个阶段的行为,以实现特定的视觉效果。 1. **顶点处理**:在这个阶段,开发者使用顶点着色器来处理模型的顶点数据,进行坐标变换(平移、旋转、缩放)、视锥体裁剪和屏幕...
这个例子中的"2d HLSL"文件可能包含了上述步骤中的HLSL源代码,以及相关的C#代码片段,展示了如何将自定义的2D着色器应用到XNA的SpriteBatch上。通过不断试验和调整HLSL代码,开发者可以创造出各种独特的视觉效果,...
在UE4(Unreal Engine 4)中,自定义ScreenPass和MRT(Multiple Render Targets,多重渲染目标)输出是图形编程和渲染管线中的高级技术,它们允许开发者扩展引擎的默认渲染流程,实现独特的视觉效果。本文将深入探讨...