/* * Procedural fBm evaluated at "point"; returns value stored in "value". * * Copyright 1994 F. Kenton Musgrave * * Parameters: * ``H'' is the fractal increment parameter * ``lacunarity'' is the gap between successive frequencies * ``octaves'' is the number of frequencies in the fBm */ private double Noise3(Vector point) { var improvedPerlinNoise = new ImprovedPerlinNoise(4711); return improvedPerlinNoise.Noise(point.X, point.Y, point.Z); }
public ScaledNoiseGenerator() { _largeScaleNoise = new ImprovedPerlinNoise(4711); _noise = new NoiseFactory.RidgedMultiFractal().Create(new NoiseFactory.NoiseParameters()); }
private Node CreateNode(Box3D bounds, int level, EntityManager entityManager) { var mesh = MeshCreator.CreateXZGrid(10, 10); var staticMesh = new StaticMesh { Color = new Vector4(0f, 0f, 1f, 1f), ModelMatrix = Matrix4.Identity, }; var size = bounds.Max - bounds.Min; var mesh3V3N = mesh.Transformed(Matrix4.CreateScale((float)size.X, 1, (float)size.Z) * Matrix4.CreateTranslation((Vector3)bounds.Center)); var improvedPerlinNoise = new ImprovedPerlinNoise(4711); for (int i = 0; i < mesh3V3N.Vertices.Length; i++) { var vertex = mesh3V3N.Vertices[i]; var height = improvedPerlinNoise.Noise(vertex.Position.X, vertex.Position.Z) * 0.2; mesh3V3N.Vertices[i] = new Vertex3V3N { Normal = new Vector3(0, 1, 0), Position = new Vector3(vertex.Position.X, (float)height, vertex.Position.Z) }; } staticMesh.Update(mesh3V3N); var entity = new Entity(Guid.NewGuid().ToString()); entityManager.Add(entity); entityManager.AddComponentToEntity(entity, staticMesh); if (level == 0) { return new Node(bounds, new Node[] { }, entity, 1); } var min = bounds.Min; var max = bounds.Max; var center = bounds.Center; return new Node(bounds, new[] { CreateNode(new Box3D(bounds.Min, center), level -1, entityManager), CreateNode(new Box3D(new Vector3d(center.X, 0, min.Z), new Vector3d(max.X, 0, center.Z)), level -1, entityManager), CreateNode(new Box3D(new Vector3d(min.X, 0, center.Z), new Vector3d(center.X, 0, max.Z)), level - 1, entityManager), CreateNode(new Box3D(center, max), level - 1, entityManager) }, entity, Math.Pow(2, level)); }