嗨,伙计们,这应该是一件容易的事,但由于某种原因,我没有解决...
我只想使用着色器来可视化场景中的深度:
float4x4 matViewProjection;
float4x4 matWorld;
float4 eyePos;
struct VS_OUTPUT
{
float4 position : POSITION0;
float depth : TEXCOORD0;
};
VS_OUTPUT vs_main( VS_INPUT input )
{
VS_OUTPUT output;
output.position = mul( input.position, matViewProjection );
float3 posWorld = mul(input.position, matWorld);
output.depth = distance(posWorld, eyePos);
return( output );
}
为了获得深度值(或者我认为),我计算了世界空间中的位置与视图位置之间的距离。
以及对应的像素着色器
float4 ps_main(VS_OUTPUT input) : COLOR0
{
float depth = input.depth;
return float4(depth, depth, depth, 1.0f);
}
结果是白色
所以我开始试错将一个值乘以深度:
float depth = input.depth * 0.005f;
根据与物体的距离,它给出了令人满意的结果。因此,如果我靠近对象,我将不得不再次调整该值。
所以有什么非常不对劲的...
谢谢阅读!