我正在Windows上开始一个爱好游戏项目,它将大量使用3D图形效果。它很可能是用C ++编写的。
我应该在我的图形后端使用OpenGL或Direct3D吗?为什么呢?
或者我应该使用现成的图形引擎,例如OGRE 3D?哪一个?
一些“如何开始”链接会很有用。 (关于任一技术,或两者兼而有之。)
修改 - 是的我真的是指Direct3D,而非DirectX,感谢graham.reeds澄清
编辑 - Mihai Lazar指出我还可以使用像OGRE 3D这样的图形引擎。编辑了这个问题以反映这种选择。
答案 0 :(得分:14)
从OpenGL开始,因为它上面有很好的教科书和其他在线参考资料。一旦你开始编写3D游戏,你就可以自己做出判断。
完成一个游戏,即使它真的很愚蠢而且只是为了让你前进,比选择合适的图书馆更重要。使用glut,您可以在一天内将一些3D对象显示在屏幕上。从NeHe的教程开始。
答案 1 :(得分:8)
如果您愿意考虑使用C#,请仔细看看XNA。对于业余爱好项目,假设您想要的是实际启动和运行游戏而不是修补复杂的API代码,我不能高度推荐它。它越来越成熟,文档齐全,与D3D / OpenGL相比,非常快速和易于使用。作为奖励,凭借每年100美元的创作者俱乐部会员资格,您甚至可以使用它为Xbox 360开发游戏。
答案 2 :(得分:7)
你也可以将你的工作建立在ogre上,他们自己提供抽象,他们有非常好的工具。由于这是一个已经存在超过6年的项目,我认为。基础库并不是真正适合初学者,因为你需要了解一些软件设计,但我发现很多人都使用它来编写游戏。
它比学习更重的东西更安全,更快,因为它已经被抽象化了。再过几个月你就会说3D术语。还有一本书可以帮助你开始使用Ogre,我认为它现在已经有点老了,但无论如何都是一个起点。
答案 3 :(得分:4)
您必须记住,DirectX是一系列技术 - 输入,音频和图形。然而,对于大多数人来说DX是渲染器的同义词。
在我看来,自DX8以来,D3D(或DirectGraphics)并没有那么难。我没有尝试过DX9或DX10。
伯纳德是对的 - 尽可能地抽象。尝试将DX或OGL调用保留在对象类之外。答案 4 :(得分:3)
我没有以前的OpenGL,DirectX或视频游戏体验,我已经open source race videogame与Ogre3d。是一个非常好的框架,从电子游戏开始:做得好的代码,大量的docs和网络中的信息very good starting tutorials。
渲染引擎与DirectX / OpenGl无关,您可以稍后选择使用OpenGL或DirectX渲染您的游戏(无需更改代码)
答案 5 :(得分:2)
我在uni上做了关于OpenGL与Direct3D比较的论文。 Direct3D的真正好处在于它具有定期发布时间表 - 它始终在更新以利用图形硬件的最新进展。在OpenGL 2.0和3.0版本之间花了多长时间?此外,在OpenGL的扩展方面已经做了很多工作,这意味着只有一些渲染可以在某些卡上使用。
话虽如此,OpenGL将更容易开始编程。由于Direct3D主要基于COM,因此它具有陡峭的学习曲线。
如果是我,我会选择DirectX而不是OpenGL。这是以非平台独立为代价的。
答案 6 :(得分:2)
最好的办法是尽可能地抽象渲染器,尽可能轻松地移植到其他技术。
答案 7 :(得分:2)
对于您描述的情况,我建议使用Direct3D。
使用Direct3D而不是OpenGL的主要原因是,视频卡供应商通常只能在OpenGL驱动程序上为其“高端”卡做得很好。
低端游戏类型的卡往往会变得很差,并且通常会有错误的驱动程序,从而导致最终用户的计算机出现问题。
如果可移植性很重要,那么这将是查看OpenGL或Ogre的重要原因。
但如果您从未计划移植,那么请关注Direct3D,因为它是一个更广泛稳定的平台,具有更好的IHV驱动程序支持。
答案 8 :(得分:1)
你应该考虑的事情是平台独立性的决定。您想将游戏与Windows绑定,还是希望在某些时候将其发布到Mac OS X或Linux。如果您决定将来支持Linux,OS X,则需要使用OpenGL。
如果Linux游戏至少已半发布,Linux社区似乎会有很多善意。
答案 9 :(得分:1)
我真的同意那些告诉你学习Ogre3D的人。你说你使用C ++,所以Ogre3D是一个很好的选择。 XNA使用C#,除了学习XNA之外,你必须学习它和C ++之间的差异。 XNA既不是开源也不是跨平台,所以如果你想了解更多关于游戏开发的知识,我建议先学习SDL,然后再学习Ogre3D。
答案 10 :(得分:1)
要回答这个问题,需要更多关于你的信息:
如果它很高,我可能会开始使用Ogre(最好的严格渲染开源引擎,恕我直言)或其他开源游戏引擎,如Delta3D,如果你想要额外的功能(声音,物理等)游戏引擎带来。
如果您不想使用引擎,我会使用Direct3D,因为它的更新速度比OpenGL快得多。我不想讨论所有问题,但是在SIGGRAPH期间宣布了OpenGL 3.0版本,并且社区中的大多数人都非常失望。 Direct3D使您可以更好地利用着色器和可编程管道的其他用途。
如果您的编程能力不是太高,并且您正在这样做以学习编程,那么我将从OpenGL开始,因为它更容易学习并且Web上有更多资源(例如,请参阅http://nehe.gamedev.net )。
答案 11 :(得分:1)
我的理解是,在Direct3D中,您必须自己处理所有资源分配和管理,而OpenGL规范将其留给驱动程序/实现而不是应用程序。
这允许Direct3D开发人员使用适合应用程序的最佳分配和管理方法,但也是额外的工作。
我已经在每个应用程序中完成了典型的“Hello World”应用程序,我更喜欢OpenGL而不是Direct3D,但这只是我的看法。你应该尝试两种方法,花一两天时间学习和玩弄每一个,然后自己决定。
答案 12 :(得分:1)
你必须考虑你想要的东西,因为这是一个爱好项目,我假设“学习东西”将是体验的主要部分,所以避免拿起隐藏你的东西的东西并做东西在幕后,因为这只会给你一小部分图片。
我会选择Direct3D,因为它得到了更好的支持,我发现文档很容易阅读,并且SDK附带了不错的样本。你甚至可以使用这些样本作为基础来构建,如果你想在没有初始设置的陡峭学习曲线的情况下获得启动。
我开始使用OpenGL进行记录,大约一个月后进入Direct3d(当时版本为7)。我发现Direct3D迫使我更加意识到我想要做什么以及我是如何设置的,但我更喜欢这种理解水平。
重要的是,IMO,无论您选择哪种方式,都要一步一步地将其定制在屏幕上。有各种各样的原因,为什么屏幕上没有东西(它是透明的,相机在物体里面等等)所以通过采取婴儿步骤并定期显示东西你们都在验证事情是否仍在继续一点视觉奖励。
答案 13 :(得分:0)
很明显,根据您的反馈,您可以合理地开始使用D3D或OpenGL作为3D图形API。使用这两种技术开发了Triple-A游戏,它们都有自己的优点和缺点。
如果您已经相当精通C ++,那么任何一个都可以提供服务,但是在您的选择中还有许多其他注意事项:
通常,实际的“游戏玩法”重点是AI,战斗,故事情节等。
如果您仍在攀登C ++学习曲线(值得,但需要一些时间),您可能会使用C#和OpenTK。这将为您提供像Ogre这样的“游戏框架”的好处,可以合理地直接访问OpenGL,以及使用托管代码(和IDE)进行游戏逻辑的显着优势。 OpenTK是Mono的跨平台,因此您的代码也可以在OS X和Linux上运行。
玩得开心!
答案 14 :(得分:0)
答案 15 :(得分:0)
虽然OpenGL很容易入手,而且正如一些人已经写过的那样 - 在屏幕上显示一个三角形,从那里移动到纹理,粒子等等都可以在一天之内完成。
但我认为这是一个很好的问题,问题是你的最终目标是什么 如果它是一个简单的游戏,没有骨骼动画,简单的3D - OpenGL绝对是答案。如果你瞄准更高的目标并且不想花时间从头开始开发所有技术(或者去寻找免费的库并将所有技术放在一起)那么DX是一个不错的选择,我会选择DX9c直到DX11问世。
如果您不介意使用C ++以外的其他语言,那么您还应该看一下XNA开发环境 - 它变得非常成熟和好。
同样,使用现有的引擎是好的,如果你知道它会给你你需要的大部分,以合适的价格,并将节省你自己开发它的时间,主要问题是你需要浏览几个游戏引擎(Ogre,Game Studio,Torque等等),然后根据有限的经验做出选择 - 在继续之前尽可能多地阅读休闲开发者的评论,并尝试采取如果你打算改变它,请查看代码。
希望它有所帮助。
答案 16 :(得分:0)
抽象引擎的建议很好,假设你知道自己在做什么。如果没有这样做,很难为图形编写一个好的抽象层。
我建议你选一个。您可以轻松地从概念中获取概念 - 足以使您可以在抽象层上工作,或者足够简单地使用其他库。但就这样做。我真的不会担心哪个是正确的。他们都是优秀的,稳定的表现者。 DX10(如果你有Vista)可能会有更多最新着色器模型的轻微优势,但对于现在开始的人来说,我认为这是无关紧要的。 GL的优势在于,某些较小的矩阵/向量数学运算要么对您隐藏,要么为您提供(尽管我认为DX也有一些这样做。)
答案 17 :(得分:0)
首先,我们得到了Wikipedia comparison of OpenGL and Direct3D。
但我真的很想听听一些实用的观点,特别是考虑到OpenGL 3.0和DirectX 10的最新发展。
答案 18 :(得分:-1)
如果您想要进行跨平台编码并且想要将所有渲染保留在引擎中,那么Ogre3D非常棒。 OpenGL也非常适合跨平台编码,但它也可以让你做所有无聊的部分 - 但它提供了更好的控制。
如果您想将游戏移植到其他平台,我会避免使用DirectX。规划未来。与OpenGL相比,DirectX 10可能具有一些优势,但除非您是专业开发人员,否则我认为您不会感觉到它们。否则,如果你是亲微软,你应该使用XNA,因为作为业余开发者你不需要DirectX提供的控制。
我现在用OpenGL编写了一段时间,现在用Ogre3D编写了几个月,我不能说我想要别的东西。我最近得到了一本关于DirectX 7的书,我觉得它很乱。也许事情发生了变化,但从我观察到的我没有找到DirectX,并通过外推Direct3D,很有吸引力。
答案 19 :(得分:-4)
我的观点是OpenGL是最好的。
OpenGL SuperBible: Comprehensive Tutorial and Reference是一个很好的参考。