Created
November 7, 2016 12:15
-
-
Save hb3p8/e53d3fc90d3d58fd64e49491a20bc49b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct Noise3D | |
{ | |
static const int size = 8; | |
sf::mesh::RealVector3 gradients[size][size][size]; | |
float Drop(float dist) | |
{ | |
float val = fabs (dist); | |
if (val < 1) | |
{ | |
return 1 - 3 * val * val + 2 * val * val * val; | |
} | |
else | |
{ | |
return 0; | |
} | |
} | |
sf::mesh::RealVector3 Gradient(int i, int j, int k) | |
{ | |
i &= size - 1; | |
j &= size - 1; | |
k &= size - 1; | |
return gradients[i][j][k]; | |
} | |
sf::mesh::RealVector3 Omega(int i, int j, int k, sf::mesh::RealVector3 point) | |
{ | |
return Gradient(i, j, k) * Drop(point.x()) * Drop(point.y()) * Drop(point.z()); | |
} | |
sf::mesh::RealVector3 Noise(sf::mesh::RealVector3 point) | |
{ | |
int floorX = (int)floor(point.x()); | |
int floorY = (int)floor(point.y()); | |
int floorZ = (int)floor(point.z()); | |
sf::mesh::RealVector3 sum = sf::mesh::RealVector3::Zero(); | |
for (int i = floorX; i < floorX + 2; i++) | |
{ | |
for (int j = floorY; j < floorY + 2; j++) | |
{ | |
for (int k = floorZ; k < floorZ + 2; k++) | |
{ | |
sum += Omega(i, j, k, sf::mesh::RealVector3(point.x() - i, point.y()- j, point.z() - k)); | |
} | |
} | |
} | |
return sum; | |
} | |
static double nextDouble() { | |
return rand() / double (RAND_MAX); | |
} | |
Noise3D() | |
{ | |
for (int i = 0; i < size; i++) | |
{ | |
for (int j = 0; j < size; j++) | |
{ | |
for (int k = 0; k < size; k++) | |
{ | |
gradients[i][j][k] = sf::mesh::RealVector3((float)(2 * nextDouble() - 1), | |
(float)(2 * nextDouble() - 1), | |
(float)(2 * nextDouble() - 1)); | |
} | |
} | |
} | |
} | |
sf::mesh::RealVector3 get (const sf::mesh::RealVector3& thePoint) | |
{ | |
return Noise (thePoint * size); | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment