Shader学习心得(2):FX的功能之Insert Snippets,以及贴图的shader实现
2009-03-12 09:07
453 查看
以下的教程由乌龟和毛驴的技术小屋原创,转载请注明原始文章出处,并保留这段话,请勿侵权.
Shader学习心得二:
FX的功能之Insert Snippets,以及贴图:
2.1 为我们的shader增加贴图
Step 1: 在我们的Empty Effect中:float4x4 WorldViewProj : WorldViewProjection;
下面一行按右键,选择”Insert Snippets”
在右边的框中选择”Texture and Sampler”
在打了一个框的Name上面双击,修改为diffuse,这样所有的”Name”就自动变为了”diffuse”了
Step 2: 添加程序段,使得代码变为
float4x4 WorldViewProj : WorldViewProjection;
texture diffuse <
string ResourceName = "";//Optional default file name
string UIName = "diffuse Texture";
string ResourceType = "2D";
>;
sampler2D diffuseSampler = sampler_state {
Texture = <diffuse>;
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Linear;
AddressU = Wrap;
AddressV = Wrap;
};
struct VS_OUTPUT
{
float4 pos : POSITION;
float2 tex : TEXCOORD0;
};
VS_OUTPUT mainVS(float4 pos : POSITION,float2 tex : TEXCOORD0){
VS_OUTPUT vsOut;
vsOut.pos = mul(pos,WorldViewProj);
vsOut.tex = tex;
return vsOut;
}
float4 mainPS(float2 tex : TEXCOORD0) : COLOR {
return tex2D(diffuseSampler, tex);
}
technique technique0 {
pass p0 {
VertexShader = compile vs_3_0 mainVS();
PixelShader = compile ps_3_0 mainPS();
}
}
Step 2:选择我们的Empty Effect文件,在右上方的Property 表格的 Parameter中的”diffuse Texture”选项中选择一个你喜欢的贴图文件.
Step 3:按下Ctrl + F7,编译Shader,然后把这个Shader拖动到我们需要显示的物体上面
2.2 解释代码的含义
texture diffuse <string ResourceName = "";//Optional default file name
string UIName = "diffuse Texture";
string ResourceType = "2D";
>;
可能很多人对代码中 < … > 中的内容感觉到很茫然,其实这些内容对我们DirectX中使用来说用处不大,主要作用是使得FX Composer可以识别出我们的参数,并且在参数面板中显示,方便我们修改
return tex2D(diffuseSampler, tex);
根据diffuseSample取样器,对tex所对应的贴图坐标进行插值运算,如果你对这块代码理解不清楚,请自己找本HLSL相关的书籍看看.第一章开头的引用数目或许对你有帮助
2.3 运行效果
相关文章推荐
- shader学习基础之十一实现纹理的缩放平移和旋转,以及用c#代码合并两种贴图并且控制位置
- Oracle中的ROWNUM rowid 以及MySQL中实现rownum功能类似的语句
- django实现用户注册以及邮箱验证功能
- 微信消息体签名及加解密功能详细解析以及.net实现
- Android开发,MapBox的使用及部分功能实现(二)----- draw、layer、以及一些杂的知识点
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Java 工具类 - 使用POI以及反射实现导出Excel的功能
- C# 实现图片任意裁剪以及羽化功能
- 自己写的一个项目中实现的购物车功能!购物车页面以及实现购物车相应的dao包!
- thinkphp框架使用PHPMailer实现发送邮件的功能,以及各种问题解析
- JAVA微信扫码支付模式二功能实现以及回调
- ItemTouchHelper实现RecylerView的拖拽以及滑动删除功能
- 关于伪类的使用的一些心得以及星星评分效果的实现
- Unity_EasyAR实现微信摇一摇换贴图功能
- 【程序员代码心得】Bootatrap导航和轮播以及栅格布局的实现
- 分布式系统登录功能拦截器的实现以及cookie的共享问题(利用cookie实现session在分布式系统的共享)
- Android 添加联系人发短信以及打电话功能实现
- GridView分页的实现以及自定义分页样式功能实例
- 通过DYLD_INSERT_LIBRARIES实现基于动态库的hook功能