如果你的input.TextureCoordinate真的代表了采样器的纹理坐标,那么你尝试计算距离的方式是错误的。
您可以按如下方式更改PixelShaderFunction的主体:
float distance = distance(cameraPos, input.Position3D); float l = saturate((distance-fogNear)/(fogFar-fogNear)); return lerp(tex2D(Sampler, input.TextureCoordinate), fogColor, l);
将以下内容添加到VertexShaderOutput声明中:
float4 Position3D : TEXCOORD1;
在Vertex Shader中填充Position3D,顶点的位置乘以世界矩阵:
output.Position3D = mul(input.pos, matWorld);