Sign in to follow this  
shultays

a question about pixel shader

Recommended Posts

I have a question about post processing. How can I get the one pixel left of my original position in the rendered texture. all position values are between 0.0 and 1.0. for example if the current pixel is 0.5, 0.5 what is the x, y values for the pixel on the right? I am expecting it should be 0.5 + 1/1280.0, 0.5 but it seems a bit wrong to me when I test it. (my window's width is 1280 btw) maybe I should 1279.0 ? because there are 1280 pixel, there are 0-1279 pixels and 0=0.0 1279=1.0 so interval is 1/1279.0 right ? Which one is true? And more importantly can I get these values as integer? Or is there a better solution to this?

Share this post


Link to post
Share on other sites
never mind guys, I will just go for 1/1279.0


I have a bigger problem now =D

I am using a pixel shader, I tried to add a stencil test but it does not work. is stencil test disabled while using a pixel shader?

I want to do something similar glow effect in this ss
http://s3-llnw-screenshots.wegame.com/6285953808094619/6285953808094619_l.jpg

So I managed to create glow effect in a texture, here is what I should next

*draw the real object, while drawing it shouldn't use stencil test but set to pixels in 0x01 while drawing object

*draw the glow effect if stencil value is 0

here is my code


D3DDevice->SetRenderState(D3DRS_STENCILENABLE, TRUE);
D3DDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS);
D3DDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_REPLACE);

D3DDevice->SetRenderState( D3DRS_STENCILREF, 0x01 );

D3DDevice->SetRenderState( D3DRS_STENCILMASK, 0xFF );
D3DDevice->SetRenderState( D3DRS_STENCILWRITEMASK,0xFF );

D3DDevice->Clear( 0, NULL, D3DCLEAR_STENCIL, D3DCOLOR_XRGB(0, 0, 0), 0.0f, 0);

effect->Begin(0, 0);
effect->BeginPass(0);
mesh->DrawSubset(0);
effect->EndPass();
effect->End();

D3DDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_NOTEQUAL);
D3DDevice->SetRenderState(D3DRS_STENCILREF, 0x01);

RefractionEffect->SetTechnique( "Test");
RefractionEffect->SetTexture("ColorTex", TempTexture2);
RefractionEffect->Begin(0, 0);
RefractionEffect->BeginPass(1);
PPQuadMesh->DrawSubset(0);
RefractionEffect->EndPass();
RefractionEffect->End();


QuadMesh contains the glow affect. I think this should work, but it does not :/ Here is my result.



I think problem is stencil is disable because I am using shaders. What are the equivalents for D3DRS_STENCILREF, D3DRS_STENCILFUNC... etc in HLSL?

Share this post


Link to post
Share on other sites
ok,it seems that equivalents are D3DRS_STENCILFUNC = STENCILFUNC etc

but I still have same problem :/

I add this to my technique


STENCILENABLE= TRUE;
STENCILFUNC = NEVER;


this shader should never draw the glow right? but it still does :S what is the problem?

Share this post


Link to post
Share on other sites
never mind guys, I forgot to change this line


d3dpp.AutoDepthStencilFormat = D3DFMT_D24X8;

of course stencil test does not work if there are no stencil buffer at all:/

pardon my stupidity



cool eh? =D

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this