Альфа-смешивание с пользовательским интерфейсом Apple на iPhone

#iphone #opengl-es #cocos2d-iphone

#iPhone #opengl-es #cocos2d-iphone

Вопрос:

Я пытаюсь разместить представление OpenGL поверх стандартного UIView с UIImageView. Когда я рисую что-либо в представлении OpenGL, я вижу небольшие проблемы с альфа-смешиванием, которые приводят к появлению белых линий, видимых ниже: альфа-смешивание белого

 CCDirector *director = [CCDirector sharedDirector];
EAGLView *glView = [EAGLView viewWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)
                               pixelFormat:kEAGLColorFormatRGBA8    // kEAGLColorFormatRGBA8
                               depthFormat:0                        // GL_DEPTH_COMPONENT16_OES
                    ];
[glView setMultipleTouchEnabled:YES];

[director setOpenGLView:glView];

if(![director enableRetinaDisplay:YES]) NSLog(@"Retina Display Not supported");
[director setDeviceOrientation:kCCDeviceOrientationPortrait];
[director setAnimationInterval:1.0/60];

[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

[[CCDirector sharedDirector] runWithScene:[PPAvatarEditorScene scene]];
[[CCDirector sharedDirector] resume];
[glView setOpaque:NO];
[avatarImage addSubview:glView];
  

Я использую Cocos2D для рисования в OpenGL view. Есть ли проблема с альфа-форматом пикселей или форматом текстуры?

Ответ №1:

Попробуйте установить glClearColor на черный:

 glClearColor(0, 0, 0, 0);
  

Комментарии:

1. Это выглядит нормально, если я очищу альфа-канал (glClearColor(0, 0, 0, 1.0);)

2. Но очистка, о которой вы упомянули, отображается точно так же, как на скриншоте. Я начинаю думать, что это больше связано с тем, как я это рисую, чем с любым вызовом GL или пиксельным форматом.

3. Тогда, вероятно, это состояние GL (метод glEnable).