10

我正在 Windows 上开始一个爱好游戏项目,它将大量使用 3D 图形效果。它很可能是用 C++ 编写的。

我应该为我的图形后端使用 OpenGL 还是 Direct3D?为什么?

还是应该使用现成的图形引擎,例如OGRE 3D?哪一个?

一些“如何开始”链接会很有用。(在任何一种技术上,或两者兼而有之。)

编辑- 是的,我真的是指 Direct3D,而不是 DirectX,感谢graham.reeds的澄清

编辑- Mihai Lazar指出我还可以使用 OGRE 3D 等图形引擎。编辑了问题以反映这种选择。

4

20 回答 20

14

从 OpenGL 开始,因为上面有很好的教科书和其他在线参考资料。一旦你掌握了编写 3D 游戏的窍门,你就可以自己做出判断了。

完成一个游戏,即使它真的很愚蠢和简单,也比选择正确的库更重要。使用glut,您可以在一天内让一些 3D 对象显示在您的屏幕上。从NeHe的教程开始。

于 2008-09-02T09:32:30.920 回答
8

如果您愿意考虑 C#,请好好看看 XNA。对于爱好项目,假设您想要真正启动并运行游戏而不是修补复杂的 API 代码,我不能高度推荐它。它越来越成熟,文档齐全,并且与 D3D/OpenGL 相比,非常快速且易于使用。作为奖励,拥有 100 美元/年的 Creators Club 会员资格,您甚至可以使用它为 Xbox 360 开发游戏。

于 2008-09-17T17:46:38.250 回答
7

你也可以将你的工作建立在ogre上,他们自己提供抽象,而且他们有非常好的工具。因为这是一个已经存在超过 6 年的项目,我认为。基础库并不适合初学者,因为您需要了解一些软件设计知识,但我发现很多人都使用它编写过游戏。

它比学习更重的东西更安全,更快捷,因为它已经被抽象了。再加上几个月后,无论如何你都会谈论 3D 行话。还有一本书可以让你开始使用 Ogre,我认为它现在有点老了,但无论如何都是一个起点。

于 2008-09-02T10:37:30.950 回答
4

您必须记住 DirectX 是一组技术 - 输入、音频和图形。然而,对于大多数人来说,DX 是渲染器的代名词。

在我看来,自 DX8 以来,D3D(或 DirectGraphics)并没有那么难。我还没有尝试过 DX9 或 DX10。

伯纳德是对的——尽量抽象。尝试将 DX 或 OGL 调用保留在对象类之外。

于 2008-09-02T10:39:14.300 回答
3

我没有以前的 OpenGL、DirectX 或视频游戏经验,我用Ogre3d制作了一个开源竞赛视频游戏。是一个非常好的开始视频游戏的框架:代码做得很好,网上有大量的文档和信息,还有非常好的入门教程

渲染引擎与 DirectX/OpenGl 无关,您可以稍后选择使用 OpenGL 或 DirectX 渲染您的游戏(无需更改代码)

于 2008-09-16T21:39:09.570 回答
2

我在大学完成了关于 OpenGL 与 Direct3D 比较的论文。Direct3D 的真正好处是它有一个定期的发布时间表——它总是被更新以利用图形硬件的最新进展。OpenGL 2.0 和 3.0 版本之间花了多长时间?此外,在 OpenGL 的扩展方面已经做了很多工作,这意味着只有一些渲染可以在某些卡上工作。

话虽如此,OpenGL 将更容易开始编程。由于 Direct3D 主要基于 COM,因此它有一个陡峭的学习曲线。

如果是我,我会选择 DirectX 而不是 OpenGL。这是以非平台独立性为代价的。

于 2008-09-02T09:40:36.767 回答
2

最好的办法是尽可能多地抽象渲染器,以尽可能轻松地移植到其他技术。

于 2008-09-02T10:08:01.660 回答
2

对于您描述的情况,我会推荐 Direct3D。

使用 Direct3D 而不是 OpenGL 的主要原因是视频卡供应商通常只为他们的“高端”卡做好 OpenGL 驱动程序。

低端游戏类型的卡往往会得到较差的驱动程序并且通常有错误的驱动程序,从而导致最终用户的机器出现问题。

