Cocos2d 2.0:顶点和精灵

时间:2012-08-11 11:03:15

标签: ios cocos2d-iphone sprite shader alpha

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

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

然后我检查了游戏中的子弹碰撞方法(我用模板开始)并使用精灵边界框。 Box意味着四个顶点:),所以我不应该感到惊讶。 但是,我仍然希望Cocos2D有办法检测不可见的像素。

有人能帮助我澄清这一点吗?是否有更多方法可以检测仅检测可见像素的子弹碰撞检测? [我发现了一些answer但是没有被接受,似乎需要采取很多步骤,我认为可能有一种内置的Cococs2d方法]。

或者,这是在我在OpengGL ES 2.0中学习着色器之后需要弄清楚的吗?

1 个答案:

答案 0 :(得分:4)

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

纹理是矩形,因为它们是内存中的图像。要绘制矩形,您需要4个顶点。从历史上看,GPU只能使用quadtricic,power-of-two纹理,因为这是最简单的硬件实现。以后的纹理可以是任何矩形,在更现代的iOS设备上(我认为是iPhone 3GS)你也可以使用NPOT纹理(非2的功率)。但总的来说,纹理总是呈矩形。

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

因此,当GPU将纹理渲染到屏幕时,根本不会绘制具有相关alpha值0的所有像素,从而允许显示背景像素。

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

GPU不使用该技术,因为:

  • 最初的追踪费用很高
  • 生成的多边形将是复杂的(100 +顶点)
  • 根据图像,多边形的复杂程度会有很大差异,这会使渲染优化变得很难

基本上,遍历整个纹理并且不渲染0像素而不是专注于查找,存储和渲染可见像素,这样更容易,更快。

相关问题