3 using System.Collections.Generic;
14 private static float BETA = 0.85f;
71 foreach(Vector3 vert
in neighbors)
74 float denominator = ( (float)neighbors.Count + 1f);
75 float factor = 1f/denominator;
77 Debug.Log(
"HERE IS THE PROBLEM!!!!!!!!!!!!!");
83 Vector3 average = Vector3.zero;
84 foreach(Vector3 v
in neighbors)
87 float denominator = (float)neighbors.Count;
88 float factor = 1f/denominator;
90 Debug.Log(
"HERE IS THE PROBLEM!!!!!!!!!!!!!");
95 private static Vector3
NudgeVertex(List<Vector3> neighbors, Vector3 v) {
96 if(neighbors.Count == 0)
100 foreach(Vector3 vert
in neighbors) {
101 nudgeVector = vert - v;
102 v += NUDGE_COEF * nudgeVector;
108 List<int> neighborIndices,
int i, Vector3[] vertices) {
110 foreach(
int index
in aSet) {
112 neighbors.Add(vertices[index]);
113 neighborIndices.Add(index);
125 for(
int nIndex=0; nIndex<neighbors.Count; nIndex++) {
134 foreach(
int a
in aSet) {
135 if(nIndices.Contains(a))
154 Vector3[] vertices = mData.
vertices;
156 List<Vector3> neighbors =
new List<Vector3>();
157 List<int> neighborIndices =
new List<int>();
158 for(
int i=0; i<vertices.Length; i++) {
160 neighborIndices.Clear();
170 Vector3[] vertices = mData.
vertices;
172 List<Vector3> neighbors =
new List<Vector3>();
173 List<int> neighborIndices =
new List<int>();
174 for(
int i=0; i<vertices.Length; i++) {
176 neighborIndices.Clear();
189 Vector3[] ov = mesh.vertices;
190 Vector3[] wv = mesh.vertices;
191 Vector3[] bv =
new Vector3[mesh.vertices.Length];
192 bool[] canBeMoved =
new bool[mesh.vertices.Length];
194 List<Vector3> neighbors =
new List<Vector3>();
195 List<int> neighborIndices =
new List<int>();
196 for(
int i=0; i<wv.Length; i++) {
198 neighborIndices.Clear();
202 canBeMoved[i] =
IsInsideVertex(neighbors, neighborIndices, adjacencySets);
207 bv[i] = wv[i] - ov[i];
213 for(
int i=0; i<bv.Length; i++) {
216 neighborIndices.Clear();
222 move = BETA*bv[i] + ONE_MINUS_BETA*average;
223 wv[i] += HC_CORRECT*move;
static void ConditionalAdjSetsSmoother(MeshData mData, AdjacencySets adjacencySets)
static void AdjSetsSmoother(MeshData mData, AdjacencySets adjacencySets)
static bool IsInsideVertex(List< Vector3 > neighbors, List< int > nIndices, AdjacencySets aSets)
static Vector3 AverageOfNeighbors(List< Vector3 > neighbors)
HashSet< int > GetAdjacencySet(int vIndex)
static void AdjSetsHCSmoother(Mesh mesh, AdjacencySets adjacencySets)
static float ONE_MINUS_BETA
static Vector3 NudgeVertex(List< Vector3 > neighbors, Vector3 v)
static void BuildNeighborsLists(AdjacencySets adjSets, List< Vector3 > neighbors, List< int > neighborIndices, int i, Vector3[] vertices)
static Vector3 TrueAverageVertex(List< Vector3 > neighbors, Vector3 v)