2015-05-29 76 views
0

我正在做一个2D游戏,我一直在寻找通过关于吨这使得线程的 - 这似乎是一个热门话题。然而,我遇到的问题是,建议每次都有所不同,这可能部分是由于问题跨越了几年的范围。渲染2D图像的最佳实践

根据所有主题的要点,我收集到我将使用VBO呈现每个单独的对象,可能会翻译并转换它以适应当时绘制的任何精灵的需求。我应该如何绘制不同的精灵?我应该使用spritesheet并指定像素偏移吗?也许纹理地图集?还是应该为每种不同类型的对象使用一个VBO?

更新回答艾克的问题: 我打算只用预先绘制的精灵有固定的动画。理想情况下,我希望游戏能够在尽可能多的系统上以可通过的帧速率播放。这将是一个拼图游戏。我并不太在意夸张的图形效果。我可能会对“抛光”阶段增加额外的效果感兴趣,但我完全可以坚持使用纯精灵。

+0

答案是一个响亮的“它取决于”。最佳实践是一个相当滑稽和有见地的事情。与VBO相关的成本可能会更好地避免,如果您处理相对较低的vert。计数。我可能会自己去一个不同的方向。但我不能说我会使用哪种替代方案。 – Aumnayan

+0

需要更多的细节!例如,你是否想要用骨骼来连接角色,在那里你可以以编程方式移动他们的胳膊和腿,例如, (可能用IK),或者只是一个带有固定动画的预绘制的精灵?你瞄准的是旧硬件(鉴于它是2D游戏),还是想全力以赴并瞄准更强大的机器?它是什么样的游戏?你想要什么样的图形效果? –

回答

1

如果你主要想要多边形的数量(即四边形或简单的补丁)简单的二维,不要打扰VBOs,在这种情况下,他们不会得到任何性能(太小,并经常更新)和“动态”VBO支持仍然是一些机器人的bug(在许多其他平台上并不重要)。

如果你想要良好的性能,你需要做一些绘制调用(即每四不是一个)。要做到这一点,请使用纹理地图和四边形排列的三角形条。您可以将带中的每个四边形与一个平面三角形链接起来(它将不可见并且非常便宜)。当你改变纹理或混合模式时,你只需要做一个新的绘制调用(或者如果你想使用不同的着色器,但在2D游戏中很少见)。

所以基本上,如果你想画一个四边形,你检查纹理/混合模式是一样的前一个,如果是,你把你的三角形的三角形带。如果不是,则绘制当前的三角形条并开始新的三角形条。

您可能需要在开发过程中多次更改纹理地图集(添加新的东西,移动现有的东西以腾出空间),以便为此做好准备(简化/不需要更改代码)。

编辑:下面是一个具体的例子(image source): Pix the Cat sprites

此纹理地图包含在游戏Pix的猫的多人模式中使用的所有图像。

比方说游戏需要绘制两个鸡蛋和爆炸。这将只画出1三角形带:

triangle strip example

游戏首先构建2个三角形的第一个蛋,接着用2个平面三角形(在此显示为红色线),然后2个三角形的第二蛋, 2个平面三角形,然后是2个三角形用于爆炸。然后所有这些都是一次绘制的:一个三角形条形图的调用。这是可能的,因为蛋和爆炸都在相同的纹理上。

在游戏中吸引数百四边形每帧的结束,但有只绘制调用了一把。

+0

如果我不应该使用维也纳国际组织,有什么选择?大多数消息来源似乎都建议使用VBOs(我认为这是因为他们的3D意图)。 –

+0

glVertexAttribPointerça在当前绑定的VBO中取一个偏移量,或者如果没有绑定VBO,则直接指向顶点数据。后者的用法是你需要的。 – Jerem

+0

好吧,如果我在这里理解正确,那么想法是连接相同的“瓷砖”,然后将背景标记为平铺纹理。任何剩余的棋子,如玩家角色和敌人,都将分开绘制。 –