对于真实世界的游戏引擎,我应该使用什么样的3D图形框架? 我是一个C++程序员,有丰富的服务器编程经验。然而,我现在相当无聊,我决定攻克一个新领域:3D游戏编程,用于学习目的。此外,如果我决定在这个领域工作,我认为这个学习项目可能会成为未来很好的简历材料

对于真实世界的游戏引擎,我应该使用什么样的3D图形框架? 我是一个C++程序员,有丰富的服务器编程经验。然而,我现在相当无聊,我决定攻克一个新领域:3D游戏编程,用于学习目的。此外,如果我决定在这个领域工作,我认为这个学习项目可能会成为未来很好的简历材料,c++,opengl,directx,sdl,C++,Opengl,Directx,Sdl,我没有从头开始创建一个3D引擎,而是决定尽可能地模仿现有的引擎:魔兽世界。如果您对原因感到好奇(请跳过此项): 这是一个真实世界的成功游戏 所有的贴图纹理、模型和未完成的东西(我不想学习如何使用photoshop或其他工具绘制纹理) 他们的文件格式或多或少完全被逆向工程了 已经有一个相同的开源项目(wowmapview),如果遇到麻烦,我可以查看它 好的,那是一篇很长的序言。。现在,我的主要问题是:我应该使用DirectX、OpenGL、包装库(如sdl)还是什么? 现实世界中最常用的是什么

我没有从头开始创建一个3D引擎,而是决定尽可能地模仿现有的引擎:魔兽世界。如果您对原因感到好奇(请跳过此项):

  • 这是一个真实世界的成功游戏
  • 所有的贴图纹理、模型和未完成的东西(我不想学习如何使用photoshop或其他工具绘制纹理)
  • 他们的文件格式或多或少完全被逆向工程了
  • 已经有一个相同的开源项目(wowmapview),如果遇到麻烦,我可以查看它
好的,那是一篇很长的序言。。现在,我的主要问题是:我应该使用DirectX、OpenGL、包装库(如sdl)还是什么?

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

还有一件事让我感到困惑:魔兽世界似乎在两者兼用!事实上,它通常使用DirectX,但您可以通过命令行以“-opengl”开关启动它来使用opengl

这在游戏中常见吗?他们为什么这么做?我想这需要大量的工作,据我所知,没有人使用OpenGL(很少有人知道这个秘密开关)

如果这是通常要做的事情,那么程序员通常会创建自己的3d引擎“包装器”吗?类似于内部制作的SDL,并且基于开关/#定义/什么来决定最终调用哪个API函数(DirectX或OpenGL)?或者这个功能已经内置在sdl中了(您可以随意在DirectX和OpenGL之间切换)

最后,你有什么书可以推荐吗


谢谢

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

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


如果您打算使用DirectX锁定windows,并且愿意/有兴趣学习C#和托管代码,我发现XNA是一个非常容易学习的平台。它允许您学习大多数概念,而无需处理DirectX(或OpenGL)的许多非常棘手的细节。您仍然可以使用着色器代码,并拥有DirectX的全部功能,但环境要友好得多。这将是我的建议,但再一次,你必须切换到C#(提醒你,你也可以在你的简历上写上)。我知道你已经接受了答案,但我认为这值得更多的评论。很抱歉引用你的话,我的回答是我认为重要的

我没有从头开始创建一个3D引擎,而是决定尽可能地模仿现有的引擎:魔兽世界

然而,我想专注于实际的3d和渲染引擎,而不是界面,所以我不认为我会在这个项目中使用它[lua]

从这两个片段中,我可以告诉您,您并没有试图模仿游戏引擎。只需3D渲染后端。这是不一样的事情,渲染后端部分是非常小的一部分相比,完整的游戏引擎

顺便说一下,这有助于回答您的一个问题:

魔兽世界似乎两者都在使用!事实上,它通常使用DirectX,但您可以通过命令行以“-opengl”开关启动它来使用opengl

是的,他们都实施了。这样做的工作量是不容忽视的,但根据我的经验,渲染后端最多占总代码的10%,通常更少。所以实现多个并不是那么令人沮丧

更重要的是,如今游戏引擎的编程部分并不是最大的部分。这是大量的资产生产(包括大多数游戏编程。大多数lua脚本都是在这方面考虑的,例如)

对于WoW来说,OSX支持意味着OpenGL。所以他们做到了。他们也想支持旧的硬件。。。因此,它们支持DX8级硬件。已经有3个后端了。我不知道他们实际实现了多少,但归根结底,这取决于他们想要达到的客户群

游戏引擎中的多个后端或多或少需要扩展到所有图形卡/操作系统/平台。我还没有见过一个真正的游戏引擎不支持多个后端(即使是第一方游戏也倾向于支持另一个后端进行调试)

好的,那是一篇很长的序言。。现在,我的主要问题是:我应该使用DirectX、OpenGL、包装库(如sdl)还是什么

这很大程度上取决于你想从中得到什么。我想补充一点,您的选项列表并不完整:

  • DirectX9
  • DirectX10
  • DirectX11
  • OpenGL<3.1(在删除不推荐的API之前)
  • OpenGL>=3.1
  • OpenGL ES 1.1(仅在需要时使用。它不可编程)
  • OpenGLES2.0
是的,这些API非常不同,您需要决定要处理哪些API

如果您想学习3D渲染的基础知识,任何一个都可以。OpenGL<3.1倾向于隐藏许多最终必须在用户代码中发生的事情(例如,矩阵操作,请参阅)

DX SDK提供了很多帮助理解基本概念的示例,但它们也倾向于使用最新和最伟大的特性