过程纹理也称为自定义纹理,根据计算得出。
这个例子使用了位置和原点的距离作为输入参数,并加入了动画,但是和目前的纹理没任何关系。纯手工计算。
因为位置是三维的,所以在涉及到纹理的几个地方都要改为三维的
struct RENDEROBJECT_D3DVERTEX
{
//顶点位置
D3DXVECTOR3 Position;
//纹理坐标
float u, v,w;
};
//以新的方式创建顶点流
D3DVERTEXELEMENT9 decl[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
D3DDECL_END()
};
shader中。
struct VS_INPUT
{
float4 Position : POSITION;
float3 TextureUV : TEXCOORD0;
};
struct VS_OUTPUT
{
float4 Position : POSITION;
float3 TextureUV : TEXCOORD0;
};
顶点着色器中
VS_OUTPUT RenderSceneVS( VS_INPUT In )
{
//
VS_OUTPUT Out = ( VS_OUTPUT )0;
................
Out.TextureUV = In.Position;
return Out;
}
float4 RenderScenePS( VS_OUTPUT In ) :COLOR0
{
float fColorR = abs(sin(length(In.TextureUV.x * 1.3f + g_fTime * 3.0)));
float fColorG = abs(sin(length(In.TextureUV.y * 2.3f )));
float fColorB = abs(sin(length(In.TextureUV.z * 1.3f)));
float4 vColor = float4(fColorR, fColorG, fColorB, 1.0);
return vColor;
}
上图,这个比较简单