#ifndef CLOUDSHADER_HXX
#define CLOUDSHADER_HXX

#include "Shader.hxx"
#include "Noise.hxx"

class CloudShader : public Shader
{

private:

    Vec3f color;
    float frame;

public:
    
    CloudShader(Scene *scene,Vec3f color,float frame)
      : Shader(scene),color(color),frame(frame)
    {};
    
    Vec3f Shade(Ray &ray)
    {
        // get uv coordinates
        Vec2f uv = ray.hit->GetUV(ray);

        // use 3D perlin noise do generate animated 2D clouds
	Vec3f result = color + Vec3f(PerlinNoise3D( uv.x() * 1024.0, uv.y() * 512.0, frame / 5.0f, 0.7, 0.01, 8));
	result = lerp(result, Vec3f(0.9, 0.9, 1.0), pow(1.0 - uv.y(), 12.0));

        return result;
    };
};

#endif