我在LWJGL中处理2D阴影,并在阴影图中以3个颜色像素(GL_RGB16)存储距离,但我只使用16位R通道,其他通道未使用,这导致由于浮点精度损失而导致阴影质量不佳。因此,我正在寻找一种方法,可以将浮点数存储到glsl中的一个vec3中,而不会造成精度损失(并将其解包)。
发布于 2016-02-02 13:40:03
你有两个选择,实际上,你可以使用更高精度的格式(这可能会更好,因为你会传递一个而不是三个),或者你可以使用乘法格式来存储更高精度的数字。
例如,数字的整数部分在R (X)分量中,浮点部分在G (Y)分量中,附加乘数在B (Z)分量中。在着色器中,若要获取值,请执行以下操作:
float distance = (shadow.r + shadow.g) * shadow.b;现在,出于几个原因,我强烈建议您不要使用此系统。首先,必须将高精度值存储为该格式,然后将其从该格式恢复为原始值,这在计算上非常昂贵,特别是考虑到您将经常执行此操作(特别是在片段着色器中执行计算时)。其次,这只是一个概念证明,正如我在上面所说的,使用更高精度的类型,并发送一个统一的浮点数而不是三个分量的向量会更好。
https://stackoverflow.com/questions/34969228
复制相似问题