2014-07-10 5 views
1

투명도가있는 이미지에 OpenGl에서 마스크를 적용하려고합니다.
나의 현재 코드는 다음과 같습니다 : 그 구멍 안에 마스크 이미지를 드로잉 한 후 다음 내 마스크로에 구멍을 절단, 내 배경 스프라이트 그리기, 그리고하고 우선 그래서OpenGL에서 투명 이미지 용 마스크 적용

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect { 
    glClearColor(1, 0, 0, 1); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glEnable(GL_BLEND); 

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    [self.bgSprite render]; 

    glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); 
    [self.maskSprite render]; 

    glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA); 
    [self.contentSprite render]; 
} 

. 하지만이 방법은 내 콘텐츠 이미지가 투명한 장소에서 배경 질감을보고 싶기 때문에 필요하지 않습니다.하지만 이제는 흰색으로 보입니다.
그 전에 안드로이드와 함께 작업했고 거기에서 포인터 더프 모드를 사용할 수있었습니다. 첫 번째 단계는 SOURCE 모드로 마스크를 그린 다음 SOURCE_IN으로 내용 이미지를 그린 다음 DESTINATION_OVER로 배경을 그렸습니다. 하지만 OpenGL에서 찾을 수 없습니다.

+0

이'DEPTH_TEST'와'ALPHA_TEST' 상태 무엇입니까 단계입니까? – Constantin

+0

@ Constantin 나는 그것을 바꾸지 않았다. 그래서 무엇이든 기본값이다. OpenGL을 처음 사용합니다. – rstk

답변

1

알겠습니다. 여기
그가

glClearColor(1, 0, 0, 0); 
glClear(GL_COLOR_BUFFER_BIT); 
glEnable(GL_BLEND); 

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
[self.maskSprite render]; 

glBlendFunc(GL_DST_ALPHA, GL_ZERO); 
[self.contentSprite render]; 

glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA); 
[self.bgSprite render];