Made Tracer an abstract class.
This commit is contained in:
21
tracer.hpp
21
tracer.hpp
@@ -13,7 +13,11 @@
|
||||
using std::vector;
|
||||
using glm::vec2;
|
||||
using glm::vec3;
|
||||
using glm::mat4x4;
|
||||
|
||||
#define MAX_RECURSION 3
|
||||
#define BIAS 0.000001f
|
||||
|
||||
extern const vec3 BCKG_COLOR;
|
||||
|
||||
class Tracer {
|
||||
public:
|
||||
@@ -21,18 +25,21 @@ public:
|
||||
int m_w;
|
||||
float m_fov;
|
||||
float m_a_ratio;
|
||||
bool indirect_l;
|
||||
|
||||
Tracer(): m_h(480), m_w(640), m_fov(90.0f), m_a_ratio(640.0f / 480.0f), indirect_l(false) { }
|
||||
Tracer(): m_h(480), m_w(640), m_fov(90.0f), m_a_ratio(640.0f / 480.0f) { }
|
||||
|
||||
Tracer(int h, int w, float fov, bool il): m_h(h), m_w(w), m_fov(fov), indirect_l(il) {
|
||||
Tracer(int h, int w, float fov): m_h(h), m_w(w), m_fov(fov) {
|
||||
m_a_ratio = static_cast<float>(w) / static_cast<float>(h);
|
||||
};
|
||||
|
||||
vec2 sample_pixel(int i, int j) const;
|
||||
vec3 trace_ray(Ray & r, vector<Figure *> & v_figures, vector<Light *> & v_lights, unsigned int rec_level) const;
|
||||
virtual ~Tracer() { }
|
||||
|
||||
private:
|
||||
vec2 sample_pixel(int i, int j) const;
|
||||
virtual vec3 trace_ray(Ray & r, vector<Figure *> & v_figures, vector<Light *> & v_lights, unsigned int rec_level) const = 0;
|
||||
|
||||
protected:
|
||||
float random01() const;
|
||||
float fresnel(const vec3 & i, const vec3 & n, const float ir1, const float ir2) const;
|
||||
void create_coords_system(const vec3 &n, vec3 &nt, vec3 &nb) const;
|
||||
vec3 sample_hemisphere(const float r1, const float r2) const;
|
||||
void rotate_sample(vec3 & sample, const vec3 & n) const;
|
||||
|
||||
Reference in New Issue
Block a user