2014-04-15 1 views
0

백그라운드 텍스처로로드 된 프로그램이 있고 텍스처가 할당 된 일부 재료로 모델을로드합니다 (로딩은 잘됩니다).OpenGL 다중 텍스처, 하나는 작동, other는 갈색으로 나타납니다.

렌더링, 먼저 배경 텍스처를 결합하고 그 다음에 특정 물질이 렌더링되는 모델의 텍스처를 결합 포함하는 (모델을 렌더링하는 등 통화

렌더링 자신의 사용 배경을 렌더링 등 에).

문제 : 배경이 잘 보이지만 모델에 질감이 없습니다. 균일 한 밝은 갈색입니다.

여러 개의 텍스처 단위를 사용해야합니까?

추가 정보 :이 프로그램을 고정 함수 파이프 라인을 사용하여 셰이더를 사용하는 것으로 변환하는 중입니다. 현재 배경이 이전 방식으로 렌더링되었지만 셰이더를 사용하여 모델을 렌더링하고 있습니다. 내가 혼란스러워하는 이유는 고정 파이프 라인을 사용하여 모델을 렌더링하면 텍스쳐가 잘 보이지만 쉐이더 프로그램을 사용하자마자 균일하게 갈색이됩니다.

쉐이더를로드 한 후 glUniform1i(texture_sampler_uniform_location, 0);으로 설정합니다.

답변

1

쉐이더

를로드 한 후 나는 바로 거기 문제 같아요. 균일 한 값은 셰이더마다 개별적이므로 각 셰이더 프로그램에 대해 값을 지정해야합니다. 당신이 당신의 질문 힌트를 공식화하는 방식, 유니폼 값을 모든 셰이더들 사이에서 공유 될 것을 기대하면서 한 번만 설정한다는 것.

균일 한 갈색은 적절한 텍스처 좌표가 적용되지 않았 음을 나타냅니다. 버텍스와 프래그먼트 쉐이더 코드는 어떻게 생겼으며 텍스쳐 좌표는 어떻게 제공합니까?

+0

, 감사를 적어도 이유를 정리 "균일 한 갈색 색상이 더 적절한 질감이 적용되지 좌표가 있음을 나타냅니다." 유니폼을 사용하는 쉐이더 프로그램은 단 하나뿐이므로 문제는 아닙니다. 나는 실제로 그것을 고쳤지만 어떻게 또는 어디서했는지는 확실하지 않습니다. 모든 glActiveTexture 호출과 다른 더프 코드를 제거했습니다. 처음에는 투명한 텍스처와 혼동되어 불필요한 변경으로 인해 코드가 손상되었다고 생각합니다. 그런 다음 알파 값을 1.0으로 설정해야한다는 것을 깨달았지만 그때까지는 "가정 된 수정"-> 갈색 텍스처에서 깨졌습니다. 죄송합니다! –

0

여러 텍스처를 사용하려면 glActiveTexture(GLenum texture)도 사용해야합니다.

기본적으로 이미 수행 한 것처럼 쉐이더를 초기화하지만 텍스처 핸들 당 처리해야합니다.

glUniform1i(texture1_sampler_uniform_location, 0); 
glUniform1i(texture2_sampler_uniform_location, 1); 

그런 다음 텍스처를 렌더링하고 사용할 때 다음을 수행하십시오.

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, texture1_handle); 

glActiveTexture(GL_TEXTURE1); 
glBindTexture(GL_TEXTURE_2D, texture2_handle); 
+0

나는 OP가 단지 텍스처를 바꾸고 싶어한다고 생각합니다. 이를 위해서는 여러 개의 텍스처 유닛을 사용할 필요가 없습니다 (텍스처 유닛이 부족한 경우). – datenwolf

+0

@datenwolf OP가 여러 텍스처를 사용할 수 없기 때문에 이것을 읽은 것처럼 보입니다. 이는 glActiveTexture를 사용할 필요가 있음을 암시합니다. – Vallentin

+0

OP 작성 'Problem : 배경이 잘 보이지만 모델에 질감이 없습니다. 그것은 균일 한 밝은 갈색 색입니다. "- 이것은 다중 텍스쳐 문제는 아니지만 텍스처 스위칭 문제입니다. – datenwolf