RGBA interpolateColor(RGBA c1, RGBA c2, float ratio, interpolation_t* inter) { RGBA c; c.r = interpolateScalar(c1.r, c2.r, ratio, inter); c.g = interpolateScalar(c1.g, c2.g, ratio, inter); c.b = interpolateScalar(c1.b, c2.b, ratio, inter); c.a = interpolateScalar(c1.a, c2.a, ratio, inter); return c; }
FILTER* interpolateBlur(FILTER* filter1, FILTER* filter2, float ratio, interpolation_t* inter) { FILTER_BLUR*f1 = (FILTER_BLUR*)filter1; FILTER_BLUR*f2 = (FILTER_BLUR*)filter2; if (!f1) f1 = noBlur; if (!f2) f2 = noBlur; if(f1->blurx == f2->blurx && f1->blury == f2->blury) return copyFilter(filter1); FILTER_BLUR*f = (FILTER_BLUR*)swf_NewFilter(FILTERTYPE_BLUR); f->blurx= interpolateScalar(f1->blurx, (f2->blurx), ratio, inter); f->blury= interpolateScalar(f1->blury, (f2->blury), ratio, inter); f->passes= interpolateScalar(f1->passes, (f2->passes), ratio, inter); return (FILTER*)f; }
float state_value(state_t* modification, float frame) { state_t* previous = modification; while (modification && modification->frame < frame) { previous = modification; modification = modification->next; } if (!modification) return previous->value; if (modification->frame == frame) { do { previous = modification; modification = modification->next; } while (modification && modification->frame == frame); return previous->value; } switch (modification->function) { case CF_PUT: return modification->value; case CF_CHANGE: { float fraction = (frame - previous->frame) / (float)(modification->frame - previous->frame); return interpolateScalar(previous->value, modification->value, fraction, modification->interpolation); } case CF_SCHANGE: { float fraction = (frame - previous->frame) / (float)(modification->frame - previous->frame); fraction = interpolateScalar(0, 1, fraction, modification->interpolation); return calculateSpline(modification, fraction); } case CF_SWEEP: { float fraction = (frame - previous->frame) / (float)(modification->frame - previous->frame); fraction = interpolateScalar(0, 1, fraction, modification->interpolation); return calculateSweep(modification, fraction); } case CF_JUMP: return previous->value; default: return 0; } }
GRADIENT* interpolateNodes(GRADIENT* g1, GRADIENT* g2, float fraction, interpolation_t* inter) { if (g1->num != g2->num) syntaxerror("Internal error: gradients are not equal in size"); int i; GRADIENT* g = (GRADIENT*) malloc(sizeof(GRADIENT)); g->ratios = rfx_calloc(16*sizeof(U8)); g->rgba = rfx_calloc(16*sizeof(RGBA)); g->num = g1->num; for (i = 0; i < g->num; i++) { g->ratios[i] = interpolateScalar(g1->ratios[i], g2->ratios[i], fraction, inter); g->rgba[i] = interpolateColor(g1->rgba[i], g2->rgba[i], fraction, inter); } return g; }
Field TriCubicHermite::interpolateScalar( const Particles& aParticles ) const { assert(data->nDim() == 1); Field result("n/a","n/a", 1, aParticles.N()); if ( !allFacesReady ) { OutputMessage statusMsg("interp coefficients not defined ", OutputMessage::errorPriority, "(Field) TriCubicHermite::interpolateScalar"); log->logMessage(statusMsg); return result; } for ( int i = 0; i < aParticles.N(); ++i) { double newVal = interpolateScalar( aParticles.physCoord(i) ); result.insertScalarToField( i, newVal ); } return result; };
FILTER* interpolateGradientGlow(FILTER* filter1,FILTER* filter2, float ratio, interpolation_t* inter) { FILTER_GRADIENTGLOW*f1 = (FILTER_GRADIENTGLOW*)filter1; FILTER_GRADIENTGLOW*f2 = (FILTER_GRADIENTGLOW*)filter2; if (!f1) f1 = noGradientGlow; if (!f2) f2 = noGradientGlow; if(f1->gradient->num == f2->gradient->num && !memcmp(&f1->gradient->ratios,&f2->gradient->ratios,f1->gradient->num * sizeof(U8)) && !memcmp(&f1->gradient->rgba,&f2->gradient->rgba,f1->gradient->num * sizeof(RGBA)) && f1->blurx == f2->blurx && f1->blury == f2->blury && f1->angle == f2->angle && f1->strength == f2->strength && f1->distance == f2->distance) return copyFilter(filter1); FILTER_GRADIENTGLOW*f = (FILTER_GRADIENTGLOW*)swf_NewFilter(FILTERTYPE_GRADIENTGLOW); memcpy(f, f1, sizeof(FILTER_GRADIENTGLOW)); f->blurx= interpolateScalar(f1->blurx, (f2->blurx), ratio, inter); f->blury= interpolateScalar(f1->blury, (f2->blury), ratio, inter); f->passes= interpolateScalar(f1->passes, (f2->passes), ratio, inter); f->angle= interpolateScalar(f1->angle, (f2->angle), ratio, inter); f->distance= interpolateScalar(f1->distance, (f2->distance), ratio, inter); f->strength= interpolateScalar(f1->strength, (f2->strength), ratio, inter); f->gradient= interpolateGradient(f1->gradient, f2->gradient, ratio, inter); if (f1 == noGradientGlow) { if (f2 != noGradientGlow) matchGradientGlowFlags(f, f2); } else if (f2 == noGradientGlow) matchGradientGlowFlags(f, f1); else if (ratio > 0.5) matchGradientGlowFlags(f, f2); else matchGradientGlowFlags(f, f1); return (FILTER*)f; }
FILTER* interpolateBevel(FILTER* filter1,FILTER* filter2, float ratio, interpolation_t* inter) { FILTER_BEVEL*f1 = (FILTER_BEVEL*)filter1; FILTER_BEVEL*f2 = (FILTER_BEVEL*)filter2; if (!f1) f1 = noBevel; if (!f2) f2 = noBevel; if(!memcmp(&f1->shadow,&f2->shadow,sizeof(RGBA)) && !memcmp(&f1->highlight,&f2->highlight,sizeof(RGBA)) && f1->blurx == f2->blurx && f1->blury == f2->blury && f1->angle == f2->angle && f1->strength == f2->strength && f1->distance == f2->distance) return copyFilter(filter1); FILTER_BEVEL*f = (FILTER_BEVEL*)swf_NewFilter(FILTERTYPE_BEVEL); memcpy(f, f1, sizeof(FILTER_BEVEL)); f->shadow = interpolateColor(f1->shadow, f2->shadow, ratio, inter); f->highlight = interpolateColor(f1->highlight, f2->highlight, ratio, inter); f->blurx= interpolateScalar(f1->blurx, (f2->blurx), ratio, inter); f->blury= interpolateScalar(f1->blury, (f2->blury), ratio, inter); f->passes= interpolateScalar(f1->passes, (f2->passes), ratio, inter); f->angle= interpolateScalar(f1->angle, (f2->angle), ratio, inter); f->distance= interpolateScalar(f1->distance, (f2->distance), ratio, inter); f->strength= interpolateScalar(f1->strength, (f2->strength), ratio, inter); if (f1 == noBevel) { if (f2 != noBevel) matchBevelFlags(f, f2); } else if (f2 == noBevel) matchBevelFlags(f, f1); else if (ratio > 0.5) matchBevelFlags(f, f2); else matchBevelFlags(f, f1); return (FILTER*)f; }
FILTER* interpolateDropshadow(FILTER* filter1,FILTER* filter2, float ratio, interpolation_t* inter) { FILTER_DROPSHADOW*f1 = (FILTER_DROPSHADOW*)filter1; FILTER_DROPSHADOW*f2 = (FILTER_DROPSHADOW*)filter2; if (!f1) f1 = noDropshadow; if (!f2) f2 = noDropshadow; if(!memcmp(&f1->color,&f2->color,sizeof(RGBA)) && f1->strength == f2->strength && f1->blurx == f2->blurx && f1->blury == f2->blury && f1->angle == f2->angle && f1->distance == f2->distance) return copyFilter(filter1); FILTER_DROPSHADOW*f = (FILTER_DROPSHADOW*)swf_NewFilter(FILTERTYPE_DROPSHADOW); memcpy(f, f1, sizeof(FILTER_DROPSHADOW)); f->color = interpolateColor(f1->color, f2->color, ratio, inter); f->blurx= interpolateScalar(f1->blurx, (f2->blurx), ratio, inter); f->blury= interpolateScalar(f1->blury, (f2->blury), ratio, inter); f->passes= interpolateScalar(f1->passes, (f2->passes), ratio, inter); f->angle= interpolateScalar(f1->angle, (f2->angle), ratio, inter); f->distance= interpolateScalar(f1->distance, (f2->distance), ratio, inter); f->strength= interpolateScalar(f1->strength, (f2->strength), ratio, inter); if (f1 == noDropshadow) { if (f2 != noDropshadow) matchDropshadowFlags(f, f2); } else if (f2 == noDropshadow) matchDropshadowFlags(f, f1); else if (ratio > 0.5) matchDropshadowFlags(f, f2); else matchDropshadowFlags(f, f1); return (FILTER*)f; }