I'm just starting with OpenGL, I would like to fill an area with a plain color, but i always get "stripes" inside this area. Would someone know how to fill it with a simple plain color? I put some pictures attached to this post :
At first :
[attachment=9738:Capture d’écran 2012-07-02 à 02.18.16.png]
After i click once (it calls genBackground again, the unwanted stripes appear :
[attachment=9739:Capture d’écran 2012-07-02 à 02.18.25.png]
Same thing after another click :
[attachment=9740:Capture d’écran 2012-07-02 à 02.18.38.png]
Here is the code :
Terrain is the area where to draw the plain color :
#import "Terrain.h"
#import "HelloWorldLayer.h"
@implementation Terrain
@synthesize textureImage = _textureImage;
- (ccColor4F)randomBrightColor {
while (true) {
float requiredBrightness = 192;
ccColor4B randomColor =
ccc4(arc4random() % 255,
arc4random() % 255,
arc4random() % 255,
255);
if (randomColor.r > requiredBrightness ||
randomColor.g > requiredBrightness ||
randomColor.b > requiredBrightness) {
return ccc4FFromccc4B(randomColor);
}
}
}
- (void)generateVertices {
_hillVertices[_nHillVertices] = CGPointMake(0, 0);
_hillTexCoords[_nHillVertices++] = CGPointMake(0, 0);
_hillVertices[_nHillVertices] = CGPointMake(100, 50);
_hillTexCoords[_nHillVertices++] = CGPointMake(100, 50);
_hillVertices[_nHillVertices] = CGPointMake(150, 200);
_hillTexCoords[_nHillVertices++] = CGPointMake(150, 200);
_hillVertices[_nHillVertices] = CGPointMake(100, 300);
_hillTexCoords[_nHillVertices++] = CGPointMake(100, 300);
}
- (id)init {
if ((self = [super init])) {
[self generateVertices];
}
return self;
}
- (void) draw {
glBindTexture(GL_TEXTURE_2D, _textureImage.texture.name);
glDisableClientState(GL_COLOR_ARRAY);
glColor4f(1, 1, 1, 1);
glVertexPointer(2, GL_FLOAT, 0, _hillVertices);
glTexCoordPointer(2, GL_FLOAT, 0, _hillTexCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)_nHillVertices);
}
and this is the "HelloWorldLayer", where i set the background and the textureImage color :
-(CCSprite *)spriteWithColor:(ccColor4F)bgColor textureSize:(float)textureSize {
// 1: Create new CCRenderTexture
CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];
// 2: Call CCRenderTexture:begin
[rt beginWithClear:bgColor.r g:bgColor.g b:bgColor.b a:bgColor.a];
// 3: Draw into the texture
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
float gradientAlpha = 0.7;
CGPoint vertices[4];
ccColor4F colors[4];
int nVertices = 0;
vertices[nVertices] = CGPointMake(0, 0);
colors[nVertices++] = (ccColor4F){0, 0, 0, 0 };
vertices[nVertices] = CGPointMake(textureSize, 0);
colors[nVertices++] = (ccColor4F){0, 0, 0, 0};
vertices[nVertices] = CGPointMake(0, textureSize);
colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha};
vertices[nVertices] = CGPointMake(textureSize, textureSize);
colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha};
glVertexPointer(2, GL_FLOAT, 0, vertices);
glColorPointer(4, GL_FLOAT, 0, colors);
glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
CCSprite *noise = [CCSprite spriteWithFile:@"Noise.png"];
[noise setBlendFunc:(ccBlendFunc){GL_DST_COLOR, GL_ZERO}];
noise.position = ccp(textureSize/2, textureSize/2);
[noise visit];
// 4: Call CCRenderTexture:end
[rt end];
// 5: Create a new Sprite from the texture
return [CCSprite spriteWithTexture:rt.sprite.texture];
}
- (void)genBackground {
[_background removeFromParentAndCleanup:YES];
ccColor4F bgColor = [self randomBrightColor];
_background = [self spriteWithColor:bgColor textureSize:512];
CGSize winSize = [CCDirector sharedDirector].winSize;
_background.position = ccp(winSize.width/2, winSize.height/2);
ccTexParams tp = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
[_background.texture setTexParameters:&tp];
[self addChild:_background];
ccColor4F color3 = [self randomBrightColor];
CCSprite *textureImage = [self spriteWithColor:color3 textureSize:512];
//ccTexParams tp2 = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
//[stripes.texture setTexParameters:&tp2];
_terrain.textureImage = textureImage;
}
Thanks for your help