Суббота, 07 Декабря 2024, 03:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Рисовать на 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 функций юзай массивы с сохранением картинки с каждым новым действием.

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


Спасибо огромное. За пять минут нашёл по твоей наводки. всю жизнь буду тебя помнить)
hands


Максимум 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 мне не удалось его сдружить.

уменьшение картинки помогло) огромное спасибо) respect


Максимум 600 символов

Сообщение отредактировал loginlogin - Понедельник, 27 Марта 2017, 13:40
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг