我正在使用 DirectXTK 中的CreateWICTextureFromMemoryEx
加载纹理。我加载的所有内容都会转换为sRGB
。有什么方法可以强制 WIC 创建RGB
表面吗?
或者,也许有一种方法可以将已经加载的纹理从sRGB
转换为RGB
?回到 D3DX (据我所知),曾经有D3DX11_FILTER_SRGB
标志(但据我所知),但尚未弃用。
任何帮助将不胜感激,谢谢!
最佳答案
DirectX Tool Kit加载器在加载WIC图像时使用DXGI_FORMAT_*_SRGB
,其原因如下:
/sRGB/RenderingIntent
为true)/app1/ifd/exif/{ushort=40961}
为1)/ifd/exif/{ushort=40961}
为1)因此,图像实际上很可能在sRGB色彩空间中。因此,
DXGI_FORMAT_*_SRGB
指示从该纹理读取的内容应经过反 Gamma 处理,以使其进入线性色彩空间。我假设您在这里不使用 Gamma 校正渲染?如果您控制纹理文件,一个快速而简单的解决方法是使用DirectXTex库中的texconv将源图像转换为
DDS
。您可以使用各种开关(例如-srgbi
或-srgbo
)来强制执行SRGB行为。关于c++ - 使用WIC在DirectX11中将纹理加载为RGB而不是sRGB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39634189/