Заливка контура (2д)
Делаю игру-рисовалку. Нужно реализовать нормальную заливку фигур.
Я использую что-то типа рекурсии и зарисовываю части не точками, а линиями. В коде ниже я использую Unity3d, но там в принципе всё должно быть интуитивно понятно: Код:
void Fill(IntVector2 pos, Texture2D canvas, Color newColor) Первый тест: Простое белое полотно CalculateTime:0.7691972, points detected:674 Второй тест: Очень сложная фигура, небольшая по площади CalculateTime:0.3095117, points detected: 19011 (линии оказались быстрее чем точки, может прямоугольники быстрее линий? ;D) |
Ответ: Заливка контура (2д)
|
Ответ: Заливка контура (2д)
Texture2D.SetPixels
Using SetPixels can be faster than calling SetPixel repeatedly, especially for large textures. In addition, SetPixels can access individual mipmap levels. Пытался использовать, но для неё нужен массив WxH, который создается очень долго и результат с 0.7 увеличивается до 0.85... Печаль. |
Ответ: Заливка контура (2д)
Хм, не могу придумать как уменьшить кол-во вызовов SetPixel\GetPixel, если это вообще возможно тут.
Думаю сделать второй способ, в котором вместо SetPixel\GetPixel я буду работать с массивом цветов, который скопирую в начале, а потом зарисую это SetPixels'ом, может и будет профит. На какую скорость вообще стоит расчитывать? У меня даже в Paint.NET'е заливка некоторое время занимает (быстрее конечно чем у меня тут) |
Ответ: Заливка контура (2д)
Читай пиксели в массив перед работой, обновляй массив, потом записывай весь буфер сразу в текстуру.
http://docs.unity3d.com/Documentatio...tPixels32.html http://docs.unity3d.com/Documentatio...tPixels32.html |
Ответ: Заливка контура (2д)
В чём вопрос темы с позиции алгоритма? В рекурсии при заливке? Тогда:
вот тут рекурсия заменена на работу со списком. |
Часовой пояс GMT +4, время: 15:21. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot