Silverlight HLSL实现背景滚动

一个Silverlight HLSL的简单例子,通过HLSL实现图片上的像素点的的水平移动,从而实现一个滚动背景的效果。

首先把Shader写出来吧。我这里借助了Shazzam ,界面如下:

Shazzam 界面.jpg

下面是我的HLSL:

 

sampler2D input : register(s0);// new HLSL shader/// <summary>Explain the purpose of this variable.</summary>
/// <minValue>05/minValue>
/// <maxValue>10</maxValue>
/// <defaultValue>3.5</defaultValue>
float time:register(c0);float4 main(float2 uv : TEXCOORD) : COLOR 
{ float4 Color; if(uv.x-time%1>=0)uv.x=uv.x-time%1;elseuv.x=1+uv.x-time%1;Color= tex2D( input , uv.xy); return Color; 
}

 

主要原理是控制UV的X在0~1之间不断循环。

放到Silverlight项目中。把工具生成的代码也放进去。

public class PixelMovieEffect : ShaderEffect
{public static readonly DependencyProperty TimeProperty = DependencyProperty.Register("Time", typeof(double), typeof(PixelMovieEffect), new PropertyMetadata(((double)(3.5)), PixelShaderConstantCallback(0)));public PixelMovieEffect(){PixelShader pixelShader = new PixelShader();pixelShader.UriSource = new Uri("/SLPixelMove;component/Content/Shader/PixelMove.ps", UriKind.Relative);this.PixelShader = pixelShader;this.UpdateShaderValue(TimeProperty);}public double MoveX{get{return ((double)(this.GetValue(TimeProperty)));}set{this.SetValue(TimeProperty, value);}}
}

编译一下,如果没问题的话就可以用了。编译之后我们就可以了Blend的资产面板中使用这个Effect了,如下:

 

资产面板.jpg

把Effect拖到要实现效果的地方(如:这里的图片),XAML如下:

 

<Grid x:Name="LayoutRoot"><Canvas x:Name="cavRender" Margin="20" Background="#FF464D9D"><Image Height="204" Width="599" Source="Content/Images/sky.png" Stretch="Fill" Canvas.Top="-1"><Image.Effect><local:PixelMovieEffect x:Name="effSky"/></Image.Effect></Image><Image x:Name="imgSky" Height="232" Width="600" Canvas.Top="127" Source="Content/Images/ground.png" Stretch="Fill"><Image.Effect><local:PixelMovieEffect x:Name="effGround"/></Image.Effect></Image></Canvas><Button x:Name="btnRun" Height="31" Width="116" Canvas.Left="238" Canvas.Top="365" Content="滚动" Margin="262,0,262,55" VerticalAlignment="Bottom" d:LayoutOverrides="Height"/>
</Grid>

 

C#如下:

public partial class MainPage : UserControl
{bool blnRolling = false;public MainPage(){InitializeComponent();CompositionTarget.Rendering += (Robject, Re) =>{if (blnRolling){effGround.MoveX += 0.005;effSky.MoveX += 0.007;}};btnRun.Click += (Cobject, Ce) =>{blnRolling = !blnRolling;if (blnRolling){btnRun.Content = "停止";}else{btnRun.Content = "滚动";}};}
}

 

可以下载附件中的源码查看效果,由于没处理好图片,所以看起来有点问题,换上一个好的图的话,应该效果还是不错的。

源码:附件:SLPixelMove.rar

转载于:https://www.cnblogs.com/desmend/archive/2009/12/18/1643809.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极简的 PNG 编码函数 svpng(),用来学习C语言,真的很爽

这个是在知乎上看到的大神写的文章&#xff0c;如果是学习C语言入门的&#xff0c;我觉得可以从这个入手&#xff0c;特别是对图像感兴趣的。文章中提到的「我」&#xff0c;指的是「Milo Yip」大神。1. 什么是png格式图片&#xff1f;相对地&#xff0c;PNG&#xff08;Por…

STM32项目(六)—— 中文电子捡货标签

STM32项目&#xff08;六&#xff09;—— 中文电子捡货标签 宗旨&#xff1a;技术的分享是有限的&#xff0c;分享的精神是无限的。 传统物流行业仓储拣货采用纸单作业&#xff0c;拣货完成后再进行验货、出货&#xff0c;容易造成拣货错误、拣货速度与效率低、新员工培训时间…

如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart?

RT-Thread Smart 系列连载序号内容1《当“树莓派”遇上RT-Thread Smart——应用编程入门》2《RT-Thread Smart和树莓派&#xff1a;wget & cURL网络客户端》3《如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart&#xff1f;》4sdl图形类应用5dropbear及ssh server…

bzoj3195 [Jxoi2012]奇怪的道路——状压DP

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id3195 看到数据范围就应该想到状压呢... 题解(原来是这样)&#xff1a;https://www.cnblogs.com/LadyLex/p/7252789.html 代码如下&#xff1a; #include<iostream> #include<cstdio> #include&l…

Google Maps API 进级: GoogleMaps常用事件及应用思路1

转自&#xff1a;http://hi.baidu.com/xfm_zhr/blog/item/8c1790517e87ea888d54302a.html1. GoogleMaps常用事件及应用思路 地图再被鼠标拖动时&#xff0c;GMap2对象会激发dragstart,drag,dragend等事件。 示例&#xff1a;动态显示地图的中心位置。 //更新信息&#xf…

STM32项目(七) —— 智能仓库管理系统

智能仓库管理系统 随着经济的发展&#xff0c;对企业的生产经营要求提高&#xff0c;企业必须综合利用各种先进技术&#xff0c;在网络与信息技术的支持下&#xff0c;改进现在的生产经营模式和组织结构&#xff0c;增加利润。随着企业规模的扩大。高效方便的仓库管理系统&…

