Является ли изучение OpenGL 2.1 бесполезным сегодня?

Я новичок в мире 3D OpenGL /DirectX, и я узнал, что спецификации OpenGL 4.1 и GLSL были выпущены сегодня.

Один мой друг дал мне Красную книгу для OGL v2.1, но, насколько я читал, 3.x и 4.x сильно отличаются от 2.x, и многие вещи сейчас устарели.

Могу ли я использовать книгу, чтобы начать изучать основы 3D и CG, или лучше найти более новую копию?

44 голоса | спросил pctroll 26 J000000Monday10 2010, 22:34:35

10 ответов


18

В такие моменты я всегда направляюсь в обзор оборудования Steam: http://store.steampowered.com/hwsurvey/ - вы увидите, что проникновение на рынок систем класса DX10 /11 составляет почти 80%; это в целом эквивалентно GL3.3 или выше. Этот 80% ограничивается пользователями Vista /7 - добавьте графический процессор DX10 /11 с XP, и вы достигнете чуть более 90%.

Принимая во внимание, что речь идет о немного более хардкорных геймерах, вам тогда нужно начать думать о своей целевой аудитории. Это те, кого вы хотите настроить? Вы нацеливаетесь на тех, у кого больше оборудования на нижнем уровне? Что относительно графики Intel? Как насчет пользователей Mac и Linux? Это все вопросы, которые вам нужно ответить самим, поэтому наиболее общие рекомендации - это лучшее, что вы собираетесь получить.

Добавляя к этому, вы должны учитывать тот факт, что, если вы начинаете учиться сегодня с целью доставки чего-либо, вы смотрите на период около одного года, прежде чем вы туда доберетесь (если только мы «Речь идет о действительно тривиальных /простых случаях). По мере роста тенденции gfx-возможностей, мы смотрим на то, что к тому времени мы достигнем 100% -ного поглощения оборудования GL3.3 +.

Тогда коэффициент в том, что с GL2.1 или ниже вы собираетесь учиться и использовать ужасно много грубых старых глупостей, даже если вы ограничиваете себя шейдерами и подмножеством VBOs GL2.1 (версии GLSL на нижнем уровне неприятные для использования и потоковые VBOs, но не могут использоваться без GL_ARB_map_buffer_range) - GL3.3 + ввел much более приятные (и более эффективные) способы обработки многих вещей, вы будете лучше использовать (и они будут вам благодарны за это), и вы будете тратить больше времени на создание продуктивного кода, а не на борьбу с API, который действительно не хочет сотрудничать с вами.

И тогда, конечно, ситуация с ужасным водителем. Трудный, но истинный факт заключается в том, что драйверы GL в Windows находятся в извините - NV поддерживает то, что им не нужно, AMD не поддерживает то, что им нужно, и с Intel вам действительно нужно ограничить себя функциональностью GL, для которой есть эквивалент в D3D. Чем выше GL_VERSION, тем больше вероятность того, что вы столкнетесь с ошибками драйверов, но для GL3.3 вещи теперь достаточно стабильны.

Итак, резюме состоит в том, что в отсутствие какой-либо другой информации (целевой аудитории и т. д.) я бы нацелил GL3.3 на базовую линию (возможно, вытащив функциональность из более высоких GL_VERSIONs, где она доступна, и где она не слишком сильно нарушайте кодовую базу), если только не была определена очень конкретная и окончательно определенная причина, чтобы пойти ниже (и я хочу быть абсолютно уверенным на 100%, а не использовать какое-то неопределенное понятие «», но как насчет тех, кто с более старое оборудование ). В последнем случае я бы не пошел ниже GL2.1, и я бы попытался задействовать как можно больше возможностей 3.x даже тогда.

ответил Maximus Minimus 21 AM000000120000003631 2012, 00:26:36
38

Я бы посоветовал придерживаться пересечения 2.1 и 3. Есть еще много аппаратных средств и драйверов, которые поддерживают OpenGL 2.1, но методы, рекомендуемые OpenGL 3 core , лучше . Этот учебник - довольно хорошее место для начала (учит OpenGL 2.0 без функций, которые устарели в 3).

