Расчет сферического отображения (UV) для точки, заданной на сфере - странные значения U

Я хочу написать сферическое отображение для моего трассировщика лучей, чтобы генерировать UV-координаты для сферы. Текстура, примененная с этим сопоставлением, должна выглядеть так:  введите описание изображения здесь

У меня есть сфера, которая расположена в [0.0f,0.0f,0.0f] с radius из 20.0f.

Для данной xyz точки на поверхности сферы (положение, в котором луч от трассировщика лучей попадает в сферу) я вычисляю uv координаты с помощью эту формулу:

float u = 0.5f + atan2(point.getX(), point.getZ()) / (2 * PI);
float v = 0.5f - asin(point.getY() / radius) / PI;

Я решил вывести значения u и v, чтобы проверить сопоставление.

Что касается v, он выглядит вполне нормально (значения от полюса к полюсу, от 0.0f до 1.0f): < img src = "https://i.stack.imgur.com/yjvYx.jpg" alt = "введите описание изображения здесь">

Но u выглядит не так хорошо:  введите описание изображения здесь Разве это не должна быть сфера, цвет которой зависит от XZ (одинаково для всех точек на одной долготе, постепенно меняясь от одной долготы к другой? )?

Я ошибаюсь в интерпретации point, формулы или чего-то еще?


person PolGraphic    schedule 17.11.2015    source источник


Ответы (1)


Разрыв на центральной линии вызван тем, что atan2() возвращает долготу от -π до π. Вы делите это на 2π, чтобы масштабировать от -0,5 до 0,5, затем прибавляете 0,5, чтобы масштабировать от 0 до 1. В результате получается значение, которое скачкообразно изменяется от 0 до 1, подобно тому, как местное время внезапно возвращается на 24. часов, когда вы пересекаете международную линию перемены дат, и по той же причине. Чтобы получить сферу с непрерывным затемнением, сопоставьте значение u с яркостью, масштабированной до четной функции, или, что еще лучше, с оттенком на цветовом круге.

person Davislor    schedule 17.11.2015