Example #1
0
 public bool IsEquals(NullVertexStruct source)
 {
     if (normal != source.normal)
     {
         return(false);
     }
     if (hadTangent && (tangent != source.tangent || binormal != source.binormal))
     {
         return(false);
     }
     if (hadColor && (color != source.color))
     {
         return(false);
     }
     if (vertex != source.vertex)
     {
         return(false);
     }
     if (uvLst.Count != source.uvLst.Count)
     {
         return(false);
     }
     for (int i = 0; i < uvLst.Count; i++)
     {
         if (uvLst[i] != source.uvLst[i])
         {
             return(false);
         }
     }
     return(true);
 }
Example #2
0
        public void MergeVertices(List <NullVertexStruct> vertices, List <NullMergeIndex> indexMapping)
        {
            indexMapping.Clear();
            if (vertices == null || vertices.Count < 3)
            {
                return;
            }

            for (int i = 0; i < vertices.Count; i++)
            {
                NullVertexStruct vertex = vertices[i];
                bool             merged = false;
                foreach (NullMergeIndex index in indexMapping)
                {
                    if (vertices[index.index].IsEquals(vertex))
                    {
                        merged = true;
                        index.equalOnes.Add(i);
                        break;
                    }
                }
                if (!merged)
                {
                    NullMergeIndex index = new NullMergeIndex(i);
                    indexMapping.Add(index);
                }
            }
        }
Example #3
0
        protected List <NullVertexStruct> PrepareFloatDataForVertexMerging()
        {
            if ((GetMeshObjectType() != NullPrimitiveType.MOT_TRIANGLES) || (GetTriangleCount() < 2))
            {
                return(null);
            }
            List <NullVertexStruct> floatData = new List <NullVertexStruct>();

            for (int i = 0; i < GetVertexCount(); ++i)
            {
                floatData.Add(new NullVertexStruct());
            }

            bool hadColor   = HadVertexColorData();
            bool hadTangent = HadTangentData();
            int  uvCount    = 0;

            if (UVGroups != null)
            {
                uvCount = UVGroups.GetUVGroupCount();
            }
            NullVertexStruct buffer = null;

            for (int i = 0; i < GetVertexCount(); i++)
            {
                buffer = floatData[i];
                GetVertex(i, ref buffer.vertex);
                GetNormal(i, ref buffer.normal);
                buffer.hadColor   = hadColor;
                buffer.hadTangent = hadTangent;
                if (hadColor)
                {
                    GetVertexColor(i, ref buffer.color);
                }
                else
                {
                    buffer.color = 0;
                }
                if (hadTangent)
                {
                    GetTangent(i, ref buffer.tangent);
                    GetBinormal(i, ref buffer.binormal);
                }
                for (int j = 0; j < uvCount; j++)
                {
                    NullUVGroup uvGroup = UVGroups.GetUVGroupByIndex(j);
                    Vector2     uv      = Vector2.zero;
                    uvGroup.GetUV(i, ref uv);
                    buffer.uvLst.Add(uv);
                }
            }
            return(floatData);
        }