]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/environmentmap.cpp
Add an option to use a fixed position in EnvironmentMap
[libs/gl.git] / source / effects / environmentmap.cpp
index 315390b1ca81664c47a2a5c940ef445ee94faa97..47cea0904017c2daa7bbeff4328ec7d5d4128573 100644 (file)
@@ -79,6 +79,12 @@ EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, unsigned l, Renderable
        shdata.uniform("env_world_matrix", LinAl::SquareMatrix<float, 3>::identity());
 }
 
+void EnvironmentMap::set_fixed_position(const Vector3 &p)
+{
+       fixed_position = p;
+       use_fixed_pos = true;
+}
+
 void EnvironmentMap::set_depth_clip(float n, float f)
 {
        for(unsigned i=0; i<6; ++i)
@@ -113,16 +119,22 @@ void EnvironmentMap::setup_frame(Renderer &renderer)
        update_delay = update_interval-1;
        environment.setup_frame(renderer);
 
-       const Matrix *matrix = renderable.get_matrix();
-       if(!matrix)
-               return;
+       Vector3 center;
+       if(use_fixed_pos)
+               center = fixed_position;
+       else
+       {
+               const Matrix *matrix = renderable.get_matrix();
+               if(!matrix)
+                       return;
+
+               center = matrix->column(3).slice<3>(0);
+       }
 
        Renderer::Push push(renderer);
        Renderer::Exclude exclude1(renderer, renderable);
        Renderer::Exclude exclude2(renderer, *this);
 
-       Vector3 center = matrix->column(3).slice<3>(0);
-
        for(unsigned i=0; i<6; ++i)
        {
                faces[i].camera.set_position(center);