Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Cg
- #define NEAR 0.5
- #define FAR 400
- float unpackDepth(uniform float wnear, uniform float wfar, float s){
- // depth equations from http://www.codermind.com/articles/Depth-buffer-tutorial.html
- // Hopefully they are correct
- //(wfar - (wnear * wfar)/w) / (wfar - wnear) = s
- // w = (wnear * wfar)/(wfar - s*(wfar - wnear))
- return (wnear * wfar)/(wfar - s*(wfar - wnear));
- }
- void vshader(float4 vtx_position : POSITION,
- out float4 l_position : POSITION,
- out float2 l_texcoord : TEXCOORD0,
- out float2 l_texcoordD : TEXCOORD1,
- uniform float4 texpad_depth,
- uniform float4x4 mat_modelproj)
- {
- l_position = mul(mat_modelproj, vtx_position);
- l_texcoord = vtx_position.xz;
- l_texcoordD = (vtx_position.xz * texpad_depth.xy) + texpad_depth.xy;
- }
- void fshader(out float4 o_color: COLOR,
- float2 l_texcoord : TEXCOORD0,
- float2 l_texcoordD : TEXCOORD1,
- uniform float2 k_camera_fov_sin,
- uniform sampler2D k_depth : TEXUNIT0)
- {
- float pixel_depth = tex2D(k_depth, l_texcoordD).r;
- float z_pos = unpackDepth(NEAR, FAR, pixel_depth);
- float x_pos = k_camera_fov_sin.x * l_texcoordD.x * pixel_depth;
- float y_pos = k_camera_fov_sin.y * l_texcoordD.y * pixel_depth;
- float3 pixel_pos = float3(x_pos, y_pos, z_pos);
- o_color.rgb = pixel_pos;
- o_color.a = 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment