Skip to content
Snippets Groups Projects
dot.h 1.16 KiB
Newer Older
  • Learn to ignore specific revisions
  • // Texture example: "dot" image, wandering around the frame.
    
    #pragma once
    
    #include "lib/color.h"
    #include "lib/effect.h"
    #include "lib/texture.h"
    
    class DotEffect : public Effect
    {
    public:
    
        DotEffect(const char *filename)
            : dot(filename),
    
              angle1(0), angle2(0), angle3(0)
        {}
    
        Texture dot;
    
        float angle1;
        float angle2;
        float angle3;
    
        virtual void beginFrame(const FrameInfo &f)
        {
            const float speed = 6.0;
    
            // Several bounded state variables, rotating at different rates
            angle1 = fmodf(angle1 + f.timeDelta * speed, 2 * M_PI);
            angle2 = fmodf(angle2 + f.timeDelta * speed * 0.2f, 2 * M_PI);
            angle3 = fmodf(angle3 + f.timeDelta * speed * 0.7f, 2 * M_PI);
        }
    
    
        virtual void shader(Vec3& rgb, const PixelInfo &p) const
    
        {
            // Project onto the XZ plane
            Vec2 plane = Vec2(p.point[0], p.point[2]);
    
            // Moving dot
            Vec2 position = 0.8 * Vec2( sinf(angle1), cosf(angle1 + sin(angle2)) );
    
            // Texture geometry
            Vec2 center(0.5, 0.5);
            float size = 1.5 + 0.8 * sinf(angle3);
    
            rgb = dot.sample( (plane - position) / size + center );
        }
    };