Próbuję napisać funkcję w GLSL, która zwraca podpisaną odległość do prostokąta. Prostokąt jest wyrównany względem osi. Czuję, że utknąłem; Po prostu nie mogę objąć głowy tym, co muszę zrobić, aby to zadziałało.Obliczanie podpisanej odległości między punktem i prostokątem
Najlepszym wymyśliłem to:
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);
}
która produkuje prostokąt, który wygląda tak:
Linie pokazują odległość od prostokąta. Działa dobrze, ale TYLKO dla odległości NA ZEWNĄTRZ prostokąta. Wewnątrz prostokąta odległość jest statyczna 0.
.
Jak uzyskać dokładne odległości wewnątrz prostokąta za pomocą jednolitej formuły?
Doskonała! Doskonale spełnia zadanie. – tenfour
@jozxyqk Jak wpadłeś na tę funkcję? –
@ v.shashenko prób i błędów naprawdę. Zaktualizowałem odpowiedź, by przejść do bardziej szczegółowych informacji. – jozxyqk