花三千块钱求推荐一个靠谱的C++工程师

直接说重点有个朋友想招一个C工程师&#xff0c;因为项目的原因&#xff0c;不可能现在招新人培养&#xff0c;想招到一个熟练C的工程师&#xff0c;所以想在公众号里面广而告之。如果是你推荐的人入职后&#xff0c;就可以获得三千奖励&#xff0c;如果是你本人入职&#xff0…

Linux服务器安全设置总结

众所周知&#xff0c;网络安全是一个非常重要的课题&#xff0c;而服务器是网络安全中最关键的环节。Linux被认为是一个比较安全的Internet服务器&#xff0c;作为一种开放源代码操作系统&#xff0c;一旦Linux系统中发现有安全漏洞&#xff0c;Internet上来自世界各地的志愿者…

STM32 —— LIN

STM32 —— LIN/* LIN 总线的主要特性有 单主机 多从机概念 基于普通 UART/SCI 接口的低成本硬件实现 低成本软件或作为纯状态机 从机节点不需要石英或陶瓷谐振器可以实现自同步 保证信号传输的延迟时间 低成本的单线设备 速度高达 20kbit/s 总线的通讯由单…

老外码农酒后吐槽,该说的不该说的全说了!!

上个月&#xff0c;一个有着10年码龄的程序猿喝高了&#xff0c;在社交网站Reddit上吐槽。然后被疯狂转发&#xff0c;点赞。可说是讲出了咱们很多码农的心声。咱们国内这边也有不少版本了。我们也凑凑热闹翻译一版。跟大家一块儿欣赏一下&#xff1a;今天是有点儿高了&#xf…

朋友与“蓝颜知己”

??闲着无事&#xff0c;便往了图书馆&#xff0c;寻到自己一直想要找的书&#xff1a;《大明王朝1566》。是想写点什么了&#xff0c;一直想写的东西&#xff0c;是心中酝酿许久的本子&#xff0c;却总感到驾御不了&#xff0c;不敢下笔。盼望能从书中得到些启示&#xff0c;…

Kettle 学习导航帖整理

最近在学习Kettle&#xff0c;期间收集了很多帖子&#xff0c;在此整理汇总以备后续查询或分享&#xff0c;如果有更好的学习资源也欢迎在评论区留言&#xff0c;谢谢。 Kettle入门&#xff1a; Kettle简介&#xff1a;百度百科https://baike.baidu.com/item/Kettle/5920713?f…

STM32 —— 中景园0.96寸OLED

STM32 —— 中景园0.96寸OLED OLED&#xff0c;即有机发光二极管&#xff08; Organic Light Emitting Diode &#xff09;。 OLED 由于同时具备自发光&#xff0c;不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优…

Intel官宣开发RISC-V处理器:明年首发7nm工艺

近日业界盛传&#xff0c;Intel计划以20亿美元收购RISC-V IP供应商SiFive——后者的产品已被80多家公司采纳&#xff0c;设计了200多种产品&#xff0c;出货量极大&#xff0c;广泛用于各种加速器。虽然双方对于收购都拒绝置评&#xff0c;但深入合作已经展开。Intel官方宣布&a…

SCCM2007 R2的部署前准备,SCCM系列之一

SCCM 2007 R2的部属前准备<?xml:namespace prefix o />System Center 是微软著名的管理平台软件&#xff0c;在实现Microsoft的MOF&ITIL的IT管理理念的过程中发挥了很重要的作用&#xff0c;System Center可以在MOF的每一个运维象限中都有对应的System Center产品协…

硬件基础 —— 电阻

硬件基础 —— 电阻1、电阻基本知识电阻&#xff1a;在电路中对电流有阻碍作用并且造成能量消耗的部分。主要物理特性是变电能为热能&#xff08;耗能元件&#xff09;&#xff0c;符号R&#xff08;单位&#xff1a;Ω&#xff09;。2、电阻的作用&#xff1a;分流、限流、分压…

史上最全的LED点灯程序,你都掌握了吗?

摘要&#xff1a;你点亮过多少板子的LED灯呢&#xff1f;有很多小伙伴留言说讲一下STM32、FPGA、Liunx他们之间有什么不同。不同点很多&#xff0c;口说无凭&#xff0c;今天就来点亮一下STM32、FPGA和Liunx板子的LED灯&#xff0c;大家大致看一下点灯流程和点灯环境以及点灯流…

修复远程过程调用 (RPC) 时发生的各种问题KB908521

当系统出现RPC通讯问题时可以尝安装KB908521进行修复。安装本更新程序可以解决当您在 Microsoft Windows Server 2003 和 Microsoft Windows XP 中的客户端/服务器通信中使用远程过程调用 (RPC) 时发生的各种问题。http://www.microsoft.com/downloads/details.aspx?FamilyID7…

B站硬核up主稚晖君:对于3年以上软件开发工程师,我有这些建议!

稚晖君&#xff0c;何许人也&#xff1f;本硕就读于电子科技大学华为AI架构师热爱硬件开发B站硬核UP主“栈溢出”工程师加入“华为天才少年计划”或许当你看到这一堆Title的时候并不觉得有什么特别&#xff0c;那么接下来看看他的一些作品。作品1&#xff1a;B站最强小电视这条…

Python 实现微信小程序的用户登录

小程序可以通过官方提供的登录能力来获取用户身份的标示&#xff0c;具体文档可以参考 这里&#xff0c;通过流程时序可以看到&#xff0c;对于需要和前端配合的服务端开发&#xff0c;主要实现的就是通过小程序提供的 code 换取用户的 openid 和 session_key&#xff0c;并用换…