ответил Jake McArthur 27 J000000Tuesday10 2010, 18:40:33
18

Я бы сказал, что это не бесполезно.

Почему? Ну, в то время как остальная часть мира поддерживает OpenGL 3.x и 4.0, Mac OS X по-прежнему поддерживает OpenGL 2.1. И OpenGL ES, который используется на большинстве, если не всех, переносных платформах, по-прежнему широко поддерживается во всех версиях: 1.0, 1.1 и 2.0; которые примерно сопоставимы с OpenGL 1.4, 1.5 и 2.1 соответственно.

Итак, пока OpenGL ES 1.0 полностью не исчезнет с лица Земли, зная, что OpenGL 2.x будет not быть отходами.

Это не означает, что нет смысла использовать OpenGL 3.x или 4.0 на платформах, которые его поддерживают, конечно.

Обновление: Начиная с версии Mac OS X Lion (10.7), профиль OpenGL 3.2 Core теперь поддерживается на Mac. Этот выпуск обесценивает большие части OpenGL 1.x, чтобы упростить API. Пользователи старых версий OS X (и низкоуровневой графики Intel) по-прежнему ограничены OpenGL 2.0 и 2.1. Знание OpenGL 2.x тем не менее по-прежнему полезно и останется таким довольно долгое время.

ответил greyfade 26 J000000Monday10 2010, 22:55:51
11

Ответ mh01 охватывал многие основы, поэтому я собираюсь добавить несколько предложений.

OpenGL ES

Давайте поговорим о ES 2.0 и настольном GL 2.1 против настольного GL 3.3. Для целей этого обсуждения термин «GL X.Y» будет относиться к настольной версии OpenGL X.Y, а «ES X.Y» относится к OpenGL ES X.Y.

Структурно , ES 2.0 имеет больше общего с GL GL 3.3, чем с GL 2.1. GL 3.3 и ES 2.0 основаны на чистом шейдере. Они оба являются чистыми буферными объектами. Etc. GL 2.1 имеет множество ловушек производительности и кодирования, которые упростили бы создание приложения GL 2.1, которое не было бы легко переносимым на ES 2.0.

Однако, в терминах языка синтаксиса , GLSL ES 1.00 (сопоставление с ES 2.0) выглядит гораздо более похож на GLLS GLSL, чем на GL 3.3. Атрибуты attribute и varying не существуют в 3,3 ядра; он использует in и out, что намного более последовательно и разумно, когда вы имеете дело с более чем двумя этапами шейдера (поэтому ES 3.0 применяет синтаксис GL 3.3 ).

Легко отобразить понятия , полученные в GL 3.3 до ES 2.0. Поэтому, если вы изучите GL 3.3 для любого из различных инструментов для этого, вы поймете, как работать в мире ES 2.0. Вам нужно будет выяснить, где подмножество, конечно (то есть: то, что GL 3.3 может сделать, что ES 2.0 не может), но понятия одинаковы.

Сопоставление синтаксиса GLSL, чтобы вы могли копировать шейдеры от одного к другому, немного сложнее. Но на самом деле все, что требуется, - это несколько #defines в нужных местах. Кроме того, GLSL 3.30 имеет несколько функций совместимости с ES, таких как highp и т. Д. (Которые ничего не делают на рабочем столе GLSL).

Итак, вы получаете что-то для ES 2.0, когда учитесь у GL 3.3 вместо GL 2.1.

ответил Nicol Bolas 21 AM000000120000004631 2012, 00:58:46
8

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

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

Также я хочу отметить, что OpenGL: ES 2.0 удаляет конвейер фиксированной функции, поэтому он более эквивалентен 3.0, чем 2.1.также всегда поддерживает разные функции в поддерживаемой версии gl во время выполнения.

ответил jsimmons 27 J000000Tuesday10 2010, 11:30:39
4

