Jump to content

Обрезка изображения другим изображением


Recommended Posts

Вот такой вопрос:

Возможно ли обрезать часть изображения другим?

Как пример и понятное объяснение:

95191742.png

Я надеюсь, что можно обойтись без использования шейдеров.

Link to comment
  • Other Languages Moderators
dxGetTexturePixels 
dxSetTexturePixels 

возможно так же

dxSetBlendMode 

Вариантов реализации несколько.

Можно также глянуть как сделана миникарта тут.

Link to comment
  • 5 months later...

Эх, снова поднимаю вопрос...

Ни один BlendMode не помогает, а смена цвета пикселей не подходит, так как изображение достаточно большое, и игра просто виснет на циклах

Link to comment
игра просто виснет на циклах

А как ты реализовывал?

Данные о картинках ты откуда достаешь, при отрисовке и редактировании?

Предобработку, кэширование использовал?

В принципе, если ты не делаешь редактор внутри MTA, то даже при использовании алгоритмов грубой силы, можно добиться некоторой оптимизации.

А вообще, возможно стоит почитать об алгоритмах, используемых при работе с графикой.

Link to comment
игра просто виснет на циклах

А как ты реализовывал?

Данные о картинках ты откуда достаешь, при отрисовке и редактировании?

Предобработку, кэширование использовал?

В принципе, если ты не делаешь редактор внутри MTA, то даже при использовании алгоритмов грубой силы, можно добиться некоторой оптимизации.

А вообще, возможно стоит почитать об алгоритмах, используемых при работе с графикой.

Реализовывал через взятие пикселей и установку нужным пикселям нулевую прозрачность. Висело. Потом решил делать через dxDrawImageSection. Отрисовка почти верная, но вид был чуть выгнутого повернутого квадрата.

Первичная подготовка именно в предобработке. Кэширование не использую.

Найти хотя бы эти алгоритмы... :|

Link to comment

Ну со взятием цвета пикселей понятно...

Что у тебя входит в предобработку?

Как реализовано сейчас?

У меня есть несколько теоретических идей по этому поводу, могу подeлиться:

*Предобработка*

Обрабатываем необходимые картинки 1 раз, при запуске некого ресурса, в директории которого файлы с картинками.

В предобработку входит составление карты цветов пикселей в шестнадцатеричном виде с последующим сохранение в файлы ( синхронизированные с картинками ) или бд, в виде сериализованного массива.

При последующих запусках проверяем наличие карт пикселей для определенных картинок, если нет, то возвращаемся на шаг назад, если есть, то грузим в память эти карты ( loadstring ).

Далее, мы должны составить однонаправленный граф зависимостей для картинок. С помощью него будем определять, что и из чего вырезать.

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

Новая карта готова, на основе ее рисуем новую картинку ( dxSetPixelColor ), которую сохраняем в память и на диск.

Теперь мы можем при проходе по графу зависимостей или просто при запуске ресурса, мы можем проверять наличие готовых обработанных картинок на диске и загонять их в память.

*Использование*

Далее, после всех обработок, картинки должны быть сохранены в памяти клиента ( в течении сессии ) и на диске ( всегда ).

Для отрисовки просто забираем текстуру из памяти и работаем уже с готовой текстурой.

*Профиты*

Обработка только при 1 заходе на сервер ( при последующих, уже все сохранено ).

Подвисание на момент обработки можно замылить использую псевдо-потоки ( читай lua coroutine ).

Как уже говорил, это теория...

Link to comment

Тормознул я по полной...Хорошо. Разъясню, что именно я делаю и что нужно.

Я делаю кастомный радар (позиция в другом месте относительно стандартного). Через некоторый алгоритм я собираю кусочки относительно текущей позиции. Но при выводе на экран остаются куски, которые нужно обрезать, так как радар не является квадратным.

x6fr.png

Я бы мог ограничиться квадратным, но это не то, что требуется для цели.

Думаю, что тут уже придется работать через шейдеры и "складывать" альфа-каналы радара и картинки ограничения. А это уже тянет на небесплатную работу...

Added: Проблема решена ^_^ Чуток изменил шейдер hud'a как в GTA IV с ресурсов, теперь всё прекрасно :D

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...