Я немного разобрался что- к чему. Почитал статью http://timai-ru.blogspot.com/. Дело в том что я заношу начало тумана в одну текстуру, а конец тумана в другую потом в вершинном шейдере пытаюсь найти разницу. Но вроде я неправильно что то написал. Вот код: Первый вершинный шейдер m_pFogShaderDepth:
| Код | float4x4 g_wvp;
void vs_depth( inout float4 pos : POSITION , out float depth : TEXCOORD0 ) { pos = mul( pos, g_wvp ); depth = pos.z; }
|
Второй идет за ним пиксельный m_pPixShaderDepth:
| Код | float4 ps_depth( in float depth : TEXCOORD0 ) : COLOR { return float4( depth, 0.f, 0.f, 0.f ); }
|
И последний шейдер пиксельный m_pPixShader:
| Код | sampler2D s_fog_back; sampler2D s_fog_front; sampler2D s_scene_depth;
float4 Main( in float2 tex : TEXCOORD0 ) : COLOR { float fog_back = tex2D( s_fog_back , tex ).r; float fog_front = tex2D( s_fog_front , tex ).r; float scene_depth = tex2D( s_scene_depth , tex ).r; float k = fog_back - fog_front; k -= fog_back - clamp( scene_depth, 0, fog_back ); return (float4( g_fog_color, k * g_fog_density ));
return float4(0.5f,0.5f,0.5f, k*0.5f ); }
|
Код на С++:
| Код | p_d3d_Device->Clear(NULL, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 0, 0, 0), 0.0, 0); p_d3d_Device->BeginScene ();
D3DXMATRIX V; TheCamera.getViewMatrix(&V);
D3DXMATRIX matRes;
matRes=mxWorld*V*mxProj;
VertShaderConstTable->SetMatrix(p_d3d_Device, MatrixHandle, &matRes);
p_d3d_Device->SetPixelShader( NULL );
p_d3d_Device->SetRenderState( D3DRS_ZFUNC , D3DCMP_GREATER );
p_d3d_Device->Clear(NULL, NULL, D3DCLEAR_TARGET| D3DCLEAR_ZBUFFER , D3DCOLOR_ARGB(0, 0, 0, 0), 0.0, 0);
p_d3d_Device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);
p_d3d_Device->SetTexture(0,m_pEndFogTexture);
p_d3d_Device->SetVertexShader( m_pFogShaderDepth ); p_d3d_Device->SetPixelShader( m_pPixShaderDepth );
for( DWORD i=0; i<g_dwNumMaterials; i++ ) { m_pMeshFloor->DrawSubset( i ); }
p_d3d_Device->Clear(NULL, NULL, D3DCLEAR_TARGET| D3DCLEAR_ZBUFFER , D3DCOLOR_ARGB(0, 0, 0, 0), 0.0, 0);
p_d3d_Device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
p_d3d_Device->SetTexture(0,m_pStartFogTexture); p_d3d_Device->SetVertexShader( m_pFogShaderDepth ); p_d3d_Device->SetPixelShader( m_pPixShaderDepth );
for( DWORD i=0; i<g_dwNumMaterials; i++ ) { m_pMeshFloor->DrawSubset( i ); }
p_d3d_Device->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
p_d3d_Device->SetPixelShader( m_pPixShader );
for( DWORD i=0; i<g_dwNumMaterials; i++ ) { m_pMeshFloor->DrawSubset( i ); }
p_d3d_Device->EndScene (); p_d3d_Device->Present (NULL, NULL, NULL, NULL);
|
В итоге у меня рисуеться сплошной красный куб. Я перемещаюсь камерой - со всех сторон ярко красный куб. Что тут может быть? Подскажите кто знает пожалуйста. |