Skip to main content

Что такое сфера OpenGL®?

Сфера Open Graphics Library® (OpenGL®) на самом базовом уровне - это трехмерный (3D) объект, состоящий из серии треугольников или четырехугольников, вершины которых все равноудалены от центральной точки. Это означает, что когда сфера OpenGL® просматривается под любым углом, контур выглядит для зрителя как идеальный круг, хотя освещение и затенение могут придать объему более шарообразный вид. Количество вершин, используемых для создания сферы OpenGL®, определяет гладкость объекта в приближении к реальной сфере, причем менее 12 точек создают объект, который не может считаться сферой. Хотя сфера считается примитивом формы во многих графических приложениях и библиотеках, OpenGL® не имеет каких-либо врожденных функций для визуализации сферы, что означает необходимость использования дополнительных наборов инструментов, таких как служебный инструментарий OpenGL® (GLUT), чтобы избежать написания кода чтобы вручную создать форму.

При работе с вершинами в OpenGL® наименьшее количество точек, которые можно использовать для создания сферы с некоторой степенью гладкости, составляет 12, создавая объект с 20 треугольными гранями, известными как икосаэдр. Без дальнейшей обработки сфера OpenGL®, сконструированная таким образом, будет иметь видимые острые углы по краям, что может быть приемлемо для некоторых применений. Чтобы получить более округлую сферу, каждое лицо должно быть дополнительно подразделено.

Подразделение икосаэдра для увеличения числа содержащихся в нем вершин и формирования более гладкой сферы OpenGL® включает создание новых вершин в центре каждого ребра каждого существующего треугольника. Это означает, что каждая треугольная грань теперь будет содержать четыре треугольника. Разделение может продолжаться столько, сколько требуется, хотя добавление точек экспоненциально может быстро создать объект, который имеет большое время рендеринга и может стать громоздким для перевода.

Несмотря на некоторые математические удобства, сфера OpenGL® предоставляет программистам, такие как нормали поверхности, которые могут быть легко вычислены из координат вершин, текстурирование сферы может представлять некоторые сложности. Использование стандартной двумерной (2D) текстуры, спроецированной на сферу, означает, что верхняя и нижняя области текстурного изображения будут сжаты, потому что форма треугольников рядом с полюсами сферы сжимается сама. Чтобы преодолеть это, можно использовать отображение куба или программист может вручную сгенерировать координаты текстуры для объекта.

Следует отметить один фактор использования библиотеки утилит для создания сферы OpenGL®. Сферу, сгенерированную GLUT или подобными инструментальными наборами, иногда бывает трудно модифицировать, оптимизировать и управлять внутри самого OpenGL®. По этой причине иногда полезно использовать собственный написанный код для создания сферы OpenGL®, чтобы она создавалась и могла использоваться наиболее эффективным способом в рамках программы.