解析Cocos2D中坐标系问题


  本文标签:Cocos2D 坐标 OpenglES

  Cocos2D是以OpenglES为底层图形库, 所以它采用的是OpenglES坐标系统,即x轴向右,y轴向上  。  而苹果的Quarze2D则使用的是不同的坐标系统,x轴向右,y轴向下  。在初学OpenglES纹理的时候,用Quarze2D读取的图片在贴在OpenglES坐标系里图片是上下颠倒的,原因就是坐标系的不同造成的  。

  最近在学习Cocos2D的时候,用它的API进行渲染到纹理的时候也出现了上下颠倒的情况  。

  具体是这样发生的  。首先我进行渲染到纹理的功能,伪代码如下:

  1. // 1: Create new CCRenderTexture     
  2.    CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];    
  3.        
  4.    // 2: Call CCRenderTexture:begin     
  5.    [rt beginWithClear:bgColor.r g:bgColor.g b:bgColor.b a:bgColor.a];    
  6.    // 3: Draw all you want here with OpenglES     
  7.    // 4: Call CCRenderTexture:end     
  8.    [rt end];    
  9.        
  10.    // 5: Create a new Sprite from the texture     
  11.    CCSprite *renderSprite [CCSprite spriteWithTexture:rt.sprite.texture];    
  12.  // 1: Create new CCRenderTexture  
  13.     CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];  
  14.       
  15.     // 2: Call CCRenderTexture:begin  
  16.     [rt beginWithClear:bgColor.r g:bgColor.g b:bgColor.b a:bgColor.a];  
  17.     // 3: Draw all you want here with OpenglES  
  18.     // 4: Call CCRenderTexture:end  
  19.     [rt end];  
  20.       
  21.     // 5: Create a new Sprite from the texture  
  22.     CCSprite *renderSprite [CCSprite spriteWithTexture:rt.sprite.texture];  

  然后我用第五步生成的精灵加到场景中,发现图是上下倒立的  。因为我在第三步中我是采用的是openglES的坐标系,如果我用Quarze2D坐标系的方式去绘制,结果就是正确的  。

  还有一种解决办法,就是

  1. renderSprite.flipY = YES

  发生这种问题的具体原因不太清楚,只有看看cocos2d具体实现了  。

  小结:解析Cocos2D坐标系问题的内容介绍完了,希望通过本文的学习,能对你有所帮助!