2010-03-21 3 views
2

안녕하세요, 저는 프레임 버퍼에 일정한 색을 그리고 RGBA 텍스처의 알파 채널을 사용하여 혼합하려고합니다. glBlendFunc 및 glBlendColor보고 있었지만 텍스처에서 RGB 값을 무시하는 방법을 찾을 수 없습니다. 알파 값을 직접 가져 와서 GL_ALPHA를 사용하여 두 번째 텍스처를 만들어야한다고 생각합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?OpenGL에서 알파 채널 텍스처 만 사용 하시겠습니까?

감사합니다.

+0

가장 좋은 대답은 간단합니다. 셰이더를 사용하십시오. GLSL 코드에서는 상상할 수있는 방식으로 텍스처 데이터를 사용할 수 있습니다. – Kos

답변

0

glBlendFunc를 사용하는 경우 GL_SRC_ALPHAGL_DST_ALPHA을 사용하여 텍스처에서 알파 채널을 선택할 수 있습니다 (혼합 작업 및 텍스처에 따라 다릅니다). 자세한 내용은 혼합 자습서를 참조하십시오

관련 OpenGL을 문서 :

+0

glBlendFunc는 다른 알파 값과 그 블렌드 방법을 선택할 수있게하지만 내가 아는 한 모두 소스와 대상 색상을 _scale 및 combine_하는 방법에 영향을 미칩니다. 원본 색상을 무시하고 RGBA 텍스처의 알파 값만 사용하여 다른 색상을 혼합하려고합니다. – Chris

+0

마스크하려고하는 것처럼 들리십니까? 'mask on picture'에 대한 섹션은 튜토리얼 # 3 링크를 참조하십시오. 당신이하려는 일입니까? – Clinton

+0

자습서 # 3 링크가 작동하지 않습니다. – sharvey

1

나는 색상 코드 따기를 사용하고 있습니다. 이것은 질감 쿼드의 투명한 영역은 포착되지 않습니다 내가 지금 사용하고 코드입니다 : 기본적으로

glEnable(GL_COLOR_MATERIAL); 
glEnable(GL_TEXTURE_2D); 
glEnable(GL_ALPHA_TEST); 

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 

glAlphaFunc(GL_GREATER, 0.5f); 

glColor3ub(myColor[0], myColor[1], myColor[2]); 

drawTexturedQuad(); 

나는 내가 RGB 그것이 텍스처를 적용하기 전에이었다대로되고 싶어 말하는거야 (이 것 myColor) 그리고 나는 ALPHA를 텍스처에서 가져 오길 원합니다.

+0

이봐,이 작품! –