Я хочу сделать простую 3D игру с помощью openGL, где я должен запустить?

Да, это будет работать, , если и только если деструктор базового класса является виртуальным, который Вы сделали для Base базовый класс, но не для IFoo базовый класс. Если деструктор базового класса является виртуальным, то, когда Вы звоните operator delete на указателе базового класса, он использует динамическую отправку, чтобы выяснить, как удалить объект путем поиска деструктора производного класса в таблице виртуальной функции.

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

6
задан obsoleteModel81 28 September 2009 в 09:08
поделиться

11 ответов

Не зная вашего начального уровня навыков, я предлагаю вам взглянуть на Ogre3D . Это полноценный движок 3D-рендеринга с действительно чистым интерфейсом для работы, легко расширяемый и, что самое главное, он достаточно многоплатформенный, работает в Windows, Linux и Mac OS X. Приведенные примеры и учебные пособия довольно понятны.

Если вы хотите написать свой собственный движок только для OpenGL полностью с нуля, Ogre3D может не подойти ...

4
ответ дан 8 December 2019 в 13:00
поделиться

Если вы хотите изучить OpenGL, я рекомендую начать с « OpenGL Red Book », а затем просмотреть образцы NeHe . Red Book бесплатен, по крайней мере, в онлайн-формате HTML, есть также загружаемые PDF-файлы.

Однако Red Book и NeHe научат вас в основном тому, как использовать OpenGL; Написание игр - это искусство, и здесь слишком много того, что нужно объяснять, слишком много, чтобы учиться, и слишком много, чтобы читать об этом. Вот только подсказка.

Это базовая структура большинства игр. Надеюсь, это поможет с основами. Конечно, это не полная игра, она не запускается и сильно зависит от того, как вы что-то делаете, но она должна дать вам общее представление.

void update(float k)
{
  // k == time in seconds since last update; e.g. 0.02
  ship.y += ship.speed_y*k;
}
int main()
{
   while(1)
   {
      if(hasEvents())
      {
        event_t evt;
        getEvent(&evt);
        if (evt.type == keypress && evt.key==down) 
        {
           ship.speed_y=1;
        }
      }
      paint();
      new_ticks = get_ticks();
      update((new_ticks - old_ticks)/1000.);
      old_ticks = new_ticks;
   }
}
4
ответ дан 8 December 2019 в 13:00
поделиться

Пара замечаний, некоторые из которых уже были сделаны:

  • The OpenGL Redbook . Отличное место для начала. В книгу было внесено несколько исправлений, поэтому бесплатная онлайн-версия для сравнения немного устарела.
  • GameDev.net . Это прекрасный ресурс для разработчиков с любым опытом, и на форумах у них много талантливых людей. Они ответили на вопрос: «Я хочу сделать игру, с чего мне начать?» много, много раз.
  • Я не рекомендую NeHe. Я считаю, что тамошние учебные пособия чаще всего сбивают с толку новичков. Учебные пособия показывают «как», но очень мало объясняют решающее почему .

Разработка игр - это огромная многогранная дисциплина. Это сложно, даже если у вас очень хорошие математические навыки и навыки программирования.

Два совета:

  • Начните с малого. Начни с малого. Начни с малого. Вы можете подумать, что ваша цель довольно скромная, но она потребует гораздо большего, чем вы можете себе представить.
  • Избегайте соблазна вырезать и вставить пример кода. Вы обманете себя из-за критического понимания.
3
ответ дан 8 December 2019 в 13:00
поделиться

NeHe

Этот сайт помог мне больше всего, когда я изучал opengl.

2
ответ дан 8 December 2019 в 13:00
поделиться

Понятия не имею, сколько у вас опыта в программировании игр, но я бы начал с чего-то более ограниченного.

Начните с игры на основе 2-мерных плиток (Сокобан и т. Д.) - их относительно легко написать - что-то, где объекты всегда находятся точно на плитке, что делает вещи довольно тривиальными.

Как только вы усвоите принципы этого, игровой цикл, тайминги, обработка пользовательского ввода, модель данных , рендерер и т. д., тогда вы можете сделать что-то более сложное.

Затем вы можете попробовать что-то вроде "Asteroids", для которого потребуется некоторая векторная математика 2d, моделирующая интертия (т.е. интеграция), возможно, немного триггера. и система столкновений, не основанная на плитках.

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

1
ответ дан 8 December 2019 в 13:00
поделиться

Я бы посмотрел на www.gamedev.net , он содержит несколько отличных руководств для новичков, а на форумах вы найдете множество информация по любой теме, связанной с программированием игр.

1
ответ дан 8 December 2019 в 13:00
поделиться

Во-первых, вам следует подумать о структуре вашего кода. В каждой игре когда-либо были некоторые варианты следующего:

int main()
{
   Screen::Init();
   Game::Init();

   while (Game::isrunning)
   {
      Game::Update();
      Screen::Render();
   }

   Game::Shutdown();

   return 0;
}

Остальное просто становится деталью реализации. Попробуйте взглянуть на SDL, он обрабатывает множество неприятных вещей программирования Windows (инициализация окна, загрузка OpenGL и т. Д.), Поэтому вы можете сосредоточиться на написании своей игры.

1
ответ дан 8 December 2019 в 13:00
поделиться

Да, поищите уроки в Интернете. Да, потусуйтесь на GameDev.net. Да, NeHe сбивает с толку и специализирован.

Для OpenGL я бы объединил способность OpenGL SuperBible , чтобы узнать о контексте и возможностях OpenGL, с добрым старомодным поиском Google.

Также полезно знать кого-то, кто может время от времени помогать вам. На GameDev.net есть чаты, и люди дружелюбны.

0
ответ дан 8 December 2019 в 13:00
поделиться

Во-первых, я не рекомендую использовать OpenGL для вашей первой игры, особенно если вы никогда раньше не программировали. Вам следует серьезно подумать о более новых и простых методах, таких как XNA с C #.

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

Если у вас есть никогда раньше не занимался программированием, я рекомендую в качестве начального проекта попробовать создать очень простую игру, такую ​​как Pong или Tic Tac Toe. Я думаю, вы получите хорошее представление о разработке игр в целом. Оттуда вы можете начать свой настоящий проект, основываясь на опыте, который вы приобрели при создании Pong.

Наконец, главный совет, который я могу дать вам, когда вы путешествуете по поиску, - никогда не сдаваться, несмотря на какие препятствия вы столкнетесь при создании своей игры.

Удачи!

1
ответ дан 8 December 2019 в 13:00
поделиться

Я должен предупредить об использовании nehe, потому что многие люди рекомендовали его. (У меня нет учетной записи, чтобы делать комментарии, извините)

В основном потому, что он только показывает, как что-то делать с фиксированным конвейером вместо шейдеров. Первые несколько руководств могут подойти, чтобы получить представление о том, как получить что-то на экране. Но не тратьте свое время, например, на изучение того, как активировать альфа-смешивание и настройку освещения для фиксированного конвейера, потому что, если вы хотите сделать что-то, что не похоже на игру 1999 года, вам придется заново учиться, как это сделать. все это снова, но с шейдерами. Лучше изучить новый путь с самого начала, имо.

1
ответ дан 8 December 2019 в 13:00
поделиться

Если вам нужен opengl, но с простотой Python - что было бы неплохо, чтобы сначала понять принцип API - посмотрите обертки: http://pyopengl.sourceforge.net/

Они совместимы с последней версией opengl, и их разработка ведется довольно активно.

0
ответ дан 8 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

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