void ImposterCapture::_colorAverageFilter( U32 dimensions, const U8 *inBmpBits, U8 *outBmpBits ) { ColorF color; U32 count = 0; U32 index, index2; for ( S32 y = 0; y < dimensions; y++ ) { for( S32 x = 0; x < dimensions; x++ ) { // We only blend on transparent pixels. index = ( ( y * dimensions ) + x ) * 4; if ( inBmpBits[index+3] > 84 ) { outBmpBits[index+0] = inBmpBits[index+0]; outBmpBits[index+1] = inBmpBits[index+1]; outBmpBits[index+2] = inBmpBits[index+2]; outBmpBits[index+3] = inBmpBits[index+3]; //hack continue; } color.set(0,0,0); count = 0; for ( S32 fy = y-6; fy <= y+6; fy++ ) { for ( S32 fx = x-6; fx <= x+6; fx++ ) { if ( fy >= 0 && fy < (dimensions-1) && fx >= 0 && fx < (dimensions-1) ) { index2 = ( ( fy * dimensions ) + fx ) * 4; if ( inBmpBits[index2+3] > 84 ) { color.red += inBmpBits[index2+0]; color.green += inBmpBits[index2+1]; color.blue += inBmpBits[index2+2]; ++count; } } } } outBmpBits[index+0] = (U8)( (F32)color.red / (F32)count ); outBmpBits[index+1] = (U8)( (F32)color.green / (F32)count ); outBmpBits[index+2] = (U8)( (F32)color.blue / (F32)count ); outBmpBits[index+3] = 0; } } }
void TimeOfDay::_initColors() { // NOTE: The elevation targets represent distances // from PI/2 radians (strait up). ColorF c; ColorF bc; // e is for elevation F32 e = M_PI_F / 13.0f; // (semicircle in radians)/(number of color target entries); // Day c.set(1.0f,1.0f,1.0f); _addColorTarget(0, c, 1.0f, c); // High noon at equanox c.set(.9f,.9f,.9f); _addColorTarget(e * 1.0f, c, 1.0f, c); c.set(.9f,.9f,.9f); _addColorTarget(e * 2.0f, c, 1.0f, c); c.set(.8f,.75f,.75f); _addColorTarget(e * 3.0f, c, 1.0f, c); c.set(.7f,.65f,.65f); _addColorTarget(e * 4.0f, c, 1.0f, c); //Dawn and Dusk (3 entries) c.set(.7f,.65f,.65f); bc.set(.8f,.6f,.3f); _addColorTarget(e * 5.0f, c, 3.0f, bc); c.set(.65f,.54f,.4f); bc.set(.75f,.5f,.4f); _addColorTarget(e * 6.0f, c, 2.75f, bc); c.set(.55f,.45f,.25f); bc.set(.65f,.3f,.3f); _addColorTarget(e * 7.0f, c, 2.5f, bc); //NIGHT c.set(.3f,.3f,.3f); bc.set(.7f,.4f,.2f); _addColorTarget(e * 8.0f, c, 1.25f, bc); c.set(.25f,.25f,.3f); bc.set(.8f,.3f,.2f); _addColorTarget(e * 9.0f, c, 1.00f, bc); c.set(.25f,.25f,.4f); _addColorTarget(e * 10.0f, c, 1.0f, c); c.set(.2f,.2f,.35f); _addColorTarget(e * 11.0f, c, 1.0f, c); c.set(.15f,.15f,.2f); _addColorTarget(M_PI_F, c, 1.0f, c); // Midnight at equanox. }