我应该将什么3D图形框架用于真实世界的游戏引擎?

时间:2009-11-07 01:11:56

标签: c++ opengl directx sdl

我是一名C ++程序员,拥有丰富的服务器编程经验。然而,我现在很无聊,我决定解决一个新领域:3D游戏编程,用于学习目的。另外,如果我决定在这个领域工作,我认为这个学习项目可能会成为未来的好简历材料。

我没有从头开始创建一个3D引擎,而是决定仿效我现有的一个:魔兽世界。如果你对原因感到好奇(随意跳过这个):

  • 这是一个真实世界的成功游戏
  • 所有地图纹理,模型和尚未完成的内容(我对学习如何使用photoshop或其他任何方式绘制纹理不感兴趣)
  • 他们的文件格式或多或少完全是逆向工程
  • 如果我遇到麻烦,我可以查看一个相同的开源项目(wowmapview)。
好吧,这是一个很长的序言..现在,我的主要问题如下:我应该使用DirectX,OpenGL,sdl等包装库,还是什么?

现实世界中最常用的是什么?

而且,让我困惑的其他事情:魔兽世界似乎正在​​使用两者!实际上,通常它使用DirectX,但您可以通过命令行使用“-opengl”开关来使用opengl。

这在游戏中是常见的吗?他们为什么这么做?我想这是很多工作,根据我的理解,没有人使用OpenGL(很少有人知道秘密切换)。

如果通常是这样的话,那么程序员通常会创建自己的3d引擎“包装器”,比如内部制造的SDL,并基于switch / #defines / whatnot决定最终调用哪个API函数(DirectX或OpenGL)?或者这个功能是否已经内置在sdl中(您可以随意在DirectX和OpenGL之间切换)?

最后,你有任何书籍建议吗?

谢谢!

5 个答案:

答案 0 :(得分:32)

答案 1 :(得分:3)

我认为使用OpenGL而不是DirectX的主要好处是可移植性。 DirectX仅在Windows上运行。但是,这通常不是问题(许多游戏只能在Windows上运行)。

DirectX还提供了其他库,这些库对于与声音和输入等图形无关的游戏非常有用。我相信OpenGL经常使用等价物,但我不认为它们实际上是OpenGL本身的一部分。

如果您要使用DirectX锁定窗口并且您愿意/有兴趣学习C#和托管代码,我发现XNA是非常容易学习的平台。它允许您学习大多数概念,而无需处理DirectX(或OpenGL)的许多棘手细节。你仍然可以使用着色器代码并拥有DirectX的全部功能,但是在一个更友好的环境中。这将是我的推荐,但同样,你必须切换到C#(请注意,你也可以把它放在你的简历上)。

答案 2 :(得分:1)

您可能希望查看一些项目,这些项目将低级别的3d api封装在一个独立于api的高级接口中,例如Ogre3D。当你这样做学习时,我认为你自己实现低级细节可能会更有趣,但是你可以从这样的项目中学到很多东西。

答案 3 :(得分:0)

我正在做一些OpenGL工作(在Windows和Mac上)。

与使用Unity3D引擎的午夜游戏编程相比,使用OpenGL有点像砍掉自己的树来建造房子而不是购买材料。

Unity3D在所有(Mac,PC和iPhone,网络播放器等)上运行,让您专注于制作游戏,游戏的内容。最重要的是,它比我能写的任何东西都要快。您可以使用C#, Java (编辑:使 JavaScript )或 Boo 对其进行编码。 (编辑:Boo支持已被删除)

我刚刚使用Unity为想要在OpenGL中制作的东西的客户模拟了一个演示,因此它也具有现实世界的用途。

-Chris

PS:Unity Indie版本最近免费。

答案 4 :(得分:0)

如果你真的只对渲染部分感兴趣,我可以建议ogre3d。它是干净的,c ++,经过测试和跨平台的。我在两个项目中使用它并与其他经验相比(例如,torque3d),我喜欢良好的支持(教程/维基/论坛)和不那么陡峭的学习曲线。我认为有人也可以通过查看他们在设计中使用的源代码和概念来学到很多东西。还有一本随附的书,虽然有点过时,但它有利于开始

问题在于,你会想到这个引擎内部很快就会需要类似游戏玩法(计时器,事件)元素来模拟和测试你的效果或者你想做什么。因此,您最终将解决ogre3ds的缺点(它不是游戏引擎)并自行实现或使用其他中间件。

所以如果你真的想先触摸3d渲染,我会拿一些计算机图形书(gpu gems,shaderx),在网上看一些教程和演示,然后开始构建我自己的基本框架。这是为了体验,我想你会从这种方法中学到最多。至少我做了......