Определить позицию пикселя в координатах другого объекта

Для экспериментальных разработок и тем "я нашел чужой исходник, почему он не работает?"

Определить позицию пикселя в координатах другого объекта

Сообщение wwwWWWwww 23 ноя 2016, 20:39

Всех приветствую.
Подскажите пожалуйста, как можно в шейдере, определить координаты пикселя в локальных координатах другого объекта? И вообще возможно это?
Как, например, в скрипте, в меше можно получить вертексы объекта, потом перевести их координаты в мировые, и потом перевести в локальную систему координат относительно трансформа нужного объекта...
wwwWWWwww
UNец
 
Сообщения: 20
Зарегистрирован: 04 июн 2014, 11:21

Re: Определить позицию пикселя в координатах другого объекта

Сообщение Paul Siberdt 23 ноя 2016, 21:08

С одной стороны начали про шейдер, а потом свели все к преобразованию координат.

1. берете пиксель_на_текстуре/точку_коллизии/что_захотите и ищете в меше ближайший вертекс vN
2. преобразуете вертекс в мировую координату vN = fromTransform.TransformPoint(vN);
3. преобразуете полученную координату в локальную нового трансформа vN = toTransform.InverseTransformPoint(vN);

Но это ж не шейдерная задача.

Если вам надо все вертексы объекта привести в локальные координаты другого трансформа, проще вертексдате добавить расстояние между трансформами и повернуть на разницу в ориентациях.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5262
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Определить позицию пикселя в координатах другого объекта

Сообщение wwwWWWwww 23 ноя 2016, 21:14

Именно пиксель мне и нужен.
Нужно как тут: https://en.wikibooks.org/wiki/Cg_Progra ... y/Cutaways
"float4 frag(vertexOutput input) : COLOR
{
if (input.posInObjectCoords.y > 0.0)
{
discard; // drop the fragment if y coordinate > 0
}
return float4(0.0, 1.0, 0.0, 1.0); // green
}
"
только тут проверяется координата пикселя по y в локальных координатах этого объекта, а мне нужно проверить в локальных координатах другого объекта.
wwwWWWwww
UNец
 
Сообщения: 20
Зарегистрирован: 04 июн 2014, 11:21

Re: Определить позицию пикселя в координатах другого объекта

Сообщение Paul Siberdt 23 ноя 2016, 21:16

Пишите скрипт, который будет брать из шейдера вектор и считать из него нужное преобразование.

Material.GetVector

Если вам надо считать что-то на шейдере с полученным вектором, посылайте, наоборот, в шейдер, посчитанную в скрипте матрицу преобразования.

Material.SetMatrix

Как описать в матрице два преобразования координат я не знаю :) (никогда не озадачивался даже)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5262
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт


Вернуться в Шейдерная кузня

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

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