如果可移植性很重要,那么这将是改用 OpenGL 或 Ogre 的一个重要原因。

但是,如果您从不打算移植,那么请专注于 Direct3D,因为它是一个更广泛稳定的平台,具有更好的 IHV 驱动程序支持。

于 2008-09-16T00:16:46.300 回答
1

我真的同意那些告诉你学习 Ogre3D 的观点。你说你会使用 C++,所以 Ogre3D 是一个不错的选择。XNA 使用 C#,除了学习 XNA 之外,您还必须了解它与 C++ 之间的区别。另外XNA既不是开源也不是跨平台的,所以如果你想对游戏开发有更广泛的了解,我建议先学习SDL,然后再学习Ogre3D。

于 2008-09-21T23:22:05.607 回答
1

您应该考虑的是平台独立性的决定。您想将您的游戏绑定到 Windows,还是想在某个时候将其发布到 Mac OS X 或 Linux。如果您决定将来要支持 Linux、OS X,则需要使用 OpenGL。

如果游戏至少为 Linux 发布了半个版本,那么 Linux 社区似乎有很多善意。

于 2008-09-12T18:52:11.910 回答
1

要很好地回答这个问题,需要更多关于您的信息:

  • 你的编程能力是什么?

如果它很高,我可能会从 Ogre(最好的严格渲染开源引擎,恕我直言)或其他开源游戏引擎,如 Delta3D,如果你想要游戏引擎带来的附加功能(声音、物理等) .

如果您不想使用引擎,我会使用 Direct3D,因为它的更新速度比 OpenGL 快得多。我不想讨论所有的问题,但是 OpenGL 的 3.0 版是在 SIGGRAPH 期间宣布的,社区中的大多数人对此感到非常失望。Direct3D 使您能够更好地利用着色器和可编程管道的其他用途。

