Я немного разобрался что- к чему. Почитал статью
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);
В итоге у меня рисуеться сплошной красный куб. Я перемещаюсь камерой - со всех сторон ярко красный куб. Что тут может быть? Подскажите кто знает пожалуйста.