Почему в OpenGL нет круговых или эллиптических примитивов? - PullRequest
14 голосов
/ 30 мая 2010

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

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

Ответы [ 5 ]

20 голосов
/ 30 мая 2010

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

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

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

2 голосов
/ 30 мая 2010

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

2 голосов
/ 30 мая 2010

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

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

1 голос
/ 30 мая 2010

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

0 голосов
/ 30 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...