private int CutEdgeOptimizedVerticesNormalsTangentsUVs(int a_RelativeVertexLocationsOffset, int a_IndexA, int a_IndexB, Vector3 a_VertexA, Vector3 a_VertexB, bool a_IsVertexAInside, float a_IntersectionFactorAB) { CutEdge edge = new CutEdge(a_IndexA, a_IndexB); int count = base.m_DecalsMesh.Vertices.Count; base.m_DecalsMesh.Vertices.Add(Vector3.Lerp(a_VertexA, a_VertexB, a_IntersectionFactorAB)); base.m_DecalsMesh.Normals.Add(Vector3.Lerp(base.m_DecalsMesh.Normals[a_IndexA], base.m_DecalsMesh.Normals[a_IndexB], a_IntersectionFactorAB)); base.m_DecalsMesh.Tangents.Add(Vector4.Lerp(base.m_DecalsMesh.Tangents[a_IndexA], base.m_DecalsMesh.Tangents[a_IndexB], a_IntersectionFactorAB)); base.m_DecalsMesh.UVs.Add(Vector2.Lerp(base.m_DecalsMesh.UVs[a_IndexA], base.m_DecalsMesh.UVs[a_IndexB], a_IntersectionFactorAB)); if (base.m_DecalsMesh.Decals.UseVertexColors) { base.m_DecalsMesh.TargetVertexColors.Add(Color.Lerp(base.m_DecalsMesh.TargetVertexColors[a_IndexA], base.m_DecalsMesh.TargetVertexColors[a_IndexB], a_IntersectionFactorAB)); base.m_DecalsMesh.VertexColors.Add(Color.Lerp(base.m_DecalsMesh.VertexColors[a_IndexA], base.m_DecalsMesh.VertexColors[a_IndexB], a_IntersectionFactorAB)); } base.m_ActiveProjector.DecalsMeshUpperVertexIndex++; if (a_IsVertexAInside) { edge.newVertex2Index = count; base.m_RelativeVertexLocations[a_IndexB - a_RelativeVertexLocationsOffset] = RelativeVertexLocation.Outside; } else { edge.newVertex1Index = count; base.m_RelativeVertexLocations[a_IndexA - a_RelativeVertexLocationsOffset] = RelativeVertexLocation.Outside; } base.m_CutEdges.AddEdge(edge); return(count); }
private int CutEdgeUnoptimized(int a_RelativeVertexLocationsOffset, int a_IndexA, int a_IndexB, Vector3 a_VertexA, Vector3 a_VertexB, bool a_IsVertexAInside, float a_IntersectionFactorAB) { CutEdge edge = new CutEdge(a_IndexA, a_IndexB); Vector3 a = base.m_DecalsMesh.OriginalVertices[a_IndexA]; Vector3 vector3 = base.m_DecalsMesh.Normals[a_IndexA]; BoneWeight weight = base.m_DecalsMesh.BoneWeights[a_IndexA]; int count = base.m_DecalsMesh.Vertices.Count; base.m_DecalsMesh.OriginalVertices.Add(Vector3.Lerp(a, base.m_DecalsMesh.OriginalVertices[a_IndexB], a_IntersectionFactorAB)); base.m_DecalsMesh.Vertices.Add(Vector3.Lerp(a_VertexA, a_VertexB, a_IntersectionFactorAB)); base.m_DecalsMesh.Normals.Add(Vector3.Lerp(vector3, base.m_DecalsMesh.Normals[a_IndexB], a_IntersectionFactorAB)); base.m_DecalsMesh.BoneWeights.Add(this.LerpBoneWeights(weight, base.m_DecalsMesh.BoneWeights[a_IndexB], a_IntersectionFactorAB)); base.m_ActiveProjector.DecalsMeshUpperVertexIndex++; if (base.m_DecalsMesh.Decals.CurrentTangentsMode == TangentsMode.Target) { base.m_DecalsMesh.Tangents.Add(Vector4.Lerp(base.m_DecalsMesh.Tangents[a_IndexA], base.m_DecalsMesh.Tangents[a_IndexB], a_IntersectionFactorAB)); } if (base.m_DecalsMesh.Decals.UseVertexColors) { base.m_DecalsMesh.TargetVertexColors.Add(Color.Lerp(base.m_DecalsMesh.TargetVertexColors[a_IndexA], base.m_DecalsMesh.TargetVertexColors[a_IndexB], a_IntersectionFactorAB)); base.m_DecalsMesh.VertexColors.Add(Color.Lerp(base.m_DecalsMesh.VertexColors[a_IndexA], base.m_DecalsMesh.VertexColors[a_IndexB], a_IntersectionFactorAB)); } if ((base.m_DecalsMesh.Decals.CurrentUVMode == UVMode.TargetUV) || (base.m_DecalsMesh.Decals.CurrentUVMode == UVMode.TargetUV2)) { base.m_DecalsMesh.UVs.Add(Vector2.Lerp(base.m_DecalsMesh.UVs[a_IndexA], base.m_DecalsMesh.UVs[a_IndexB], a_IntersectionFactorAB)); } if ((base.m_DecalsMesh.Decals.CurrentUV2Mode == UV2Mode.TargetUV) || (base.m_DecalsMesh.Decals.CurrentUV2Mode == UV2Mode.TargetUV2)) { base.m_DecalsMesh.UV2s.Add(Vector2.Lerp(base.m_DecalsMesh.UV2s[a_IndexA], base.m_DecalsMesh.UV2s[a_IndexB], a_IntersectionFactorAB)); } if (a_IsVertexAInside) { edge.newVertex2Index = count; base.m_RelativeVertexLocations[a_IndexB - a_RelativeVertexLocationsOffset] = RelativeVertexLocation.Outside; } else { edge.newVertex1Index = count; base.m_RelativeVertexLocations[a_IndexA - a_RelativeVertexLocationsOffset] = RelativeVertexLocation.Outside; } base.m_CutEdges.AddEdge(edge); return(count); }
public CutEdge this[CutEdge a_CutEdge] { get => this.m_CutEdgeDictionary[a_CutEdge];
public bool HasEdge(CutEdge a_CutEdge) => this.m_CutEdgeDictionary.ContainsKey(a_CutEdge);
public void AddEdge(CutEdge a_CutEdge) { this.m_CutEdgeDictionary.Add(a_CutEdge, a_CutEdge); }