Я пытаюсь написать функцию в GLSL, которая возвращает знаковое расстояние до прямоугольника. Прямоугольник выравнивается по оси. Я чувствую себя немного застрявшим; Я просто не могу оборачивать голову тем, что мне нужно сделать, чтобы она работала.Рассчитать расстояние между точкой и прямоугольником
Лучшее, что я придумал это:
float sdAxisAlignedRect(vec2 uv, vec2 tl, vec2 br)
{
// signed distances for x and y. these work fine.
float dx = max(tl.x - uv.x, uv.x - br.x);
float dy = max(tl.y - uv.y, uv.y - br.y);
dx = max(0.,dx);
dy = max(0.,dy);
return sqrt(dx*dx+dy*dy);
}
Который производит прямоугольник, который выглядит как:
Линии показывают расстояние от прямоугольника. Он отлично работает, но ТОЛЬКО для расстояний вне прямоугольника. Внутри прямоугольника расстояние статическое 0.
.
Как получить точные расстояния внутри прямоугольника, используя единую формулу?
Отлично! Отличная работа. – tenfour
@jozxyqk Как вы придумали эту функцию? –
@ v.shashenko проб и ошибок действительно. Я обновил ответ, чтобы перейти к более подробному описанию. – jozxyqk