PMG http://forum.pmg.org.ru/ |
|
Объемный туман в DirectX http://forum.pmg.org.ru/viewtopic.php?f=2&t=7605 |
Страница 1 из 1 |
Автор: | kurlyak [ 02 янв 2010 02:56 ] |
Заголовок сообщения: | Объемный туман в DirectX |
Я немного разобрался что- к чему. Почитал статью 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); В итоге у меня рисуеться сплошной красный куб. Я перемещаюсь камерой - со всех сторон ярко красный куб. Что тут может быть? Подскажите кто знает пожалуйста. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |