示例#1
0
        public int AddVertex(FVector position, FPackedNormal normal, uint extraInfo = 0)
        {
            var pointIndex = -1;

            normal.Data &= 0xFFFFFFu;

            var h = (int)Math.Floor(((position[0] - Mins[0]) / Extents.Value[0] + (position[1] - Mins[1]) / Extents.Value[1] + (position[2] - Mins[2]) / Extents.Value[2]) * (Constants.MESH_HASH_SIZE / 3.0f * 16)) % Constants.MESH_HASH_SIZE;

            pointIndex = Hash[h];
            while (pointIndex >= 0)
            {
                if (Points[pointIndex] == position && Normals[pointIndex] == normal && ExtraInfos[pointIndex] == extraInfo)
                {
                    break;
                }
                pointIndex = HashNext.Value[pointIndex];
            }

            if (pointIndex == -1)
            {
                Points.Add(position);
                pointIndex = Points.Count - 1;
                Normals.Add(normal);
                ExtraInfos.Add(extraInfo);
                HashNext.Value[pointIndex] = Hash[h];
                Hash[h] = pointIndex;
            }

            WedgeToVert.Add(pointIndex);
            VertToWedge.Value[pointIndex] = WedgeIndex++;
            return(pointIndex);
        }
示例#2
0
 public CMeshVertex(FVector position, FPackedNormal normal, FPackedNormal tangent, FMeshUVFloat uv)
 {
     Position = position;
     Normal   = normal;
     Tangent  = tangent;
     UV       = uv;
 }
示例#3
0
 public void SerializeForGPU(FAssetArchive Ar, bool bExtraBoneInfluences)
 {
     Normal    = new FPackedNormal[3];
     Normal[0] = new FPackedNormal(Ar);
     Normal[2] = new FPackedNormal(Ar);
     if (FSkeletalMeshCustomVersion.Get(Ar) < FSkeletalMeshCustomVersion.Type.UseSeparateSkinWeightBuffer)
     {
         // serialized as separate buffer starting with UE4.15
         Infs = new FSkinWeightInfo(Ar, bExtraBoneInfluences);
     }
     Pos = Ar.Read <FVector>();
 }
 public void SerializeForGPU(FAssetArchive Ar)
 {
     Normal    = new FPackedNormal[3];
     Normal[0] = new FPackedNormal(Ar);
     Normal[2] = new FPackedNormal(Ar);
     if (FSkeletalMeshCustomVersion.Get(Ar) < FSkeletalMeshCustomVersion.Type.UseSeparateSkinWeightBuffer)
     {
         // serialized as separate buffer starting with UE4.15
         Infs = new FSkinWeightInfo(Ar, Ar.Ver >= UE4Version.VER_UE4_SUPPORT_8_BONE_INFLUENCES_SKELETAL_MESHES);
     }
     Pos = Ar.Read <FVector>();
 }
示例#5
0
        public FPaintedVertex(FArchive Ar)
        {
            Position = Ar.Read <FVector>();

            if (FRenderingObjectVersion.Get(Ar) < FRenderingObjectVersion.Type.IncreaseNormalPrecision)
            {
                var temp = new FPackedNormal(Ar);
                Normal = temp;
            }
            else
            {
                Normal = Ar.Read <FVector4>();
            }

            Color = Ar.Read <FColor>();
        }
示例#6
0
 public void SerializeForEditor(FAssetArchive Ar)
 {
     Normal = new FPackedNormal[3];
     Pos    = Ar.Read <FVector>();
     if (FRenderingObjectVersion.Get(Ar) < FRenderingObjectVersion.Type.IncreaseNormalPrecision)
     {
         Normal[0] = new FPackedNormal(Ar);
         Normal[1] = new FPackedNormal(Ar);
         Normal[2] = new FPackedNormal(Ar);
     }
     else
     {
         // New normals are stored with full floating point precision
         Normal[0] = new FPackedNormal(Ar.Read <FVector>());
         Normal[1] = new FPackedNormal(Ar.Read <FVector>());
         Normal[2] = new FPackedNormal(Ar.Read <FVector4>());
     }
 }
示例#7
0
 public CSkelMeshVertex(FVector position, FPackedNormal normal, FPackedNormal tangent, FMeshUVFloat uv) : base(position, normal, tangent, uv)
 {
     Bone = new short[4];
 }