我想用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);
}
答案 0 :(得分:2)
是的,绘图以像素为单位进行,因此为了在视网膜显示器上处理正确的渲染,您需要将顶点乘以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,因此使用它应该注意缩放。