Генерация карт высот на основе симплекс шума (Код - Java)
День добрый, уважаемые игроделы. Хочу поделиться с вами небольшой своей наработкой в области генерации карт высот. Данный Java код позволит вам генерировать отличные карты высот. Благодаря использованию симплекс шума, вместо шума Перлина, достигается прирост скорости генерации. Различные настройки генератора позволят создавать карты высот для различных целей, от создания обычных ландшафтов до генерации различных лабиринтов и текстур.
Собственно сам код и ссылки на PB код (Прошу прощения что без комментариев):
private Gradient grad3[] = { new Gradient(1,1), new Gradient(-1,1), new Gradient(1,-1), new Gradient(-1,-1), new Gradient(1,0), new Gradient(-1,0), new Gradient(1,0), new Gradient(-1,0), new Gradient(0,1), new Gradient(0,-1), new Gradient(0,1), new Gradient(0,-1) };
public SimplexNoise(int seed) { for(int i = 0; i < 512; i++) { perm[i] = p[i + seed & 255]; permMod12[i] = (short) (perm[i] % 12); } }
public BufferedImage generateHeightmap(int size, int interationCount, float persistance, float scale, int low, int high) { BufferedImage heightmap = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB); Graphics g = heightmap.getGraphics(); int colorValue;
for(int i = 0; i < size; i++){ for(int j = 0; j < size; j++){ colorValue = (int) sumOctaves(interationCount, i, j, persistance, scale, low, high); g.setColor(new Color(colorValue, colorValue, colorValue)); g.drawLine(i, j, i, j); } }
return heightmap; }
public void saveImage(BufferedImage image, String pathToSave, String name, String ext) { try { BufferedImage bi = image; File outputfile = new File(pathToSave + "/" + name + "." + ext); ImageIO.write(bi, ext, outputfile); } catch (IOException ex) { } }
private float sumOctaves(int interationCount, int x, int y, float persistance, float scale, int low, int high) { float maxAmplitude = 0; float amplitude = 1; float frequency = scale; float noiseValue = 0;
for (int i = 0; i < interationCount; ++i) { noiseValue += generateSimplexNoise(x * frequency, y * frequency) * amplitude; maxAmplitude += amplitude; amplitude *= persistance; frequency *= 2; }
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Генерация карт высот на основе симплекс шума (Код - Java)», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.