首页 / 知识

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

2023-04-13 21:47:00

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

OpenGL or Direct3D for a new Windows game project? Or something else?

我正在Windows上启动一个业余游戏项目,该项目将大量使用3D图形效果。它很可能用C编写。

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

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

一些"如何开始"链接将很有用。 (使用任何一种技术,或同时使用两种。)

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

编辑-Mihai Lazar指出,我也可以使用OGRE 3D这样的图形引擎。编辑了问题以反映此替代方法。


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

完成游戏,即使只是为了让您前进而真的很愚蠢和简单,比选择合适的库更为重要。使用过剩,您可以在一天内将一些3D对象显示在屏幕上。从NeHe的教程开始。


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


您还可以基于自己的食人魔来开展工作,他们自己提供了抽象并且它们有非常好的工具。我认为这是一个已经开展了6年以上的项目。基本库并不是真正的初学者,因为您需要对软件设计有所了解,但是我发现很多人都在使用它来编写游戏。

与学习较重的内容相比,它会更安全,更快捷,因为它已被抽象。再加上两个月后,您无论如何都会使用3D行话。还有一本书可以帮助您开始使用Ogre,我认为它现在已经很老了,但还是一个起点。


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

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

Bernard是对的-尝试尽可能抽象。尝试将DX或OGL调用保持在对象类之外。


我以前没有OpenGL,DirectX或视频游戏的经验,并且已经使用Ogre3d制作了一个开放源代码的竞赛视频游戏。这是一个很好的视频游戏框架:完善的代码,网络上大量的文档和信息以及非常好的入门教程。

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


针对您所描述的情况,我建议您使用Direct3D。

使用Direct3D而不是OpenGL的主要原因是视频卡供应商通常只会在其"高端"卡的OpenGL驱动程序上做得很好。

低端游戏类型的卡通常会变得很差,而且驱动程序通常会出现故障,从而导致最终用户的计算机出现问题。

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

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


我在uni上做了OpenGL与Direct3D的比较的论文。 Direct3D的真正好处是它具有定期的发布时间表-始终对其进行更新以利用图形硬件的最新进展。在OpenGL 2.0和3.0版本之间花费了多长时间?另外,在OpenGL扩展中已经做了很多工作,这意味着在某些卡上只能进行某些渲染。

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

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


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


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

如果该游戏至少是针对Linux的半发行版,那么Linux社区似乎有很多善意。


要很好地回答此问题,需要有关您的更多信息:

  • 你的编程能力是什么?

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

如果您不想使用引擎,我会选择Direct3D,因为它的更新速度比OpenGL快得多。我不想涉足所有问题,但是SIGGRAPH期间宣布了OpenGL 3.0版,社区中的大多数人对此感到非常失望。 Direct3D使您处于更好的位置,以利用着色器和可编程管线的其他用途。

如果您的编程能力不是很高,并且您正在这样做以学习编程,那么我将从OpenGL开始,因为它更容易学习并且网络上有更多资源(请参阅http://nehe.gamedev。 .net)。


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

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

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


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


很明显,从您得到的响应中,您可以合理地从3D图形API的D3D或OpenGL开始。使用这两种技术开发的Triple-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上运行。

玩得开心!


您必须考虑自己想要的东西,因为这是一个业余项目,我认为"学习的东西"将是体验的主要部分,因此请避免捡起隐藏东西的东西从您那里获取并在幕后进行操作,因为这只会给您带来一小部分的画面。

我会选择Direct3D,因为它得到了更好的支持,我发现文档易于阅读,并且SDK附带了不错的示例。如果您想在没有初始准备的情况下开始学习,那么甚至可以使用这些样本作为基础。

我从OpenGL开始录制,大约一个月后转到Direct3d(当时为版本7)。我发现Direct3D迫使我更加了解自己想做的事情以及如何进行设置,但是我更喜欢这种理解水平。

重要的是,无论您选择哪种方式,IMO都要逐步进行,并定期将其显示在屏幕上。各种各样的原因导致屏幕上无法显示某些内容(它是透明的,相机位于对象内部等),因此采取婴儿操作并定期显示一些内容,都在验证事情还在继续发展并获得一点视觉上的回报。


假设您知道自己在做什么,那么抽象引擎的建议很好。尚未编写好的图形抽象层很困难。

我建议您选择一个。您将足够容易地挑选概念-足够容易,以便您有可能在抽象层上工作,或者足够容易地选择另一个库。但是就做吧。我真的不会太担心哪一个是正确的。他们都是好人,表现出色。 DX10(如果您使用Vista)可能会具有一些最新的着色器模型的轻微优势,但是对于从现在开始的人来说,这是无关紧要的。 GL的优点是,某些较复杂的矩阵/矢量数学运算或者对您隐藏了,或者为您提供(尽管我认为DX也具有其中的一些功能)。


不要以食人魔开头。

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

一旦您可以移至Win32并浏览该站点,该站点现在已经很老了,但是仍然相当不错。


首先,我们对OpenGL和Direct3D进行了Wikipedia比较。

但是我真的很想听听一些实用的观点,尤其是考虑到OpenGL3.0和DirectX 10的最新开发。


虽然OpenGL很容易上手,并且正如某些人已经写过的-使三角形显示在屏幕上,然后从那里移动到纹理,粒子等等,一天之内就可以完成。

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

如果您不介意使用C以外的其他语言,还应该看看XNA开发环境-它变得相当成熟和完善。

同样,如果您知道已经存在的引擎能够以适当的价格为您提供大部分需求,并且可以节省您自行开发的时间,那么使用该引擎是件好事,主要问题是您需要浏览多个游戏引擎(Ogre,Game Studio,Torque等),然后根据经验有限进行选择-在继续之前,请阅读尽可能多的休闲开发者的评论,然后尝试如果要更改代码,请看一下代码。

希望有帮助。


如果要进行跨平台编码,并且要将所有渲染留给引擎,则

Ogre3D非常有用。 OpenGL对于跨平台编码也非常有用,但是它也使您无聊了很多,但是它提供了更好的控制。

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

我现在已经使用OpenGL进行了一段时间的编码,而现在使用Ogre3D进行了几个月的编码,我不能说我想要其他东西。我最近有一本关于DirectX 7的书,我认为它很杂乱。也许情况发生了变化,但是从我观察到的结果来看,我找不到DirectX,而通过推断Direct3D却很有吸引力。


我认为OpenGL是最好的。

OpenGL SuperBible:《综合教程和参考》是不错的参考。


项目用于图形启动

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