Shape is now an abstract class and can't be instanciated.
Change derived shape to only deal with local calculation they don't need anymore to deal with how they've been transformed.
This commit is contained in:
@@ -29,6 +29,10 @@ class Shape
|
||||
private:
|
||||
ShapeType type;
|
||||
|
||||
private:
|
||||
virtual Intersect localIntersect(Ray r) = 0;
|
||||
virtual Tuple localNormalAt(Tuple point) = 0;
|
||||
|
||||
public:
|
||||
Matrix transformMatrix;
|
||||
Matrix inverseTransform;
|
||||
@@ -37,8 +41,8 @@ public:
|
||||
public:
|
||||
Shape(ShapeType = SHAPE_NONE);
|
||||
|
||||
virtual Intersect intersect(Ray r);
|
||||
virtual Tuple normalAt(Tuple point);
|
||||
Intersect intersect(Ray r);
|
||||
Tuple normalAt(Tuple point);
|
||||
|
||||
void setTransform(Matrix transform);
|
||||
void setMaterial(Material material) { this->material = material; };
|
||||
|
||||
@@ -15,11 +15,13 @@
|
||||
|
||||
class Sphere : public Shape
|
||||
{
|
||||
private:
|
||||
Intersect localIntersect(Ray r);
|
||||
Tuple localNormalAt(Tuple point);
|
||||
|
||||
public:
|
||||
Sphere() : Shape(SHAPE_SPHERE) { };
|
||||
/* All sphere are at (0, 0, 0) and radius 1 in the object space */
|
||||
virtual Intersect intersect(Ray r);
|
||||
virtual Tuple normalAt(Tuple point);
|
||||
};
|
||||
|
||||
#endif /* DORAYME_SPHERE_H */
|
||||
|
||||
28
source/include/testshape.h
Normal file
28
source/include/testshape.h
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* DoRayMe - a quick and dirty Raytracer
|
||||
* Test shape header
|
||||
*
|
||||
* Created by Manoël Trapier
|
||||
* Copyright (c) 2020 986-Studio.
|
||||
*
|
||||
*/
|
||||
#ifndef DORAYME_TESTSHAPE_H
|
||||
#define DORAYME_TESTSHAPE_H
|
||||
|
||||
#include <shape.h>
|
||||
#include <ray.h>
|
||||
#include <tuple.h>
|
||||
|
||||
class TestShape : public Shape
|
||||
{
|
||||
private:
|
||||
Intersect localIntersect(Ray r);
|
||||
Tuple localNormalAt(Tuple point);
|
||||
|
||||
public:
|
||||
Ray localRay;
|
||||
|
||||
TestShape();
|
||||
};
|
||||
|
||||
#endif //DORAYME_TESTSHAPE_H
|
||||
Reference in New Issue
Block a user