对于2D游戏,是否有任何理由不使用Direct3D或OpenGL等3D API?


20

我已经很长时间没有从事游戏开发了。当我这样做时,大多数人都使用Direct Draw来创建2D游戏。在我停下脚步的时候,人们说采用正交投影的OpenGL或Direct3D只是要走的路。

我正在考虑重新创建2D游戏,尤其是在手机上,但也可能在XNA平台上。要使用OpenGL制作东西,我需要(充分)小的学习曲线来使自己适应3D开发。

是否有任何理由跳过它,而是使用2D框架工作,而我只有一个宽度x高度帧缓冲区,我需要用像素填充?


这个问题实际上是错误的...我的意思是:Direct3D和OpenGL确实不是3D API,对吗?他们提供硬件加速功能,但同时提供2D和3D功能。那里有一点区别。
jacmoe

Answers:


20

您绝对应该使用在后端使用3D渲染器的工具。但是在您的高级代码中,您甚至都不应该看到Z轴。所有这些都应该在较低的层次上进行抽象。如果直接操作像素,则可能是做错了。

对于我自己的游戏,我建立了一组用于处理2D对象的类。我的游戏逻辑仅处理x和y坐标。我的班级还处理旋转,缩放,混合模式等问题。

当然,您也可以使用现有的2D库-Cocos2D在iPhone上很流行。这些库中的大多数(如果不是全部)将基于较低级别的3D API构建,以便它们从可用的加速中受益。


我很想听听xna如何处理幕后的2d api
Iain 10'7

5
最后都是3D。Spritebatch是2D渲染主力,是一种着色器效果。
drxzcl 2010年

+1用于将接口与实现分离。
史蒂夫·S

@Iain这是XNA作者xnatoolkit.codeplex.com编写的DirectX11中的XNA 实现
ClassicThunder13年

8

有理由不使用3D API。

仅北美,欧盟西北和日本的计算机支持它们。

例如,我住在巴西,我的姊妹计算机是新的,具有多核处理器,数GB的ram,但它不运行OpenGL游戏。

例如,我只能在自己的计算机上播放“矮人要塞”(使用OpenGL渲染ASCII图形),在其他任何计算机上,我都发现它运行缓慢。

我问周围的人,这不仅是巴西的问题,而且在世界上的许多地方也很普遍。实际上拥有OpenGL或Direct3D兼容卡的人口很少。

只是这少数人得到了公司的更多关注...

但是,如果您仅针对这些“传统”市场(北美,西北欧盟,日本),那就去吧!

编辑那些不赞成投票的人:显然您不同意,因此,您是否有证据证明没有人再提供不具有VIA或SIS芯片(甚至其他未知或较差的制造商)的计算机,而这些计算机都不支持或仅支持OpenGL 1.0?

我家里有两台这样的机器,它们是新机器(两者都有一个以上的内核,都具有2GB的内存,都具有高于2GHz的时钟频率...)

我的大学有200台这样的机器,甚至有一些戴尔制造的机器。

这很简单,GPU昂贵(甚至是笨拙的Intel的GPU),在贫穷的市场中,这是一种奢侈,人们购买机器来运行MS Word和阅读电子邮件时,不会购买具有良好图形芯片的机器。他们可以买到便宜50美元的食物,特别是当50美元是大多数人一个月必须购买的食物时。

请不要来这里是说BS,如果您从未访问过第三世界国家,而且,也不要说第三世界国家的人不玩游戏,他们会做很多事情,Osmos关于他们的Linux版本发布的开发人员帖子指出,很多传入流量(实际上,大部分来自俄罗斯)是因为这些人通常被忽略。

在巴西,最流行的游戏是在软件模式下运行的Counter-Strike ...有些Lan-Houses只有10%的计算机带有GPU,甚至大型的200甚至300个工作站也是如此。

每次我解释为什么其他游戏使用Allegro 4.4而不是5.0的原因是因为5.0不支持Direct Draw时,我不应该在此发布该信息,所以我会免费损失该发布的积分。在软件模式下,很多人都说我是骗子,或者愚蠢地说出有关OpenGL加速的实际可用性的真相,这让我感到很惊讶。

编辑2:为了能够玩和开发具有OpenGL的游戏,我不得不乞求父母和其他人给我买GeForce 8600(那是我发现仍然可以运行Mass Effect 1和其他UT3的最便宜的显卡引擎游戏),他们给我买了一个,但是现在我已经好几年了,再也没有收到其他礼物了,甚至还没有生日礼物,因为那是多么昂贵的礼物,我希望这张卡片能使用3或4年以上...

编辑3:
一个实际的例子:Eletronic Arts为Ultima Online创造了一个新客户,该客户将3D加速用于其2D图形...结果:许多玩家抱怨帧率低得离谱,而EA在决定强制使用DVR时倒退了新客户端(现在允许使用旧客户端)

