Начиная с OpenGL и C ++, правильный путь? - PullRequest
10 голосов
/ 12 апреля 2011

Мне нужны некоторые конкретные и общие советы. Я довольно опытный Java-программист и очень опытный веб-программист, но я хотел бы заняться разработкой программного обеспечения, и я занимался C ++. У меня есть отличная идея для игры, которую я хотел бы сделать, и я понимаю, что это будет огромная задача - но я больше жду ее, чтобы узнать C ++, обёртывание, действительно то, с чем я сталкиваюсь в процесс разработки ...

Но концептуально я не могу войти в дверь! Я прекрасно справляюсь с аспектом C ++, просто настраиваю графику, ПРАВИЛЬНО, это меня смущает. Я пробежал кучу руководств по OpenGL с C ++, в которых все сказано по-разному, ни одно из которых я действительно не могу заставить работать ...

Некоторые говорят, что используют GLUT и GLEW. Некоторые говорят, что GLUT мертва и что FreeGLUT - это то, что нужно сейчас. Некоторые полностью игнорируют их и используют кучу файлов, таких как "glaux.h", которые я не могу найти, - и другие учебники, посвященные ИЗБЕЖАНИЮ "glaux.h" ... Большинство учебников, которые я нашел, идут с предупреждением в комментариях, что их версия OpenGL устарела, и я должен использовать более новые библиотеки - и еще другие с сторонними библиотеками, такими как Ogre и Aurora.

Я просматривал кучу книг и учебных пособий, которые ВСЕ имеют почти совершенно разные настройки для использования OpenGL с C ++. Я понял, что, вероятно, не существует единственного правильного способа сделать это, как такового, но я ищу способ, который является самым актуальным, самым популярным и максимизирует полезность проекта настолько, насколько это возможно. мое обучение ... Любые ссылки на учебники или советы в целом высоко ценится.

Кстати, я использую Visual Studio Express 2010 (хорошая идея?). Моя игра не будет слишком графически насыщенной (изометрическая 2d), но потребует ТОНА логики и ТОНА данных, поэтому я хочу ускорить процесс с помощью C ++. Любые другие идеи о лучших способах сделать это, чем использование c ++ для входа в систему и графики (с точки зрения промышленности) также очень ценны для меня! Заранее спасибо!

Ответы [ 5 ]

5 голосов
/ 12 апреля 2011

Если вы изучаете OpenGL как учебный опыт, я бы порекомендовал вам следующее:

Используйте GLEW, без аргументов. Просто сделай это, все делают Код только для основного профиля. По умолчанию OpenGL принимает старую команду (например, конвейер с фиксированными функциями), которая позже исчезнет, ​​и вы не хотите тратить на это свое время. В частности: узнайте о VBO, текстурах и, больше всего, узнайте о шейдерах.

Забудьте о глау и перенасыщении. Freeglut - хороший и очень стандартный вариант. Менее очевидным выбором будет qt, но его QGLWidget позволяет вам легко делать вызовы gl, не заботясь о создании контекста и все такое. И добавить графические опции очень просто, что всегда очень приятно при программировании графики.

Чтобы на самом деле выучить OpenGL, я бы порекомендовал http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html. У Нехе есть такая проблема, когда более половины вещей бесполезны для изучения, и вокруг них много пуха (создание окон и др.).

Но я бы не стал рекомендовать OpenGL как способ изучения графического программирования в реальном времени. Ваши альтернативы не ограничиваются DirectX. Я изучил тонну графического кодирования от работы с Ogre3D. У вас все еще есть все концепции, которые вам нужно знать (работа на низком уровне с буферами Vertex и Index, текстуры, шейдеры), и вы реализуете множество вещей, чтобы сделать вашу жизнь проще. Вы можете не изучить все тонкости конкретного API, но вы узнаете все, что вам нужно знать концептуально. Когда я стал графическим программистом, я не написал ни одной строки кода DirectX, но я быстро освоил наш движок. После этого я узнал, что на самом деле очень легко. Знать аппаратное обеспечение и концепции. В любом случае фактическая реализация со временем меняется.

О, и на всякий случай я не повторил это достаточно. УЗНАЙТЕ ШЕЙДЕРС

3 голосов
/ 12 апреля 2011

