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); }
public CMeshVertex(FVector position, FPackedNormal normal, FPackedNormal tangent, FMeshUVFloat uv) { Position = position; Normal = normal; Tangent = tangent; UV = uv; }
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>(); }
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>(); }
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>()); } }
public CSkelMeshVertex(FVector position, FPackedNormal normal, FPackedNormal tangent, FMeshUVFloat uv) : base(position, normal, tangent, uv) { Bone = new short[4]; }