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
应@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));

这是结果。感谢您的阅读!