类似于这个问题,我有3个代表顶点法线的浮点数,我需要让它们成为满足OpenGL的INT_2_10_10_10_REV格式的格式。但是我一直无法找到可行的解决方案(结果我场景中的阴影看起来很糟糕)。
每个浮点数都可以在 -1 和 1 之间。根据我所见,我尝试将值标准化,然后将它们打包成 10 位整数,但我显然做错了。
关于一些上下文,这就是我的代码的开始方式:
// Normalise and convert to integers (the 1023 is because I need 10 bit ints
int[] intNormals = new int[3] {
Convert.ToInt32(1023 * ((2 * ((normals[2] - normals.Min()) / range)) - 1)),
Convert.ToInt32(1023 * ((2 * ((normals[1] - normals.Min()) / range)) - 1)),
Convert.ToInt32(1023 * ((2 * ((normals[0] - normals.Min()) / range)) - 1))
};
然后我开始尝试将 intNormals 中的值转换为 10 位整数,我正在尝试使用位掩码和 BitArrays 来完成。我可能在那里犯了多个错误,所以我的问题是:
而不是全部发布是否有任何 C# 库可以以标准方式执行此操作?或者是否有人愿意分享他们愿意分享的有效 C# 实现?