Exemplo n.º 1
0
void WorleyNoise::turbulence(float F[4], int fmax, float x, float y, float z)
{
	unsigned long *id = new unsigned long; // (!)
    for (int i = 0; i < 4; ++i)
        F[i] = 0;

    for (float f = 1; f < (2 << fmax); f *= 2)
    {
        float tmp[4];
	    float at[3] = { x*f, y*f, z*f };
	    float delta[4][3];
        noise3D(at, 4, tmp, delta, id);

        // Normalize on frequency
        for (int i = 0; i < 4; ++i)
            F[i] += tmp[i] / f;
    }
}
Exemplo n.º 2
0
    T smoothNoise3D(const int x, const int y, const int z)
    {
        T corners0 = (noise3D(x - 1, y - 1, z - 1) + noise3D(x + 1, y - 1, z - 1) + noise3D(x + 1, y + 1, z - 1) + noise3D(x - 1, y + 1, z - 1)) / 16;
        T sides0 = (noise3D(x + 1, y, z - 1) + noise3D(x - 1, y, z - 1) + noise3D(x, y + 1, z - 1) + noise3D(x, y - 1, z - 1)) / 8;
        T center0 = noise3D(x, y, z - 1) / 4;

        T corners = (noise3D(x - 1, y - 1, z) + noise3D(x + 1, y - 1, z) + noise3D(x + 1, y + 1, z) + noise3D(x - 1, y + 1, z)) / 16;
        T sides = (noise3D(x + 1, y, z) + noise3D(x - 1, y, z) + noise3D(x, y + 1, z) + noise3D(x, y - 1, z)) / 8;
        T center = noise3D(x, y, z) / 4;

        T corners1 = (noise3D(x - 1, y - 1, z + 1) + noise3D(x + 1, y - 1, z + 1) + noise3D(x + 1, y + 1, z + 1) + noise3D(x - 1, y + 1, z + 1)) / 16;
        T sides1 = (noise3D(x + 1, y, z + 1) + noise3D(x - 1, y, z + 1) + noise3D(x, y + 1, z + 1) + noise3D(x, y - 1, z + 1)) /8;
        T center1 = noise3D(x, y, z + 1) / 4;

		T level0 = corners0 + sides0 + center0;
		T levelCurrent = corners + sides + center;
		T level1 = corners1 + sides1 + center1;

        return (( level0 / 3) + (levelCurrent / 3) + (level1 / 3));
    }
Exemplo n.º 3
0
uint32_t Utils::voxel_extended_value(uint32_t a_x, uint32_t a_y, uint32_t a_z)
{
    return (uint32_t)(noise3D((double)a_x/MAP_SCALE, (double)a_y/MAP_SCALE, (double)a_z)*0xFFFFFFFF);
}