PMG

Форумы по созданию игр
Текущее время: 03 дек 2024 08:47

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Объемный туман в DirectX
СообщениеДобавлено: 02 янв 2010 02:56 
Не в сети
Любитель

Зарегистрирован: 19 сен 2008 14:48
Сообщения: 44
Я немного разобрался что- к чему. Почитал статью 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 сообщение ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB