| |
} # definieren Sie BSize 0x100 # definieren Sie Schwerpunktshandbuch 0xff # definieren Sie PerlinN 0x1000 # definieren NP 12/* 2^PerlinN */ # definieren Sie NM 0xfff Static uLatticeSelector[BSize + BSize + 2]; statisches Doppeltes fGradient[4][BSize + BSize + 2][2 ]; struct StitchInfo { internes nWidth; wieviel zu subtrahieren, um für die Heftung aufzuwickeln. internes nHeight; internes nWrapX; aufzuwickelnder Mindestwert. internes nWrapY; }; leeres init(long des Static lSeed) { doppeltes s; internes i, J, k; lSeed = setup_seed(lSeed); for(k = 0; k < 4; k++) { for(i = 0; I < BSize; i++) { uLatticeSelector[i ] = i; für (J = 0; J < 2; j++) fGradient[k][i][j ] = (double)(((lSeed = random(lSeed)), % (BSize + BSize)) -) BSize/ BSize; s = double(sqrt(fGradient[k][i][0 ] * fGradient[k][i][0 ] + fGradi ent[k][i][1 ] * fGradient[k][i][1 ])); fGradient[k][i][0 ]/= s; fGradient[k][i][1 ]/= s; } } while(-- i) { k = uLatticeSelector[i ]; uLatticeSelector[i ] = uLatticeSelector[j = (lSeed = random(lSeed)), % BSize ]; uLatticeSelector[j ] = k; } for(i = 0; I < BSize + 2; i++) { uLatticeSelector[BSize + i] = uLatticeSelector[i ]; for(k = 0; k < 4; k++) for(j = 0; J < 2; j++) fGradient[k][BSize + i][j ] = fGradient[k][i][j ]; } } # definieren Sie s_curve(t) (t * t * (3. - 2. * t)) # definieren Sie lerp(t, a, B) (a + t * (b - A)) verdoppeln Sie noise2(int-nColorChannel, doppeltes vec[2 ], StitchInfo * pStitchInfo) { internes bx0, bx1, by0, by1, b00, b10, b01, b11; doppeltes rx0, rx1, ry0, ry1, * q, sx, sy, a, b, t, u, v; Register I, J; t = vec[0 ] + PerlinN; bx0 = (int)t; bx1 = bx0+1; rx0 = t - (int)t; rx1 = rx0 - 1.0f; t = vec[1 ] + PerlinN; by0 = (int)t; by1 = by0+1; ry0 = t - (int)t; ry1 = ry0 - 1.0f; //, bei der Heftung, justieren Gitterpunkte dementsprechend. if(pStitchInfo! = NULL) { if(bx0 > = pStitchInfo->nWrapX) bx0 - = pStitchInfo->nWidth; if(bx1 > = pStitchInfo->nWrapX) bx1 - = pStitchInfo->nWidth; if(by0 > = pStitchInfo->nWrapY) by0 - = pStitchInfo->nHeight; if(by1 > = pStitchInfo->nWrapY) by1 - = pStitchInfo->nHeight; } bx0 u. = Schwerpunktshandbuch; bx1 u. = Schwerpunktshandbuch; by0 u. = Schwerpunktshandbuch; by1 u. = Schwerpunktshandbuch; I = uLatticeSelector[bx0 ]; J = uLatticeSelector[bx1 ]; b00 = uLatticeSelector[i + by0 ]; b10 = uLatticeSelector[j + by0 ]; b01 = uLatticeSelector[i + by1 ]; b11 = uLatticeSelector[j + by1 ]; sx = double(s_curve(rx0)); sy = double(s_curve(ry0)); q = fGradient[nColorChannel][b00 ]; u = rx0 * q[0 ] + ry0 * q[1 ]; |  |
|
| |
|
|