Текстурированные сферы без сильных искажений - PullRequest
6 голосов
/ 17 октября 2008

Я видел хорошо текстурированные шары, планеты и другие сферические объекты в нескольких играх, в последний раз в НЛО: последствия. Если вы просто разбьете текстуру на широту / долготу как координаты u и w, вы получите много уродливых искажений текстуры по полюсам.

Я могу думать, что я один способ реализовать сферическую карту с минимальным искажением. Путем отображения треугольников вместо квадратов. Но я не знаю никаких алгоритмов. Как получить вершины и координаты текстуры для таких сфер?

Кроме того, я не вижу способа создать полную сферическую карту из простой плоской квадратной карты. Есть ли какой-нибудь интуитивно понятный способ рисовать такие карты без особых проблем?

Хотя, есть ли другие алгоритмы рендеринга сферы без или с минимальным искажением?

Интересны как алгоритмы трассировки лучей, так и алгоритмы растеризации.

Ответы [ 6 ]

5 голосов
/ 21 октября 2008

Теорема о волосяном шаре гласит, что невозможно определить непрерывные координаты текстуры на сфере без полюсов, которые искажают текстуру.

3 голосов
/ 21 октября 2008

Lat / lon "сферы" искажают по определению. Если вы занимаетесь программированием, начните с [тетраэдр] (http://en.wikipedia.org/wiki/Tetrahedron Тетраэдр) и подразделяйте на столько, сколько необходимо, разделив каждый треугольник на 4 треугольника и переставив средние точки на заданном радиусе из центр.

Если вы занимаетесь моделированием, GeoSphere (как упоминалось ранее) или любой другой аналог решит вашу проблему.

Дело в том, что у треугольников будет постоянное искажение, которое не зависит от широты.

Также обратите внимание, что (закрытое) подразделение поверхности позволит вам легко иметь (C) LOD .

Текстурирование - это другая история, но если у вас есть хорошая сфера, у вас меньше проблем.

Надеюсь, это пробудит ваше воображение :)

2 голосов
/ 17 октября 2008

Или вы можете использовать кубическую карту. Как правило, это предпочтительный способ отображения окружения, который в основном и описывается вами.

2 голосов
/ 17 октября 2008

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

2 голосов
/ 17 октября 2008

Вы можете использовать прямоугольную карту с продольным размытием, которое увеличивается вблизи полюсов (от нуля на экваторе до 60 градусов северной широты) В сочетании с mip-картами это должно устранить некоторые из упомянутых вами эффектов.

1 голос
/ 17 октября 2008

Не разбивайте сферу по долготе и широте. Вместо этого используйте то, что называется GeoSphere в 3Ds Max. (Собственно, многогранник, геодезическая сфера .)

...