如何规范化顶点法向量c#

时间:2016-09-23 07:02:27

标签: c# vector converter normalization

我有二进制文件格式,包括顶点位置,法线,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

我该怎么办?

0 个答案:

没有答案