Легко увидеть, где разнообразие вариантов, доступных для OpenGL с C ++, будет немного озадачивающим. По большей части, Java дает двум довольно четкий выбор между двумя возможностями (вам нужен граф сцены или нет?)

Ситуация с C ++ определенно более сложная.

  1. Glut: Это в основном фреймворк для приложений, ориентированный на OpenGL. Очевидно, оно было написано в первую очередь для того, чтобы примеры были короткими, но все же работали. Оригинальная реализация имеет несколько довольно известных ошибок и не обновлялась более десяти лет. Я хотел бы использовать его только в первоначальном контексте: короткие образцы / примеры / демонстрации.
  2. glaux: Эта история похожа на GLUT. У него есть утечки памяти, которые известны, но не исправлены уже более десяти лет. Это никогда не было портативным в любом случае. Я бы полностью избежал этого.
  3. GLEW / GLEE: они позволяют относительно легко использовать функции, добавленные в более новые версии OpenGL из реализаций OpenGL (например, Microsoft), которые не были обновлены, чтобы включать заголовки / библиотеки для прямого доступа к ним. Я предпочитаю Glee с небольшим отрывом, потому что он инициализируется автоматически, но оба работают нормально.
  4. FreeGLUT: это было обновлено совсем недавно, и некоторые ошибки были удалены. Тем не менее, он еще не сделал ничего, чтобы улучшить базовый дизайн GLUT. Возможно, это лучший выбор для коротких демонстраций / сэмплов, но все еще не подходит (IMO) для серьезного использования.
  5. Ogre3D: это намного больше, чем любая из предыдущих библиотек. Это полноценная библиотека графов сцен с загрузкой текстур, определенным форматом файлов и т. Д. Надежная библиотека, но имейте в виду, что если вы используете ее, вы обычно вообще не будете использовать OpenGL напрямую (например, в Windows она может рендеринг через OpenGL или Direct3D без изменения исходного кода вообще.
  6. OpengSceneGraph: Чаще всего используется для научно-ориентированных приложений, но наиболее близко сопоставим с Ogre3D.
  7. FLTK: небольшая, легкая библиотека графического интерфейса, которая работает поверх OpenGL.
  8. GLFW: в том же общем духе, что и GLUT, но он был обновлен гораздо позднее, не имеет почти столько же ошибок и (IMO) более приятный дизайн - минимальный, но все же подходящий для «реального» использования.
3 голосов
/ 12 апреля 2011

Лучший учебник (возможно, как и все «лучшее») Nehe opengl tutorial . По крайней мере, этот учебник предлагался в течение многих лет.

Также, поскольку вы пришли из Java-фона, вы можете предпочесть привязки C # для opengl из фреймворков, таких как Tao , но фактическая настройка может быть сложнее, чем, скажем, загрузка образцов и их запуск.

2 голосов
/ 12 апреля 2011

Вы должны использовать OpenGL, если хотите писать переносимые 3D-приложения.Windows, Linux и Mac OS X поддерживают это.

Возможно, вы захотите взглянуть на NeHe руководства Это одно из лучших учебных пособий по OpenGL, доступных в Интернете.

0 голосов
/ 12 апреля 2011

Насколько я понимаю, если вам нужна простая поддержка недавней версии OpenGL, вам придется покинуть Windows-Land, поэтому постарайтесь взять ее с ходу, когда начать работу ... сложно.

Я думаю, что OpenGL, вероятно, правильный выбор.Возможно, вы также захотите рассмотреть DirectX (который лучше поддерживается в Windows), но я лично не большой поклонник этого.Вы также можете изучать C # и использовать XNA, но если вы хотите изучать C ++, это просто побеждает цель.(Я также не могу не упомянуть, что есть хороший шанс, что вы могли бы сделать это достаточно быстро без C ++)

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

Что касается третьего абзаца, GLUT является старым (и в этом отношении также GLU), но если вы видитехороший учебник, который использует их, я не вижу ничего плохого с ними.Если у вас мокрые ноги, вы можете подумать о том, чтобы отказаться от GLUT и использовать SDL , который, как я считаю, гораздо более «живой».

Что касается GLEW, я использовал его с успехом, и было бы хорошо, если вы хотите сделать что-то необычное, например, шейдеры в Windows.Тем не менее, я бы сказал, что сначала не беспокойтесь об этом, потому что это увеличит время установки и не даст вам заняться забавой:)

...