Может помочь некоторая помощь в реализации шума Перлина для создания ландшафта в моем игровом движке.

поэтому я работаю над созданием игрового движка, следуя некоторым учебникам YouTube. Я кодирую на C ++ и использую библиотеки текстур SDL2 и SDL2 для функциональности. Для генерации шума я использую заголовок A и .cpp, называемый Fast Noise, полученный от GitHub. .Cpp я использую, чтобы нарисовать карту ниже

#include "Map.h"#include "TextureManager.h"#include "FastNoise.h"

int lvl1[20][25] = {{ 0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
};

Map::Map()
{
dirt = TextureManager::LoadTexture("Assets/TileSets/Dirt.png");
grass = TextureManager::LoadTexture("Assets/TileSets/Grass.png");
water = TextureManager::LoadTexture("Assets/TileSets/Water.png");LoadMap(lvl1);

src.x = src.y = 0;
src.w = dest.w = 32;
src.h = dest.h = 32;

dest.x = dest.y = 0;
}

void Map::LoadMap(int arr[20][25])
{
for (int row = 0; row < 20; row++)
{
for (int column = 0; column < 25; column++)
{
map[row][column] = arr[row][column];
}
}}

void Map::DrawMap()
{
int type = 0;

for (int row = 0; row < 20; row++)
{
for (int column = 0; column < 25; column++)
{
type = map[row][column];

dest.x = column * 32;
dest.y = row * 32;

switch (type)
{
case 0:
TextureManager::Draw(water, src, dest);
break;
case 1:
TextureManager::Draw(grass, src, dest);
break;
case 2:
TextureManager::Draw(dirt, src, dest);default:
break;
}

}
}
}

Код для создания шума

FastNoise myNoise; // Create a FastNoise object
myNoise.SetNoiseType(FastNoise::SimplexFractal); // Set the desired noise
type

float heightMap[32][32]; // 2D heightmap to create terrain

for (int x = 0; x < 32; x++)
{
for (int y = 0; y < 32; y++)
{
heightMap[x][y] = myNoise.GetNoise(x,y);
}
}

Я борюсь с тем, как реализовать это так, чтобы вместо использования массива lvl1 int он сохранял и использовал значения, созданные шумом, для рисования ландшафта. Если по посту это не очевидно, я довольно новичок в программировании, созданный мной игровой движок достаточно функционален, но я хочу создать процедурно сгенерированный ландшафт, а не делать его вручную.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]