【问题标题】:Cocos2d 2.0: vertices and spritesCocos2d 2.0:顶点和精灵
【发布时间】:2012-08-11 11:03:15
【问题描述】:

我正在从this cool raywenderlich tutorials 研究 OpenGL ES 2.0 着色器,我想知道为什么说 Sprite 有 4 个顶点。 是否有超过 4 个顶点的情况?

我知道这听起来很傻,但我希望它必须有所需的顶点数才能形成精灵可见部分的边框。换句话说,我认为 alpha 通道是一种分隔精灵的方式。

然后我检查了我的游戏中的子弹碰撞方法(我使用了一个模板从它开始),它们使用了精灵边界框。盒子意味着四个顶点:),所以我不应该感到惊讶。 但是,我仍然期待 Cocos2D 能够检测到不可见像素。

谁能帮我澄清一下?是否有更多方法可以进行仅检测可见像素的子弹碰撞检测? [我找到了一些answer,但没有被接受,而且似乎需要很多步骤,我认为可能有一个内置的 Cococs2d 方法]。

或者这是我在 OpenGL ES 2.0 中学习了着色器之后必须弄清楚的事情吗?

【问题讨论】:

    标签: ios cocos2d-iphone sprite shader alpha


    【解决方案1】:

    精灵是显示在屏幕上的纹理,应用了缩放、旋转、位置、颜色等属性。

    纹理是矩形,因为它们是内存中的图像。要绘制一个矩形,您需要 4 个顶点。从历史上看,GPU 仅适用于二次方、二次方纹理,因为这是在硬件中实现的最简单的方法。后来的纹理可以是任何矩形,在更现代的 iOS 设备(我认为是 iPhone 3GS)上,您还可以使用 NPOT 纹理(非 2 的幂)。但总的来说,纹理是并且将永远是矩形的。

    要使纹理部分透明,它有一个 Alpha 通道。这就像 3 个 RGB 通道之一,只是它控制像素的透明度。在某些纹理格式中,Alpha 通道仅存储打开或关闭(1 位 Alpha)。

    因此,当 GPU 将纹理渲染到屏幕时,所有关联 alpha 值为 0 的像素都不会被绘制,从而允许背景像素显示出来。

    跟踪图像的可见部分以获取碰撞多边形需要运行相对复杂的算法。例如,PhysicsEditor 采用这种机制从图像中生成物理碰撞信息 (see video at 0:15)。

    GPU 不使用该技术,因为:

    • 初始追踪成本很高
    • 生成的多边形会很复杂(100 多个顶点)
    • 根据图像的不同,多边形的复杂性会有很大差异,这会导致优化渲染变得困难

    本质上,遍历整个纹理而不渲染 0 alpha 像素而不是专注于仅查找、存储和渲染可见像素要容易和快捷。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多