T Evaluate(const DifferentialGeometry &dg) const {
     Vector dpdx, dpdy;
     Point P = mapping->Map(dg, &dpdx, &dpdy);
     float windStrength =
         FBm(.1f * P, .1f * dpdx, .1f * dpdy, .5f, 3);
     float waveHeight =
         FBm(P, dpdx, dpdy, .5f, 6);
     return fabsf(windStrength) * waveHeight;
 }
Beispiel #2
0
    Spectrum Evaluate(const DifferentialGeometry &dg) const {
        Vector dpdx, dpdy;
        Point P = mapping->Map(dg, &dpdx, &dpdy);
        P *= scale;
        float marble = P.y + variation * FBm(P, scale * dpdx,
                                             scale * dpdy, omega, octaves);
        float t = .5f + .5f * sinf(marble);
        // Evaluate marble spline at _t_
        static float c[][3] = { { .58f, .58f, .6f }, { .58f, .58f, .6f }, { .58f, .58f, .6f },
            { .5f, .5f, .5f }, { .6f, .59f, .58f }, { .58f, .58f, .6f },
            { .58f, .58f, .6f }, {.2f, .2f, .33f }, { .58f, .58f, .6f },
        };
#define NC  sizeof(c) / sizeof(c[0])
#define NSEG (NC-3)
        int first = Floor2Int(t * NSEG);
        t = (t * NSEG - first);
        Spectrum c0(c[first]), c1(c[first+1]), c2(c[first+2]), c3(c[first+3]);
        // Bezier spline evaluated with de Castilejau's algorithm
        Spectrum s0 = (1.f - t) * c0 + t * c1;
        Spectrum s1 = (1.f - t) * c1 + t * c2;
        Spectrum s2 = (1.f - t) * c2 + t * c3;
        s0 = (1.f - t) * s0 + t * s1;
        s1 = (1.f - t) * s1 + t * s2;
        // Extra scale of 1.5 to increase variation among colors
        return 1.5f * ((1.f - t) * s0 + t * s1);
    }
Beispiel #3
0
	T Evaluate(const DifferentialGeometry &dg) const {
		Vector dpdx, dpdy;
		Point P = mapping->Map(dg, &dpdx, &dpdy);
		return FBm(P, dpdx, dpdy, omega, octaves);
	}