2015年第4版:此答复将大部分留在历史文物上,目前即使是在第三世界国家,带有极烂芯片的计算机数量也很少,它们仍然存在,尤其是在办公室专用计算机中,但事实并非如此。不再常见,我认为不再需要与软件模式API一起使用,基于OpenGL的API已成为当前的发展之路。


3
今天没有芯片不支持3D。很可能您只需要更新驱动程序,因为Windows提供的驱动程序不附带OpenGL支持。目前最常见的废话GPU是Intel GMA东西,甚至还具有一些基本的OpenGl支持。
Axel Gneiting

1
再重复一遍:这里的芯片比英特尔GMA更糟糕。是的,某些经过修改的驱动程序确实可以解决该问题,但是您不能期望用户对此有所了解。
加速

一个实际的例子:Eletronic Arts为Ultima Online创造了一个新客户,该客户将3D加速用于其2D图形...结果:许多玩家抱怨帧率低得离谱,而EA在强制执行新客户的决定中退缩了(现在可以使用旧的了)
加速器2010年

1
新的客户端来自2008年,我的故事是这样说的:2008年,人们不喜欢OpenGL客户端,而转而使用1997年的客户端。
speeder 2010年

1
仅仅因为人们不更新驱动程序并不意味着他们的计算机不支持OpenGL和Direct3D。OP应该只检查OpenGL / Direct3D兼容性。如果不存在,他应该告诉用户更新驱动程序。在98.6%的情况下,即使在第二世界和第三世界,这也将起作用。认真地说,您可以链接到您购买的缺少OpenGL / Direct3D支持的计算机吗?
阿维(Avi)2012年

3

不,没有。使用3d渲染器,您将获得更好的效果和更快的渲染。例如,是我几周前(在一个周末)制作的2D游戏-球形效果在3D着色器上有很大的依赖,尽管在许多方面它们都是2D效果。同样,我在该游戏中广泛使用了可用的渲染技术-那里正在运行三种或四种不同的像素着色器效果,所有这些使我能够更快地开发并使其更漂亮。

拥抱3d并热爱它,但是只需少一根轴就可以爱上它。


2

3D API通常是可行的方法。当今的GPU设计用于渲染3D图形,因此可以保证您具有相当出色的性能。正如ZorbaTHut所说,走3D路线可以让您利用像素着色器之类的优势。

实际上,现在已经没有太多2D API了。DirectDraw已被弃用,并且大多数基于2D /矢量的库仍然使用OpenGL或Direct3D进行渲染。甚至现代的UI工具箱都利用3D API进行渲染和合成。以WPF(微软最新的UI框架)为例:它使用Direct3D进行渲染。


2

仍然有数量惊人的真正老旧的机器具有糟糕的/根本不存在的3d加速和从未更新过的驱动程序,因此使用DirectDraw的速度将比OpenGL或D3D快得多。当我尝试在OpenGL中编写一个新的渲染后端以支持其他平台时,我在开发大约10年的2D多人游戏时遇到了这种情况。许多玩家报告称,由于帧速率低,OpenGL模式无法播放。我也同意巴西的说法,在美国和欧洲以外,这种情况更为普遍,但在那些地方也是如此。

如果您以手机或XNA为目标,则一定要使用3D。但是,如果您想制作一个可以在任何PC上任何地方运行的游戏,我会坚持使用DDraw。


1

我唯一能想到的是,在2D上使用3D API会增加一些基本的复杂性。至少在OpenGL中,您必须加载和管理纹理,并且在绘制纹理时,需要正确设置几何形状。包装层解决了这些问题。

就是说,使用3D图形后端似乎有更多的利弊,因此,如果您问我,这是值得的。


1

如果您的游戏足够简单,并且希望该游戏在低端计算机(尤其是上网本和较旧的笔记本电脑)上运行良好(没有3D加速或非常小-较旧的Intel集成显卡等),那么仍然值得考虑2D帧缓冲方法

如果您对游戏至少需要低端的ATi / NVidia卡/芯片感到满意,那么使用3D API将使您做很多很酷的事情(alpha混合,缩放/旋转等),在纯软件渲染器中出色/高效地执行操作将非常棘手。

另外,请注意,当涉及3D硬件(和双线性过滤/ alpha混合)时,在“纯2D”中非常简单的一些事情会变得更加有趣。了解预乘alpha的概念。还要考虑一下,例如,如果要缩放/旋转视图,如何处理2D瓷砖贴图中的瓷砖之间的接缝。

还要记住,填充率是有限的。在2D模式下达到这些极限非常容易。您可能没有太多的多边形,但是如果您想要大量的alpha混合视差层,粒子或后期效果-您可以很轻松地结束与高端3D游戏一样多的像素填充。

但是一般来说,3D硬件很棒,并且添加混合是您的朋友:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.