2014-03-06 2 views
0

GLSL에서 부분적으로 겹치는 텍스처 두 개를 혼합하려고합니다. 멀티 텍스처링의 개념을 오해하고 있는지 궁금합니다. 텍스처가 완전히 겹치거나 두 부분이 겹치는 부분에만 섞이는 두 개의 오프셋 텍스처가있을 수 있습니까?GLSL 부분 겹침 텍스처

나는 다음과 같은 (마이너스 격자 선 및 텍스트)와 유사한 두 이미지가 : 최종 결과가 하나 개의 부드러운 이미지처럼 보일 것 있도록 Example image

가 이상적으로, 이미지의 중첩 부분이 잘 함께 혼합 것을 그 이 둘을 결합합니다. 예를 들어 겹치는 주황색 픽셀은 함께 혼합되거나 더 높은 강도를가집니다.

저는 GLSL을 처음 사용했으며이 기사에서는 을 사용하여 프래그먼트 셰이더를 사용하여 텍스처를 혼합했습니다 (상당히 표준).

나는 기사를 다음 @ 해요과 같이 각각의 질감을 설정 :

glUseProgramObjectARB(m_hProgramObject); 
GLint nParamObj = glGetUniformLocationARB(m_hProgramObject, pParamName_i); 
... 
glActiveTexture(GL_TEXTURE0 + nTextureID_i); 
glBindTexture(GL_TEXTURE_2D, nTextureID_i); 
glUniform1iARB(nParamObj, nTextureID_i); 

내가 각 텍스처를 결합 삼각형 스트립을 그립니다. 내 텍스처는 다음과 같이 생성됩니다 :

glBindTexture(GL_TEXTURE_2D, m_nTextureID); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); 
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); 
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); 

glTexImage2D(GL_TEXTURE_2D, 0, 4, nWidth, nHeight, 0, GL_RGBA, 
    GL_UNSIGNED_BYTE, pbyData); 

이 프로세스는 합리적인 것처럼 보이거나 개념을 오해하고 있습니까? 이를 달성하는 방법에 대한 조언이나 조언이 있으십니까?

답변

0

그 과정은 분명히 적당합니다. 프래그먼트 셰이더를 사용하면 텍스처를 결합하는 방법을 완벽하게 제어 할 수 있다는 장점이 있습니다. 오프셋의 경우 각 이미지에 대해 하나씩 두 세트의 텍스처 좌표를 원하거나 암시 적으로 생성 할 수 있습니다. 원하는 것을 알아 내고 프래그먼트 쉐이더를 작성하는 것은 어려운 일이 될 것입니다. 불행히도 많은 다른 텍스처를 혼합하고 싶다면 이런 방식으로 사용되는 조각 셰이더가 너무 비싸거나 너무 많은 텍스처를 사용하여 작업하지 않아도됩니다.

예제 이미지가 전혀 블렌딩되지 않은 것처럼 보입니다. 이미지가 서로 위에 배치됩니다. 이 경우 맵핑 된 텍스처를 사용하여 별도의 지오메트리 비트를 그리는 것이 더 쉽습니다.

블렌딩은 일반적으로 고정 파이프 라인 블렌딩 단계로 수행됩니다. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 배합 양은 부여되는 예를 들면 다음 호출 ...

하나 인 알파 위에 운영자 블렌딩을 사용하여 드로잉 색상의 알파 값으로 - 텍스처의 A 구성 요소의 영향을받을 가능성이 있습니다. 필요한 경우 혼합 방정식을 추가로 조작 할 수 있습니다. Blending을 참조하십시오.

+0

그것에 대해 생각한 후에 상황은 내가 만든 것처럼 간단하지 않습니다. 내가 실제로하려고하는 것은 두 개의 정사각형 텍스처를 겹치는 원 (삼각형 팬)으로 렌더링하는 것입니다. 블렌딩이 좋은 블렌딩 구성을 찾을 수는 없지만 이렇게하려면 분명한 방법입니다. 내 생각에 쉐이더는 두 개의 겹치는 반투명 이미지가 아닌 완전한 전체 알파 이미지를 더 많이 얻을 수있는 수단을 제공 할 수있었습니다. render-to-texture와 결합 된 쉐이더를 살펴 보겠습니다. – TheShiftingInt