如果你的编程能力不是太高,而你这样做是为了学习编程,我会从 OpenGL 入手,因为它更容易学习,而且网上有更多的资源(参见http://nehe.gamedev.net例子)。

于 2008-09-16T00:04:21.430 回答
1

我的理解是,在 Direct3D 中,您必须自己处理所有资源分配和管理,而 OpenGL 规范将其留给驱动程序/实现而不是应用程序。

这允许 Direct3D 开发人员使用适合应用程序的最佳分配和管理方法,但也是额外的工作。

我在每个应用程序中都完成了典型的“Hello World”应用程序,我更喜欢 OpenGL 而不是 Direct3D,但这只是我的看法。您应该尝试两者,花一两天时间学习和玩耍,然后自己决定。

于 2008-09-16T00:18:07.607 回答
0

不要从食人魔开始。

从 OpenGL GLUT (Win32)和一两个教程开始。

只要您可以转移到 Win32并查看这个站点,该站点现在已经很老了,但仍然非常好。

于 2009-06-07T15:53:54.257 回答
0

首先,我们有OpenGL 和 Direct3D 的 Wikipedia 比较

但我真的很想听听一些实际的观点,尤其是考虑到 OpenGL 3.0 和 DirectX 10 的最新发展。

于 2008-09-02T09:34:31.350 回答
0

虽然 OpenGL 到目前为止很容易开始并且正如一些人已经写过的那样 - 在屏幕上显示一个三角形,然后从那里移动到纹理,粒子等等可以在一天内完成。

然而,我确实认为一个很好的问题是你的最终目标是什么。
如果是简单的游戏,没有骨骼动画,简单的 3D - OpenGL 绝对是答案。如果您的目标更高,并且不想花时间从头开始开发所有技术(或者去寻找免费库并将所有东西放在一起),那么 DX 是一个不错的选择,我会选择 DX9c 直到 DX11 出来。

如果您不介意使用 C++ 以外的其他语言,您还应该看看 XNA 开发环境——它变得非常成熟和优秀。

同样,如果您知道它会以合适的价格为您提供大部分所需的东西,并且可以节省您自己开发它的时间,那么使用现有的引擎也很好,主要问题是您需要浏览多个游戏引擎(Ogre、Game Studio、Torque 等),然后根据有限的经验做出选择 - 在继续之前尽可能多地阅读休闲开发者的评论,并尝试查看代码,如果你打算改变它。

希望它有所帮助。

于 2008-09-15T18:22:14.077 回答
0

假设您知道自己在做什么,那么抽象引擎的建议是好的。如果没有完成,很难为图形编写一个好的抽象层。

我建议你只选择一个。您可以轻松地从任何一个库中获取概念——足以让您有可能在抽象层上工作,或者从其他库中轻松地获取这些概念。但只要去做。我真的不会太担心哪个是正确的。他们都是优秀的,稳定的表演者。DX10(如果你有 Vista)可能具有更新着色器模型的轻微优势,但对于现在开始的人来说,我认为这无关紧要。GL 的优势在于,一些更复杂的矩阵/向量数学运算要么对您隐藏,要么为您提供(尽管我认为 DX 也有其中一些。)

于 2008-09-12T18:43:12.680 回答
0

你必须考虑你想从中得到什么,因为这是一个爱好项目因为这只会给你图片的一小部分。

我会选择 Direct3D,因为它有更好的支持,我发现文档易于阅读,并且 SDK 附带了不错的示例。如果您想在没有初始陡峭的学习曲线的情况下快速开始,您甚至可以使用这些示例作为构建的基础。

我从 OpenGL 开始记录,大约一个月后进入 Direct3d(当时的版本 7)。我发现 Direct3D 迫使我更清楚自己想要做什么以及如何设置,但我更喜欢这种理解水平。

重要的是,IMO,无论您选择哪种方式,一步一步地进行,并定期在屏幕上显示内容。某些东西不在屏幕上的原因有很多(它是透明的,相机在物体内部,等等......)所以通过采取婴儿步骤并让东西定期显示,你既可以验证东西仍在移动并得到一点视觉奖励。

于 2008-09-17T18:01:17.183 回答
0

很明显,从您收到的回复来看,您可以合理地从 D3D 或 OpenGL 开始用于您的 3D 图形 API。已经使用这两种技术开发了 3A 游戏标题,它们都有自己的长处和短处。

如果您已经相当精通 C++,任何一个都可以,但是在您的选择中还有许多其他考虑因素:

  • 可移植性:OpenGL(和 OpenGL ES)可用于 Windows、Linux、OS X、iOS、Android 和其他系统。D3D/DirectX 只将您锁定在 MS 平台上。
  • 游戏输入:在 DirectX 中,DirectInput API 让您可以访问控制器。OpenGL 在这里没有等价物。
  • 声音:DirectAudio 支持声音,OpenGL 没有对应的(但经常使用 OpenAL)
  • 物理:根据您的游戏需求,您可能需要一些高级物理模拟

通常,实际的“游戏玩法”重点是 AI、战斗、故事情节等。

如果您仍在攀登 C++ 学习曲线(值得,但需要一些时间),您可以改用 C# 和OpenTK。这将为您提供像 Ogre 这样的“游戏框架”的好处,合理地直接访问 OpenGL,以及为游戏逻辑使用托管代码(和 IDE)的显着好处。OpenTK 通过 Mono 跨平台,因此您的代码也可以在 OS X 和 Linux 上运行。

玩得开心!

于 2011-06-25T01:52:34.533 回答
-1

如果您想要进行跨平台编码并且想要将所有渲染留给引擎,Ogre3D 非常棒。OpenGL 也非常适合跨平台编码,但它也让你完成所有无聊的部分——但它提供了更好的控制。

如果您想将游戏移植到其他平台,我会避免使用 DirectX。为未来做计划。与 OpenGL 相比,DirectX 10 可能提供一些优势,但我真的认为除非您是专业开发人员,否则您不会感受到这些优势。否则,如果您是 Microsoft 的拥护者,则无论如何都应该使用 XNA,因为作为业余开发人员,您不需要 DirectX 提供的控制。

我用 OpenGL 编码已经有一段时间了,现在用 Ogre3D 编码了几个月,我不能说我想要别的东西。我最近有一本关于 DirectX 7 的书,我认为它很乱。也许事情发生了变化,但从我的观察来看,我没有发现 DirectX,并且通过外推 Direct3D 具有吸引力。

于 2008-11-29T18:27:52.813 回答
-4

我的观点是 OpenGL 是最好的。

OpenGL SuperBible: Comprehensive Tutorial and Reference是一个很好的参考。

于 2011-06-25T01:17:36.750 回答