float mL = max(abs(ex_TexCoord.x), abs(ex_TexCoord.y)); // ex_TexCoord – texture coord in ph. space
int layer;
float tSize; // size of a layer
float Dopt = Dmin * 0.9; // Dmin is a minimal size of a layer in physical coordinates
if(mL < (Dopt/2))
{
layer = MaxLevel;
tSize = Dmin;
}
else
{
float fLayer = float(MaxLevel) + 1.0 + log2( mL / Dopt );
layer = int(ceil(fLayer));
tSize = Dmin * exp2(layer-MaxLevel);
}
//...
if(layer < (levelCount-1))
{
vec3 texCoor = vec3(startTex[layer].x + 0.5 + ((ex_TexCoord.x + centTexOffset[layer].x) / tSize), startTex[layer].y + 0.5 + ((ex_TexCoord.y + centTexOffset[layer].y) / tSize), layer);
//...
}