Search the Community
Showing results for tags 'detail mask'.
-
Резюмирую то, что освоил. Надеюсь новичкам поможет. Движок поддерживает 20 масок, в которые уже добавляются детали (1024 если не ошибаюсь). Хранилище масок поделено на 5 блоков. В каждый блок складывается четырёх канальная картинка RGBA, получаем 5 * 4 = 20 масок. Все маски нужно инициализировать во время генерации файла lmap, тогда же, когда добавляем данные альбедо и высот. Tо есть в метод: OnCreatorCreate(Unigine::LandscapeMapFileCreatorPtr creator, Unigine::LandscapeImagesPtr images, int x, int y) Для каждого блока инициализируется отдельный массив данных! getMask(индекс блока) copy(картинка откуда берутся данные, канал где лежит маска, канал картинки откуда берём данные) getMask(1)->copy(sourceImage, 1, 2) Получаем первый блок, который хранит маски с пятой по девятую. Первый канал(G), в котором лежит шестая маска. Присваиваем второй канал(В) картинки, из который забираем пиксели: { ImagePtr newImage; newImage = Image::create(); newImage->create2DArray(4096, 4096, 1, Image::FORMAT_RGBA8); Image::Pixel pixel; for (int sourceY = 0; sourceY < 4096; sourceY++) { for (int sourceX = 0; sourceX < 4096; sourceX++) { pixel.i.r = 255; pixel.i.g = 0; pixel.i.b = 0; pixel.i.a = 0; newImage->set2DArray(sourceY, sourceX, 0, pixel); } } ImagePtr mask = Image::create(); mask->load("source/sourceRGBA.dds"); images->getMask(0)->create2DArray(lmapTileResolutionX, lmapTileResolutionY, 1, Image::FORMAT_RGBA8); images->getMask(0)->copy(mask, 0, 0); images->getOpacityMask(0)->create2DArray(lmapTileResolutionX, lmapTileResolutionY, 1, Image::FORMAT_RGBA8); images->getOpacityMask(0)->copy(newImage, 0, 0); images->getMask(0)->copy(mask, 1, 1); images->getOpacityMask(0)->copy(newImage, 1, 0); images->getMask(0)->copy(mask, 2, 2); images->getOpacityMask(0)->copy(newImage, 2, 0); images->getMask(0)->copy(mask, 3, 3); images->getOpacityMask(0)->copy(newImage, 3, 0); images->getMask(1)->create2DArray(lmapTileResolutionX, lmapTileResolutionY, 1, Image::FORMAT_RGBA8); images->getMask(1)->copy(mask, 0, 0); images->getOpacityMask(1)->create2DArray(lmapTileResolutionX, lmapTileResolutionY, 1, Image::FORMAT_RGBA8); images->getOpacityMask(1)->copy(newImage, 0, 0); images->getMask(1)->copy(mask, 1, 1); images->getOpacityMask(1)->copy(newImage, 1, 0); images->getMask(1)->copy(mask, 2, 2); images->getOpacityMask(1)->copy(newImage, 2, 0); images->getMask(1)->copy(mask, 3, 3); images->getOpacityMask(1)->copy(newImage, 3, 0); } Надеюсь ничего не упустил. Большое спасибо danvern за оперативную помощь. -------------------------------------------------------------------------------- Добрый день. Не могли бы вы помочь с добавлением маски к террейну. Загружается террейн: lmap = LandscapeLayerMap::create(); lmap->setParent(Landscape::getActiveTerrain()); lmap->setPath(lmapName); lmap->setName(lmapName.get()); lmap->setSize(Math::Vec2(4096,4096)); lmap->setHeightScale(1.0f); lmap->setWorldPosition(Math::Vec3::ZERO); lmap->setWorldRotation(Math::quat(Math::vec3::UP, 45.0f)); Создаётся и описывается маска: TerrainDetailMaskPtr maskDetail; //Код... TerrainDetailPtr detailTerrain; detailTerrain->setDetailMask(maskDetail); А как detailTerrain к террейну применить? С Уважением Константин. П.С. Если позволит время, сделайте пожалуйста небольшой пример для карты 2х2 тайла создание маски, присвоение маске картинки, записи маски в файл карты.