Страница 1 из 1

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

СообщениеДобавлено: 23 ноя 2016, 20:39
wwwWWWwww
Всех приветствую.
Подскажите пожалуйста, как можно в шейдере, определить координаты пикселя в локальных координатах другого объекта? И вообще возможно это?
Как, например, в скрипте, в меше можно получить вертексы объекта, потом перевести их координаты в мировые, и потом перевести в локальную систему координат относительно трансформа нужного объекта...

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

СообщениеДобавлено: 23 ноя 2016, 21:08
Paul Siberdt
С одной стороны начали про шейдер, а потом свели все к преобразованию координат.

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

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

Если вам надо все вертексы объекта привести в локальные координаты другого трансформа, проще вертексдате добавить расстояние между трансформами и повернуть на разницу в ориентациях.

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

СообщениеДобавлено: 23 ноя 2016, 21:14
wwwWWWwww
Именно пиксель мне и нужен.
Нужно как тут: 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 в локальных координатах этого объекта, а мне нужно проверить в локальных координатах другого объекта.

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

СообщениеДобавлено: 23 ноя 2016, 21:16
Paul Siberdt
Пишите скрипт, который будет брать из шейдера вектор и считать из него нужное преобразование.

Material.GetVector

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

Material.SetMatrix

Как описать в матрице два преобразования координат я не знаю :) (никогда не озадачивался даже)