- 浏览: 650003 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
abao1:
老贾 在安装IDEA的过程中,在激活步骤时,按如下操作即可: ...
IntelliJ IDEA 2016注册方法和注册码 -
bo_hai:
./usr/bin/java: symbol lookup ...
jmagick安装步骤 -
wxcking:
不错的, 收藏一下
JAVA使用POI生成Excel文件 -
zgyfh:
大哥,密码是多少啊?zgyfh@tom.com谢谢了!新手学习 ...
WPF做的必备示例 -
记忆无泪:
jiasongmao 写道你的邮箱是多少,我可以发源代码到邮箱 ...
WPF做的必备示例
Shader Effect中文名称为“渲染特效”或“滤镜”,WPF中自带有5种位图特效及2种渲染特效,而Silverlight中仅有这2种渲染特效: BlurEffect(模糊渲染)和 DropShadowEffect(投影渲染)。由于目前WPF/Silverlight被应用的领域还不是很多,大多数开发者仅仅是将之作为Winform/Webform的替代品,那么现成的这几种渲染特效已足够应付大多数的场合需要。但是如果您打算利用WPF/Silverlight进行更高端的开发,例如动画制作及游戏设计,那么没有少则数十种的自定义渲染特效库是无法满足绚丽多彩的画面需求的。本节我将以Silverlight平台为例,向大家介绍如何制作及实现HLSL自定义渲染特效。
3.0是Silverlight具有里程碑意义的一个版本,因为从此版本开始,您将能够通过HLSL 高级着色器语言(High Level Shader Language,简称HLSL)为Silverlight中的UIElement对象制作自定义渲染特效,并且这些特效均为快速而有效率地通过显卡来完成。举个简单的例子,如果您想让一个动画的系列帧图片在显示的时候去掉无用的黑色(或其他某种颜色)像素(这在游戏开发中再常见不过了,俗称:去背),用代码来实现则必须循环编历图片中的每个像素点,判断为黑色时修改该点为透明(或忽略所有黑色点),这无形中饶了很大一个弯子。其实我们只需创建一个简单的HLSL渲染特效(HLSL Shader Effect)就可以轻松的实现之,并且可以随意的选择附加或是移除。您此时不禁要问:这么神奇的HLSL渲染特效该如何制作和使用呢?嘿嘿,下面且听我慢慢道来。
1)架设开发环境
首先需要安装DirectX SDK,接下来在编辑器的选择上有很多种,例如FX Composer和RenderMonkey都很好很强大,这里我个人特别推荐安装专门为WPF/Silverlight开发的小而精悍的Shazzam作为入门级HLSL渲染特效编辑器。需要注意的是,Shazzam在首次运行时需要指定DirectX SDK中的fxc文件路径,该文件存在于DirectX SDK安装目录\Microsoft DirectX SDK (November 2008)\Utilities\bin\x86\下。
2)制作HLSL渲染特效
打开Shazzam,我将该编辑器分为4个部分:工具菜单,特效库,预览区域,代码区域:
Shazzam本身已经自带了一些很棒的特效,大家看上图中的特效库中的*.fx文件即为已经包装好的特效,此时我选择了名为Swirl(旋涡纹)的特效,然后点击菜单栏Tools里的Apply Shader或直接按F5看到的渲染结果即为预览区域中的图象;并且该Swirl渲染特效的HLSL代码我们可以从代码区域中的Swirl.fx中查看到,用过Photoshop的朋友都清楚很多滤镜特别是功能强大的滤镜都是带有参数的,同样的,我们在书写HLSL时通过定义全局变量来作为参数。那么这些参数我们可以通过代码区域中的Change Shader Settings进行修改,并且修改后的效果均会时时的呈现在预览区域中。 掌握了Shazzam编辑器的使用后,制作渲染特效就再简单不过了。如果您不熟悉如何编写HLSL语言,那么您可以尝试从网上查找些现成的HLSL渲染特效或是直接使用自带的这些特效作为起步练习。这里我以实现“灰度”特效为例为大家详细讲解一个渲染特效的整个制作和使用流程。 首先编写出“灰度”特效的HLSL代码: sampler2D implicitInput : register(s0); float factor : register(c0); float4 main(float2 uv : TEXCOORD) : COLOR { float4 color = tex2D(implicitInput, uv); float gray = color.r * 0.3 + color.g * 0.59 + color.b *0.11; float4 result; result.r = (color.r - gray) * factor + gray; result.g = (color.g - gray) * factor + gray; result.b = (color.b - gray) * factor + gray; result.a = color.a; return result; } 然后将这段代码粘贴进代码区域后按F5运行,如果编译通过则预览图片将变成黑白色:
接下来我们需要将此特效保存为*.ps格式以供Silverlight使用,具体操作为点击工具菜单Tools里的Compile Shader(F7)生成ps文件,然后再点击View Compile Shaders会打开编辑器的特效库文件夹路径,此时我们刚才制作的“灰度”渲染特效将保存在此目录中,分别为temp.fx和temp.ps: 3)使用HLSL渲染特效 新建一个Silverlight3项目,在项目中添加两个文件夹分别命名为:ShaderSource和ShaderClass,顾名思义ShaderSource用于存放ps文件,那么我们将Gray.ps添加进来,并设置其属性如下: 至此,虽然已经可以直接对ps文件进行使用了,但是为了能够更好的拓展延伸及规范管理,我们还必须为每个ps渲染特效编写一个实体驱动类,该类包含有渲染特效的所有参数(关联属性)定义等。非常幸运的,Shazzam编辑器已经为我们提供了现成的代码供参考: 我们可以通过代码区域中的选项卡选择显示C#或VB的自动生成代码,然后在ShaderClass文件夹中新建一个名为Gray.cs的类,并将代码粘贴进去。此时如果无法编译通过的,则必须将之Silverlight化修改,因为这些自动生成的代码是针对WPF的(例如将UIPropertyMetadata改为PropertyMetadata)。那么修改后的Gray.cs完整代码如下: using System.Windows; using System.Windows.Media; using System.Windows.Media.Effects; namespace Silverlight.Shader { public class Gray : ShaderEffect { public static DependencyProperty InputProperty = ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(Gray), 0); public static DependencyProperty FactorProperty = DependencyProperty.Register( "Factor", typeof(double), typeof(Gray), new PropertyMetadata(new double(), PixelShaderConstantCallback(0))); public Gray(PixelShader shader) { PixelShader = shader; this.UpdateShaderValue(InputProperty); this.UpdateShaderValue(FactorProperty); } public virtual System.Windows.Media.Brush Input { get { return ((System.Windows.Media.Brush)(GetValue(InputProperty))); } set { SetValue(InputProperty, value); } } public virtual double Factor { get { return ((double)(GetValue(FactorProperty))); } set { SetValue(FactorProperty, value); } } } } 接下来就是在主窗体中实现此Gray灰度特效。以第五节的源码为例,我们首先需要加载ps文件作为像素渲染对象: PixelShader pixelShader = new PixelShader() { UriSource = new Uri( string.Format("/Silverlight;component/ShaderSource/Gray.ps"), UriKind.Relative) }; 接着以pixelShader作为参数创建Gray实例,其中的Factor为灰度深度: Gray gray = new Gray(pixelShader) { Factor = 0 }; 最后将此渲染特效赋值给精灵的特效属性: Spirit.Effect = gray; 嘿嘿,完成了~呼呼,还是挺累的呢,来张截图吧: 图中的精灵在灰度模式下同样可以毫无破绽的切换装备,嘿嘿~相当的Cool哦,额外的,我还以同样的方法增加了浮雕、去背、卡通材质、反色等几个特效.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/alamiye010/archive/2009/09/28/4603428.aspx
- 第6节.rar (318.5 KB)
- 下载次数: 3
发表评论
-
wpf开源项目
2019-12-03 11:35 590SharpDevelop SharpDevelop是一款用 ... -
wpf datagrid样式
2014-12-23 22:42 1038http://www.iringo.cn/wpf-datag ... -
WPF 的全球化
2010-10-06 00:40 1367本主题介绍了您在编写面向全球市场的 Windows Pre ... -
WPF如何:对应用程序进行本地化
2010-10-06 00:28 1305本教程演示如何使用 LocBaml 工具创建本地化的应用程 ... -
WPF 全球化和本地化概述
2010-10-06 00:25 1692当您将自己的产品限制为只能通过一种语言使用时,您便将潜在的 ... -
WPF概述一
2010-02-03 10:59 0以前在工作之余学习了WPF,感觉WPF对于软件界面的表现不仅快 ... -
WPF中如何让程序支持国际化
2009-12-23 01:47 1635如果想让我们的应用程序支持多国语言,就像瑞星那么样支持中日英三 ... -
MediaElement详解
2009-12-23 09:32 1996MediaElement:播放器 MediaOpen ... -
WPF电子书
2010-01-18 10:47 1646一些好的电子书 -
WPF开发之mvvm插件
2010-01-18 10:45 1268该插件的使用请参见附件示例 -
WPF开发3D工具类
2010-01-18 10:44 1202请参见附件 -
使用WPFRibbonCTP开发类似于office 2007界面的WPF应用程序
2010-01-18 10:42 1436具体请参见附件 -
MediaElement详解
2009-10-29 14:00 1740MediaElement:播放器 MediaOp ... -
HLSL自定义渲染特效之完美攻略(中)
2009-10-23 15:40 1268通过上一节的解说,大家是否已经对HLSL有了较深刻的认识和理解 ... -
基于像素的图像合成(For Silverlight)
2009-10-23 14:36 1075本节我将为大家讲解如何在Silverlight平台上实现上一节 ... -
基于像素的图像合成(For WPF)
2009-10-23 14:33 2610传统的基于GDI或G ... -
WPF中如何让程序支持国际化
2009-09-18 11:48 1898如果想让我们的应用程序支持多国语言,就像瑞星那么样支持中日英三 ... -
WPF中的依赖属性
2009-09-17 10:57 1931依赖属性 (Dependency Property) ... -
ListBox(CheckListBox)样式
2009-07-31 11:42 2720样式代码: <Application.Resour ... -
wpf仿vista得玻璃效果按钮
2009-07-31 10:07 4819仿vista玻璃效果的按钮样式: <Style x ...
相关推荐
NULL 博文链接:https://code.iteye.com/blog/502723
基于HLSL的bloom特效(全屏泛光),是目前游戏中常见的后期处理技术,从视觉上基本取代了HDR光照。是目前很少有的DX+HLSL版本哦!
6.用户自定义型 6 7.变量类型的转换 6 8.修饰变量的关键字 7 9.变量重组 7 3:HLSL的函数 8 4:HLSL基本语法 9 1.数学表达式 9 2.HLSL的关键字和保留字 9 5:Direct3D中使用HLSL 10 1.简单的示例 10 2.shader版本的...
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、...
hlsl2glsl hlsl转换为glsl图形化工具hlsl2glsl hlsl转换为glsl图形化工具
学习HLSL收集的资料,包括: HLSL.and.Pixel.Shaders.for.XAML.Developers HLSL初级教程 HLSL理论 HLSL特效 hlsl语法基础中文书
HLSL初级教程,从HLSL入门到顶点和像素渲染,还有效果框架。
《DirectX 3D HLSL高级实例精讲》中的代码
HLSL顶点渲染,由DirectX3D开发,自己写的,还未完善,大家一起交流交流
HLSL入门级教程,学习Shader编程的基础知识。顶点着色器、像素着色器、效果框架 Vb Ib Effect
SHADER入門必備知識 利用HLSL的強大渲染技術 讓你在開發遊戲的時候無往不利!配合DTRECT3D 讓你在開發遊戲時更迅速
很好的学习HLSL学习资源