C# 中 INT_2_10_10_10_REV 的打包法线

问题描述 投票:0回答:0

类似于这个问题,我有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# 实现?

c# webgl
© www.soinside.com 2019 - 2024. All rights reserved.