#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