Show
Ignore:
Timestamp:
03/25/10 12:11:35 (4 years ago)
Author:
robert
Message:

Introduced the use of linear interpolation of evelvations when sampling

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/include/osgTerrain/Layer

    r9618 r11287  
    192192        } 
    193193 
     194        inline bool getInterpolatedValidValue(double ndc_x, double ndc_y, float& value) 
     195        { 
     196            unsigned int i,j; 
     197            double ir, jr; 
     198            computeIndices(ndc_x, ndc_y, i, j, ir, jr); 
     199            value = 0.0f; 
     200            double div = 0.0f; 
     201            float v,r; 
     202 
     203            r = (1.0f-ir)*(1.0f-jr); 
     204            if (r>0.0 && getValidValue(i,j,v)) 
     205            { 
     206                value += v*r; 
     207                div += r; 
     208            } 
     209 
     210            r = (ir)*(1.0f-jr); 
     211            if (r>0.0 && getValidValue(i+1,j,v)) 
     212            { 
     213                value += v*r; 
     214                div += r; 
     215            } 
     216 
     217            r = (ir)*(jr); 
     218            if (r>0.0 && getValidValue(i+1,j+1,v)) 
     219            { 
     220                value += v*r; 
     221                div += r; 
     222            } 
     223 
     224            r = (1.0f-ir)*(jr); 
     225            if (r>0.0 && getValidValue(i,j+1,v)) 
     226            { 
     227                value += v*r; 
     228                div += r; 
     229            } 
     230 
     231            if (div != 0.0) 
     232            { 
     233                value /= div; 
     234                return true; 
     235            } 
     236 
     237            value = 0.0; 
     238            return false; 
     239        } 
     240 
    194241        /** increment the modified count."*/ 
    195242        virtual void dirty() {};