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); }
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); } } }
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); }