Jump to content

[SOLVED]Порядок сохранения тайлов при генерации lmap из нескольких тайлов.


photo

Recommended Posts

Добрый день.

В папке с ресурсами 4 файла тайлов карт высот под именами 1, 2, 3, 4. Содержащие в таком же порядки картинки с цифрами.

После генерации карты обычным циклом (1 -> 4) получается очень странный результат. 

Это такая фича, или я чтото делаю не так?

С Уважением, Константин.

 

ImLoad.jpg

Edited by Vasara
Link to comment

void LmapCreator::makeTileset()
{
    // filling
    TileImages timg;
    String name;
    
    int tileIndex = 1;
    char* bufferName = new char[10];    

    timg.albedoImagePath = "landscape_grafic_assets/albedo2048.png";
    
    int n_tiles = lmapGridSizeX * lmapGridSizeY;
    while (tiles.size() < n_tiles)
    {
        name = itoa(tileIndex, bufferName, 10);
        timg.heightImagePath = "landscape_grafic_assets/" + name + ".png";
        tileIndex++;

        tiles.append(timg);
    }
    delete[] bufferName;
    name.clear();
}

Остальная часть кода из примера без изменений, там в общем одни колбеки.

Link to comment

Здравствуйте, там дело в том что система координат изображения не сопадают с системой координат террейна,  для перевода можно воспользоваться вот этими функциями 
 

//transform image basis to unigine basis
ivec2 transform_to_world(int max_columns, int x, int y)
{
	return {x, max_columns - y - 1};
}

bool transform_to_world(const ImagePtr &image)
{
	if (!image)
		return false;

	return static_cast<bool>(image->flipY());
}

первая переворачивает сетку по Y а вторая изображение

  • Like 1
Link to comment
25 minutes ago, danvern said:

Здравствуйте, там дело в том что система координат изображения не совпадают с системой координат террейна,  для перевода можно воспользоваться вот этими функциями

Не подскажете как их вызвать, не могу сообразить откуда переменную инициализировать. 

Link to comment
void create_callback(Unigine::LandscapeMapFileCreatorPtr creator,
			Unigine::LandscapeImagesPtr images, int x, int y)
{
	const auto &grid = creator->getGrid();
	ivec2 coord = transform_to_world(grid.y, x, y);
	ImagePtr image = Image::create();
	if (!image->load(String::format("tileset_%d_%d.png", coord.x, coord.y)))
		return;

	transform_to_world(image);

	images->getAlbedo()->assignFrom(image);
}

пирмерно как-то вот так

 

  • Like 1
Link to comment

Получился вот такой результат.

new1234.thumb.png.6e03923cc4cb6ded98f920d193b65963.png

Извините, что пристаю с перламутровыми пуговицами. Хочется получить порядок как в углу картинки. Для любого количества импортируемых тайлов. 

К примеру 16х16({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}).

Думаю тема актуальная, всё таки традиционнее слева направо, сверху вниз.

Link to comment
On 9/18/2020 at 4:27 PM, Vasara said:

Извините, что пристаю с перламутровыми пуговицами. Хочется получить порядок как в углу картинки. Для любого количества импортируемых тайлов. 

К примеру 16х16({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}).

Думаю тема актуальная, всё таки традиционнее слева направо, сверху вниз.

тут сложно кодом ответить так как я незнаю в каком порядке вы отдаете тайлы, но там  легко найти нужный результат просто отзеркалить либо X координаты либо Y ну или все вместе :)

 

On 9/20/2020 at 10:44 PM, Vasara said:

Данные в 2DArray dds файле

не могли бы вы подробнее описать?

Link to comment
45 minutes ago, danvern said:

тут сложно кодом ответить так как я незнаю в каком порядке вы отдаете тайлы

Порядок самый простой 1, 2, 3, 4....n  while < n do n++. 

45 minutes ago, danvern said:

не могли бы вы подробнее описать?

Карты высот сгенерированы и сохранены как 2D массивы в формате R32F  в .dds файлах. (PNG из паинта зеркалит без ошибок)

45 minutes ago, danvern said:

легко найти нужный результат просто отзеркалить либо X координаты либо Y ну или все вместе :)

Можно конечно, только хотелось бы, чтобы движок сам делал без бубна и плясок. Передал 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16. Получил рендер ({1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}). Квадрат слева направо, сверху вниз.

Edited by Vasara
Link to comment
  • Vasara changed the title to [SOLVED]Порядок сохранения тайлов при генерации lmap из нескольких тайлов.
×
×
  • Create New...