2012-05-18 4 views
3

OGL ES 1.1을 변환하려고합니다. GLKit 코드.GLKit 두 텍스처를 혼합하십시오.

  1. texture2d0
  2. texture2d1

각 텍스처는 ENV 모드가 있습니다 :

  1. GLKTextureEnvModeReplace,
  2. GLKTextureEnvModeModulate을
  3. GLKTextureEnvModeDecal
  4. GLKit 텍스처 슬롯 한 쌍을 제공합니다

일반적으로 texture2d1을 비워두고 texture2d0 만 설정하면됩니다. 필자는 2d1이 텍스처를 블렌딩/결합/수정하기위한 것이라는 점을 Apple의 문서를 읽음으로써 가정했습니다. GLKit은 단순히 쉐이더 위에 앉아 있기 때문에 각 쉐이더가 이미 질감을 나타내는 "들어오는"슬롯과 쉐이더를 나타내는 "수정"슬롯을 가지고 있습니다. 물자를 modiffy에 매개 변수로 사용하기 위하여려고하고있다.

하지만 작동하지 않는 것 같습니다.

self.baseEffect.texture2d0.envMode = GLKTextureEnvModeReplace; 
self.baseEffect.texture2d0.target = GLKTextureTarget2D; 
self.baseEffect.texture2d0.name = [earthTextureDefault name]; 

self.baseEffect.texture2d1.envMode = GLKTextureEnvModeModulate; 
self.baseEffect.texture2d1.target = GLKTextureTarget2D; 
self.baseEffect.texture2d1.enabled = TRUE; 
self.baseEffect.texture2d1.name = [textureClouds name]; 

을 ... 그리고 내가 가진 모든 검은 비 텍스처이었다

나는 시도했다. 0으로 놓인 텍스처 (1은 아무 것도 없음)가 제대로 작동합니다. 두 번째 텍스처는 첫 번째 텍스처가 모두 불투명하지만 매우 풍부한 팔레트가있는 음영 처리 된 알파 - 화이트입니다.

내가 정말로하고 싶은 것은 동적으로 생성/업데이트 된 블렌드를 효율적으로 적용하는 것입니다. 예컨대 :

  1. 부하 기본 텍스처
  2. 부하 두 번째 텍스처
  3. 부하 사이
  4. 혼합 혼합 마스크 ... 혼합 마스크 프레임 별을 업데이트합니다. 첫 번째 두 텍스처를 다시 업로드하지 않고도

NB : GLKit을 버리고 대신 사용자 정의 쉐이더를 작성하려고하지 않습니다. GLKit의 작동 방식을 이해하고 싶습니다. 여러 모양의 쉐이더를 작성하는 것보다 간단한 것들을 유지하는 것이 훨씬 쉬워야합니다.

+0

블렌딩 모드 쉐이더를 처리하는 것을 기꺼이 받아 주시겠습니까? https://github.com/BradLarson/GPUImage GLKView의 장면에서 이것을 사용하기를 원한다면 마지막에 텍스처를 추출 할 수 있습니다. –

+0

인상적이지만 GLKit의 기본 기능을 어떻게 사용합니까? – Adam

+0

물론, OpenGL ES를 통해 직접 쉐이더와 텍스처 만 처리했기 때문에 이것이 어떻게 작동하는지 궁금 할 것입니다. GLKit 추상화에 많은 시간을 할애하지 않았습니다. 당신이 이것에 좌절감을 느끼고 가까운 시일 내에 뭔가가 필요할 경우를 대비해 저를 버릴 것이라고 생각했습니다. –

답변

0

As noted in the documentation, GLKTextureEnvModeModulate은 텍스처의 색상 값을 곱합니다. 이는 아마도 검은 색으로 보이는 이유 일 수 있습니다. 텍스처 위에 알파없이 텍스처를 오버레이하려면 GLKTextureEnvAttribDecal을 대신 사용하십시오.

GLKit API 만 사용하여 동적 혼합 마스크 아이디어를 수행하는 방법은 보이지 않지만 완전히 버릴 필요는 없습니다. 다음과 같이 시도하십시오.

  1. 기본 텍스처, 두 번째 텍스처 및 블렌딩 마스크를 세 개로드하십시오.
  2. 색상 첨부가 네 번째 텍스처 인 프레임 버퍼 객체를 만듭니다.
  3. 두 번째 텍스처의 RGB 값과 블렌딩 마스크의 알파 값으로 채우는 셰이더를 사용하여 텍스처 FBO에 렌더링합니다.
  4. GLKBaseEffect과 함께 기본 텍스처를 texture0으로, FBO 텍스처를 texture1으로 사용하고 기본 장면을 화면에 렌더링합니다.
  5. 혼합 마스크를 업데이트 할 때 3-4 단계를 반복하십시오.

한 번의 렌더링 과정에서 모든 것을 처리하는 조각 쉐이더보다 효율적이지는 않지만 작동해야합니다.

+0

애플은 GL ES 2가없는 장치 용 응용 프로그램을 더 이상 쓸 수 없으므로 ES 1을 사용하는 peopel에는 아무런 문제가 없다고 생각합니다. ES 2로 전환 - ES 1 파이프 라인은 Apple이 잘 설명하지 않은 경우에만 사용할 가치가있었습니다. 하지만 당신의 대답이 내게 들리므로, – Adam

관련 문제