我想在一个32位浮点变量中存储两个浮点值。编码将在C#中进行,而解码将在HLSL着色器中完成。在一个浮点变量中存储两个浮点值
到目前为止我发现的最好的解决方法是硬接线在编码值小数点的偏移,并将其存储为“载体”浮动的整数和小数:
123.456 -> 12.3 and 45.6
它可以”吨处理负值,但没关系。
但是我想知道是否有更好的方法来做到这一点。
编辑:关于任务的详细原因:
我与那里的顶点数据存储为花车在统一固定的数据结构的工作。 (Float2代表UV,float3代表正常,等等)。显然没有办法正确添加额外的数据,所以我必须在这些限制内工作,这就是为什么我认为这完全归结为更一般的编码数据问题。例如,我可以牺牲次要UV数据来传输2×2额外数据通道。
目标是着色器模型3.0,但我不介意解码在SM2.0上也可以合理工作。
只要“合理”,数据丢失就没有问题。预期的值范围是0到64,但是我认为0..1也可以,因为重映射到着色器内的任何范围都很便宜。重要的是要保持尽可能高的精度。负值并不重要。
@ZoltanE:你知道你想要编码的变量的范围吗? –
@ZoltanE:你的目标是什么着色器模型和DirectX版本?你能给出更多关于你为什么编码的细节吗?最后:考虑在[gamedev](http://gamedev.stackexchange.com/)网站上提问,你可能会得到更好的答案。 –
也许这个问题http://stackoverflow.com/questions/4811219/pack-four-bytes-in-a-float可能会帮助你。 – Gnietschow