OpenGL或Direct3D的新的Windows游戏项目? 或者是其他东西?

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

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

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

一些“如何开始”的链接将是有用的。 (无论是技术还是两者兼有)

编辑 – 是的,我真的意味着Direct3D,而不是DirectX,感谢graham.reeds澄清

编辑 – Mihai Lazar指出,我也可以使用像OGRE 3D这样的graphics引擎。 编辑这个问题来反映这个select。

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

完成一个游戏,即使它真的很愚蠢和简单,只是为了让你去,比选择正确的图书馆更重要。 随着过剩 ,你可以在一天内在屏幕上显示一些3D对象。 从NeHe的教程开始。

如果您愿意考虑使用C#,请仔细阅读XNA。 对于业余爱好项目,假设你想要的是实际上让一个游戏运行起来,而不是修改复杂的API代码,我不能推荐它足够高。 它已经越来越成熟,记录完备,与D3D / OpenGL相比,非常快速和易于使用。 作为一个奖金,每年$ 100的创意俱乐部会员资格,你甚至可以用它来开发Xbox 360的游戏。

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

因为它已经被抽象化,所以比学习更重的东西更安全更快。 再加上几个月之后,反正你会说3D术语。 还有一本书让你开始使用食人魔,现在我觉得它已经有点老了,但无论如何也是一个起点。

您必须记住,DirectX是一组技术 – 输入,音频和图形。 但是对于大多数人来说,DX与渲染器是同义的。

在我看来,D3D(或DirectGraphics)从DX8开始并没有那么辛苦。 我没有试过DX9或DX10。

伯纳德是正确的 – 尽量抽象。 尝试在对象类之外保持DX或OGL调用。

我没有以前的OpenGL,DirectX或视频游戏的经验,我已经做了一个开源的 Ogre3d 比赛视频游戏 。 是一个非常好的框架,开始在电子游戏:做得好的代码,大量的文档和信息在网络和非常好的启动教程 。

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

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

话虽如此,OpenGL将更容易开始编程。 由于Direct3D基于COM,因此其学习曲线陡峭。

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

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

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

使用Direct3D代替OpenGL的主要原因是,视频卡厂商通常只为OpenGL驱动程序做好“高端”卡。

低端游戏类型的卡往往变穷,通常是错误的驱动程序,导致您的最终用户的机器上的问题。

如果可移植性很重要的话,那么看看OpenGL或者Ogre就是一个很好的理由。

但是,如果你从来没有计划移植,那么专注于Direct3D,因为它是一个更广泛的稳定平台,具有更好的IHV驱动程序支持。

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

如果这个游戏至少是Linux的半发布的话,那么Linux社区似乎就会有很多的善意。

为了回答这个问题,需要更多关于你的信息:

  • 你的编程能力是什么?

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

如果你不想使用引擎,我会使用Direct3D,因为它比OpenGL更快。 我不想涉及所有问题,但在SIGGRAPH期间宣布了OpenGL3.0版本,并且大多数社区都对此非常失望。 Direct3D使您能够更好地利用可编程管道的着色器和其他用途。

