Начиная с OpenGL и С++, правильный путь?

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

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

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

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

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

Ответ 1

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

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

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

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

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

О, и на всякий случай я не повторил его достаточно. УЗНАТЬ ШАГИ

Ответ 2

Лучший учебник - это (возможно, как "лучшее" ) Учебник nehe opengl. По крайней мере, этот учебник был предложен в течение многих лет.

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

Ответ 3

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

Ситуация с С++, безусловно, сложнее.

  • Glut: Это, в основном, ориентированная на OpenGL инфраструктура приложения. По-видимому, это было написано прежде всего для того, чтобы примеры были короткими, но все же работали. Первоначальная реализация имеет некоторые довольно известные ошибки, и не обновлялась более чем за десятилетие. Я бы использовал его только в первоначальном контексте: короткие образцы/примеры/демонстрации.
  • glaux: История здесь похожа на GLUT. У этого есть некоторые утечки памяти, которые были известны, но незафиксированы уже более десяти лет. В любом случае он никогда не был переносимым. Я бы полностью избежал этого.
  • GLEW/GLEE: они позволяют относительно легко использовать функции, добавленные в новых версиях OpenGL из реализаций OpenGL (например, Microsoft), которые не были обновлены, чтобы включать заголовки/библиотеки для непосредственного доступа к ним. Я предпочитаю Glee с небольшим отрывом, потому что он автоматически инициализирует себя, но оба работают нормально.
  • FreeGLUT: Это последнее обновление, и некоторые из ошибок были удалены. Тем не менее, он еще не сделал много для улучшения базового дизайна GLUT. Вероятно, лучший выбор для коротких демонстраций/образцов, но до сих пор нет (IMO), подходящих для серьезного использования.
  • Ogre3D: Это намного больше, чем любая из предыдущих библиотек. Это полномасштабная библиотека графа сцены, с загрузкой текстур, определенным форматом файла и т.д. Твердая библиотека, но имейте в виду, что если вы ее используете, вы обычно не будете использовать OpenGL напрямую (например, в Windows, это может рендеринг через OpenGL или Direct3D без изменения исходного кода).
  • OpengSceneGraph: чаще всего используется для научно ориентированных приложений, но наиболее близко сопоставимо с Ogre3D.
  • FLTK: небольшая, легкая графическая библиотека, которая работает поверх OpenGL.
  • GLFW: В том же общем духе, что и GLUT, но он был обновлен совсем недавно, не так много ошибок, и это (IMO) более приятный дизайн - минимальный, но все же подходящий для "реального" использования.

Ответ 4

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

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

Ответ 5

Я понимаю, что если вам нужна простая поддержка для последней версии OpenGL, вам придется покинуть Windows-land, поэтому постарайтесь сделать это шаг, когда начать... сложно.

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

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

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

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