Изогнуть прямоугольник по дуге

Шейдеры и все-все-все.

Изогнуть прямоугольник по дуге

Сообщение alt3d 30 авг 2017, 18:40

Подскажите пожалуйста формулу преобразования UV-координат из прямоугольника в дугу/арку

Изображение
alt3d
Старожил
 
Сообщения: 649
Зарегистрирован: 04 сен 2011, 21:19
  • Сайт
  • ICQ

Re: Изогнуть прямоугольник по дуге

Сообщение Cr0c 03 сен 2017, 20:45

Чтобы по uv бралось из сегмента, а не прямоугольника?
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 2448
Зарегистрирован: 19 июн 2015, 13:50

Re: Изогнуть прямоугольник по дуге

Сообщение alt3d 04 сен 2017, 16:06

У меня есть кваратный плейн и квадратная текстура.
Хочу шейдером на этом плейне рисовать текстуру не квадратом, а аркой.
Для этого нужно как-то рассчитать новые UV-координаты.
Ну если есть еще какой-то способ - буду рад услышать.

Скрытый текст:
Изображение
alt3d
Старожил
 
Сообщения: 649
Зарегистрирован: 04 сен 2011, 21:19
  • Сайт
  • ICQ

Re: Изогнуть прямоугольник по дуге

Сообщение bojlahg 04 сен 2017, 17:33

Просто поменять координаты не выйдет - для этого надо субдивайтить полигон несколько раз либо писать свой шейдер с выборкой нужных пикселов.
Мои проекты: MahJah Star Factory Cop Car Swash! Spline Editor
Аватара пользователя
bojlahg
UNIверсал
 
Сообщения: 383
Зарегистрирован: 13 авг 2011, 10:57
Откуда: Сатка
Skype: bojlahg
  • Сайт

Re: Изогнуть прямоугольник по дуге

Сообщение seaman 04 сен 2017, 17:35

Хочу шейдером на этом плейне рисовать текстуру не квадратом, а аркой.

А остальная часть плейна прозрачная, черная, или еще что-то?
seaman
Адепт
 
Сообщения: 6914
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Мурманск

Re: Изогнуть прямоугольник по дуге

Сообщение alt3d 05 сен 2017, 09:01

bojlahg писал(а):Просто поменять координаты не выйдет - для этого надо субдивайтить полигон несколько раз либо писать свой шейдер с выборкой нужных пикселов.

Так я и пишу шейдер.

seaman писал(а):
Хочу шейдером на этом плейне рисовать текстуру не квадратом, а аркой.

А остальная часть плейна прозрачная, черная, или еще что-то?


Этот прямоугольник/арка должна быть маской в шейдере.
Мысль была какая - взять текстуру (черный квадрат с белыми краями), сделать ее НЕтайловой, изогнуть и использовать как маску.
В идеале вообще обойтись без текстуры, просто считать координаты и красить все что попадает внутрь арки черным, а снаружи белым.
Сейчас я конечно нарисовал нужную маску в фотошопе, но хотелось-бы сделать ее нестатичной, а изгибать в зависимости от каких-то параметров.

А нужно это все для "эффекта капель дождя на стекле машины, стираемые дворниками".
Вот область действия дворников как раз и будет эта маска
alt3d
Старожил
 
Сообщения: 649
Зарегистрирован: 04 сен 2011, 21:19
  • Сайт
  • ICQ

Re: Изогнуть прямоугольник по дуге

Сообщение Cr0c 05 сен 2017, 11:51

Партиклами сделать?
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 2448
Зарегистрирован: 19 июн 2015, 13:50

Re: Изогнуть прямоугольник по дуге

Сообщение alt3d 05 сен 2017, 12:00

Cr0c писал(а):Партиклами сделать?

Я с партиклами не особо плотно знаком. Как определять какие партиклы удалять?
С ходу могу предложить только делать их физичными. Но мне кажется слишком жирно будет партиклами такую вещь делать.

Пока вот так получается.
Маска по цветам вершин меша
alt3d
Старожил
 
Сообщения: 649
Зарегистрирован: 04 сен 2011, 21:19
  • Сайт
  • ICQ

Re: Изогнуть прямоугольник по дуге

Сообщение jetyb 05 сен 2017, 13:15

Неужели так сложно перевести евклидовы координаты на плоскости в полярные, а потом просто проверить
(R, phi) на принадлежность нужному интервалу.
Функции Cg тут
http://developer.download.nvidia.com/Cg ... dix_e.html
jetyb
Адепт
 
Сообщения: 1271
Зарегистрирован: 31 окт 2011, 17:21

Re: Изогнуть прямоугольник по дуге

Сообщение alt3d 05 сен 2017, 13:42

jetyb писал(а):Неужели так сложно перевести евклидовы координаты на плоскости в полярные, а потом просто проверить
(R, phi) на принадлежность нужному интервалу.
Функции Cg тут
http://developer.download.nvidia.com/Cg ... dix_e.html


Ну так я и спрашиваю алгоритм.
Я уже всю эту математику благополучно забыл.
Спасибо.
alt3d
Старожил
 
Сообщения: 649
Зарегистрирован: 04 сен 2011, 21:19
  • Сайт
  • ICQ

Re: Изогнуть прямоугольник по дуге

Сообщение jetyb 05 сен 2017, 13:58

Синтаксис:
Используется csharp
fixed4 GetColor(float2 uv)
{
//константы \ шейдерные постоянные
float2 center = float2 (0.5, 0.3);
float rMin = 0.3;
float rMax = 0.5;
float degToRad = 3.1415926 / 180.0;
float phiMin = 45 * degToRad;
float phiMax= 135 * degToRad;


float dr = uv - center;
float r = length(dr);
float phi = atan2(dr.y, dr.x);


//нормализация до 0 - 1
r = (r - rMin) / (rMax - rMin);
phi = (phi - phiMin)/(phiMax - phiMin);

if(r < 0 || r > 1 || phi < 0 || phi > 1) return 0;
return tex2D(_MainTex, float2(r, phi));
}
 
jetyb
Адепт
 
Сообщения: 1271
Зарегистрирован: 31 окт 2011, 17:21

Re: Изогнуть прямоугольник по дуге

Сообщение alt3d 05 сен 2017, 15:31

jetyb писал(а):.


Очень круто. Спасибо большое.
Не ожидал прям рабочий код получить.

Изображение
alt3d
Старожил
 
Сообщения: 649
Зарегистрирован: 04 сен 2011, 21:19
  • Сайт
  • ICQ


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2