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

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

Есть какая-то конкретная причина, чтобы пропустить это?

12 голосов | спросил Laz 30 Maypm10 2010, 18:45:04

5 ответов


0

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

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

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

ответил Maurice Gilden 30 Maypm10 2010, 19:37:40
0

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

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

ответил Gilbert Le Blanc 30 Maypm10 2010, 19:17:22
0

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

ответил SigTerm 30 Maypm10 2010, 20:11:22
0

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

ответил Niklas Rosencrantz 30 Maypm10 2010, 19:58:26
0

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

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

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

ответил Jakob 30 Maypm10 2010, 19:19:06

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132