TGViewer
Прогаем с кенгурой Прогаем с кенгурой @coding_with_kangaroo · 236 subscribers
Post #203 134
Алгоритм (упрощенный):

Все делается во фрагментном шейдере

1. Переходим в осесимметричное пространстве (вычитаем из точки центр)
2. Считаем, куда мы попадем, масштабируя этот вектор коэффициентом от полинома по его длине
3. Переходим обратно в нормальные координаты (прибавляем центра)
4. Сэмплим входную текстуру по этим новым координатам

Можно сделать несколько итераций [3] для большей точности. Ну и не забывайте соотношение сторон учитывать, чтоб не получить оптику странной геометрии)))
Функция для радиальной дисторсии:


static inline float2 radial_distort(float2 uv, constant Parameters& params) {
float2 scale = params.aspect;
float2 xd = (uv - params.center) * scale;

// Brown–Conrady in aspect-corrected space
float r2 = dot(xd, xd);
float r4 = r2*r2;
float r6 = r4*r2;
float radial = 1.0 + params.k1*r2 + params.k2*r4 + params.k3*r6;

float2 xu = xd / radial;

return params.center + xu / scale;
}


https://www.desmos.com/3d/i7v1yl7s5y
Desmos Brown–Conrady (radial) Explore math with our beautiful, free online graphing calculator. Graph functions, plot points, visualize algebraic equations, add sliders, animate graphs, and more.
More from @coding_with_kangaroo
  1. Oct 7, 2026Пополнение библиотеки. Буду расширять область, а то все картинки да картинки
  2. Oct 7, 2026Post #823
  3. Oct 7, 2026А вот еще вспомнил про pixator и решил затащить поддержку видео
  4. Oct 6, 2026Еще вот так умеет
  5. Oct 6, 2026Оно даже работает
  6. Oct 6, 2026Спагетти-архитектура Я знаю, что можно красиво и аккуратно, но ножек в наличии нет, а с ал…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →