2012-09-16 7 views
2

OpenGL의 배경 위에 이미지를 렌더링해야하며 Photoshop의 "Color Dodge"와 동일한 결과를 얻으려고하지만이를 수행 할 수 없습니다.OpenGL에서 색상 피하기

지금은하고 있어요 :

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

// background 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, background); 
glBegin(GL_TRIANGLE_STRIP); 
glTexCoord2f(0.0, 0.0); 
... 
glEnd(); 
glDisable(GL_TEXTURE_2D); 

// image 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, image); 
glBegin(GL_TRIANGLE_STRIP); 
glTexCoord2f(0.0, 0.0); 
... 
glEnd(); 
glDisable(GL_TEXTURE_2D); 

배경없이 알파 채널과 TGA입니다. 이미지는 알파 채널이있는 tga입니다.

이미지를 배경에 알파로 렌더링하지만 너무 밝게 표현합니다.

glBlendFunc(GL_ONE, GL_ONE); 

그러나 알파 채널을 갖는에도 불구하고 이미지가 흰색 사각형으로 렌더링됩니다 :

나는대로 쉽게해야한다는 읽어 보시기 바랍니다.

분명히 뭔가 잘못하고 있습니다.

답변

3

블렌딩을 사용하여 Photoshop "Color Dodge"효과와 같은 효과를 얻을 수는 없습니다. 표준 혼합 논리를 사용하여 표현할 수있는 것보다 더 복잡한 수학 함수입니다. 따라서 작동시키기 위해 프로그래밍 방식의 혼합 방법론을 생각해 내야합니다.

+0

나는 상자에서 처리 할 수 ​​있다고 가정했습니다. 지금은 배경 질감과의 혼합이 일어나지 않고 대신 배경색 (흰색)으로 보인다. –

0

GL 혼합 func에서 색상 닷지를 만드는 방법이 있습니다. 그것은 혼합 모드의 Photoshop 버전과 같지만 Photoshop의 "Color Dodge"보다 어둡습니다. 다음 유형의 함수를 사용해야합니다.

glBlendFunc(GL_DST_COLOR, GL_ONE);