Directx中使用浮点纹理在纹理混合时遇到的问题,发现大于1的纹素被置为1
采用的纹理格式是D3DFMT_A32B32G32R32F (128-bit float format using 32 bits for the each channel (alpha, blue, green, red)) ,每层纹理中的纹素值均在0-1之间。
多层纹理混合中,每层的运算设置的D3DTSS_COLOROP为D3DTOP_ADD,纹理混合后发现加法后大于1的纹素都被置为了1。这不是我想看到的结果。如何可以让D3D不对大于1.0的纹素截断?
ps:我采用浮点纹理,是为了进行科学计算。
[解决办法]
1本来就是最大值啊,最亮了啊。不明白你为什么需要比1更大的值。
[解决办法]
因为硬件光栅化的时候电压和亮度之间的转化公式是基于 0 到 1 的
所以到最后输出的时候必须转到 [0,1)空间,
大于1的值得只在中间计算和保存信息有用,具体你可以找写 HDR 的资料看看