【问题标题】:OpenGL ES 1.1 Alpha Blending sorting on a single meshOpenGL ES 1.1 Alpha Blending 对单个网格进行排序
【发布时间】:2014-03-17 04:00:34
【问题描述】:

我正在开发一个使用 OpenGL ES 1.1 进行渲染的 Iphone 游戏,我们在让 alpha 排序在大网格上正常工作时遇到了一些问题。有问题的网格是体育场,alpha 部分是体育场内的人群。问题是当在人群上使用 Alpha Blending 时,我们会遇到一些排序问题,导致用户无法区分人群的前面和后面的人群。在大多数情况下,人群只是乱七八糟地出现,没有人能真正分辨出谁应该在哪里。

通常要解决这样的问题,我只需将体育场和人群彼此分开,然后将每个人群部分分开(每个人群都在自己的平面上),以便我们可以更好地对它们进行分类。但是我们需要将绘制计数保持在 100 个以下,所以这不是我们可以做的。

我的另一个想法是尝试通过获取所有顶点然后尝试通过顺时针旋转对它们进行排序来进行某种疯狂的排序。 IE,取 0 到 10 节,然后先画它们,然后画 11 到 20 节,然后画下一个,依此类推,直到整个人群都被画出来,但我不知道如何开始做这个或这个是甚至可以做到。

如果这不可能,我想我可以让艺术家切割人群网格,使其更适合显示在上面的人的轮廓,这样我们就可以显示更少的 alpha,从而减少过度绘制并且可能更好的排序。但我不确定添加更多顶点是否会导致任何性能问题,因为我对 Iphone 没有太多经验。

如果有人有任何想法或任何文章的链接可能有助于我更好地理解这个问题,这将非常有帮助,我现在要感谢您提供的任何帮助。

【问题讨论】:

  • 从您的描述中根本不清楚您目前是如何绘制东西的。对于像人群这样的东西,你不能在没有深度测试的情况下将它们从后到前绘制吗?
  • 我们目前正在一个网格中绘制所有内容,包括人群和体育场。就像我之前说的那样,我确实建议将人群从体育场中撤出,但被告知由于限制,这是不可能的。是否有可能以任何其他方式做到这一点,或者将人群与体育场分开是最好的方式。
  • 感谢您的勾选。我想知道这对你有什么影响。

标签: ios sorting opengl-es


【解决方案1】:

如果您的结构有 alpha,则必须对其进行排序。如果没有,那就没有。

这是我的想法……让他们把体育场和人群分开。你说每个人群都是一个平面。所以让每个人群成为一个单独的项目 - 但让他们强制每个人群平面具有相同数量的索引。无论每个人群是 6 或 2 组。

希望体育场没有任何 alpha,只有人群才有。在这种情况下,排列数据,使其存储在这样的数组中:体育场,然后是人群 1 平面、人群 2 平面等。然后将每个人群平面的顶点加载到另一组数组中。

希望你也是三角形而不是三角形条。那么你就有了顶点和索引。在这种情况下,您必须更改的唯一结构是平面的顺序,每个平面只有 6 个索引..(或者有多少索引)。

根据与相机的距离对人群的飞机进行排序。然后从人群平面数组中复制数据以覆盖这些平面的索引数据......然后将整个批次绘制为一个对象。您可能无法使用 VBO,但您可以将其作为一个对象来使用。

请记住,仅仅因为您将它作为一个对象绘制并不意味着它必须作为一个对象交付给您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2012-04-19
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多