2012-12-09 6 views
0

iOS의 OpenGL ES 2.0과 함께 반투명 문제가 있습니다. 내 장면은 다소 단순합니다. 그것은 큐브의 그리드로 구성되어 있으며, 일부는 단색으로 나타나야하고 나머지는 반투명으로 렌더링되어야합니다. OpenGL을 설정하기 위해 아래 코드로 시작했습니다.OpenGL ES 2.0의 반투명

glEnable(GL_CULL_FACE); 
glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LEQUAL); 

glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

깊이 테스트 및 컬링 때문에 일부 앵글에 대해 잘못된 투명도가 렌더링됩니다.

Correct transparency/Culling and depth testing enabled

Incorrect transparency/Culling and depth testing enabled

내가 컬링과 깊이 테스트를하지 않도록 노력하고 알파 테스트를 사용할 수 아래의 두 이미지를 참조하십시오. 결과는 정확한 투명도이지만 텍스처는 없습니다 (아래 이미지 참조).

//glEnable(GL_CULL_FACE); 
//glEnable(GL_DEPTH_TEST); 
//glDepthFunc(GL_LEQUAL); 


glAlphaFunc(GL_GREATER, 0.5); 
glEnable(GL_ALPHA_TEST); 


glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

enter image description here

나는 장면을 렌더링 텍스처를로드 GLKit를 사용하고 GLKBaseEffect하고 있습니다. 누군가가 첫 번째 이미지에서와 같은 결과를 얻는 방법에 대한 힌트를 모든 시각에서 올바른 투명성으로 보여줄 수 있습니까? 당신에게 :) 감사

답변

3

주요 두 가지 옵션은 다음과 같습니다 장면에서

  1. 정렬 모든 다각형 및

  2. (다음을 주문할 수 없기 때문에) 어떤 다각형이 다른 교차 없는지 확인
  3. 대신 정렬 또는 빼기 혼합과 같은 정렬 독립적 인 혼합 모드를 사용하십시오.

당신이 정말로 당신은 그냥 실제로보다는 다른 순서로 큐브를 통과해야하므로, 너무 힘들해서는 안됩니다 어떤 관점에 적합하도록 렌더링 순서를 변경, 큐브의 그리드를 원하는 단지 않는 경우 아무것도 정리해라.

+0

힌트를 보내 주셔서 감사합니다. 해결책은 간단했습니다. 단단한 입방체가 먼저 그 트릭을 그렸습니다. – Christoph