RenderMonkey学习记录2-RT
配合食用链接
发现了《Shaders for Game Programmers and Artists》这本使用RenderMonkey的初学者入门书籍,搜索发现原来优快云上已经有大佬的教程了,就不重复写了,参考食用链接,配合代码,补全一些以下细节。
//VS
float4x4 matViewProjection;
float viewport_inv_width;
float viewport_inv_hight;
struct VS_INTPUT
{
float4 Position : POSITION0;
float2 Texcor : TEXCOORD0;
};
VS_OUTPUT vs_main( VS_INTPUT Input)
{
VS_OUTPUT Output;
Output.Position =float4 (Input.Position.xy,0,1);//输出位置
Output.Texcor.x =0.5*(1+Output.Position.x-viewport_inv_width);
Output.Texcor.y =0.5*(1+Output.Position.y-viewport_inv_width);
return( Output );
}
//PS
sampler Texture0;
struct PS_INTPUT
{
float2 Texcor : TEXCOORD0;
};
float4 ps_main(PS_INTPUT Input) : COLOR0
{
float4 RenderTex= tex2D (Texture0,Input.Texcor);
return RenderTex;
}
关于VS中屏幕坐标和纹理坐标的关系!
因为我们将使用面片作为屏幕的呈现,也就是说将前面两张渲染的纹理叠加成为一张A,而这张A将作为Pass3中面片的纹理,然后将这张面片移动到与屏幕一致。
如下图
屏幕像素坐标位于屏幕的顶点,
纹理像素坐标位于纹理的中心
屏幕坐标顶点左上角在(-1,1,0)
纹理坐标顶点左上角在(0,1)
首先将纹理坐标移动到屏幕坐标
纹理坐标X=1+屏幕坐标X;
纹理坐标Y=1-屏幕坐标Y;
然后对其像素,屏幕坐标XY缩小一半。
最后的built-in 变量viewport_inv_Width和viewport_inv_High可以用来适当地偏移纹理(也可不加,只是为了更好的在外部调节)
Output.Texcor.x =0.5*(1+Output.Position.x-viewport_inv_width);
Output.Texcor.y =0.5*(1-Output.Position.y-viewport_inv_width);
注意:
最后的Pass3使用的texture是render的texture