DangerOnTheRanger

Untitled

Oct 26th, 2011
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Cg
  2.  
  3.  
  4. #define NEAR 0.5
  5. #define FAR 400
  6.  
  7.  
  8. float unpackDepth(uniform float wnear, uniform float wfar, float s){
  9.     // depth equations from http://www.codermind.com/articles/Depth-buffer-tutorial.html
  10.     // Hopefully they are correct
  11.     //(wfar - (wnear * wfar)/w) / (wfar - wnear) = s
  12.     // w = (wnear * wfar)/(wfar - s*(wfar - wnear))
  13.     return (wnear * wfar)/(wfar - s*(wfar - wnear));
  14. }
  15.  
  16.  
  17. void vshader(float4 vtx_position : POSITION,
  18.              out float4 l_position : POSITION,
  19.              out float2 l_texcoord : TEXCOORD0,
  20.              out float2 l_texcoordD : TEXCOORD1,
  21.              uniform float4 texpad_depth,
  22.              uniform float4x4 mat_modelproj)
  23. {
  24.    l_position = mul(mat_modelproj, vtx_position);
  25.    l_texcoord = vtx_position.xz;
  26.    l_texcoordD = (vtx_position.xz * texpad_depth.xy) + texpad_depth.xy;
  27. }
  28.  
  29.  
  30. void fshader(out float4 o_color: COLOR,
  31.              float2 l_texcoord : TEXCOORD0,
  32.              float2 l_texcoordD : TEXCOORD1,
  33.              uniform float2 k_camera_fov_sin,
  34.              uniform sampler2D k_depth : TEXUNIT0)
  35. {
  36.    float pixel_depth = tex2D(k_depth, l_texcoordD).r;
  37.  
  38.    float z_pos = unpackDepth(NEAR, FAR, pixel_depth);
  39.    float x_pos = k_camera_fov_sin.x * l_texcoordD.x * pixel_depth;
  40.    float y_pos = k_camera_fov_sin.y * l_texcoordD.y * pixel_depth;
  41.  
  42.    float3 pixel_pos = float3(x_pos, y_pos, z_pos);
  43.  
  44.    o_color.rgb = pixel_pos;
  45.    o_color.a = 1;
  46. }
  47.  
Advertisement
Add Comment
Please, Sign In to add comment