Cocos2D에서 스프라이트를 렌더링 할 때 문제가 있습니다. 컨텍스트를 만들면 아마 미리 곱셈 된 알파와도 관계없이 검정색 인공물이 생깁니다. 다음 코드는 완전한 흰색 원을 만들어야합니다.Cocos2D에서 32 비트 컨텍스트 주위에 검은 선이 나타나는 이유는 무엇입니까?
- (void)renderTest
{
CGRect rect = CGRectMake(0, 0.0, 100.0, 100.0);
unsigned char *data = calloc((int)rect.size.width * (int)rect.size.height, 4);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(data, (int)rect.size.width, (int)rect.size.height, 8, (int)rect.size.width*4, colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextAddArc(context, rect.size.width/2, rect.size.height/2, rect.size.width * 0.4, 0.0, 2 * M_PI, 0);
CGContextFillPath(context);
CCTexture2D *tex = [[CCTexture2D alloc] initWithData:data pixelFormat:kCCTexture2DPixelFormat_RGBA8888 pixelsWide:rect.size.width pixelsHigh:rect.size.height contentSize:rect.size];
self.texture = tex;
self.textureRect = rect;
free(data);
CGContextRelease(context);
}
흰색 배경에 배치 할 때는이 표시가 보이지 않아야합니다. 그러나 실제로 나는이 얻을 :
을 내가 UIKit가 UIGraphicsGetCurrentContext()
을 사용하여 정확히 같은 일을 할 경우는 검은 색 헤어 라인없이 완벽하게 작동합니다.
누구나 dodgy artifacts없이 알파 채널을 렌더링하는 방법을 알려주시겠습니까?
포인트 # self.blendFunc = (ccBlendFunc)'로 한 작품 {GL_ONE, GL_ONE_MINUS_SRC_ALPHA}'사실을 제외하고 불투명도 수준에서는 훌륭하게 재생되지 않습니다. 포인트 # 2 iOS에서 사용할 수있는 미리 곱셈되지 않은 32 비트 모드가 있는지 확실하지 않습니다. 포인트 3 나는 다음에 시도 할 것입니다! – jowie
포인트 # 3은 불투명도 레벨과 페이드 애니메이션이 있더라도 훌륭하게 작동합니다. RGB 값을 사용자 지정 텍스트 색 매개 변수로 변경하면 다른 색으로 텍스트를 렌더링해야 할 필요가 있다고 생각합니다. 감사! – jowie