2014-03-01 5 views
0

나는 흉터 텍스처를 가지고 있으며 알파 블렌딩을 사용하여 배경 스킨 컬러를 제거하고 싶습니다. 그러나 특정 텍스처의 개별 픽셀의 불투명도를 변경하는 데 문제가 있습니다. 투명한 배경으로 텍스처를 만드는 가장 쉬운 방법은 무엇입니까? 나는 C++과 openGL을 사용하고있다.알파 블렌딩을 사용하여 투명 배경을 가진 텍스처 OpenGL

BMP 그림 형식을 사용하고 있는데 그 흉터 텍스처를 얼굴에 매핑하려하지만 흉터 텍스처의 배경색이 얼굴에보기 흉한 것처럼 보이므로 그 부분을 제거하고 흉터 텍스처 만 매핑하려고합니다. 얼굴. 또한 알파 블렌딩을 사용하여이 작업을 수행해야합니다. 블렌드 함수를 사용해야한다는 것을 알고 있습니다.

glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

각 텍스처에 대해 투명도를 어떻게 변경할 수 있습니까?

+2

도움이 필요하면 좀 더 구체적으로 설명해야합니다. 단어에 대한 문제를 설명 할 수없는 경우 항상 결과 다이어그램과 예상 결과에 대한 설명을 포함 할 수 있습니다. 그러나 지금 당장은 이것이 일반적인 추측입니다. –

답변

0

스프라이트에서 배경을 제거하려는 것처럼 보입니다. 그렇다면 김프라는 프로그램을 사용하여 배경을 선택하고 삭제 한 다음 내보내기를하고 닫으십시오. 그러나 내보내기 중에 저장하라는 메시지가 나타나면 no라고 말하십시오. Google 김프와 배경 수정을하면 필요한 정보와 도구가 표시됩니다.

glBlendFunc (GL_ONE, GL_ONE); 

블렌드 기능에서 텍스처 매핑의 알파 값을 사용할 수 있습니다. 그렇다면 (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 항상 좋은 기능입니다.

그러나 기본 요소가 텍스처 매핑 될 때 블렌드를 원한다면 (즉, 텍스처 맵의 일부가 기본 요소의 기본 색상을 통해 표시되도록하려는 경우) OpenGL 혼합을 사용하지 마십시오. 대신 glTexEnv()를 사용하고 텍스처 환경 모드를 GL_BLEND로 설정합니다. 이 경우 텍스처 환경 색상을 (0,0,0,0)의 기본값으로 두길 원할 것입니다.

색상을 (1,1,1,1)로 설정하고 기본 GL_MODULATE를 사용하는 것이 더 쉽습니다. 또한 glBegin()과 glEnd 사이에서만 특정 명령을 사용할 수 있으므로 glTexCoord glColor glVertex 및 다른 유사한 명령을 사용하십시오. 따라서 배경에 대해 하나의 glBegin()/glEnd() 콤보를 사용한 다음 설정을 변경하고 다른 glBegin()/glEnd()를 사용하여 스프라이트를 그립니다.

+0

답변 해 주셔서 감사합니다. 이것은 내가 원하지만 BMP 그림 형식을 사용하고 있으며이 형식은 투명한 배경을 허용하지 않으므로 사진 편집 도구가 제 경우에는 작동하지 않습니다. OpenGL에서 알파 블렌딩으로 이것을 달성 할 수 있습니까? – user3369407

관련 문제