即使OpenGL是跨平台的,DirectX是否比OpenGL更容易或更出色?为什么我们看不到像Windows那样真正的功能强大的Linux游戏?
#1 楼
这里的许多答案都非常非常好。但是应该解决OpenGL和Direct3D(D3D)问题。这就需要...历史课程。在开始之前,我对OpenGL的了解要比对Direct3D的了解要多得多。我一生中从未写过任何D3D代码,并且我已经在OpenGL上编写了教程。因此,我要说的不是偏见问题。这仅仅是历史问题。
冲突的诞生
有一天,在90年代初的某个时候,微软向四周张望。他们看到SNES和Sega Genesis很棒,可以运行很多动作游戏等等。他们看到了DOS。开发人员编写了诸如主机游戏之类的DOS游戏的代码:直接开发。但是,与控制台不同,在控制台上,开发SNES游戏的开发人员知道用户将拥有什么硬件,而DOS开发人员则必须编写多种可能的配置。而且这确实比听起来困难。
Microsoft有一个更大的问题:Windows。与DOS不同,Windows希望拥有硬件,而DOS却可以让开发人员做任何事情。为了拥有应用程序之间的协作,必须拥有硬件。合作正是游戏开发人员所讨厌的,因为它占用了宝贵的硬件资源,以致于他们无法使用。
为了促进Windows上的游戏开发,Microsoft需要统一的底层API,可以在Windows上运行,而不会减慢它的速度,而且大多数情况下都是跨硬件的。适用于所有图形,声音和输入硬件的单个API。
DirectX诞生了。
3D加速器诞生了几个月。微软遇到了麻烦。请参阅DirectX的图形组件DirectDraw,它仅处理2D图形:分配图形内存并在内存的不同分配部分之间进行位清除。
因此,微软购买了一些中间件,并将其转换为Direct3D版本3。并且有充分的理由;查看D3D v3代码就像凝视《约柜》。并决定编写另一种API:OpenGL。
请参见,微软公司一直忙于在Windows的OpenGL实现中与SGI一起工作。这里的想法是向典型的GL应用程序的开发人员求助:工作站应用程序。 CAD工具,建模之类的东西。游戏是他们心目中最遥远的事情。这主要是Windows NT,但Microsoft决定也将其添加到Win95。
为了吸引工作站开发人员使用Windows,Microsoft决定尝试贿赂他们以使用这些新颖的3D图形。牌。微软实现了Installable Client Driver协议:图形卡制造商可以使用基于硬件的协议来替代微软的软件OpenGL实现。如果可用,代码可以自动使用硬件OpenGL实现。
早期,消费者级别的视频卡虽然不支持OpenGL。这并没有阻止Carmack仅仅将Quake移植到他的SGI工作站上的OpenGL(GLQuake)。从GLQuake自述文件中可以看出:理论上,glquake将在支持
纹理对象扩展的任何兼容OpenGL上运行,但是除非它是功能非常强大的硬件,否则
加速了所需的一切,游戏将无法接受。如果必须通过任何软件仿真路径,性能可能很可能
每秒不到一帧。
目前(97年3月),唯一的可以合理发挥
震颤的标准opengl硬件是鹰图实现,这是非常昂贵的卡。
3dlabs一直在显着改善其性能,但是使用
驱动程序,它仍然不够好玩。从全屏运行退出
时,某些当前的
用于glint和permedia板的3dlabs驱动程序也会崩溃NT,因此,我不建议在3dlabs
硬件上运行glquake。
3dfx提供了一个opengl32.dll,它可以实现glquake所需的一切,
,但它不是完整的opengl实现。其他opengl应用程序不太可能使用它,因此基本上将其视为“ glquake驱动程序”。
这是miniGL驱动程序的诞生。随着硬件变得足够强大以在硬件中实现大多数OpenGL功能,这些技术最终演变为完整的OpenGL实现。 nVidia是第一个提供完整OpenGL实现的公司。许多其他供应商都在苦苦挣扎,这就是开发人员偏爱Direct3D的原因之一:它们可以在更广泛的硬件上兼容。 >
OpenGL优势
因此阶段已定:Direct3D与OpenGL。考虑到D3D v3的糟糕程度,这真是一个了不起的故事。
OpenGL Architecture Review Board(ARB)是负责维护OpenGL的组织。他们发布许多扩展,维护扩展存储库,并创建API的新版本。 ARB是一个由许多图形行业参与者以及一些OS制造商组成的委员会。苹果和微软在不同时期都是ARB的成员。
3Dfx随Voodoo2一起发布。这是第一个可以进行多重纹理处理的硬件,这是OpenGL以前无法做到的。尽管3Dfx强烈反对OpenGL,但下一代多纹理图形芯片(TNT1)的制造商NVIDIA很喜欢它。因此,ARB发布了扩展名:GL_ARB_multitexture,它将允许访问多重纹理。
同时,Direct3D v5发布了。现在,D3D已成为实际的API,而不是猫可能会呕吐的东西。问题?没有多重纹理。
糟糕。
现在,人们不会受到应有的伤害,因为人们没有过多使用多重纹理。不直接。多重纹理会严重影响性能,在许多情况下,与多重传递相比,这是不值得的。当然,游戏开发人员乐于确保他们的游戏可以在较旧的硬件上运行,而这些硬件没有多重纹理,因此很多游戏都没有它。
时间流逝,NVIDIA部署了GeForce 256(不是GeForce GT-250;这是第一款GeForce),在接下来的两年中,显卡的竞争几乎结束了。主要卖点是能够在硬件中执行顶点变换和照明(T&L)。不仅如此,NVIDIA非常热爱OpenGL,因此他们的T&L引擎实际上就是OpenGL。几乎从字面上看;据我了解,它们的某些寄存器实际上直接将OpenGL枚举数作为值。
Direct3D v6出现了。最后是多纹理,但是没有硬件T&L。 OpenGL一直有一条T&L管线,即使在256条之前是通过软件实现的。因此,将NVIDIA将其软件实现转换为硬件解决方案非常容易。直到D3D v7才最终获得硬件T&L支持。而且很多事情同时发生。
Microsoft决定他们不会再迟到了。因此,他们没有看NVIDIA在做什么,而是在事后照搬了它,而是采取了惊人的立场去与他们交谈。然后他们坠入爱河,并有了一个小小的控制台。
后来发生了凌乱的离婚。但这是另外一次。
这对PC而言意味着GeForce 3与D3D v8同时发布。不难看出GeForce 3如何影响D3D 8的着色器。 Shader Model 1.0的像素着色器特别针对NVIDIA的硬件。没有任何尝试抽象化NVIDIA的硬件。 SM 1.0就像GeForce 3所做的一样。
当ATI开始使用Radeon 8500进入性能显卡竞赛时,出现了问题。 8500的像素处理管线比NVIDIA的强大。因此,微软发布了Shader Model 1.1,它基本上是“ 8500所做的一切。”但是失败和成功是度的问题。在OpenGL领域发生了史诗般的失败。
NVIDIA喜欢OpenGL,因此当GeForce 3推出时,他们发布了一系列OpenGL扩展。专有的OpenGL扩展:仅NVIDIA。自然,当8500出现时,它什么也不能使用。
至少在D3D 8平台上,您可以在ATI硬件上运行SM 1.0着色器。当然,您必须编写新的着色器才能利用8500的凉爽性,但是至少您的代码可以运行。 OpenGL扩展数量。专有的OpenGL扩展:仅ATI。因此,您只需要一个着色器就需要一个NVIDIA代码路径和一个ATI代码路径。很多委员会经常出现在哪里:愚蠢。
我在上面提到ARB_multitexture是因为它深深地影响了所有这些。 ARB似乎(从局外人的角度来看)想完全避免着色器的想法。他们认为,如果将足够的可配置性应用于固定功能管道,则它们可以等同于着色器管道的功能。
因此,ARB在扩展后发布了扩展。其中每个带有“ texture_env”字样的扩展都是对这种老化设计进行修补的另一种尝试。检查注册表:在ARB和EXT扩展之间,进行了八个扩展。许多产品已升级为OpenGL核心版本。
Microsoft当时是ARB的一部分。他们在D3D 9命中时就离开了。因此,他们完全有可能以某种方式破坏OpenGL。我个人对此理论有怀疑,有两个原因。第一,他们必须获得其他ARB成员的帮助,因为每个成员只有一票。最重要的两个是,ARB不需要Microsoft的帮助即可解决问题。我们将看到进一步的证据。
最终,ARB可能会受到ATI和NVIDIA(均为活跃成员)的威胁,最终他们伸出了足够的头以提供实际的装配样式着色器。 br />
想要什至是愚蠢的东西吗?
硬件T&L。 OpenGL首先要具备的功能。好吧,这很有趣。为了从硬件T&L中获得最大的性能,您需要将顶点数据存储在GPU上。毕竟,实际上是GPU要使用您的顶点数据。
在D3D v7中,Microsoft引入了Vertex Buffers的概念。这些是为分配顶点数据而分配的一大堆GPU内存。
想知道OpenGL在什么时候得到了与之等效的信息吗?噢,NVIDIA是OpenGL的全部爱好者(只要它们是专有的NVIDIA扩展),就在GeForce 256首次发布时发布了顶点阵列范围扩展。但是ARB何时决定提供类似功能?
两年后。这是在他们批准了顶点和片段着色器(D3D语言中的像素)之后。这就是ARB开发跨平台解决方案以在GPU内存中存储顶点数据所花的时间。同样,硬件T&L需要达到最高性能的要求。
一种语言来破坏它们
因此,OpenGL开发环境曾一度被打破。没有跨硬件着色器,也没有跨硬件GPU顶点存储,而D3D用户则喜欢两者。它会变得更糟吗?
你...你可以这么说。输入3D Labs。
您可能会问他们是谁?他们是一家已经停业的公司,我认为它们是OpenGL的真正杀手。当然,当ARB应该拥有D3D时,它的一般能力不足使OpenGL易受攻击。但是3D Labs也许是我想到OpenGL当前市场状况的最大原因。他们可能会怎么做导致这种情况?
他们设计了OpenGL阴影语言。 NVIDIA对工作站市场的压力越来越大,他们昂贵的GPU被边缘化了。与NVIDIA不同,3D Labs在主流市场上没有任何业务。如果NVIDIA赢了,他们就死了。
他们死了。参加游戏开发者大会,演讲中介绍了他们称为“ OpenGL 2.0”的内容。这将是对OpenGL API的完整,从零开始的重写。这是有道理的;当时OpenGL的API中存在很多问题(请注意:该问题仍然存在)。只看纹理加载和绑定是如何工作的;
他们提议的一部分是阴影语言。自然。但是,与当前的跨平台ARB扩展不同,它们的着色语言是“高级”的(C是着色语言的高级。是的,确实如此)。
现在,Microsoft正在开发自己的高级着色语言。在Microsoft的全部集体想象中,他们将其称为……高级着色语言(HLSL)。但是它们是对语言的根本不同的方法。
3D Labs着色器语言的最大问题是它是内置的。 HLSL是Microsoft定义的一种语言。他们为此发布了一个编译器,并生成了Shader Model 2.0(或更高版本的shader模型)汇编代码,您可以将其输入D3D。在D3D v9时代,D3D从未直接接触过HLSL。这是一个很好的抽象,但它纯粹是可选的。而且开发人员总是有机会落后于编译器并调整输出以实现最佳性能。
3D Labs语言没有这些。您为驱动程序提供了类似C的语言,并生成了一个着色器。故事结局。不是程序集着色器,不是您要提供的其他东西。真正的OpenGL对象代表一个着色器。
这意味着OpenGL用户对开发人员无所不包,而这些开发人员刚开始掌握汇编语言。编译器错误在新命名的OpenGL阴影语言(GLSL)中盛行。更糟糕的是,如果您设法使着色器正确地在多个平台上编译(绝非易事),那么您仍然会受到当天的优化器的影响。这不是最佳状态。
虽然这是GLSL中最大的缺陷,但它不是唯一的缺陷。到目前为止。
在D3D中,以及在OpenGL中较旧的汇编语言中,您可以混合并匹配顶点和片段(像素)着色器。只要它们与同一接口通信,就可以将任何顶点着色器与任何兼容的片段着色器一起使用。他们甚至可以接受不兼容的程度。顶点着色器可以写入片段着色器未读取的输出。依此类推。
GLSL没有任何内容。顶点着色器和片段着色器融合在一起,成为3D Labs称为“程序对象”的对象。因此,如果要共享顶点和片段程序,则必须构建多个程序对象。这引起了第二大问题。
看,3D Labs认为他们很聪明。他们基于GLSL的编译模型基于C / C ++。您采用.c或.cpp并将其编译为目标文件。然后,您获取一个或多个目标文件并将其链接到程序中。这就是GLSL的编译方式:将着色器(顶点或片段)编译为着色器对象。然后,将这些着色器对象放在程序对象中,并将它们链接在一起以形成您的实际程序。可以说,实际上,着色器被编译了两次。一次在编译阶段,一次在链接阶段。尤其是NVIDIA的编译器,因为它基本上运行两次。它没有生成某种目标代码中介。它只是编译一次并丢弃答案,然后在链接时再次编译。
因此,即使您要将顶点着色器链接到两个不同的片段着色器,也必须做更多的事情比在D3D中进行编译。特别是因为类似C的语言的编译都是脱机完成的,而不是在程序执行开始时进行的。
GLSL还有其他问题。归咎于3D Labs似乎是错误的,因为ARB最终批准并合并了该语言(但“ OpenGL 2.0”计划没有其他要求)。但这是他们的想法。
这是真正令人难过的部分:3D Labs是对的(大多数情况下)。 GLSL不是HLSL当时的基于矢量的着色语言。这是因为3D Labs的硬件是标量硬件(类似于现代NVIDIA硬件),但是它们最终恰好朝着许多硬件制造商使用其硬件的方向发展。
他们选择编译- “高级”语言的在线模型。 D3D甚至最终切换到了那个版本。
问题在于3D Labs在错误的时间正确。为了尽早召唤未来,为了适应未来,他们放弃了现在。这听起来与OpenGL始终具有T&L功能的可能性类似。除了OpenGL的T&L管道在硬件T&L之前仍然有用之外,而GLSL在世界赶上它之前是一个责任。
GLSL现在是一种很好的语言。但是时间呢?那太差了。 OpenGL为之苦了。
向神化坠落
虽然我坚持认为3D Labs遭受了致命的打击,但ARB本身却是棺材上最后钉子的源头。
这是您可能听说过的故事。到OpenGL 2.1时,OpenGL遇到了问题。它有很多遗留问题。该API不再易于使用。有5种做事方式,但不知道哪一种最快。您可以通过简单的教程“学习” OpenGL,但实际上并没有真正学习能够为您提供真正性能和图形功能的OpenGL API。这类似于3D Labs的“ OpenGL 2.0”,但更好,因为ARB在它后面。他们称其为“长峰”。
花一些时间来改善API有什么不好?这很糟糕,因为微软让自己容易受到攻击。瞧,这是在Vista切换之时。
Microsoft决定通过Vista来对显示驱动程序进行一些急需的更改。他们迫使驱动程序向OS提交图形内存虚拟化和其他各种功能。仅适用于Vista(及更高版本)。即使您具有支持D3D 10的硬件,也不能在不运行Vista的情况下运行D3D 10应用程序。
您可能还记得Vista ...嗯,我们只能说它运行不佳。因此,您有一个性能不佳的OS,仅在该OS上运行的新API,以及需要该API和OS执行比上一代产品更快的速度的新一代硬件。
但是,开发人员可以通过OpenGL访问D3D 10级功能。好吧,如果ARB不在忙于Longs Peak的工作,他们可以。
基本上,ARB花了一年半到两年的宝贵时间来改善API。到OpenGL 3.0真正问世时,Vista的采用率开始上升,Win7即将把Vista抛在后面,大多数游戏开发人员无论如何都不在乎D3D-10类功能。毕竟,D3D 10硬件可以很好地运行D3D 9应用程序。随着PC到控制台端口的增加(或PC开发人员跳入控制台开发。请选择),开发人员不需要D3D 10类功能。
现在,如果开发人员可以访问通过在WinXP计算机上通过OpenGL来实现这些功能,那么OpenGL开发可能已经收到了急需的帮助。但是ARB错过了他们的机会。您想知道最糟糕的部分吗?
尽管花了宝贵的两年时间尝试从头开始重建API ...但是它们仍然失败,只是恢复到了现状(除弃用机制外) )。
因此,ARB不仅错过了至关重要的机会之窗,他们甚至没有完成使他们错过机会的任务。到处都是史诗般的失败。
这就是OpenGL与Direct3D的故事。错失良机,愚蠢,任性盲目和简单愚蠢的故事。
评论
您是否已在某处写下了此文字,或者是头顶上写下了该文字?
– Kristofer Hoch
2011年6月29日19:33
@Kristofer:我不知道你是否可以花一个小时左右的时间将它称为“头顶”,但是我没有在任何地方写下它。
–尼科尔·波拉斯(Nicol Bolas)
2011年6月29日19:45
@ F.Aquino:所以您愿意将此归因于FPS游戏使用的渲染系统,而不是引擎本身吗?即使CS是基于《半条命1》,还是基于《雷神之锤》?抱歉;不买。当然,我不以新的FPS没有电竞潜力为前提,即使有很多围绕较新的FPS的电竞比赛。他们可能不像CS对某些玩家具有相同的吸引力,但不要误以为这些玩家构成了FPS的所有电子竞技。
–尼科尔·波拉斯(Nicol Bolas)
2011年6月29日在21:36
哇。我什至都不在乎这些东西,而且还是很不错的读物!
– Peter Rowell
2011年6月29日22:48
在Microsoft的全部集体想象中,他们将其称为……高级着色语言(HLSL)。在这里笑了6分钟以上。
–ApprenticeHacker
2012年7月17日在4:58
#2 楼
当问题是“游戏开发者”而不是“游戏编辑者”时,我发现每个人都专注于用户群,这很奇怪。对我来说,作为开发者,Linux真是一团糟。版本很多,有桌面管理器,UI工具包等。如果我不想将我的作品作为开源发布,则用户可以在其中(尝试)进行重新编译,以使其适合其软件包,库和设置,这是一场噩梦!
另一方面,Microsoft提供了(大多数时候)令人难以置信的向后兼容性和平台稳定性。可以使用一个封闭源代码安装程序来定位整个机器范围,例如运行Windows XP,Vista和7、32和64位版本,未安装适当的DX或VC可再发行文件的计算机等。
最后一件事,请所有人停止对OPENGL和DIRECTX的比较!比较Direct3D与OpenGL还是不这样做。 DirectX提供OpenGL不提供的输入支持,声音支持,电影播放等。
评论
“对我而言,作为一名开发人员,Linux真是一团糟。”确实!我在Fedora和Ubuntu的环境中工作。即使在这两者之间,我们也有问题。 (我必须补充一点,我是Linux迷。)
–大卫·普尔(David Poole)
2011年6月29日14:58
@ jv42:这似乎是一个普遍的误解:几乎所有这些版本以及桌面管理器和UI套件等都与启动游戏和正常工作无关。如果您的游戏(出厂时)不仅仅依赖于libGL,libX11和libasound(或libopenal,libao或liboss),则说明您在做错事。
– Greyfade
2011年6月29日22:00
@greyfade“如果您的游戏(出厂时)依赖于libGL,libX11和libasound(或libopenal,libao或liboss),则您做错了。 -然后您链接到libao-0.0.4alpha,而您的用户拥有libao-0.0.5beta,则无济于事。
–quant_dev
2011年6月30日8:34
打包二进制文件以使其可以在所有Linux发行版上运行并不难。哎呀,Blender开发人员在每个发行版中都这样做。 Blender只有一个(分别是两个,32位和64位)Linux发行包。
–datenwolf
2011年7月5日15:44
Linux用户为游戏付费。参见:koonsolo.com/news/linux-users-show-their-love-for-indie-game和2dboy.com/2009/10/26/pay-what-you-want-birthday-sale-wrap-up
–亚历山大
2011年7月7日在22:37
#3 楼
这是因为地球上的Windows用户比Linux和Mac多。事实是人们为最大的市场做事。手机也是如此:Android和iPhone拥有很棒的游戏,而Windows Mobile和Symbian却没有。
评论
@Mahmoud Hossam:事实并非如此。使用OpenGL并不意味着您的整个应用程序就可以在* nix环境下神奇地工作,这意味着图形引擎可以(即使那样也并不意味着Windows上没有怪癖)在Linux上存在,反之亦然)。这还不是全部,而且为多个平台维护其代码肯定会产生可观的成本。
– Ed S.
2011-3-21在23:16
@Mahmoud:是的。而且,如果您还是不想麻烦移植到Linux / Mac OS,那为什么不使用本机库呢? Windows比Windows更好地支持DirectX。
–迪恩·哈丁(Dean Harding)
2011年3月21日在23:20
@Mahmoud:问题的全部前提是“开发人员为什么偏爱Windows”。答案:因为那是玩家使用的。如果仅占市场的2%,则没有必要移植到Linux / Mac,在这种情况下,如果您不打算移植,使用OpenGL是没有意义的。
–迪恩·哈丁(Dean Harding)
2011-3-22在2:11
@Mahmoud,这不是游戏开发人员让人们改用Linux的工作。
–GrandmasterB
2011-3-22在3:57
@John 10+百万的魔兽世界玩家想和你谈一谈。这只是一场比赛。
–马塞洛
2011年6月29日19:38
#4 楼
由于Windows拥有超过90%的市场份额,而Linux(自从您特别询问Linux以来)以拥有许多不愿意为软件付费的用户而闻名。这是真的还是无关紧要的;感知在那里,并且影响人们的决定。评论
如果开发人员使用OpenGL,它将同时支持Windows和linux,因此实际上吸引潜在的付费用户并使用Linux是他们的营销优势,因为他们认为这样做会更好。
– M.Sameer
2011年3月21日在22:56
即使使用OpenGL,也有开发和测试跨平台的成本,这是Linux市场无法证明的。与OpenGL相比,目前Directx还是一个更好的PC游戏平台-基于OpenGL的PC上很少有新游戏。
–马丁·贝克特(Martin Beckett)
2011年3月21日在23:10
跨平台并不像“仅用于OpenGL的代码”那样简单。
–系统停机
2011年3月21日在23:11
实际上,事实并非如此,Linux用户不会为软件付费。 Humble Indie Bundle(您可以用自己想支付的任何价格购买的游戏捆绑包)现在已经完成了两次,每次都表明Linux用户为Windows捆绑包支付的费用高于Windows用户。
– Htbaa
2011-3-22在8:36
@Htbaa当然,他们付出了更多,他们绝望了,这可能是他们唯一可以在自己的操作系统上玩的游戏。
–马塞洛
2011年6月29日13:59
#5 楼
由于Windows由一个庞大的组织支持,所以十多年前,他们决定要在其平台上进行游戏开发。对于Mac而言,这不是真的,现在也不是事实。 。甚至不是iOS。苹果不提供用于iOS游戏开发的工具。但这是一个巨大的市场(那里的iPhone数量比1995年的PC多),竞争相对较少,所以人们还是这么做。 ,这可以设置任何优先级。 Linux的发展方向更多地是由一群非常优秀但略显超脱的程序员决定的。
要今天创建PC游戏,您需要很多2d / 3d艺术家,游戏设计师,脚本作者,演员,测试人员,而其他人则不需要。至于实际的编程,您可能只是使用实际的游戏引擎(CryEngine,Unreal Engine,Quake Engine,Source Engine)。因此,您可能不需要任何实际的程序员就可以完成整个事情。通常,经理们会寻求支持,这是Microsoft声称提供的东西,并且要处理某种程度上与他们的思想模式息息相关的事情,而开源不是这种事情。
因此,大多数商业用途最终用户软件开发是在Windows上完成的。
我为一家公司工作,该公司创建Flash游戏,因此不受特定平台的约束。但是,我们所有人都在Windows上进行开发,因为我们使用的大多数工具都不适用于Linux。
评论
“因此,您可能不需要任何实际的程序员就可以完成整个工作。”你忘了讽刺。
– Allon Guralnek
2011年10月13日20:00
@AllonGuralnek:那里没有讽刺。在大型游戏的经典游戏开发中,程序员将创建引擎和手段(通过可视化编辑器或实际脚本)提供内容和行为,然后游戏/关卡/任务设计者将使用这些手段。如果您购买了一个工作正常且功能强大的发动机,则可以基本省去第一步。
–back2dos
2011年10月13日在20:09
您是否有一个无需编写任何代码即可创建的合理值得注意的游戏的特定示例?
– Allon Guralnek
2011-10-13 20:15
@AllonGuralnek:我不是说没有代码,但没有程序员的人会创造游戏。您无需成为程序员即可创建完全改变游戏规则的mod。 DotA是我能想到的最流行的一种。
–back2dos
2011年10月13日在21:21
@AllonGuralnek:否。编写代码的人就是编写代码的人。要求关卡设计师对脚本有一定的了解。很多程序员经常需要具备一定的管理技能。它并没有使第一个成为程序员,也不使第二个成为经理。同样,您对DotA的评估是错误的。首先,它完全改变了游戏规则,将RTS转变为一种新类型,其次,它被包括ESWC在内的许多电子竞技联盟视为独立游戏
–back2dos
2011-10-13 22:07
#6 楼
正如某些人已经说过的那样,最重要的部分是用户群。 95%的PC用户使用Windows。 PC游戏玩家几乎只使用Windows。即使是那些使用Mac或Linux的人,也经常通过某种虚拟化或仿真(很少例外)来运行Windows游戏。但是人口统计并不是全部。我不会低估Microsoft为使平台对游戏开发人员更具吸引力所做的努力。基本上,您会获得免费的功能齐全的工具集,最重要的是XNA Game Studio。这不仅允许针对Windows进行开发,还允许针对Xbox360进行开发。并且即使是WP7手机也具有最新版本。显然,因为它是Microsoft工具,所以它使用DirectX,而不是OpenGL。
评论
对于所有耗时的读者,请注意:从2014年4月起,XNA将正式死亡。最新版本(4.0)于2010年发布,从现在(2013)到日落之间将看不到新版本。
–阿伦
2013年2月9日在2:11
给所有时间旅行读者的另一注:Windows 8(及更高版本)开发将来将不再免费。
– Fouric
13年4月1日在20:40
#7 楼
Ewwww,我不知道。我几乎专门使用Linux。我双重引导到Windows以制作Windows版本,并使用Mac作为Mac版本,仅此而已。诀窍是我们多年来开发的跨平台框架。我们的游戏建立在此之上,并且在Linux / OpenGL,Mac / OpenGL和Windows / Direct3D(以及不久之后在iOS / OpenGL)中表现相同。标题,因此它可能不适用于这些标题,但我们确实制作了顶级休闲游戏(请参阅网站-CSI:NY,Murder She Wrote和即将推出的两个2011年代都是使用重要许可证的标题示例,《夏洛克·福尔摩斯案1和2》也相当成功)
我不会为其他任何事情而放弃gedit + gcc + gdb + valgrind。
评论
gedit被低估了编程
–亚历山大
2011年7月7日在22:49
@亚历山大,被低估了甚至没有开始解释
– Shahbaz
13年1月28日在10:27
抱歉,我最终放弃了gedit。我现在使用gvim,我更开心了:)
– ggambett
13年1月29日在10:17
#8 楼
惯性。如果您过去曾经使用过Windows,那么切换到其他东西会很麻烦。如果您使用的是Windows,则DirectX比OpenGL更容易且更可能运行良好。
市场份额。 Windows在台式机上的市场份额大于OS X,后者又比Linux更大。赚钱的话题。
品牌。 DirectX比SDL之类的东西要好得多(这是复制OpenGL以外的DirectX某些功能所需要的东西)。
避免混淆。用户的Linux是否仅最多支持OpenGL 1.4或OpenGL 2+?您可以使用OpenGL 2.0教程,例如现代OpenGL入门。第1章:您版本的Linux上的图形管线?
如今,Linux在游戏开发方面更像是一个老古董,而且大多数开发人员最好在Linux之前先花钱制作OS X端口版本版本(参见Steam之类的东西)。即使那样,游戏机市场的价值还不止这两个游戏平台的总和。如果您想成为跨平台,则很有可能必须至少在其他一些平台上使用OpenGL。
评论
问题4的答案是:2+。 Mesa3D最多支持OpenGL 2.1,这意味着自Mesa 6.8版本以来,用于X11的3D硬件的所有图形驱动程序至少支持OpenGL 2.1。它涵盖了过去几年中发布的所有Linux发行版,以及NVIDIA和AMD发行的支持3.0及更高版本的二进制驱动程序。这不包括intel895的用户,但已弃用。
– Greyfade
2011年6月29日23:34
恐怕并非如此。具有(i915 / i945)(GMA 900/950)芯片组的计算机正在(仍)在销售中,并且不被弃用。即使在几个月前的现代发行版(Ubuntu 11.04 / Fedora 15)上,glxinfo仍将返回不高于1.4的OpenGL版本(Mesa 7.11-devel)。这样的Intel硬件在没有软件帮助的情况下根本无法执行更高的版本,因此,直到默认情况下可以使用softpipe为止,此类卡上的Linux才不会使用更高版本的OpenGL。以OpenGL 2.0(或更高版本)为目标将停止在各种Linux桌面系统上运行的程序...
– Anon
11年7月19日在6:50
即使这样,我仍然看不到担心。那些相同的芯片组在Windows上有局限性,因此无论如何,大多数图形繁多的游戏都是不可能的。
– Greyfade
2011年7月19日在15:05
#9 楼
答案是显而易见的。编写游戏的目的是赚钱。更多的最终用户使用Windows,因此有一个更大的市场,并且您期望Windows游戏比Linux游戏赚更多的钱。就是这么简单。如果您问自己“为什么有人这样做...”这个问题,请记住,金钱使世界运转。
评论
是的,但是您可以制作跨平台游戏,获得的不仅仅是Windows用户;)
– M.Sameer
2012年11月16日11:39
跨平台并不是一切。如果您获得的额外用户数量相对较低,那么您需要在额外的开发成本和持续支持成本与您将从中获得的额外收益之间进行权衡,并根据实际的硬数据做出明智的决策。对于该程序,在全球范围内没有正确或错误的答案,但是对于每个程序,都有一个正确或错误的答案,对一个程序来说正确的对另一个程序可能是错误的。
– Maximus Minimus
2012年12月9日在16:04
#10 楼
工具,工具,工具。就是这样。在Windows上进行开发,您就可以使用地球上一些最佳的开发工具。甚至没有什么比Visual Studio的调试器更接近远程的了,DirectX调试运行时很棒,PIX很棒,并且其他平台/ API上不存在可比的等效物。当然,那里有一些好东西。我并不是说其他平台上的工具很糟糕,但是MS所提供的工具远远领先于其他工具(尊敬的例外:Valgrind),甚至都不好笑。
底线是这些工具可以帮助您。它们可以帮助您完成工作,可以提高工作效率,可以帮助您专注于自己代码中的错误,而不必为从未有过文献记载的API苦恼。
评论
PIX很棒。通过单击一个麻烦的像素来调试着色器,看看发生了什么,太好了!
–克里斯·皮特曼
2012年11月17日15:54
#11 楼
因此,我已经解决了所有这些答案,作为游戏开发人员,他拥有沃尔玛上架的主机游戏代码,所以我的答案就非常不同。 br />看,如果要使用Nintendo控制台,则必须获得Nintendo的许可,从Nintendo的工厂购买,支付Nintendo的间接费用,与沃尔玛进行谈判,处理仓储,您需要预先赚钱才能制造,打印盒子,运送,进行所有保险等。如果要使用XBox,请确保有XBLA,但仍然需要Microsoft的祝福,您必须排队等待,这是数十发行补丁之类的成千上万美元。
在iOS上,您仍然需要Apple的同意,他们可以(并且确实)反复无常地拉您。 ,您仍然需要Valve的许可或批准,以及大量资金。
。
在Windows上?您设置了一个网站和一个下载按钮。
。但是,当您尝试开发游戏时,发生了太多*可怕的事情,对我来说,能够将二进制代码拍打在网站上并专注于工作的希望-至少是入门-确实降低了很多潜在的故障障碍。
“我们可以在情况稳定时稍后再做XBLA端口”的心态。
在较小的程度上确保这很好同样适用于Linux,如果有七个客户不错,则可以从那里开始。
但是Windows具有三大优势:真正开放的开发,真正开放的部署以及对古怪的东西感兴趣的庞大而活跃的客户群。
很难做到想象我还想从哪里开始。
#12 楼
我认为您应该阅读有关DirectX的历史和本文的更多信息。评论
不,他们创建DX的原因是OGL不是针对Windows优化的,无法快速扩展以利用新的硬件和操作系统开发的优势,没有包含声音,控制输入等。
– jwenting
2011-3-22在7:44
iow DX出于性能原因专门用于Windows,并允许Microsoft保持这种状态,并在新技术出现时迅速合并。 OpenGL停留在5年前的图形硬件支持级别上,甚至更多,因为这是一项固定的工作。
– jwenting
2011-3-22在7:46
@jwenting我认为性能不是他们不将其移植到其他平台的唯一原因,我的意思是,如果他们想移植它,至少他们会开源并将其留给社区来实施它。
–马哈茂德·侯赛姆(Mahmoud Hossam)
2011-3-22在12:18
他们没有开源C#,而是向标准机构提交了语言规范。微软是这些标准机构的成员,并且一直在做这样的事情(例如,它们对html,javascript和其他标准有很大的贡献)。开源将意味着在APL之类的东西下发布编译器和库的源代码。
– jwenting
11 Mar 23 '11在8:08
@jwenting:记录下来,Linux上有一个针对Gallium3D框架的Direct3D 10和11实现。 (这与Wine无关。)我也不同意您的主张,即“ OGL并未针对Windows优化”。这是硬件驱动程序实现的问题,而不是OpenGL的限制。
– Greyfade
2011年6月29日23:30
#13 楼
与政治和控制有很多关系。在90年代后期,SGI和MS实际上同意合并努力:
http://en.wikipedia.org/wiki/Fahrenheit_graphics_API
SGI投入了大量资金在项目中,MS没有。 SGI比MS需要SGI更需要MS。剩下的就是历史。
D3D和OpenGL是两个非常不同的API,开发人员可以选择最适合您的需求。
#14 楼
仅仅是因为Linux作为台式机系统严重失败。正如之前有人指出的那样,Linux对于开发人员来说是一团糟(不同的库,ui工具包等)。另一个问题是自由标准主义和缺乏对专有软件的支持。 Nvidia始终为Linux提供良好的(专有)驱动程序,但是Ubuntu和其他发行版未提供该驱动程序。与Windows一样,Linux也没有二进制驱动程序接口。 (有一个名为binaryApiNonsense.txt的文本文件或Kernel源代码中的某个文件)话虽如此,但Linux仅正确支持Nvidia硬件。您可以在Linux下使用Nvidia硬件玩大多数ID软件游戏。
下一步的开发工具。 MSFT提供了出色的C ++支持,就C ++而言,Visual Studio调试器优于gdb。最后但并非最不重要的一点是,缺少其他工具,例如Photoshop。 .net还允许您快速创建GUI工具。许多游戏工作室都使用.net框架为内部使用的工具编写代码。 。他们未能正确设计和实现OSx和Win拥有的现代图形系统。
评论
嗯?我的intel和ati卡在Linux上可以正常工作... X11怎么了?我一直觉得它比其他操作系统(尤其是Windows)的客户机/服务器体系结构要好得多。
–替代
2011年6月29日20:25
不,他们没有输入glxinfo并查看天气是否正常! X11可怕的损坏只是一个例子theinvisiblethings.blogspot.com/2010/08/…
–指甲
11年6月29日在20:28
如果您读了最后一句话,Linus会自己实施内核级别的补丁程序-而不是X11补丁程序。
–替代
2011年6月29日20:33
我对图形系统了解不多(您可能有一点要说),但是我说Linux失败了,因为桌面系统不正确或至少不准确。我从Windows迁移到Linux,从那以后我感觉工作效率很高。在我使用的所有计算机上,Linux的性能均优于Windows,并且优于Windows。我也不编写C ++代码,我想知道与Visual Studio相比,Eclipse在C ++ IDE中的地位如何。
– M.Sameer
2011年6月29日20:43
放下喷火器。我认为人们普遍认为VS是最好的IDE。但是,Eclipse还很年轻,还有路要走-我们将看到。但是,我只是喜欢在Linux中轻松编写和编写所有内容的过程!
– Vorac
2012年8月31日下午13:31
评论
错误的前提-在哪里有证据表明游戏开发商喜欢Windows?我认为@ user17674更准确-他们想为平台开发,以便可以卖出更多并赚更多钱:-)病毒开发人员也更喜欢Windows。这一切都与用户群有关。
从历史上看,为什么Windows程序员更喜欢DirectX而不是OpenGL,这可能是一个更有趣的问题。正如下面指向Carmack采访的链接可能表明的那样,DX曾经被人讨厌。知道它如何保持足够多的用户支持MS,直到Xbox和现代重写使其流行为止,这将是很有趣的。或者也许它总是足够好,所以人们坚持使用它。
人们为什么要抢银行?因为那就是钱所在。
@CesarGon:这不仅是因为用户群,也是为了易于开发。