【问题标题】:Different ways to detect size of image on mesh versus size of mesh检测网格上图像大小与网格大小的不同方法
【发布时间】:2020-06-11 08:35:01
【问题描述】:

我正在创建一个益智游戏,它使用 2D 网格生成随机大小的碎片。图像包含透明部分,有时一块是完全透明的。我需要检测一块透明的百分比。我发现这样做的一种方法是逐像素进行。我在HERE 上发布了我的解决方案。但是,这个过程在加载过程中增加了几秒钟,我想避免,我正在寻找其他想法

我考虑过使用 MeshCollider 的选择轮廓以某种方式获得一个表面积,我可以将其与网格的表面积进行比较,但我发现的一切都是使用专门的着色​​器渲染轮廓。有没有人有解决这个问题的想法?

.

【问题讨论】:

    标签: unity3d sprite mesh transparent mesh-collider


    【解决方案1】:

    1) 我猜你可以在你的精灵中添加一个 PolygonCollider2D 并使用它的 Path 来绘制轮廓和计算表面积。但是不确定这是否会更快。

    PolygonCollider2D.GetPath:

    路径是定义碰撞器轮廓的点之间的线段的循环序列

    检查PolygonCollider2D.GetTotalPointCount 或路径长度可能足以确定精灵是否为“空”。

    Sprite.verticesSprite.triangles 也可能有帮助。

    2) 您还可以提高第一种方法的性能:

    • 不再像现在那样调用 GetPixel,而是使用 GetPixels 或 GetPixels32 并在一个 for 循环中循环遍历数组。

    使用 GetPixels 比重复调用 GetPixel 更快,尤其是对于大型纹理。此外,GetPixels 可以访问单独的 mipmap 级别。对于大多数纹理,更快的是使用 GetPixels32,它返回低精度颜色数据,无需进行昂贵的整数到浮点数的转换。

    • 只检查每第 2 或第 n 个像素,因为它应该足以进行近似计算
    • 限制类型转换的数量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      相关资源
      最近更新 更多