首页 / 知识
用于新Windows游戏项目的OpenGL或Direct3D?或者是其他东西?
2023-04-13 21:47:00

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,那么任一个都可以使用,但是在选择时还需要考虑许多其他事项:
通常,"游戏性"的实际重点是在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很容易上手,并且正如某些人已经写过的-使三角形显示在屏幕上,然后从那里移动到纹理,粒子等等,一天之内就可以完成。 不过,我确实认为,一个很好的问题是您的最终目标是什么。 如果您不介意使用C以外的其他语言,还应该看看XNA开发环境-它变得相当成熟和完善。 同样,如果您知道已经存在的引擎能够以适当的价格为您提供大部分需求,并且可以节省您自行开发的时间,那么使用该引擎是件好事,主要问题是您需要浏览多个游戏引擎(Ogre,Game Studio,Torque等),然后根据经验有限进行选择-在继续之前,请阅读尽可能多的休闲开发者的评论,然后尝试如果要更改代码,请看一下代码。 希望有帮助。 如果要进行跨平台编码,并且要将所有渲染留给引擎,则 Ogre3D非常有用。 OpenGL对于跨平台编码也非常有用,但是它也使您无聊了很多,但是它提供了更好的控制。 如果您要将游戏移植到其他平台,我会避免使用DirectX。计划未来。与OpenGL相比,DirectX 10可能会提供一些优势,但是我真的认为除非您是专业开发人员,否则您不会感觉到它们。否则,如果您是Microsoft专业人员,则无论如何都应使用XNA,因为作为业余开发人员,您将不需要DirectX提供的控制。 我现在已经使用OpenGL进行了一段时间的编码,而现在使用Ogre3D进行了几个月的编码,我不能说我想要其他东西。我最近有一本关于DirectX 7的书,我认为它很杂乱。也许情况发生了变化,但是从我观察到的结果来看,我找不到DirectX,而通过推断Direct3D却很有吸引力。 我认为OpenGL是最好的。 OpenGL SuperBible:《综合教程和参考》是不错的参考。 |
最新内容
相关内容
linux中启动软件命令?
linux中启动软件命令?,环境,软件,电脑,系统,工具,位置,代码,设备,时间,情况,如何在Linux桌面环境下自动启动程序通常,在我们的电脑上,开机后会执命令行添加linux启动?
命令行添加linux启动?,系统,软件,工具,环境,初级,地址,发行,命令,目录,终端,linux命令行如何运行程序?1、命令行界面:- 打开终端:在大多数Linuxlinux命令创建项目组?
linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文件夹,linux命令中用root用户新建一个user1用户,新建一个group1的组linux增加自启动命令?
linux增加自启动命令?,服务,系统,信息,工具,软件,查询系统,状态,跨行,情况,设备,linux开机自启动命令1、加入开机启动服务列表 使用 chkconfiglinux上启动脚本命令?
linux上启动脚本命令?,服务,状态,系统,代码,脚本,工作,周期性,命令,文件,方法,Python脚本在Linux下如何自启动与定时任务的实例详解Linux在启复制项目的linux命令?
复制项目的linux命令?,系统,项目,文件,命令,目录,源文件,语法,选项,目标,功能,在Linux操作系统中复制文件或目录时使用的命令是()。1、在Linuxlinux重新启动命令是?
linux重新启动命令是?,系统,工作,设备,标准,命令,灵活,用户,电源,提示,主机,linux重启命令Linux的五个重启命令为:shutdown、poweroff、init、rlinux启动jre命令?
linux启动jre命令?,系统,软件,代码,环境,平台,网站,企业,中心,通用,做好,如何在Linux平台命令行环境下安装Java1.61、从Java官方网站下载相应linux开机启动命令行?
linux开机启动命令行?,服务,系统,软件,标准,代码,情况,设备,工具,命令,脚本,怎么在linux启动的时候执行一个命令?如果 你装的是centos6 的系统linux启动浏览器命令?
linux启动浏览器命令?,系统,情况,发行,不了,官网,环境,工具,传播,基础,软件,如何使用linux命令打开网页在命令符界面浏览网页可以使用lynx,linklinux下启动程序命令?
linux下启动程序命令?,系统,服务,环境,情况,数字,设备,工程,软件,命令,网上,linux启动app命令1、linux启动app命令:做 Linux 嵌入式开发,经常会linux3des命令?
linux3des命令?,软件,服务,平台,密码,工具,网络,名字,数据,图片,产品,Windows下连接Linux的ssh工具有哪些1、putty putty是最有名的SSH和telne