我想用openGL做一个简单的3D游戏,我应该从哪里开始?

时间:2009-09-28 09:08:03

标签: opengl 3d modeling

我发现我通过榜样学得最好。是否有一个很好的网站或代码库来展示事件处理,碰撞检测,建模和基本3D绘图的工作原理?

我试图开始的游戏是一个简单的赛车游戏,用户控制一个小型太空船,并通过航道,小行星领域,太空殖民地和各种其他障碍物(我知道,真正的原始)进行导航。运动有三个方面。游戏应该知道航天飞机何时遇到障碍物。 定义的轨道,就像大多数赛车游戏(电路和线性路径)一样。

按箭头键可使方向矢量适当旋转。此外,例如,当用户按下空格键时,船应该使用类似加力燃烧器的东西。上下移动也是一种选择。

11 个答案:

答案 0 :(得分:4)

不知道你的初始技能水平我建议你看一下Ogre3D。它是一个完整的3D渲染引擎,具有非常干净的界面,易于扩展,最重要的是,它可以在Windows,Linux和Mac OS X上进行多平台工作。提供的示例和教程非常自我解释。 / p>

如果您想从头开始编写自己的OpenGL-only引擎,Ogre3D可能无法遵循...

答案 1 :(得分:4)

如果您想学习OpenGL,我建议以“OpenGL Red Book”开头,然后查看NeHe's samples。红皮书至少是免费的在线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;
   }
}

答案 2 :(得分:3)

一些注释,其中一些已经说明:

  • The OpenGL Redbook。一个很好的起点。这本书有几个版本,所以免费在线版本有点过时了。
  • GameDev.net。对于所有经验的开发人员来说,它们都是一个很好的资源,他们在论坛上有很多有才华的人。他们回答了这个问题:“我想制作一款游戏,我该从哪里开始?”很多,很多次。
  • 我不推荐NeHe。我发现那里的教程往往会混淆一个新手。教程显示“如何”,但很少解释关键的为什么

游戏开发是一个庞大的多方面学科。即使你有非常扎实的数学和编程技能,这也很有挑战性。

两条建议:

  • 从小处开始。从小处开始。从小处开始。你可能认为你的目标非常适中,但它会比你想象的要多得多。
  • 避免剪切和粘贴示例代码的诱惑。你会因为重要的理解而欺骗自己。

答案 3 :(得分:2)

NeHe

当我学习opengl时,这个网站帮助了更多。

答案 4 :(得分:1)

我不知道你有多少游戏编程经验,但我会从一些有限的东西开始。

从2d基于平铺的游戏(推箱子等)开始 - 它们相对容易编写 - 对象总是精确地放在平铺上,这使得事情变得非常简单。

一旦你掌握了原理,游戏循环,计时,处理用户输入,数据模型,渲染器等,你就可以做更多的事情。

然后你可以尝试类似“小行星”的东西,它需要一些2d矢量数学,建模intertia(即积分)可能有点触发。和非基于瓦片的碰撞系统。

一旦你得到那个舔,那么你可以尝试一些3D - 这会使事情变得更加复杂,数学方面。

答案 5 :(得分:1)

我会浏览www.gamedev.net,它包含一些针对初学者的优秀教程,在论坛中,您可以找到有关游戏编程相关主题的大量信息。

答案 6 :(得分:1)

首先,您应该考虑代码的结构。每场比赛都有以下几种变化:

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

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

   Game::Shutdown();

   return 0;
}

其余的只是一个实现细节。尝试查看SDL,它处理Windows编程的许多讨厌的事情(初始化窗口,加载OpenGL等),这样你就可以专注于编写游戏。

答案 7 :(得分:1)

我必须发出使用nehe的警告,因为很多人都推荐过它。(没有帐号可以发表评论,抱歉)

主要是因为它只显示了如何使用固定管道而不是着色器进行操作。前几个教程可能没问题就是如何在屏幕上获取内容。但是不要浪费你的时间,例如学习如何激活alpha混合和为固定管道设置照明,因为如果你想做一些看起来不像1999年的游戏,你将不得不重新学习如何做所有这些东西,但与着色器。最好从imo开始学习新方法。

答案 8 :(得分:1)

首先,我不建议您在第一场比赛中使用OpenGL,特别是如果您之前从未编程过。您应该强烈考虑使用C#等XNA的更新更简单的方法。

其次,和OpenGL一样,XNA在互联网上也有大量的教程,我相信你会发现它们非常有用。

如果您以前从未完成过编程,我建议您作为一个开始项目,尝试创建一个非常简单的游戏,如Pong或Tic Tac Toe。我认为你会对游戏开发有一个很好的感觉。从那里,你可以从你通过创建Pong获得的经验开始你的实际项目。

最后,无论您在制作游戏时遇到什么样的障碍,我在你的任务中冒险时可以给你的主要建议就是永不放弃。

祝你好运! ^^

答案 9 :(得分:0)

是的,在线查找教程。是的,在GameDev.net上闲逛。是的,NeHe令人困惑和专业。

对于OpenGL,我会结合OpenGL SuperBible's能力,让人们了解OpenGL的背景和可能性以及老式的谷歌搜索。

了解可以不时帮助您的人也很有帮助。 GameDev.net有聊天室,人们很友好。

答案 10 :(得分:0)

如果你想要opengl但是有了python的简单性 - 最初可以很好地理解API的原理 - 查看包装器:http://pyopengl.sourceforge.net/

它们与最新版本的opengl兼容,并且它们的开发非常活跃。