Normalize normals to norm 1
This commit is contained in:
parent
4d100731a2
commit
aaaebdc042
3 changed files with 18 additions and 5 deletions
10
Implicit.cpp
10
Implicit.cpp
|
@ -8,11 +8,13 @@ Point ImplicitSurface::normal_at(const Point& pt) const {
|
||||||
// this is simply the gradient.
|
// this is simply the gradient.
|
||||||
static const double d_dist = 1e-8;
|
static const double d_dist = 1e-8;
|
||||||
|
|
||||||
return Point(
|
Point normal(
|
||||||
(operator()(pt.x + d_dist, pt.y, pt.z) -
|
(operator()(pt.x + d_dist, pt.y, pt.z) -
|
||||||
operator()(pt.x - d_dist, pt.y, pt.z)) / (2. * d_dist),
|
operator()(pt.x - d_dist, pt.y, pt.z)) / (2. * d_dist),
|
||||||
(operator()(pt.x, pt.y + d_dist, pt.z) -
|
(operator()(pt.x, pt.y + d_dist, pt.z) -
|
||||||
operator()(pt.x, pt.y - d_dist, pt.z)) / (2. * d_dist),
|
operator()(pt.x, pt.y - d_dist, pt.z)) / (2. * d_dist),
|
||||||
(operator()(pt.x, pt.y, pt.z + d_dist) -
|
(operator()(pt.x, pt.y, pt.z + d_dist) -
|
||||||
operator()(pt.x, pt.y, pt.z - d_dist)) / (2. * d_dist));
|
operator()(pt.x, pt.y, pt.z - d_dist)) / (2. * d_dist));
|
||||||
|
normal.normalize();
|
||||||
|
return normal;
|
||||||
}
|
}
|
||||||
|
|
2
Mesh.cpp
2
Mesh.cpp
|
@ -91,7 +91,7 @@ void Mesh::compute_normal(size_t vert) {
|
||||||
normal += e1.cross_prod(e2);
|
normal += e1.cross_prod(e2);
|
||||||
}
|
}
|
||||||
|
|
||||||
normal = (1. / ((double) faces_with_vert[vert].size())) * normal;
|
normal.normalize();
|
||||||
normals[vert].dirty = false;
|
normals[vert].dirty = false;
|
||||||
normals[vert].vect = normal;
|
normals[vert].vect = normal;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,17 @@ struct Point {
|
||||||
Point(double x, double y, double z) : x(x), y(y), z(z) {}
|
Point(double x, double y, double z) : x(x), y(y), z(z) {}
|
||||||
double x, y, z;
|
double x, y, z;
|
||||||
|
|
||||||
|
double norm() const {
|
||||||
|
auto sq = [](double x) { return x * x; };
|
||||||
|
return sqrt(sq(x) + sq(y) + sq(z));
|
||||||
|
}
|
||||||
|
void normalize() {
|
||||||
|
double _norm = norm();
|
||||||
|
x /= _norm;
|
||||||
|
y /= _norm;
|
||||||
|
z /= _norm;
|
||||||
|
}
|
||||||
|
|
||||||
double operator[](unsigned i) const {
|
double operator[](unsigned i) const {
|
||||||
assert(i < 3);
|
assert(i < 3);
|
||||||
switch(i) {
|
switch(i) {
|
||||||
|
|
Loading…
Reference in a new issue