00001 rasterize2D(Nrro::NrroIter<T> ni,
00002 const gutz::vec2i &posIdx,
00003 const STF::tfRangeIdx &valIdx) const
00004 {
00005
00006 vec2<T> mmm;
00007
00008 if(numeric_limits<T>::epsilon())
00009 {
00010 mmm = vec2<T>(T(0.0),T(1.0));
00011 }
00012 else
00013 {
00014 mmm = vec2<T>(numeric_limits<T>::min(), numeric_limits<T>::max());
00015 }
00016
00017 const tfSType left = _posVec[LL][posIdx.x];
00018 const tfSType right = _posVec[UR][posIdx.x];
00019 const tfSType bottom = _posVec[LL][posIdx.y];
00020 const tfSType top = _posVec[UR][posIdx.y];
00021
00022 const tfSType width = right - left;
00023 const tfSType height = top - bottom;
00024 const tfSType hw = width * tfSType(.5);
00025 const tfSType hh = height * tfSType(.5);
00026
00027
00028 const int minX = clamp(0, int(bmin[posIdx.x] * ni->dim(1)), ni->dim(1));
00029 const int minY = clamp(0, int(bmin[posIdx.y] * ni->dim(2)), ni->dim(2));
00030 const int maxX = clamp(0, int(bmax[posIdx.x] * ni->dim(1)), ni->dim(1));
00031 const int maxY = clamp(0, int(bmax[posIdx.y] * ni->dim(2)), ni->dim(2));
00032
00033
00034 const STF::tfSType px = left;
00035 const STF::tfSType py = bottom;
00036 const STF::tfSType dx = 2.0f/float(ni->dim(1));
00037 const STF::tfSType dy = 2.0f/float(ni->dim(2));
00038
00039
00040 tfSType u;
00041 ValType o = _valVec[0];
00042 tfVec2 pos(-1,-1);
00043
00044
00045 for(int y = minY; y<= maxY; ++y, pos.y+=dy)
00046 {
00047 for(int x = minX; x<= maxX; ++x, pos.x+=dx)
00048 {
00049
00050 o[STF::ALPHA] = myEval(pos.x*pos.x + pos.y*pos.y) * _valVec[0][STF::ALPHA];
00051
00052 for(int i=0; i<4; ++i)
00053 {
00054
00055 u = g_affine(T(mmm.x), ni(i,x,y), T(mmm.y), TFT(0.0), TFT(1.0));
00056
00057
00058
00059 ni(i,x,y) = g_affine(TFT(0.0), o[valIdx[i]], TFT(1.0), T(mmm.x), T(mmm.y));
00060 }
00061 }
00062 pos.x = px;
00063 }
00064 }
00065
00066
00067
00068
00069
00070
00071
00072
00073