CloudShader.h

Go to the documentation of this file.
00001 
00007 #ifndef CLOUDSHADER_H
00008 #define CLOUDSHADER_H CLOUDSHADER_H
00009 
00010 #include "Shader.h"
00011 #include "PerlinNoise3D.h"
00012  
00017 class CloudShader : public Shader
00018 {
00019 private:
00024     ColorRGBA color;
00025 
00030     PerlinNoise3D pnoise;
00031 
00032 public:
00033     
00034     CloudShader(Scene *scene,
00035             ColorRGBA color = ColorRGBA (0.08,0.15,0.27))
00036     : Shader(scene),color(color)
00037     {};
00038     
00045     ColorRGBA Shade(Ray &ray)
00046     {
00047         Vector3D pos = ray.org + ray.t * ray.dir;
00048         PAIR uv = ray.hit->GetUV(ray);
00049 
00050         // fBM
00051         float total = 0.0f;
00052         float persistence = 0.7f;
00053         float amplitude = persistence;
00054         float freq = 0.01;
00055         float x = pos.x() * 10;
00056         float y = pos.y() * 10;
00057         float z = (pos.z() + scene->timer.GetTime() * 0.01) * 10;
00058         for (int i = 0; i < 8; i++) {
00059             total += amplitude * pnoise.noise(x*freq, y*freq, z*freq);
00060             freq *= 2;
00061             amplitude *= persistence;
00062         }
00063 
00064         if (total < 0) total = 0;
00065         if (total > 1) total = 1;
00066     
00067         return (color + ColorRGBA(total)).interpolated(ColorRGBA(.9,.9,1),pow(1-uv.second-0.5,12));
00068     };
00069 };
00070 
00071 #endif

Generated on Thu Jan 31 21:48:48 2008 for RayTracer by  doxygen 1.5.4