struct VertexOut { float4 VertexPosition :POSITION; float2 TexCoord :TEXCOORD; float4 Position :TEXCOORD2; float4 Color :COLOR0; }; /* Vertex program for displaying particle system with rectangle rendertexture */ VertexOut VertexProgram( float4 Position :POSITION, float4 Texcoord: TEXCOORD, float4 Color:COLOR0, float3 BillboardSize: NORMAL, uniform float4x4 ModelViewProj :state.matrix.mvp ) { VertexOut Out; Out.Color=Color; Out.VertexPosition=mul(ModelViewProj, Position); Out.TexCoord=Texcoord.xy; Out.Position=Out.VertexPosition; Out.Position.x=Texcoord.w; Out.Position.z=(Out.Position.z/Out.Position.w+1)/2; Out.Position.y=Out.Position.z-0.5*Out.Position.x; return Out; } /* Fragment program for displaying particle system with rectangle rendertexture */ void FragmentProgram( VertexOut In, uniform sampler2D Texture, uniform sampler2D frontTexture, out float4 Color:COLOR ) { float d=tex2D(frontTexture,In.TexCoord).r; float d2=1.0-d; float frontDepth; float backDepth; frontDepth=In.Position.y+d*In.Position.x; backDepth=In.Position.y+d2*In.Position.x; if(d==1) { frontDepth=1; backDepth=0; } backDepth=1-backDepth; Color=float4(frontDepth,backDepth,0,tex2D(Texture,In.TexCoord).r*0.17*In.Color.a); //Color=float4(frontDepth,backDepth,0,1-backDepth-frontDepth); }