a question about pixel shader

Started by
2 comments, last by shultays 14 years, 9 months ago
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?
taytay
Advertisement
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?
taytay
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?
taytay
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
taytay

This topic is closed to new replies.

Advertisement