计算视图空间正常而不是世界空间

时间:2016-06-11 10:33:51

标签: xna hlsl normals ssao

我希望你能帮忙解决这个问题。我目前正在使用延迟渲染器并且我正在尝试实现SSAO但是需要查看空间法线并且我目前有世界空间法线,我正在尝试如何转换它们但是一直卡住。

这是我的顶点着色器的主要部分,<ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Transparent" /> <Setter Property="BorderThickness" Value="0" /> </Trigger> </Style.Triggers> </Style> </ListView.ItemContainerStyle> 是实例矩阵的世界矩阵或转置,因为相同的代码也用于实例模型。

instanceTransform

像素着色器中的正常计算是:

VertexShaderOutput VertexShaderFunctionCommon(VertexShaderInput input, float4x4 instanceTransform)
{
    VertexShaderOutput output = (VertexShaderOutput)0;

    float4x4 worldViewProjection = mul(instanceTransform, ViewProjection);

    output.Position = mul(float4(input.Position.xyz,1), worldViewProjection);

    output.Depth = output.Position.zw;

    // calculate tangent space to world space matrix using the world space tangent, binormal, and normal as basis vectors
    output.TangentToWorld[0] = normalize(mul(input.Tangent, instanceTransform));
    output.TangentToWorld[1] = normalize(mul(input.Binormal, instanceTransform));
    output.TangentToWorld[2] = normalize(mul(input.Normal, instanceTransform));

    return output;
}

你能帮帮忙吗?

0 个答案:

没有答案