我有二进制文件格式,包括顶点位置,法线,UV和权重。 一切正常,但我不能理解如何从中获取顶点法线。 V法线记录为字节(每个顶点位置一个字节,例如PosX,posY和posZ为3个字节)。 这就是我在二进制文件中的含义:
(byte)122 (byte)225 (byte)209
我使用其他软件转换此二进制文件,然后输出:
0.299055 0.712744 0.634477
我试图对矢量进行标准化,但结果不正确:
for (int i = 0; i < size; i++)
{
posArr[i * 3 + 0] = rmv2.lod[0].Mesh[0].Vertex[i].X;
posArr[i * 3 + 1] = rmv2.lod[0].Mesh[0].Vertex[i].Y;
posArr[i * 3 + 2] = rmv2.lod[0].Mesh[0].Vertex[i].Z;
length = (float)Math.Sqrt((rmv2.lod[0].Mesh[0].Vertex[i].normX * rmv2.lod[0].Mesh[0].Vertex[i].normX) + (rmv2.lod[0].Mesh[0].Vertex[i].normY * rmv2.lod[0].Mesh[0].Vertex[i].normY) + (rmv2.lod[0].Mesh[0].Vertex[i].normZ * rmv2.lod[0].Mesh[0].Vertex[i].normZ));
normArr[i * 3 + 0] = rmv2.lod[0].Mesh[0].Vertex[i].normX / length;
normArr[i * 3 + 1] = rmv2.lod[0].Mesh[0].Vertex[i].normY / length;
normArr[i * 3 + 2] = rmv2.lod[0].Mesh[0].Vertex[i].normZ / length;
cordArr[i * 2 + 0] = rmv2.lod[0].Mesh[0].Vertex[i].U;
cordArr[i * 2 + 1] = 1 - rmv2.lod[0].Mesh[0].Vertex[i].V;
}
此代码输出我:
0.3692057 0.6809122 0.6324918
我该怎么办?