Почему в OpenGL нет примитива или эллипса?

Круги - одна из основных геометрических сущностей. Однако для этого нет примитивов, определенных в OpenGL, например, линии или полигоны. Почему так? Это немного раздражает, чтобы включать в себя настраиваемые заголовки для этого все время!

Любые конкретные причины, чтобы опустить это?

Ответ 1

В то время как круги могут быть базовыми, они не являются основными, как точки, линии или треугольники, когда речь идет о растеризации. Первые графические карты с 3D-ускорением были разработаны, чтобы сделать что-то очень хорошо, растрировать треугольники (и линии и точки, потому что они были тривиальными, чтобы добавить). Добавление более сложных форм сделало бы карту намного дороже, добавив лишь небольшую функциональность.

Но есть и другая причина не включать круги/эллипсы. Они не соединяются. Вы не можете построить 3D-модель из них, и вы не можете подключать к ней треугольники без добавления пробелов или перекрывающихся частей. Поэтому для того, чтобы круги были полезны, вам также нужны другие формы, такие как кривые и другие более продвинутые поверхности (например, NURBS). Круги в одиночку полезны только как "большие точки", которые также могут быть выполнены с помощью квадрата и текстуры в форме круга или треугольников.

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

Ответ 2

Поскольку исторически видеокарты отображали точки, линии и треугольники.

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

Ответ 3

Поскольку графические карты работают на трехмерных точках, линиях и треугольниках. Круг требует кривых или сплайнов. Он не может быть идеально представлен "нормальным" трехмерным примитивом, только аппроксимированным как N-угольник (так что он будет выглядеть как круг на определенном расстоянии). Если вам нужен круг, напишите процедуру самостоятельно (это не сложно сделать). Либо нарисуйте его как N-угольник, либо сделайте квадрат (2 треугольника) и вырежьте из него круг, используя фрагментарный шейдер (вы можете получить идеальный круг таким образом).

Ответ 4

Сказать, что это зависит от разрешения

Ответ 5

Вы всегда можете использовать gluSphere (если трехмерная форма - это то, что вы ищете).

Если вы хотите нарисовать двумерный круг, вы застряли в пользовательских методах. Я бы пошел с вентилятором треугольника.

Примитивы называются примитивами по одной причине:)