RigoN
> Согласен, с Executor статья без исходника выглядит неполной.
Покажи где я предлагал убрать исходники.
Blew_zc
Не вижу слов "лучше бы добавить формулы и убрать исходники".
_zerg_
Я тебя не понимаю %)
Blew_zc
Я всего лишь предложил добавить формулы для тех, кому легче разобраться по формулам, а код можно оставить для копипастеров.
А о каких именно формулах идет речь?
Если о каустике - то я их забыл :))))
Я сам могу с трудом их восстановить по коду....
Если так нужны формулы - могу добавить. Только скажите, какие именно
_zerg_
> Покажи где я предлагал убрать исходники.
А разве ктото говорил, что ты предлагал убрать исходники?
Помоему о тебе вообще упоминания не было, поэтому к чему твои посты вообще не ясно... :)
Спасибо за статью! Будем ждать физики.
Sergio666
Спасибо за урок!
На последнем рисунке статьи, часть поверхности трубы, находящаяся над водой, сильно искревлена. Почему так?
Текстура искажения так легла.
Супер статья! За Каустику огромнейшее спасибо! Даже как то сам не додумывался что можно сделать такой вот крутой эффект ещё дополнительно
Вопрос к автору. Вот в этом месте пиксельного шейдера:
Sergio666
>// вычисляем расстояние от камеры до точки
> float fOwnDepth = calculate_linear_depth(proj_tc.z);
Разве не должно быть
float fOwnDepth = calculate_linear_depth(proj_coords.z/proj_coords.w); ?
Ведь компонента z переменной proj_tc вместе с компонентами x и y переводится в промежуток [0..1] из [-1...1] вот таким образом:
>vec3 proj_tc = 0.5 * proj_coords.xyz / proj_coords.w + 0.5;
А насколько я понимаю для вычисления линейной глубины этого делать не надо...
lexer
Как раз надо. В глубину пишется 0.5 + 0.5 * z/w
Отношение z/w вроде всегда положительно? так зачем это делать?
Я вот о чем, вот на таком коде я проверил вычисление глубины(делал все как в шейдере, т.е. вершину переводил в пространство проекции), причем позиция камеры (0,0,8) , ближняя плоскость 1.0 а дальняя 1000.0, ось z вверх.
D3DXVECTOR4 vec = D3DXVECTOR4(0.0f, 0.0f, 0.0f, 1.0f);
D3DXVec4Transform(&vec, &vec, &viewMat);
D3DXVec4Transform(&vec, &vec, &projMat);
vec.z = 1000.0f * 1.0f / (1000.0f - (vec.z/vec.w)*(1000.0f - 1.0f));
При таком вот вычислении vec.z = 8.0 , если последнюю строку изменить на
vec.z = 1000.0f * 1.0f / (1000.0f - (0.5*vec.z/vec.w + 0.5)*(1000.0f - 1.0f));
то получается завышенное значение окола 15. Почему это так?
Тема в архиве.