实现法线贴图HLSL

时间:2013-02-20 04:14:57

标签: graphics 3d hlsl directx-11

所以,好的。我正试图在我的小型游戏引擎中实现常规映射,但我无法让它工作。

当我只使用每顶点法线进行照明时,一切都很好,但是如果我尝试使用法线贴图,那么一切都会崩溃。

我知道我有正确的UV,因为纹理看起来很好,但是我不知道在涉及法线贴图纹理时我做错了什么。

这是我的像素着色器(HLSL)中的一些代码......

    float3 NormalSample(float3 normalMapSample, float3 unitNormalW, float3 tangentW)
{
    //Uncompress each component from [0,1] to [-1,1]
    float3 normalT = 2.0f*normalMapSample - 1.0f;
    // Build orthonormal basis.
    float3 N = unitNormalW;
    float3 T = normalize(tangentW - dot(tangentW, N)*N);
    float3 B = cross(N, T);

    float3x3 TBN = float3x3(T, B, N);

    // Transform from tangent space to world space.
    float3 bumpedNormalW = mul(normalT, TBN);

    return bumpedNormalW;
}

关于我可能做错的任何想法?

1 个答案:

答案 0 :(得分:3)

好的,我修好了。我只是在错误的坐标空间中进行正常计算。为了更容易,我决定在模型空间中做所有事情。看起来不错。太糟糕了我不允许发布屏幕截图。

再次感谢Miloszmaki ......