Рисовать на 2d Текстуре
| |
loginlogin | Дата: Пятница, 24 Марта 2017, 17:06 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Привет всем. У меня есть следующий вопрос. Каким образом можно осуществить рисование кистью на 2d текстурe? гуглил , но ничего не нашёл. Может кто уже сталкивался с этим. Заранее спасибо.
Максимум 600 символов
|
|
| |
URGINSAN | Дата: Пятница, 24 Марта 2017, 19:22 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| loginlogin, недавно сталкивался, по работе надо было рисовалку для детей сделать. Сорри, код выкладывать не буду. Но промучился я месяца 1,5. Инфы маловато в инете. Вкратце, рисование осуществляется функцией SetPixel(x,y,color); Для заливки гугли алгоритм FloodFill в юнити. Для рисования кистью гугли DrawCircle, DrawLine на юнити сайтах. Для ластика тоже SetPixel(x,y,color), но в x,y подставляешь оригинальную текстуру и она как бы проявляется поверх рисовашек, симулируя ластик. Для undo, redo функций юзай массивы с сохранением картинки с каждым новым действием.
В моей рисовалке можно было любой штрих загрузить, чтобы им рисовать как кистью. Поэтому времени я убил не мало.
Я на драйве
|
|
| |
loginlogin | Дата: Пятница, 24 Марта 2017, 21:01 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Цитата URGINSAN ( ) loginlogin, недавно сталкивался, по работе надо было рисовалку для детей сделать. Сорри, код выкладывать не буду. Но промучился я месяца 1,5. Инфы маловато в инете. Вкратце, рисование осуществляется функцией SetPixel(x,y,color); Для заливки гугли алгоритм FloodFill в юнити. Для рисования кистью гугли DrawCircle, DrawLine на юнити сайтах. Для ластика тоже SetPixel(x,y,color), но в x,y подставляешь оригинальную текстуру и она как бы проявляется поверх рисовашек, симулируя ластик. Для undo, redo функций юзай массивы с сохранением картинки с каждым новым действием.
В моей рисовалке можно было любой штрих загрузить, чтобы им рисовать как кистью. Поэтому времени я убил не мало.
Спасибо)Добавлено (24 марта 2017, 21:01) ---------------------------------------------
Цитата URGINSAN ( ) loginlogin, недавно сталкивался, по работе надо было рисовалку для детей сделать. Сорри, код выкладывать не буду. Но промучился я месяца 1,5. Инфы маловато в инете. Вкратце, рисование осуществляется функцией SetPixel(x,y,color); Для заливки гугли алгоритм FloodFill в юнити. Для рисования кистью гугли DrawCircle, DrawLine на юнити сайтах. Для ластика тоже SetPixel(x,y,color), но в x,y подставляешь оригинальную текстуру и она как бы проявляется поверх рисовашек, симулируя ластик. Для undo, redo функций юзай массивы с сохранением картинки с каждым новым действием.
В моей рисовалке можно было любой штрих загрузить, чтобы им рисовать как кистью. Поэтому времени я убил не мало.
Спасибо огромное. За пять минут нашёл по твоей наводки. всю жизнь буду тебя помнить)
Максимум 600 символов
|
|
| |
URGINSAN | Дата: Пятница, 24 Марта 2017, 21:24 | Сообщение # 4 |
почти ветеран
Сейчас нет на сайте
| loginlogin, пожалуйста) 1,5 месяца бессонной работы тебе сэкономил)
Я на драйве
|
|
| |
loginlogin | Дата: Суббота, 25 Марта 2017, 16:54 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Цитата URGINSAN ( ) недавно сталкивался, по работе надо было рисовалку для детей сделать. Сорри, код выкладывать не буду. Но промучился я месяца 1,5. Инфы маловато в инете. Вкратце, рисование осуществляется функцией SetPixel(x,y,color); Для заливки гугли алгоритм FloodFill в юнити. Для рисования кистью гугли DrawCircle, DrawLine на юнити сайтах. Для ластика тоже SetPixel(x,y,color), но в x,y подставляешь оригинальную текстуру и она как бы проявляется поверх рисовашек, симулируя ластик. Для undo, redo функций юзай массивы с сохранением картинки с каждым новым действием.
В моей рисовалке можно было любой штрих загрузить, чтобы им рисовать как кистью. Поэтому времени я убил не мало.
URGINSAN, если тебе не сложно, можешь помочь? в общем такая проблема, когда я начинаю быстро проводить мышью, получается вот такая херня:
вот скрипт: Для круга
Код public static void Circle(this Texture2D tex, int cx, int cy, int r, Color col) { int x, y, px, nx, py, ny, d;
for (x = 0; x <= r; x++) { d = (int)Mathf.Ceil(Mathf.Sqrt(r * r - x * x)); for (y = 0; y <= d; y++) { px = cx + x; nx = cx - x; py = cy + y; ny = cy - y;
tex.SetPixel(px, py, col); tex.SetPixel(nx, py, col);
tex.SetPixel(px, ny, col); tex.SetPixel(nx, ny, col);
} } }
для того что бы рисовать
Код void DrawTex(){ if (Input.GetMouseButton (0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast (ray, out hit, 100f)) { Vector2 pixelUV = hit.textureCoord; pixelUV.x *= tex.width; pixelUV.y *= tex.height; Vector2 position = new Vector2 (pixelUV.x, pixelUV.y); vect = pixelUV; tex.Circle ((int)position.x, (int)position.y, rang, aFillColor); tex.Apply (); } } }
что я делаю не так? и как это исправить? заранее спасибо.
Максимум 600 символов
Сообщение отредактировал loginlogin - Суббота, 25 Марта 2017, 16:55 |
|
| |
URGINSAN | Дата: Суббота, 25 Марта 2017, 17:52 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| loginlogin, с этой проблемой я тоже сталкивался)) Подсказка, тебе надо соединить функцию DrawLine с DrawCircle. Тыц, небольшой код
Я на драйве
|
|
| |
loginlogin | Дата: Воскресенье, 26 Марта 2017, 22:01 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Цитата URGINSAN ( ) loginlogin, с этой проблемой я тоже сталкивался)) Подсказка, тебе надо соединить функцию DrawLine с DrawCircle. Тыц, небольшой код Спасибо огромное) У меня получилось. Только fps приседает. А так всё норм.
Максимум 600 символов
Сообщение отредактировал loginlogin - Воскресенье, 26 Марта 2017, 23:38 |
|
| |
URGINSAN | Дата: Понедельник, 27 Марта 2017, 11:35 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| loginlogin, уменьши размер картинки, на которой рисуешь. Есть вообще второй способ рисования, это создание объектов "кисти" рантайм прям на рисунке, потом рендер всего этого в текстуру, потом применить новую текстуру в рисунку, но этот способ сложный и с Canvas мне не удалось его сдружить.
Я на драйве
|
|
| |
loginlogin | Дата: Понедельник, 27 Марта 2017, 13:38 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Цитата URGINSAN ( ) loginlogin, уменьши размер картинки, на которой рисуешь. Есть вообще второй способ рисования, это создание объектов "кисти" рантайм прям на рисунке, потом рендер всего этого в текстуру, потом применить новую текстуру в рисунку, но этот способ сложный и с Canvas мне не удалось его сдружить. уменьшение картинки помогло) огромное спасибо)
Максимум 600 символов
Сообщение отредактировал loginlogin - Понедельник, 27 Марта 2017, 13:40 |
|
| |
|