Почему не там никакой круг или эллипс, примитивный в OpenGL?

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

Какая-либо определенная причина опустить его?

15
задан Peter Mortensen 12 November 2010 в 14:30
поделиться

5 ответов

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

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

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

22
ответ дан 1 December 2019 в 02:45
поделиться

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

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

2
ответ дан 1 December 2019 в 02:45
поделиться

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

2
ответ дан 1 December 2019 в 02:45
поделиться

Говоря, что это зависит от разрешения

1
ответ дан 1 December 2019 в 02:45
поделиться

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

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

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

-1
ответ дан 1 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: