[教程]侵蚀效果(Shader)(467625341疑问解答)
tv3d吧
全部回复
仅看楼主
level 10
13318513339 楼主
各位好!我是xttyctl9。
@467625341 的提问,特地发本解决贴。
另,如果对shader有任何疑问,请到我的博客去翻我以前的shader基础教程贴。已经包含在XNA教程里面了,shader部分还是可以用在TV上的。置顶资源贴有。
so 首先我们需要一张贴图。
在这里的话,我选用了一张月球表面图。大家可以百度去寻找合适的。
我这张是这样的:
接下来,实现方法是如何呢?
首先我们要在Pixel Shader里判断高度,如果高度不够,便使用月球表面的纹理颜色替换。
非常简单,我们开始吧!
一个基本的shader相信看了上面的教程你们都会写了。Vertex Shader负责把纹理坐标传到Pixel Shader以及合并好WVP矩阵,仅仅做一些基本工作。另外Vertex Shader还要传一下Vertex的高度(y),我们通过TEXCOORD3来传值给Pixel Shader(注意这里TEXCOORD3之所以是3,是因为一般模型不会有第四套纹理坐标,如果有的话请改用别的通道。)
Pixel Shader的入口点函数应该包含以下参数,以便接收Vertex Shader传来的值。
float2 Texcrd : TEXCOORD0,float VertexY : TEXCOORD3
注意这里的顶点高度是没有合并到WVP的顶点高度,如果合并到的话是世界矩阵的了,判断就会出错。
现在好了,我们采样贴图。一个是普通贴图,一个是月球表面贴图,他们分别叫Tex0和Tex1
贴图采样时,我们应该使用判断语句。以下是伪代码:
if (VertexY >= 50)
return (tex2D(Tex0,Texcrd));
else
return (tex2D(Tex1,Texcrd));
这是结果。感谢您的阅读!
2013年03月02日 00点03分 1
level 10
13318513339 楼主
@reity 嘛,reity,shader效果好!
2013年03月02日 00点03分 2
也希望大家踊跃发教程贴哦![$1]@Xo丶战皇[$1]
2013年03月02日 00点03分
是挺好,这种特效还是shader方便些。
2013年03月02日 01点03分
回复 reity :并且个人还是觉得好过TV3D自带的什么贴图缩放去替代。虽然用替代方法是reity一贯风格吧。不过也侧面证明reity很懂得用现有东西去解决问题呀,佩服!
2013年03月02日 01点03分
level 10
13318513339 楼主
2013年03月02日 00点03分 3
level 7
你开玩笑。。。tv3d吧都没一套完整的面向新手的教程 你这是在叫人蛋疼啊
2013年03月02日 01点03分 4
你开玩笑吧。。。难道让我再写一遍?shader和TV教程无关。
2013年03月02日 01点03分
而且懂的东西多了,有时候真的不知道从何教起。
2013年03月02日 01点03分
level 3
特表感谢
2013年03月02日 05点03分 5
有什么问题可以提出。
2013年03月02日 05点03分
level 5
星期啦,
挽尊
....
2013年03月02日 09点03分 6
这是今天的帖= =而且教程贴好像不存在挽尊之说。。。
2013年03月02日 09点03分
1