22 Сентября 2024, 17:20:34
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Навигация по форуму







guest3d
Quest3D - Русскоязычное сообщество > Quest3D > Визуализация, Шейдеры > [sh]как рендить глубину? (есть ответ)
[sh]как рендить глубину? (есть ответ)
(Прочитано 8075 раз)
  [1]
Печать
Sqwer | ***** | Ветеран | Сообщений: 540 | « 14 Мая 2009, 17:27:16 »
[sh]как рендить глубину? (есть ответ) |
0
Как получить текстуру, хранящую информацию о глубине сцены?
Данная текстурка необходима для создания более реальной воды чем встроенной в Квест. Реализация на HLSL.
« Последнее редактирование: 13 Сентября 2009, 15:48:30 от Sqwer »
Viik | **** | Старожил | Сообщений: 302 | «Ответ #1 14 Мая 2009, 17:48:30 »
Re: как рендить глубину? render depth |
1
Береш render to texture ченел, выставляеш кастомный буфер на 16F или 32F. Затем в эту тексуру рендериш интерполированную Z координату вертекса, при этом в вертексном шейдере позицию вертекса умножаеш на WorldViewProjection матрицу, как при обычном рендере.
cashis | **** | Старожил | Сообщений: 353 | «Ответ #2 10 Июня 2009, 20:17:45 »
Re: как рендить глубину? render depth |
2
Я делаю домик на болоте, и чтобы мне сделать реалистичное болото мне естественно нужна глубина !!! Вот что у меня уже есть (см.рис)

* home.jpg (276.85 Кб, 934x761 - просмотрено 1509 раз.)
Sqwer | ***** | Ветеран | Сообщений: 540 | «Ответ #3 24 Июня 2009, 19:15:46 »
Re: [Графика]как рендить глубину? (есть ответ) |
3
Ответ:

код шейдера:




Код:
float4x4 wvp : WorldViewProjection < string UIWidget = "None"; >;  
*============================================================================
 ============= Depth TECHNIQUE =============
============================================================================*/
struct fromAPItoVS {
float4 position : POSITION;


};

struct toPS {
        float4 position    : POSITION;

        float2 pixelDepth    : TEXCOORD0;

};

toPS VS(fromAPItoVS IN)
{
toPS OUT = (toPS)0;
OUT.position = mul(IN.position, wvp);

OUT.pixelDepth.xy = OUT.position.zw;

    return OUT;
}

float4 PS(toPS IN) : COLOR
{

float Depth = IN.pixelDepth.x;
float4 ret =  float4(Depth,1,1, 1);
return ret;
}

technique Depth

pass ambient 
    {
VertexShader = compile vs_3_0 VS();

PixelShader = compile ps_3_0 PS();


}   




Схема подключения и параметры RTT приведены ниже в файле
* Depth.cgr (95.09 Кб - загружено 799 раз.)
 
  [1]
Печать
 
Quest3D - Русскоязычное сообщество > Quest3D > Визуализация, Шейдеры > [sh]как рендить глубину? (есть ответ)
Перейти в: