Quest3D - Русскоязычное сообщество

Quest3D => Визуализация, Шейдеры => Тема начата: Sqwer от 14 Мая 2009, 17:27:16



Название: [sh]как рендить глубину? (есть ответ)
Отправлено: Sqwer от 14 Мая 2009, 17:27:16
Как получить текстуру, хранящую информацию о глубине сцены?
Данная текстурка необходима для создания более реальной воды чем встроенной в Квест. Реализация на HLSL.


Название: Re: как рендить глубину? render depth
Отправлено: Viik от 14 Мая 2009, 17:48:30
Береш render to texture ченел, выставляеш кастомный буфер на 16F или 32F. Затем в эту тексуру рендериш интерполированную Z координату вертекса, при этом в вертексном шейдере позицию вертекса умножаеш на WorldViewProjection матрицу, как при обычном рендере.


Название: Re: как рендить глубину? render depth
Отправлено: cashis от 10 Июня 2009, 20:17:45
Я делаю домик на болоте, и чтобы мне сделать реалистичное болото мне естественно нужна глубина !!! Вот что у меня уже есть (см.рис)


Название: Re: [Графика]как рендить глубину? (есть ответ)
Отправлено: Sqwer от 24 Июня 2009, 19:15:46
Ответ:

код шейдера:




Код:
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 приведены ниже в файле