오브젝트별로 블러를 주기위해 텍스쳐를 만들고 특정한색( ex: 255,0,255 )로 clear한후 오브젝트를 랜더링하고나서 그 텍스쳐를 뿌리려고 합니다.
그래서 뿌릴때 특정색을 알파처럼 사용해서 없애고 싶은데여...
CreateTextureFromFileEx를 써서 처음에 특정색을 알파로 지정하는건 알고있는데
랜더링시에 지정할 수 있는 방법이 없을까여?
고수님들의 가르침 부탁드립니다!
제발~~
랜더링시 특정색을 알파값으로 사용하려면 어찌하나여
Moderator: 류광
텍스쳐를 로드할때 알파값 수정하면됩니다.
텍스쳐 포인터를 얻어오면
텍스쳐의 구조는 단순히 점들의 나열이기 때문에
점 하나는 4바이트를 차지하죠. ARGB 로요.
텍스쳐를 읽고 나서 for문으로 돌아가면서 특정색의 알파값을 0으로 만들면 됩니다.
자주 쓰인다면 알파먹인 텍스쳐를 하나 더 만들어놓는게 좋겠죠.
텍스쳐의 구조는 단순히 점들의 나열이기 때문에
점 하나는 4바이트를 차지하죠. ARGB 로요.
텍스쳐를 읽고 나서 for문으로 돌아가면서 특정색의 알파값을 0으로 만들면 됩니다.
자주 쓰인다면 알파먹인 텍스쳐를 하나 더 만들어놓는게 좋겠죠.
랜더링시 계속 ...
랜더링시 계속해서 특정색의 알파값을 0 으로 해줘야만 하는건가여?
퍼포먼스에서 별로 좋지 안을듯 싶어서여...
그렇게 수동으로 픽셀에 접근하는 방법말고
DX에서 제공하는 어떤 특별한 함수 라던가 셋팅은 없을까여?
퍼포먼스에서 별로 좋지 안을듯 싶어서여...
그렇게 수동으로 픽셀에 접근하는 방법말고
DX에서 제공하는 어떤 특별한 함수 라던가 셋팅은 없을까여?
엮시나 알파가 안빠지는데...
m_pd3dDevice->CreateTexture( 512 ,
512,
1,
D3DUSAGE_RENDERTARGET,
D3DFMT_A8R8G8B8,
D3DPOOL_DEFAULT,
&pTexture,
NULL);
이렇게 택스쳐를 만들고
m_pTexture->GetSurfaceLevel(0,&pTargetSurface);
이렇게 서피스를 얻어내고
m_pd3dDevice->SetRenderTarget(0,pTargetSurface);
이렇게 랜더타겟을 설정하고
m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_ARGB( 0,255,0,255), 1.0f, 0 );
이렇게 특정색( 255,0,255 ) 로 클리어할때 특정색의 알파를 '0'으로 셋팅해서 빠지게 했는데
이렇게 해서 이 랜더타겟 텍스쳐를 화면에 랜더링하면 분홍색 바탕에 오브젝트만 찍혀 있습니다.
그 분홍색 바탕을 알파로 빼버리고 싶은데 안되네여...
위분이 가르쳐주신 방법으로해도 안되고...
수동으로 매프레임마다 해주는 방법뿐인것인지....
512,
1,
D3DUSAGE_RENDERTARGET,
D3DFMT_A8R8G8B8,
D3DPOOL_DEFAULT,
&pTexture,
NULL);
이렇게 택스쳐를 만들고
m_pTexture->GetSurfaceLevel(0,&pTargetSurface);
이렇게 서피스를 얻어내고
m_pd3dDevice->SetRenderTarget(0,pTargetSurface);
이렇게 랜더타겟을 설정하고
m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_ARGB( 0,255,0,255), 1.0f, 0 );
이렇게 특정색( 255,0,255 ) 로 클리어할때 특정색의 알파를 '0'으로 셋팅해서 빠지게 했는데
이렇게 해서 이 랜더타겟 텍스쳐를 화면에 랜더링하면 분홍색 바탕에 오브젝트만 찍혀 있습니다.
그 분홍색 바탕을 알파로 빼버리고 싶은데 안되네여...
위분이 가르쳐주신 방법으로해도 안되고...
수동으로 매프레임마다 해주는 방법뿐인것인지....
제경우는 잘되던데.. 렌더타겟 출력시에도 알파로 찍어주신것 맞죠..?
혹 안된다면 렌더타겟을 복사해서 락을걸어서 픽셀값을 확인해보세요.
렌더타겟이 락은 안되지만 복사는 가능합니다.
혹 안된다면 렌더타겟을 복사해서 락을걸어서 픽셀값을 확인해보세요.
렌더타겟이 락은 안되지만 복사는 가능합니다.
Code: Select all
pDevice->SetFVF( D3DFVF_XYZRHW | D3DFVF_TEX1 );
pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
pDevice->SetRenderState( D3DRS_ALPHAREF, 0x0 );
pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
pDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE );
pDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
pDevice->SetTexture( 0, pRenderTarget );
pDevice->DrawCall....();