1

cocos2dのglDrawArrayメソッドで全画面サイズのシンプルな正方形を描画したい。Retina を無効にすると、すべてが期待どおりに描画されますが、有効にすると、すべてが本来の半分の大きさになります。(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);
}
4

1 に答える 1

2

はい、描画はピクセル単位で行われるため、Retina ディスプレイでも適切なレンダリングを処理するには、頂点に CC_CONTENT_SCALE_FACTOR() を掛ける必要があります。

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

CC_CONTENT_SCALE_FACTOR は、Retina デバイスでは 1 ではなく 2 を返すため、これを使用するとスケーリングが処理されます。

于 2012-11-28T02:48:54.903 に答える