Я бы сказал, что сохранить OpenGL, используя красную книгу, просто игнорировать те вещи, которые устарели в более новых версиях (например, glBegin (), glEnd () - вместо этого использовать VBO). Большинство функций в более новых версиях уже были доступны до расширений.

ответил thbusch 26 J000000Monday10 2010, 22:50:21
4

Я в основном согласен с thbusch. Но я бы не стал полностью игнорировать устаревшие API-интерфейсы: там слишком много кода, который их использует. Я бы заплатил им гораздо меньше внимания. Нет смысла, например, в изучении glBegin (), glEnd () достаточно тщательно, чтобы написать свой собственный код, используя их. Но вы должны их распознавать, когда видите их, и имеете некоторое представление о том, что они делают.

По-прежнему стоит читать всю Красную книгу хотя бы один раз, даже если вы не создаете образец кода и не выполняете упражнения, закрывающие функции, прекращенные в OpenGL 3.x.

ответил user1800 20 AM00000060000001631 2010, 06:22:16
3

Короткий ответ:

Нет. Изучение OpenGL 2.1 - это хорошая идея, даже сегодня, пока вы изучаете «хорошие детали».

Длинный ответ:

OpenGL можно по существу разделить на две части: «Хорошие части» и «Функции устаревших».

Честно говоря, я не вижу большой пользы в изучении устаревших функций («фиксированная функция»). Однако значительная часть OpenGL 2.1 (хорошие части) по-прежнему доступна сегодня с относительно небольшими изменениями.

Таким образом, изучение некоторых частей OpenGL 2.1 может быть полезным. В частности, OpenGL ES 2 очень популярен в наши дни, а ES 2 - в основном (но не совсем) подмножество OpenGL 2.1. Для 3D-программирования в смартфонах OpenGL ES 2 является обязательным.

Так что же такое «хорошо»? По существу все, что находится в OpenGL 3.x «core profile» (в отличие от «профиля совместимости») и /или в OpenGL ES 2.

  • Вершины и шейдеры фрагментов: узнайте их
  • Текстуры: все еще хорошо.
  • Матрицы: знать, как они работают, полезно, но glLoadIdentity и такие функции устарели и их следует избегать
  • Свет: знать, как свет может быть смоделирован в компьютерной графике, полезно, но следует избегать glLightfv и других функций функции фиксированной функции.
  • Буферы массива: Хорошо
  • glBegin, glVertex, glColor, glEnd: Избегайте их. Может быть полезно для быстрого экспериментирования, но есть и другие способы сделать то же самое.
  • Отображать списки: Избегайте

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

ответил luiscubal 23 PM00000080000004831 2012, 20:49:48
1

Я не верю, что это плохая идея. Многие концепции GL охватывают все версии OpenGL и в конечном итоге помогут вам. У меня есть несколько книг OpenGL от 10 лет назад, которые все еще помогают сегодня. Я бы сказал, что если вы новичок в OpenGL и есть несколько лучших книг, которые старше, вы узнаете много, и код все равно должен работать. Большинство OpenGL поддерживают обратную совместимость (я считаю).

ответил Mungoid 23 PM00000090000005031 2012, 21:20:50
1

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

Устаревшие вещи могут быть полезны в некоторых случаях, например, если вы пытаетесь запрограммировать что-то, поддерживающее OpenGL 1.5 или старше (можно найти на старых чистых нетбуках и более старых системах MacOS), OpenGL ES 1.x ( старшие iPhone и Android до версии 1.6) или OpenGL SC (подсистема Saftey Critical, если вы программируете дисплей на реактивном истребителе). Minecraft, например, построен против OpenGL 1.3, поэтому он может поддерживать действительно старое оборудование (но даже у него есть опция «расширенный»).

Это также может быть полезно, если вы просто хотите получить пиксели на экране и не заботитесь о том, чтобы сделать это «правильным» способом.

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

Но кроме этого он должен быть пропущен, если это возможно.

Я предлагаю вам проверить мой ответ здесь и здесь для более подробная информация.

ответил David C. Bishop 25 AM00000050000003831 2012, 05:26:38

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

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

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