【问题标题】:glDrawArrays problems on retina display视网膜显示上的 glDrawArrays 问题
【发布时间】:2012-11-27 17:56:12
【问题描述】:

我想在 cocos2d 中使用 glDrawArray 方法绘制全屏大小的简单正方形。当视网膜被禁用时,一切都按预期绘制,但启用时 - 一切都是应有的一半。 (似乎 glDrawArray 中的坐标系不是以点为单位,而是以像素为单位)

其他绘图函数按预期工作,但由于我正在绘制复杂的形状,我们必须使用 glDrawArray,因为它要快得多。

有什么办法解决这个问题吗?

-(void) draw
{
    CGPoint box[4];
    CGPoint boxTex[4];

    CGSize winSize = [[CCDirector sharedDirector] winSize];

    //float boxSize = winSize.width;

    box[0] = ccp(0,winSize.height); // top left
    box[1] = ccp(0,0); // bottom left
    box[2] = ccp(winSize.width,winSize.height);
    box[3] = ccp(winSize.width,0);

    boxTex[0] = ccp(0,1);
    boxTex[1] = ccp(0,0);
    boxTex[2] = ccp(1,1);
    boxTex[3] = ccp(1,0);

    // texture backround
    glBindTexture(GL_TEXTURE_2D, self.sprite.texture.name);
    glVertexPointer(2, GL_FLOAT, 0, box);
    glTexCoordPointer(2, GL_FLOAT, 0, boxTex);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}

【问题讨论】:

    标签: ios cocos2d-iphone


    【解决方案1】:

    是的,绘图是以像素为单位完成的,因此为了在视网膜显示器上也能正确渲染,您需要将顶点乘以 CC_CONTENT_SCALE_FACTOR():

    for (int i = 0; i < 3; i++)
        box[i] = ccpMult(box[i], CC_CONTENT_SCALE_FACTOR());
    

    CC_CONTENT_SCALE_FACTOR 在视网膜设备上返回 2 而不是 1,因此使用它应该注意缩放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 2015-07-14
      相关资源
      最近更新 更多