• Добро пожаловать на Quest3D - Русскоязычное сообщество.
 

[sh]как рендить глубину? (есть ответ)

Автор Sqwer, 14 мая 2009, 18:27:16

« назад - далее »

Sqwer

Как получить текстуру, хранящую информацию о глубине сцены?
Данная текстурка необходима для создания более реальной воды чем встроенной в Квест. Реализация на HLSL.

Viik

Береш render to texture ченел, выставляеш кастомный буфер на 16F или 32F. Затем в эту тексуру рендериш интерполированную Z координату вертекса, при этом в вертексном шейдере позицию вертекса умножаеш на WorldViewProjection матрицу, как при обычном рендере.

cashis

Я делаю домик на болоте, и чтобы мне сделать реалистичное болото мне естественно нужна глубина !!! Вот что у меня уже есть (см.рис)

Sqwer

Ответ:

код шейдера:





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