2011-12-19 7 views
5

알파가있는 텍스처가 있습니다. 그리고 약간의 색으로 채색하고 싶기 때문에 색 알파 값에 따라 색칠이됩니다. 그러나 불투명도는 텍스처 알파에 의해서만 정의됩니다.OpenGL ES : 색상을 사용하여 텍스처를 색칠하는 방법

이것은 멀티 텍스처링과 비슷하지만 두 번째 텍스처 대신 컬러를 사용합니다. 어떻게 수행하나요?

(업데이트 됨) 텍스처 결합기를 설정하려고했습니다. 색상은 잘게 착색되었지만 알파에는 문제가 있습니다. 텍스처와 같은 (마스크와 같은) 가치는 없습니다. 이 순간에 내 코드 :

glActiveTexture (GL_TEXTURE0); // do we need stage #1? 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); 
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_ONE_MINUS_SRC_ALPHA); 
// this doesn't work for alpha: 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 

스크린 샷 :

없음을 칠 : RGBA와

enter image description here

색조 = (0, 0.5, 1, 0.5) :

enter image description here

+0

코드는 나에게 올바른 것 같다. 알파 문제의 스크린 샷을 첨부하거나 문제가있는 부분을 설명해주십시오. – iHunter

+0

텍스처 자체를 업로드 할 수 있습니까? –

+0

또한 렌더링 코드? –

답변

0

시도해 보셨습니까? 위의 코드 glEnable (GL_BLEND)?

+0

항상 활성화되어 있습니다. – brigadir

0

투명도 15.020에 대한 OpenGL documentation을 읽을 수 있습니다. "어떻게 투명한 효과를 얻을 수 있습니까?"

올바른 순서로 장면을 렌더링하고 있는지 확인하십시오 (응답에 렌더링이 표시되지 않음).

원하는 혼합 기능을 사용하고 있는지 확인하십시오.

내가 할 수있는 또 다른 제안은 shaders을 사용하는 것입니다. 나는 그것을 사용할 때 항상 더 많은 것을 제어 할 수 있다고 생각한다.

0

같은 결과가 나타납니다 (Android Samsung Galaxy S에서 실행 중). 왜 작동하지 않는지 나는 이해하지 못한다. 문서는 상당히 명확하게 보입니다.

나를 위해 RGB GL_MODULATE 사용할 경우 작동합니다. GL_ADD 또는 GL_ADD_SIGNED를 사용하면 다시 실패합니다. 알파에서 GL_MODULATE를 사용하더라도 RGB에서 해당 모드를 사용할 때 동일한 오류가 발생합니다. 색상을 보간하는 대신 색상을 조절해야 할 수도 있습니다. 요약

이 나를 위해 작동합니다

glActiveTexture (GL_TEXTURE0); // do we need stage #1? 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_); 

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); 

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 
+0

예, 변조 모드는 모두 올바르게 작동하지만 원하는대로 표시되지 않습니다. 나는 그것을 풀어주지 않기 위해 여기에 +50을 넣을 것이다. – brigadir

+0

현상금에 감사드립니다. 미안해서 더 도움이되지 못했습니다. –

관련 문제