Hm, I'm thinking that possibly in addition or instead of the idea I had earlier, it may actually be that I need to recalculate the view ray for the new texture location:
// project q and generate projective tex-coords float4 projQ = mul(float4(q, 1.0f), gViewToTexSpace); projQ.xy /= projQ.w; // find nearest depth value along ray from eye to q float rz = depthStencilTexture.SampleLevel(samNormalDepth, projQ.xy, 0.0f).r; // reconstruct full view space position r = (rx, ry, rz) linearDepth = projectionB / (rz - projectionA); // this viewRay still points to the originally sampled coordinate float3 r = pIn.viewRay * linearDepth;
I'll try to figure out a solution for this. If anyone knows it offhand, that'd be great ;).
Edit: Update to comment in code sample