Subversion Repositories gelsvn

Rev

Rev 215 | Rev 595 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 215 Rev 229
Line 82... Line 82...
82
 
82
 
83
 
83
 
84
 
84
 
85
		Vec3f filtered_normal(FaceIter f)
85
		Vec3f filtered_normal(FaceIter f)
86
		{
86
		{
87
				const float sigma = .1;
87
				const float sigma = .1f;
88
 
88
 
89
				vector<Vec3f> norms;
89
				vector<Vec3f> norms;
90
				face_neighbourhood(f, norms);
90
				face_neighbourhood(f, norms);
91
				float min_dist_sum=1e32;
91
				float min_dist_sum=1e32f;
92
				int median=-1;
92
				int median=-1;
93
		
93
		
94
				for(int i=0;i<norms.size();++i)
94
				for(unsigned int i=0;i<norms.size();++i)
95
				{
95
				{
96
						float dist_sum = 0;
96
						float dist_sum = 0;
97
						for(int j=0;j<norms.size(); ++j)
97
						for(unsigned int j=0;j<norms.size(); ++j)
98
								dist_sum += 1.0f - dot(norms[i], norms[j]);
98
								dist_sum += 1.0f - dot(norms[i], norms[j]);
99
						if(dist_sum < min_dist_sum)
99
						if(dist_sum < min_dist_sum)
100
						{
100
						{
101
								min_dist_sum = dist_sum;
101
								min_dist_sum = dist_sum;
102
								median = i;
102
								median = i;
103
						}
103
						}
104
				}
104
				}
105
				assert(median != -1);
105
				assert(median != -1);
106
				Vec3f median_norm = norms[median];
106
				Vec3f median_norm = norms[median];
107
				Vec3f avg_norm(0);
107
				Vec3f avg_norm(0);
108
				for(int i=0;i<norms.size();++i)
108
				for(unsigned int i=0;i<norms.size();++i)
109
				{
109
				{
110
						float w = exp((dot(median_norm, norms[i])-1)/sigma);
110
						float w = exp((dot(median_norm, norms[i])-1)/sigma);
111
						if(w<1e-2) w = 0;
111
						if(w<1e-2) w = 0;
112
						avg_norm += w*norms[i];
112
						avg_norm += w*norms[i];
113
				}
113
				}