Quantcast
Channel: Community | MonoGame - Latest topics
Viewing all articles
Browse latest Browse all 6821

[SOLVED] HLSL - Getting the Normalized ScreenPosition

$
0
0

@Alkher wrote:

Hi !

I'm certainly doing something wrong. I'm drawings quads for particles and I also read from a depth texture (to not render them if needed to, and soft particles later)
It used to work in XNA, but not with MonoGame :confused:
Problem is: the UV coordinates in the input of the pixelshader correspond to the quad rendered. So the depth is applyed to each quad, one quad = one depth texture, not onto the whole screen.
So I wanted to get the normalized position of a pixel: in clipspace, x is [-1, 1], z [0, 1] (for opengl it is [-1, 1] right ?) , and y is in [0,1] with 0 bottom right.
Then I did this:

float GetScreenDepth(float4 projectedpos){
	//Scale-bias the clipping space pos from [-1,1] to [0,1]
	float2 NormalizedScreenPos = 0.5 * projectedpos.xy / projectedpos.w + 0.5;
    
	//Flip the y-coordinate as the origin of the window and the texture are different
	NormalizedScreenPos.y = 1 - NormalizedScreenPos.y;
    
	float dpth = depthModelsTexture.SampleLevel(DepthModelsSampler, NormalizedScreenPos, 0).r;
	return dpth;
}

Where projectedpos is computed in the vertex like this:
Output.Position = mul(float4(Output.Position.xyz, 1), mul(View, Projection));

then passed to GetScreenDepth() as

GetScreenDepth(input.ProjectedPos);

Where did I fail ?

As you can, the silhouette of the character is repeated for each quad and clip occurs on each of them too:

Posts: 3

Participants: 1

Read full topic


Viewing all articles
Browse latest Browse all 6821

Trending Articles