Я хочу иметь свой собственный проход глубины.
Вершинный шейдер:
#include "../ConstantBuffers/ViewConstantBuffer.hlsli"
struct VertexShaderInput {
float3 Position: POSITION0;
half2 UV: TEXCOORD0;
};
struct VertexShaderOutput {
float4 Position: SV_POSITION;
half2 UV: TEXCOORD;
};
VertexShaderOutput vs(VertexShaderInput input){
VertexShaderOutput output;
output.Position = mul(float4(input.Position, 1.0f), viewProjection);
output.UV = input.UV;
return output;
}
Пиксельный шейдер:
struct PixelShaderInput {
float4 Position: SV_POSITION;
half2 UV: TEXCOORD;
};
struct PixelShaderOutput {
half4 Color : SV_Target;
float Depth : SV_Depth;
};
PixelShaderOutput ps(PixelShaderInput input)
{
PixelShaderOutput output;
output.Depth = input.Position.z; // Divide by w here???
output.Color = half4(input.UV.x, input.UV.y, 0,1);
return output;
}
Я понимаю, что в настоящее время я ставлю Z Поместите в буфер глубины. Буфер глубины правильно отображает значения. Они варьируются от NearPlane до FarPlane, в зависимости от того, как я настроил перспективу. (и, таким образом, мой буфер глубины полностью белый, если я действительно не близок к чему-либо)
Мой вопрос:
В большинстве игровых движков буфер глубины кажется нормализованным (то есть буфер глубины не превышает [0 -1]) какова цель этого и как мне это сделать?