Как создать четную сферу с треугольниками в OpenGL?

Существует ли формула, которая порождает набор координат треугольников, вершины которых расположены на сфере?

Я, вероятно, искал что-то похожее на gluSphere. Тем не менее, мне нужно окрасить разные треугольники в цветные цвета, так что кажется, что я не могу использовать gluSphere.

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

Ответ 1

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

Ответ 2

Вот классическая веб-страница, которая прекрасно объясняет, как построить исосферу. (Это процесс, который Датенволф упоминает.)

http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html

Надеюсь, что это поможет.

Кстати, вам также понадобится вычислить нормали и uv map.

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

Вы можете выиграть ставки в баре: "есть ли форма, где все нормали бывают точно... равными вершинам?" На первый взгляд вы могли бы подумать, что это невозможно, такая случайная форма не может существовать. Но, конечно, ответ - это просто "сфера с радиусом один!" Хех!

Относительно УФ. На шаре относительно легко, предполагая, что вы проецируете 2D на "очевидный" способ, проекция карты в виде прямоугольника. В этом случае u и v в основном представляют собой долготу/широту любой точки, нормированную на 0,1.

Надеюсь, что это поможет!