Add function to calculate sphere normal vector on given point on the sphere.

This commit is contained in:
Godzil
2020-02-17 15:39:14 +00:00
parent 656ff52204
commit a8194169c5
5 changed files with 92 additions and 0 deletions

View File

@@ -24,6 +24,11 @@ Intersect Object::intersect(Ray r)
return Intersect();
};
Tuple Object::normalAt(Tuple point)
{
return Vector(0, 0, 0);
}
void Object::setTransform(Matrix transform)
{
this->transformMatrix = transform;

View File

@@ -35,4 +35,16 @@ Intersect Sphere::intersect(Ray r)
}
return ret;
}
Tuple Sphere::normalAt(Tuple point)
{
Tuple object_point = this->inverseTransform * point;
Tuple object_normal = (object_point - Point(0, 0, 0)).normalise();
Tuple world_normal = this->inverseTransform.transpose() * object_normal;
/* W may get wrong, so hack it. This is perfectly normal as we are using a 4x4 matrix instead of a 3x3 */
world_normal.w = 0;
return world_normal.normalise();
}