我想在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);
}

最佳答案

是的,绘制是以像素为单位进行的,因此,为了同样在视网膜显示器上处理正确的渲染,您需要将顶点乘以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,因此使用它应注意缩放。

关于ios - 视网膜显示器上的glDrawArrays问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13590201/

10-09 16:25