Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DirectX 9.0 и объемный туман 
:(
    Опции темы
kurlyak
Дата 31.12.2009, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



Кто - то может скинуть сюда исходники простенькие объемного тумана, а то у меня ничего не выходит.
PM MAIL   Вверх
BorisVorontsov
Дата 31.12.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 1
Всего: 10



Пример SoftParticles из DX SDK считается "простеньким"?


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
kurlyak
Дата 1.1.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



Чего то я этот пример в СДК не вижу. за какой год СДК нужен?

Это сообщение отредактировал(а) kurlyak - 1.1.2010, 16:16
PM MAIL   Вверх
BorisVorontsov
Дата 1.1.2010, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 1
Всего: 10



Пример относится к DX10. Ты же, наверно, смотришь примеры DX9...

Добавлено через 2 минуты и 4 секунды
Как альтернативу, можешь почитать эту статью: http://steps3d.narod.ru/tutorials/soft-par...s-tutorial.html


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
kurlyak
Дата 2.1.2010, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



Я немного разобрался что- к чему. Почитал статью 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);

В итоге у меня рисуеться сплошной красный куб. Я перемещаюсь камерой - со всех сторон ярко красный куб. Что тут может быть? Подскажите кто знает пожалуйста.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.3539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.