我正在使用 Direct3d 11,我遇到了一些奇怪的事情。我已经拍摄了一张法线贴图并将其编码为 DDS 文件两次。一次使用R8G8B8A8_SNORM编码,一次使用BC5_SNORM。
接下来我使用D3DX11CreateShaderResourceViewFromFile和D3DX11GetImageInfoFromFile加载每个纹理。当我在像素着色器中对这些纹理进行采样时,我发现R8G8B8A8_SNORM纹理返回的值在 [-1,1] 范围内,这是我对 SNORM 纹理的期望。但是,BC5_SNORM纹理返回的值在 [0,1] 范围内,这对我来说没有任何意义。
我用我的调试器和 PIX 进行了三重检查。纹理的格式是正确的(BC5_*S*NORM),所以我不知道为什么它不返回有符号值。