如果你的编程能力不是太高,而你正在学习编程,那么我将从OpenGL开始,因为它更容易学习,网络上有更多的资源(请参阅http://nehe.gamedev.net for例)。

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

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

我已经完成了典型的“Hello World”应用程序,并且我比Open3D更喜欢Direct3D,但这只是我的看法。 你应该尝试两种,花一两天的时间学习和玩,然后自己决定。

你必须考虑你想要什么,因为这是一个业余爱好项目,我假设“学习的东西”将是体验的一个主要部分,所以避免挑选隐藏东西的东西,并在幕后做些事情因为这只会给你一小部分的图片。

我会用Direct3D,因为它有更好的支持,我觉得这个文档很容易阅读,并且有SDK附带的体面样本。 你甚至可以用这些样本作为基础来建立起来,如果你想得到一个开始,没有初始陡峭的学习曲线设置。

我从OpenGL开始备案,大约一个月之后,又进入了Direct3d(当时的第7版)。 我发现Direct3D迫使我更加意识到自己想要做什么以及如何设置,但是我更喜欢这个层次的理解。

重要的是,国际海事组织,无论选择哪种方式,都要一步一步,定期在屏幕上获取。 有什么不在屏幕上的原因(透明的,相机在对象内部等等)有各种各样的原因,所以通过采取婴儿的步骤,并定期展示的东西,你们都在验证事情仍然在前进,越来越一点视觉奖励。

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

首先,我们已经得到了OpenGL和Direct3D的维基百科比较 。

但我真的很想听听一些实际的观点,特别是根据OpenGL 3.0和DirectX 10的最新发展。

假设你知道你在做什么,那么抽象引擎的建议是好的。 为图形编写一个好的抽象层是很困难的,而不是已经完成了。

我建议你只选一个。 您可以轻松地从概念中获取足够的概念,以便您可以在抽象层或其他库上工作。 但是就这样做。 我真的不会太担心哪一个是正确的。 他们都是好的,坚实的表演者。 DX10(如果你有Vista)可能有更多的最新着色器模型的轻微优势,但对于现在开始的人来说,这是相当不相关的,我认为。 GL有一些好处,就是一些比较烦人的矩阵/向量数学运算对你来说是隐藏的,或者是为你提供的(尽管我认为DX也有这些)。

虽然OpenGL很容易开始,而且有些人已经写过了 – 在屏幕上显示一个三角形,然后移动到纹理上,粒子等可以在一天之内完成。

不过,我认为一个很好的问题是你最终的目标是什么。
如果它是一个简单的游戏,没有骨架动画,简单的3D – OpenGL绝对是答案。 如果你瞄准的方向更高,不想花时间从头开始研究所有的技术(或者去找免费的图书馆,把所有的东西放在一起),那么DX是一个不错的选择,我会选择DX9c,直到DX11出来。

如果你不介意和C ++以外的其他语言混淆,你也应该看看XNA开发环境 – 它变得相当成熟和良好。

同样,使用已有的引擎是很好的,如果你知道它会给你所需要的大部分,以合适的价格,并且节省你自己开发的时间,主要的问题是你需要去几个游戏引擎(食人魔,游戏工作室,扭矩等),然后根据有限的经验做出选择 – 在继续之前阅读尽可能多的休闲开发者的评论,然后尝试看看代码,如果你打算改变它。

希望它有帮助。

不要从Ogre开始。

从OpenGL GLUT (Win32)开始 ,还有一 两个 教程 。

只要你能移动到Win32,并看看这个网站 ,这是相当古老的,但仍然,相当不错。

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

如果你已经相当精通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上运行。

玩的开心!

Ogre3D是非常棒的,如果你想做跨平台编码,并且你想把所有的渲染都留给引擎。 OpenGL对于跨平台编码来说也非常棒,但是它也使得你可以完成所有无聊的部分 – 但是它提供了更好的控制。

如果您想将游戏移植到其他平台,我会避免使用DirectX。 规划未来。 与OpenGL相比,DirectX 10可能会提供一些优势,但是我真的不认为你会感觉到它们,除非你是一个专业的开发人员。 否则,如果你是亲微软,那么你应该使用XNA,因为作为一个业余开发者,你不需要DirectX提供的控制。

我现在使用OpenGL进行编码已经有相当长的一段时间了,现在用Ogre3D编写了几个月,我不能说我想要其他东西。 我最近得到了一本关于DirectX 7的书,我觉得它很杂乱。 也许事情改变了,但从我观察到的我没有找到DirectX,并通过外推Direct3D,有吸引力。

我的意见是,OpenGL是最好的。

OpenGL SuperBible:综合教程和参考是一个很好的参考。