| 
	
		
		
			| Рисовать на 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 |  |  |  |  |  
 |