SDraw Posted May 12, 2013 Share Posted May 12, 2013 Вот такой вопрос: Возможно ли обрезать часть изображения другим? Как пример и понятное объяснение: Я надеюсь, что можно обойтись без использования шейдеров. Link to comment
TheNormalnij Posted May 12, 2013 Share Posted May 12, 2013 dxGetTexturePixels dxSetTexturePixels возможно так же dxSetBlendMode Вариантов реализации несколько. Link to comment
Other Languages Moderators Disinterpreter Posted May 12, 2013 Other Languages Moderators Share Posted May 12, 2013 dxGetTexturePixels dxSetTexturePixels возможно так же dxSetBlendMode Вариантов реализации несколько. Можно также глянуть как сделана миникарта тут. Link to comment
SDraw Posted May 12, 2013 Author Share Posted May 12, 2013 Попытаюсь... CoolDark, не, не совсем то Link to comment
SDraw Posted October 14, 2013 Author Share Posted October 14, 2013 Эх, снова поднимаю вопрос... Ни один BlendMode не помогает, а смена цвета пикселей не подходит, так как изображение достаточно большое, и игра просто виснет на циклах Link to comment
Flaker Posted October 15, 2013 Share Posted October 15, 2013 игра просто виснет на циклах А как ты реализовывал? Данные о картинках ты откуда достаешь, при отрисовке и редактировании? Предобработку, кэширование использовал? В принципе, если ты не делаешь редактор внутри MTA, то даже при использовании алгоритмов грубой силы, можно добиться некоторой оптимизации. А вообще, возможно стоит почитать об алгоритмах, используемых при работе с графикой. Link to comment
SDraw Posted October 16, 2013 Author Share Posted October 16, 2013 игра просто виснет на циклах А как ты реализовывал? Данные о картинках ты откуда достаешь, при отрисовке и редактировании? Предобработку, кэширование использовал? В принципе, если ты не делаешь редактор внутри MTA, то даже при использовании алгоритмов грубой силы, можно добиться некоторой оптимизации. А вообще, возможно стоит почитать об алгоритмах, используемых при работе с графикой. Реализовывал через взятие пикселей и установку нужным пикселям нулевую прозрачность. Висело. Потом решил делать через dxDrawImageSection. Отрисовка почти верная, но вид был чуть выгнутого повернутого квадрата. Первичная подготовка именно в предобработке. Кэширование не использую. Найти хотя бы эти алгоритмы... Link to comment
Flaker Posted October 16, 2013 Share Posted October 16, 2013 Ну со взятием цвета пикселей понятно... Что у тебя входит в предобработку? Как реализовано сейчас? У меня есть несколько теоретических идей по этому поводу, могу подeлиться: *Предобработка* Обрабатываем необходимые картинки 1 раз, при запуске некого ресурса, в директории которого файлы с картинками. В предобработку входит составление карты цветов пикселей в шестнадцатеричном виде с последующим сохранение в файлы ( синхронизированные с картинками ) или бд, в виде сериализованного массива. При последующих запусках проверяем наличие карт пикселей для определенных картинок, если нет, то возвращаемся на шаг назад, если есть, то грузим в память эти карты ( loadstring ). Далее, мы должны составить однонаправленный граф зависимостей для картинок. С помощью него будем определять, что и из чего вырезать. Далее проходимся по картам пикселей, которые теперь представлены в виде обычных многомерных массивов, вырезаем необходимые цвета, пишем новую карту ( в заранее созданный массив ). Новая карта готова, на основе ее рисуем новую картинку ( dxSetPixelColor ), которую сохраняем в память и на диск. Теперь мы можем при проходе по графу зависимостей или просто при запуске ресурса, мы можем проверять наличие готовых обработанных картинок на диске и загонять их в память. *Использование* Далее, после всех обработок, картинки должны быть сохранены в памяти клиента ( в течении сессии ) и на диске ( всегда ). Для отрисовки просто забираем текстуру из памяти и работаем уже с готовой текстурой. *Профиты* Обработка только при 1 заходе на сервер ( при последующих, уже все сохранено ). Подвисание на момент обработки можно замылить использую псевдо-потоки ( читай lua coroutine ). Как уже говорил, это теория... Link to comment
SDraw Posted October 16, 2013 Author Share Posted October 16, 2013 Тормознул я по полной...Хорошо. Разъясню, что именно я делаю и что нужно. Я делаю кастомный радар (позиция в другом месте относительно стандартного). Через некоторый алгоритм я собираю кусочки относительно текущей позиции. Но при выводе на экран остаются куски, которые нужно обрезать, так как радар не является квадратным. Я бы мог ограничиться квадратным, но это не то, что требуется для цели. Думаю, что тут уже придется работать через шейдеры и "складывать" альфа-каналы радара и картинки ограничения. А это уже тянет на небесплатную работу... Added: Проблема решена Чуток изменил шейдер hud'a как в GTA IV с ресурсов, теперь всё прекрасно Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now